如何对照当前标准检查C源代码?

问题描述 投票:2回答:4

我将继续学习C语言,并希望遵守当前的标准,但是要找到对此的良好参考似乎是个问题。

根据我在网上(主要是通过Google和Wikipedia网上发现的),当前使用的当前标准是C99,更正式地是ISO / IEC 9899:1999标准。

[当我编写C代码时,我经常调出浏览器并进行简单的Web搜索,例如找出stdio.h函数scanf的确切返回值。通常,我只是想遵循现行标准的一种好习惯,但是即使我搜索特定的字符串“ C99 printf”或类似的东西,似乎也没有一个地方可以找到确定的规格。

所以我有两个问题:

1)是否存在由负责此标准的组织维护并在线提供的中央C99规范?

[编辑]:在这里已经回答了第一个问题:Where do I find the current C or C++ standard documents?。感谢James McNellis指出这一点。

2)是否存在可以解析C源文件以确保其符合C99规范的程序?我知道有这样的程序可以解析XHTML文件,而且似乎也应该有一个C99程序...

[编辑]:我还应该提到我正在使用gcc(特别是版本3.4.4)进行C开发。当我转到gcc主网站(http://gcc.gnu.org/)时,仍然很难确定哪个编译器版本支持哪个C规范。

c reference specifications c99 standards-compliance
4个回答
2
投票

当前的编程标准语言C是ISO / IEC 9899:1999,发表于1999-12-01

已发布的ISO和IEC标准可以从ISO的成员机构购买或IEC。

摘自标准世界上最好的芽,ISO

同样值得注意的是,NEXT C标准的草案是available in PDF


2
投票

取决于所使用的编译器,您可以要求它进行检查。例如,使用gcc,您将像这样运行它:

gcc -Wall -Wextra -pedantic -std=c99 -o program program.c

您将用程序的名称替换program.c和program。

-Wall-Wextra提供更多警告,并告诉您是否做过一些时髦的事情。 -pedantic还提供了更多内容。

如果您真的想亲自遵守ansi规范,则可以使用-ansi,因为我很懒,所以我不使用它,但是它更合适。


1
投票

实际上不可能分析源文件并最终确定它符合C99标准。在这方面,C与XHTML不同,因为C是图灵完备的语言,而XHTML不是。

当然可以找到many个不合格的实例,但是不可能全部找到它们。例如,考虑一个程序即时生成printf格式字符串-您如何静态确定格式字符串将符合标准?如果取决于给程序的输入怎么办?还考虑一个右移有符号整数的程序-如果所讨论的有符号整数永远不会为负,则该程序可能是符合要求的,但如果不是,则它可能依赖于实现定义的结果。


0
投票

可以免费获得here的草稿。您也可以从the ansi store购买正式版本。

© www.soinside.com 2019 - 2024. All rights reserved.