Как проверить исходный код C на соответствие текущему стандарту? - PullRequest
2 голосов
/ 29 сентября 2010

Я продолжаю изучать C и хотел бы придерживаться того, что является текущим стандартом, но найти хорошую ссылку на это, похоже, проблема.

Из того, что я нашел в Интернете (в основном через Google и Википедию), можно сказать, что используемый сегодня современный стандарт - C99, более формально - стандарт ISO / IEC 9899: 1999.

Когда я пишу код на языке C, я часто вызываю браузер и выполняю простой поиск в Интернете, например, для определения точных возвращаемых значений в функции stdio.h scanf. В основном, я просто хочу научиться придерживаться текущего стандарта, но даже если я ищу конкретную строку «C99 printf» или что-то в этом роде, похоже, не существует единственного места, где можно найти определенную спецификацию .

Итак, у меня два вопроса:

1) Существует ли центральная спецификация C99, доступная онлайн, поддерживаемая организацией, ответственной за этот стандарт?

[править]: На этот первый вопрос уже был дан ответ: Где найти текущие стандартные документы C или C ++? . Спасибо Джеймсу МакНеллису за то, что он указал на это.

2) Есть ли программа, которая может анализировать исходный файл C, чтобы убедиться, что он соответствует спецификации C99? Я знаю, что есть программы, подобные этой, для анализа файлов XHTML, и, похоже, она должна быть и для C99 ...

[править]: Следует также упомянуть, что я занимаюсь разработкой на C с использованием gcc, в частности, версии 3.4.4. Когда я захожу на основной сайт gcc (http://gcc.gnu.org/), я все еще сталкиваюсь с трудностями, выясняя, какая версия компилятора поддерживает какую спецификацию C.

Ответы [ 4 ]

2 голосов
/ 29 сентября 2010

Текущим стандартом для языка программирования C является ISO / IEC 9899: 1999, опубликованный 1999-12-01

и

Опубликованные ISO и IECстандарты могут быть приобретены у членов-членов ISO или IEC.

У ваших лучших друзей в мире стандартов ISO .

Стоит также отметитьчерновик стандарта NEXT C доступен в формате PDF .

1 голос
/ 29 сентября 2010

На самом деле невозможно проанализировать исходный файл и окончательно определить, что он соответствует стандарту C99.В этом отношении C отличается от XHTML, поскольку C является языком, полным по Тьюрингу, а XHTML нет.

Конечно, можно найти множество случаев несоответствия, но это невозможнонайти их всех.Рассмотрим, например, программу, которая генерирует строку формата printf на лету - как вы можете статически определить, что строка формата будет соответствовать?Что делать, если это зависит от ввода данных в программу?Также рассмотрим программу, которая сдвигает вправо целые числа со знаком - если рассматриваемое целое число со знаком никогда не бывает отрицательным, то программа может соответствовать, но если нет, то, вероятно, она полагается на результаты, определенные реализацией.

1 голос
/ 29 сентября 2010

В зависимости от того, какой компилятор вы используете, вы можете попросить его проверить вас. Например, с gcc вы бы запустили его так: gcc -Wall -Wextra -pendantic -std = c99 -o программная программа.c

Вы бы заменили program.c и program на имя вашей программы, конечно.

-Wall и -Wextra предоставляют больше предупреждений и сообщают вам, если вы сделали что-то напуганное. -pendantic обеспечивает больше этого.

вы можете использовать -ansi, если вы действительно хотите следовать спецификации ANSI лично, я не использую его, потому что я ленив, но это более правильно.

0 голосов
/ 29 сентября 2010

Проект за можно получить здесь бесплатно.Вы также можете приобрести официальный в магазине ANSI .

...