在Xcode IDE中,我可以选择将C语言方言设置为
我明白他们的意思,除了ANSI C。因为据我所知,ANSI C只是C89或C99之一。但应该有一个原因,它在那里。什么是术语 ANSI C 指定在那里?
0sgqnhkj1#
edit感谢**@Nicholas Knight**在XCode的C方言选择窗口中发布的截图:http://dl.dropbox.com/u/14571816/xcodelang.png
ANSI C在历史上指的是ANSI C89标准(实际上和C90是一样的)。XCode使用GCC的一个版本作为编译C代码的编译器后端,所以我认为这就是他们获得这些“选项”的来源,因为你可以指定-ansi标志或各种std=标志来选择C编译器后端编译代码的模式。所以如果你传递-ansi,并使用C编译器,它等价于-std=c90,也等价于-std=c89或-std=iso9899:1990。-ansi在C模式下,它相当于-std=c90。在C模式下,它相当于-std=c++98。如果使用-std标志,则可以传递某些值来激活不同的语言功能。-std=确定语言标准。当前仅在编译C或C时支持此选项。这些参数是等效的:x1米11米1xc89iso9899:1990支持所有ISO C90程序(某些与ISO C90冲突的GNU扩展被禁用)。与C代码的-ansi相同。这些参数是等效的:iso9899:199409 ISO C90,如修正案1所述。以下参数是等效的:c99c9xiso9899:1999iso9899:199xISO C99。请注意,尚未完全支持此标准;请参阅http://gcc.gnu.org/gcc-4.5/c99status.html了解更多信息。名称c9 x和iso 9899:199 x已弃用。以下参数是等效的:x1米20英寸1xgnu89ISO C90的GNU方言(包括一些C99特性)。这是C代码的默认值。以下参数是等效的:gnu99gnu9xISO C99的GNU方言。当ISO C99在GCC中完全实现时,这将成为默认值。名称gnu 9 x已被弃用。
-ansi
std=
-std=c90
-std=c89
-std=iso9899:1990
-std=c++98
-std
-std=
c89
iso9899:1990
iso9899:199409
c99
c9x
iso9899:1999
iso9899:199x
gnu89
gnu99
gnu9x
mwg9r5ms2#
编译器有他们所针对的语言的配置文件,就像pmg在他的回复中说的那样,ANSI C是最早的配置文件之一,在K&R书中描述的那个。有趣的问题是,为什么编译器要维护一个遗留语言配置文件的列表?因为,根据ANSI C配置文件编写代码是一个相当强的保证,你的代码将与几乎任何编译器(更重要的是编译器版本)一起工作。当软件项目声称ANSI-C兼容时,他们告诉你它可以在任何地方编译,Lua的源代码就是一个例子。
b5buobof3#
C是在70年代“出生”的。1978年,Brian Kernighan和Dennis里奇出版了这本书,书中描述的语言现在被称为“K&R C”。在1988年左右,出版了第二版。第二版与ANSI(ISO)标准非常非常相似,也是人们在提到这本书时通常谈论的版本:)编译器作者开始对语言进行修改,为了使其标准化,ANSI于1989年发布了一个标准(C89标准或ANSI C)。不久之后,ISO标准(C90)几乎没有对ANSI进行任何修改。1999年,ISO发布了另一个C标准:我们称之为C99。所以,如果我是对的,ANSI C只流行了几个月,但ANSI C和ISO C90之间的差异是最小的。事实上,今天的许多编译器都是ANSI C的编译器,带有额外的东西(而不是ISO C99的编译器,带有额外的东西,但没有一些东西)
falq053o4#
假设你实际上使用GCC作为编译器,ANSI和C89是同一个东西的别名。请参阅:http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options我不知道苹果为什么要设计出这两种语言。GCC中没有实际的区别。也许他们是偏执狂,以防-ansi的含义在GCC的后续版本(可能是C99)中发生变化。
4条答案
按热度按时间0sgqnhkj1#
edit感谢**@Nicholas Knight**在XCode的C方言选择窗口中发布的截图:http://dl.dropbox.com/u/14571816/xcodelang.png
ANSI C在历史上指的是ANSI C89标准(实际上和C90是一样的)。XCode使用GCC的一个版本作为编译C代码的编译器后端,所以我认为这就是他们获得这些“选项”的来源,因为你可以指定
-ansi
标志或各种std=
标志来选择C编译器后端编译代码的模式。所以如果你传递
-ansi
,并使用C编译器,它等价于-std=c90
,也等价于-std=c89
或-std=iso9899:1990
。-ansi
在C模式下,它相当于
-std=c90
。在C模式下,它相当于-std=c++98
。如果使用
-std
标志,则可以传递某些值来激活不同的语言功能。-std=
确定语言标准。当前仅在编译C或C时支持此选项。
这些参数是等效的:
x1米11米1x
c89
iso9899:1990
支持所有ISO C90程序(某些与ISO C90冲突的GNU扩展被禁用)。与C代码的-ansi
相同。这些参数是等效的:
iso9899:199409
ISO C90,如修正案1所述。以下参数是等效的:
c99
c9x
iso9899:1999
iso9899:199x
ISO C99。请注意,尚未完全支持此标准;请参阅http://gcc.gnu.org/gcc-4.5/c99status.html了解更多信息。名称c9 x和iso 9899:199 x已弃用。
以下参数是等效的:
x1米20英寸1x
gnu89
ISO C90的GNU方言(包括一些C99特性)。这是C代码的默认值。
以下参数是等效的:
gnu99
gnu9x
ISO C99的GNU方言。当ISO C99在GCC中完全实现时,这将成为默认值。名称gnu 9 x已被弃用。
mwg9r5ms2#
编译器有他们所针对的语言的配置文件,就像pmg在他的回复中说的那样,ANSI C是最早的配置文件之一,在K&R书中描述的那个。
有趣的问题是,为什么编译器要维护一个遗留语言配置文件的列表?因为,根据ANSI C配置文件编写代码是一个相当强的保证,你的代码将与几乎任何编译器(更重要的是编译器版本)一起工作。
当软件项目声称ANSI-C兼容时,他们告诉你它可以在任何地方编译,Lua的源代码就是一个例子。
b5buobof3#
C是在70年代“出生”的。
1978年,Brian Kernighan和Dennis里奇出版了这本书,书中描述的语言现在被称为“K&R C”。
在1988年左右,出版了第二版。第二版与ANSI(ISO)标准非常非常相似,也是人们在提到这本书时通常谈论的版本:)
编译器作者开始对语言进行修改,为了使其标准化,ANSI于1989年发布了一个标准(C89标准或ANSI C)。不久之后,ISO标准(C90)几乎没有对ANSI进行任何修改。
1999年,ISO发布了另一个C标准:我们称之为C99。
所以,如果我是对的,ANSI C只流行了几个月,但ANSI C和ISO C90之间的差异是最小的。事实上,今天的许多编译器都是ANSI C的编译器,带有额外的东西(而不是ISO C99的编译器,带有额外的东西,但没有一些东西)
falq053o4#
假设你实际上使用GCC作为编译器,ANSI和C89是同一个东西的别名。请参阅:
http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
我不知道苹果为什么要设计出这两种语言。GCC中没有实际的区别。也许他们是偏执狂,以防-ansi的含义在GCC的后续版本(可能是C99)中发生变化。