В прошлый раз я проверял, говоря, что кодирование в ANSI C было равносильно тому, чтобы сказать «это код, совместимый с C99, в котором больше ничего нет». Теперь с C11 и C ++ 11 сохраняется ли это различие? Это все еще имеет какое-то значение?
Исторически «ANSI C» использовался для обозначения «стандартного C», то есть C89, в отличие от «K».&R C «и различные предстандартные варианты, придуманные авторами-компиляторами. Вот почему во втором издании» Языка программирования C «имеется большой красный штамп» ANSI C «на обложке.
Затем какое-то время «ISO C» использовалось для обозначения «нового стандарта C», то есть C99, в отличие от «ANSI C».
Это всегда было сбивающим с толку использованием, поскольку как ISO, так и ANSI ратифицировали как C89, так и C99. ISO ратифицировал первый как C90 и опубликовал его с некоторыми изменениями компоновки по сравнению с версией ANSI, но предположительно с тем же существенным содержанием. Таким образом, «ANSI C» всегда был стандартом ISO, а «ISO C» всегда был стандартом ANSI. Единственная разница заключалась в том, какой орган следил за процессом стандартизации.
После этого использования (и, вероятно, поощряя его продолжать), -ansi
флаг GCC эквивалентен -std=c90
, В этом контексте это на самом деле означает «C90 плюс некоторые расширения GNU, которые не конфликтуют со стандартом».
Я не знаю, что «ANSI C» относится к C99, но это не значит, что оно не использовалось для обозначения этого.
Я не думаю, что использование термина «ANSI C» помогло кому-либо за последние 10 лет. ANSI ратифицировала C11, но было бы бесполезно начинать говорить: «Ага! Хорошо, в этом случае ANSI C внезапно теперь означает C11!». Можно, конечно, сказать, что C11 является текущим стандартом ANSI C, но, тем не менее, термин «ANSI C» нельзя использовать с разумным ожиданием того, что люди четко поймут его как C11.
И ISO C11, и ISO C ++ 11 были ратифицированы как новые стандарты ANSI C и C ++.
Например, на моей ANSI-копии C11 написано:
Принят INCITS (Межгосударственный комитет по стандартам информационных технологий) в качестве американского национального стандарта. Дата утверждения ANSI: 23.05.2012
С тех пор как1 3 различных ревизии стандарта C и «две с половиной» C ++ широко используются, я бы сказал, что такая терминология сегодня имеет меньше смысла, чем когда-либо.