В нескольких используемых мной компиляторах (все gcc
, но в разных версиях) я получаю ошибку C99 mode
для таких вещей, как объявление int i
внутри выражения цикла for вместо него (если я не использую std=c99
вариант). После прочтения здесь я понимаю, что все параметры gcc
-ansi
, -std=c89
и -std=iso9899:1990
соответствуют стандарту ANSI C, , но я не понимаю, почему / если я следует выбрать стандарт c89
по сравнению с более новым стандартом, таким как c99
(который, как я полагаю, является самым новым).
Кроме того, я вижу несколько версий стандартов типа iso
для языка C, первая из которых (насколько я понимаю) является прямым портом стандарта ANSI. Можно ли с уверенностью сказать, что iso
обновит свой стандарт для C, но исходный стандарт ANSI для C всегда будет одинаковым?
Бонусный вопрос:
Я на самом деле могу понять это сам, я просто еще не нашел время, чтобы сделать это, так что, если кто-то знает по макушке, то это здорово, иначе нет, я не пойму позже:)
У меня довольно новый отпечаток книги The C Programming Language (ANSI)
. Моя книга всегда показывает такие циклы:
int i;
for(i = 0; i < foo; i++)
но многие люди (большинство из которых обладают большим программистским талантом в своем мизинце) пишут свои циклы for следующим образом:
(int i = 0; i < foo; i++)
Правильно ли говорить, что если я пишу цикл первым способом, тогда i
должен быть доступен для всей функции, но если я пишу это вторым способом, тогда i
доступен только для цикла for Безразлично какого стандарта я компилирую? Другой способ задать тот же вопрос: если я скомпилирую по стандарту c89
, будет ли i
обоих циклов for доступным для всей функции, а если я скомпилирую по стандарту c99
, то i
первого цикл for будет доступен для всей функции, в то время как i
второго цикла for будет доступен только для цикла for?