我将继续学习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是ISO / IEC 9899:1999,发表于1999-12-01
和
已发布的ISO和IEC标准可以从ISO的成员机构购买或IEC。
摘自标准世界上最好的芽,ISO。
同样值得注意的是,NEXT C标准的草案是available in PDF。
取决于所使用的编译器,您可以要求它进行检查。例如,使用gcc,您将像这样运行它:
gcc -Wall -Wextra -pedantic -std=c99 -o program program.c
您将用程序的名称替换program.c和program。
-Wall
和-Wextra
提供更多警告,并告诉您是否做过一些时髦的事情。 -pedantic
还提供了更多内容。
如果您真的想亲自遵守ansi规范,则可以使用-ansi
,因为我很懒,所以我不使用它,但是它更合适。
实际上不可能分析源文件并最终确定它符合C99标准。在这方面,C与XHTML不同,因为C是图灵完备的语言,而XHTML不是。
当然可以找到many个不合格的实例,但是不可能全部找到它们。例如,考虑一个程序即时生成printf
格式字符串-您如何静态确定格式字符串将符合标准?如果取决于给程序的输入怎么办?还考虑一个右移有符号整数的程序-如果所讨论的有符号整数永远不会为负,则该程序可能是符合要求的,但如果不是,则它可能依赖于实现定义的结果。
可以免费获得here的草稿。您也可以从the ansi store购买正式版本。