Рассмотрим следующий код в C:
void main()
{
int a=0;
for(printf("\nA"); a; printf("\nB"));
printf("\nC");
printf("\nD");
}
Когда я скомпилирую его с помощью Turb С++ версии 3.0 и gcc-4.3.4, я получаю следующее в качестве результата в BOTH случаях:
A
C
D
Однако, если я скомпилирую следующий код:
void main()
{
for(printf("\nA"); 0; printf("\nB"));
printf("\nC");
printf("\nD");
}
Вывод gcc-4.3.4 такой же, как в предыдущем случае, но turbo С++ 3.0 производит следующий вывод:
A
B
C
D
Прежде всего, я понятия не имею, что здесь происходит! Кроме того, как получается, что результат компилятора gcc одинаковый для обоих кодов, но в случае компилятора turboС++ 3.0, результат отличается? Может кто-то пролить некоторый свет?
ИЗМЕНИТЬ:
На самом деле кого-то задавали этот вопрос в интервью для ИТ-компании, и когда он не дал ответа, интервьюер дал это объяснение. Но я считаю, что это глупо. Как вы можете попросить кого-нибудь использовать "ошибку", как если бы это было "средство", предоставляемое языком? Для того, чтобы он назывался "объектом" и "техникой", передаем ли мы 0 как литерал во втором выражении или переменную, значение которой равно 0, результат должен быть одинаковым.
Неужели я ошибаюсь, что интервьюер был очень глупым, чтобы задать такой вопрос и что он показывает свою некомпетентность?