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