На нескольких компиляторах, которые я использовал (все 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 всегда будет таким же?
Бонусный вопрос:
Я действительно могу понять этот из себя, я просто не У меня не было времени, чтобы сделать это, так что если кто-то знает что-то в голове, то это здорово, иначе ничего страшного, я разберусь позже :)
У меня есть довольно новый отпечаток книги Язык программирования C (ANSI)
. Моя книга всегда показывает такие циклы for следующим образом:
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?