如何知道我使用的是哪个版本的C语言?

如何知道我使用的是哪个版本的C语言?,c,linux,version,programming-languages,C,Linux,Version,Programming Languages,我编写c代码并使用gcc运行它。嗯,一切正常。但我不知道我用的是哪个版本。今天在维基百科上,我看到这种语言的最新稳定版本是C17/2018年6月;3年前。所以,我很想知道我的版本。有办法知道吗?我正在使用Ubuntu Linux 编辑:我想知道当我只使用gcc programm.c或gcc-o programm.out programm.c时,gcc使用的c版本。实际上,默认情况下,gcc使用的是哪个c版本。假设您的意思是“什么版本的c语言”,那么当然可以使用-std命令行选项来指定 有很多话要

我编写
c
代码并使用
gcc
运行它。嗯,一切正常。但我不知道我用的是哪个版本。今天在维基百科上,我看到这种语言的最新稳定版本是
C17/2018年6月;3年前
。所以,我很想知道我的版本。有办法知道吗?我正在使用Ubuntu Linux

编辑:我想知道当我只使用
gcc programm.c
gcc-o programm.out programm.c
时,
gcc
使用的
c
版本。实际上,默认情况下,
gcc
使用的是哪个
c
版本。

假设您的意思是“什么版本的c语言”,那么当然可以使用
-std
命令行选项来指定

有很多话要说,它开始了:

-性病=

确定l标准。这个选项目前只在编译C或C++时被支持。 手册页中提到的默认值是
gnu89
,因此最好对其进行更改,要编译C17代码,您可以执行以下操作:

$ gcc -std=c17 -o my-new-program my-new-program.c
默认值可以随着新版本的GCC而更改,如果您想确定的话,这是在命令行中自己指定它的另一个很好的理由

如果您只是指正在使用的编译器版本,则通过
--version
选项打印:

$ gcc --version
gcc (Ubuntu 10.2.0-13ubuntu1) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
新鲜。

假设您的意思是“什么版本的C语言”,那么当然可以使用
-std
命令行选项来指定

有很多话要说,它开始了:

-性病=

确定l标准。这个选项目前只在编译C或C++时被支持。 手册页中提到的默认值是
gnu89
,因此最好对其进行更改,要编译C17代码,您可以执行以下操作:

$ gcc -std=c17 -o my-new-program my-new-program.c
默认值可以随着新版本的GCC而更改,如果您想确定的话,这是在命令行中自己指定它的另一个很好的理由

如果您只是指正在使用的编译器版本,则通过
--version
选项打印:

$ gcc --version
gcc (Ubuntu 10.2.0-13ubuntu1) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

新鲜。

如果使用gcc,可以使用以下命令了解编译器版本

gcc --version

gcc -v
然后您可以设置
std
,在您的案例c17中编译特定版本的C

gcc -std=c17 sample.c -o sample

如果您使用的是gcc,则可以使用以下命令了解编译器版本

gcc --version

gcc -v
然后您可以设置
std
,在您的案例c17中编译特定版本的C

gcc -std=c17 sample.c -o sample

您可以在代码中使用预定义的宏
\uuuu STDC\u VERSION\uuuu
。它以
yyyymmL
格式扩展为
long
整数(即
199901L
表示C99)。 例如:

#include <stdio.h>
int main() {
   printf("%ld\n", __STDC_VERSION__);
   return 0;
}
使用
-std=c2x
选项编译时,会生成:

202000

使用宏可以让您直接在代码中处理不同版本的C语言。

您可以在代码中使用预定义的宏
\uu STDC\u VERSION\uu
。它以
yyyymmL
格式扩展为
long
整数(即
199901L
表示C99)。 例如:

#include <stdio.h>
int main() {
   printf("%ld\n", __STDC_VERSION__);
   return 0;
}
使用
-std=c2x
选项编译时,会生成:

202000


使用宏可以让您直接在代码中处理不同版本的C语言。

您使用的是哪个版本的GCC?用它来检查GCC手册页默认的C标准版本。@Someprogrammerdude
GCC-v
results
GCC version 9.3.0
单个C编译器可能实现给定C标准的部分或全部,其中一些(GCC)甚至可以在使用哪个版本之间切换。因此,了解编译器的特定版本并不一定能告诉您编译时使用的语言版本,您必须查看构建文件(或者更具体地说:编译器命令行开关)还有。@JoachimSauer您想通过使用
gcc program.c
说我不知道用于编译的c语言版本吗?@alhelal:如果您没有明确指定,您必须查看手册中的gcc版本,以查看默认情况下它使用了什么。通常,这是最新的完全实现的带有GNU扩展的C版本。您使用的是哪个版本的GCC?用它来检查GCC手册页默认的C标准版本。@Someprogrammerdude
GCC-v
results
GCC version 9.3.0
单个C编译器可能实现给定C标准的部分或全部,其中一些(GCC)甚至可以在使用哪个版本之间切换。因此,了解编译器的特定版本并不一定能告诉您编译时使用的语言版本,您必须查看构建文件(或者更具体地说:编译器命令行开关)还有。@JoachimSauer您想通过使用
gcc program.c
说我不知道用于编译的c语言版本吗?@alhelal:如果您没有明确指定,您必须查看手册中的gcc版本,以查看默认情况下它使用了什么。通常,这是带有GNU扩展的最新完全实现的C版本。GNU开发的
gnu89
?根据C17和C11,在GCC中实际上是相同的(因为C17只包含同样适用于C11的更正),唯一的区别是
\uu STDC\u VERSION\uu
@alhelal:
gnu89
的值是
c89
带。从技术上讲,它不是一个“标准”,只是gcc称之为自己对语言的更改/添加。@alhelal是的,GNU有自己的C方言,其中包含一些特定于GNU的东西。我认为编译器的默认值是次优的,所以我建议总是更改它,这样你就不会冒着错误引入GNU代码(即非标准代码)的风险,这会使编译器切换困难。小注:标准值会随着新版本的
gcc
而改变。例如,在我的本地
gcc 9.3.0
上,手册页说明
gnu17
是C代码的默认值。GNU是否开发了
gnu89