ANSI C против других стандартов C

На нескольких компиляторах, которые я использовал (все 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?

30
задан Zero Piraeus 21 February 2015 в 20:18
поделиться