是不是;";C标准指定编译器必须遵循的标准?

是不是;";C标准指定编译器必须遵循的标准?,c,gcc,standards,C,Gcc,Standards,我刚刚尝试用GNU编译器版本4.9.2编译一个C程序。源代码包含一些int i=0;的语句,编译器给了我一个错误,并指出我应该使用-std=c99来编译for循环初始声明。显然,这些声明在C99之前是无效的 在另一台机器上,我有一个更新的GNU编译器(8.1.1),在那里我可以编译相同的源代码,而无需显式指定-std=c99 因为GNU显然使他们的编译器C99在4.9.2和8.1.1之间兼容,这就引出了一个问题:最近的C标准是否规定编译器必须遵守C99(或其他标准)。选择是否遵守C标准或其特定版

我刚刚尝试用GNU编译器版本4.9.2编译一个C程序。源代码包含一些int i=0;的
语句,编译器给了我一个错误,并指出我应该使用
-std=c99
来编译for循环初始声明。显然,这些声明在C99之前是无效的

在另一台机器上,我有一个更新的GNU编译器(8.1.1),在那里我可以编译相同的源代码,而无需显式指定
-std=c99


因为GNU显然使他们的编译器C99在4.9.2和8.1.1之间兼容,这就引出了一个问题:最近的C标准是否规定编译器必须遵守C99(或其他标准)。

选择是否遵守C标准或其特定版本是自愿的。选择不是来自C标准。它来自外部。任何实施C的人都可以决定是否遵守2018 C标准(或者大部分遵守但不完全遵守)、是否遵守2011 C标准、是否遵守C的某些“K&R”概念,或者其他什么。C标准中没有说,如果你符合这个标准,你的编译器必须符合以前的版本。该标准实际上不能要求您做任何事情,除非您选择符合该标准

C标准和制定者以及认可和发布它的标准组织几乎没有能力让任何人做任何事情。他们不能发布C标准并说您必须遵守2018 C标准。他们不是立法机构。私人当事人之间有合同,说一些项目将按照这个标准或那个标准进行,但这些是私人协议,而不是公法

在2018 C标准中,前言第8段规定:

有关标准的自愿性、与合格评定相关的ISO特定术语和表达的含义,以及ISO在技术性贸易壁垒(TBT)中遵守世界贸易组织(WTO)原则的信息,请参见以下URL:

标准组织也不能禁止您编写符合或不符合标准任何特定版本的C编译器,也不能禁止您编写基本符合但不完全符合的编译器

如果您在商业上使用C标准的名称,可能是通过声称符合它,那么标准组织可能在这方面拥有一些法律权利。这涉及国际法和许多司法管辖区的法律,我不能以权威的方式与之交谈。我没有听说有人声称自己符合C标准,因此出现了任何问题


当新版本发布时,标准组织会正式撤销旧版本的标准。这不会阻止您编写符合旧版本的C实现,但会阻止您在不符合当前版本的情况下声称自己符合当前版本。(例如,如果您同意的合同要求您遵守当前的C标准,则当组织发布新版本并撤销旧版本时,该标准将发生变化。)

选择是否遵守C标准或其特定版本是自愿的。选择不是来自C标准。它来自外部。任何实施C的人都可以决定是否遵守2018 C标准(或者大部分遵守但不完全遵守)、是否遵守2011 C标准、是否遵守C的某些“K&R”概念,或者其他什么。C标准中没有说,如果你符合这个标准,你的编译器必须符合以前的版本。该标准实际上不能要求您做任何事情,除非您选择符合该标准

C标准和制定者以及认可和发布它的标准组织几乎没有能力让任何人做任何事情。他们不能发布C标准并说您必须遵守2018 C标准。他们不是立法机构。私人当事人之间有合同,说一些项目将按照这个标准或那个标准进行,但这些是私人协议,而不是公法

在2018 C标准中,前言第8段规定:

有关标准的自愿性、与合格评定相关的ISO特定术语和表达的含义,以及ISO在技术性贸易壁垒(TBT)中遵守世界贸易组织(WTO)原则的信息,请参见以下URL:

标准组织也不能禁止您编写符合或不符合标准任何特定版本的C编译器,也不能禁止您编写基本符合但不完全符合的编译器

如果您在商业上使用C标准的名称,可能是通过声称符合它,那么标准组织可能在这方面拥有一些法律权利。这涉及国际法和许多司法管辖区的法律,我不能以权威的方式与之交谈。我没有听说有人声称自己符合C标准,因此出现了任何问题

当新版本发布时,标准组织会正式撤销旧版本的标准。这不会阻止您编写符合旧版本的C实现,但会阻止您在不符合当前版本的情况下声称自己符合当前版本。(例如,如果您同意的合同要求您遵守当前的C标准,则当组织发布新版本并撤销旧版本时,该标准将发生变化。)

在GCC 5.0之前,d