Image

Category:

Сегодня на работе вспомнил парочку интересных загадок-странностей из мира программирования на С/С++. Думал записать в ЖЖ, но сейчас откровенно лень описывать это всё, поэтому решил пока просто спросить, знает кто-нибудь ответы или нет:

- вы отлаживаете чужую программу, воткнули assert()-ов и далее видите, что программа завершается abort()-ом, но сообщений от том какой из assert()-ов сработал нет. При этом известно, что программа "останавливается" именно на них. Вопрос: чо за дела?!

- что выведет (и выведет ли? и вообще скомпилируется или нет?) следующая команда


$ ./test; echo $?


Если исходник программы test следующий:

#include <stdio.h>

int main() {
    printf("hello\n");
}


Updated(20100612): в первом случае assert() ничего не выводит потому что где-то в программе закрыли stderr. Во втором случае, если программа собрана с помощью gcc и под Linux (возможно, и в некоторых других случаях), то программа вернёт 6 в качестве кода завершения. 6 это код возврата ф-ции printf(), которая вернула количество выведенных символов.