ShamanОчень часто встречаются эти, которые знают язык “C/C++”. Потом пишут какую-нибудь быдлятину, профессора вузов.
Там же и знать особо нечего. :)
Там надо ориентироваться в стандартах, иначе используешь какую-нибудь фишку, а она либо слишком новая, либо слишком старая. А что это значит? А работает не так, как ожидается. Нужно знать, как проводятся неявные преобразования типов, иначе напишешь что-нибудь вроде правильно, а баг потом на этом вылезет где-нибудь гораздо позже. Знаешь, вот бывает ошибка, когда операцию правого сдвига применяют к знаковому значению? Распространённая ошибка. А там раз потом и отрицательное число появляется и начинает сдвигаться. Он-то думал, там знак сохраняется (ему казалось), а там надо точно знать, что знак непредсказуемый. Нюансов там много есть подобных. Поэтому там надо знать историю языка, где какой диалект.
Вот определение функции с двумя ошибками
const char *f(a) char a; {return 0;}Вот так нормально
char *f(a) int a; {return 0;}То есть если тебе кажется, что ты знаешь C потому, что оно ничего не пишет, то это ещё ничего не значит. Оно и на неправильный код может не писать ничего. Есть сейчас штука такая, которую усиленно рекламируют, - статический анализатор, вот он умеет подобные моменты отлавливать, потому что пытается более умно осмыслить то, что написано, и учитывает стандарты и распространённые ошибки. А компилятор - нет, он пропустит спокойно и ты будешь запускать неправильный код просто.