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

Posted

技术标签:

【中文标题】如何知道我使用的是哪个版本的 C 语言?【英文标题】:How to know which version of C language I am using? 【发布时间】:2021-08-24 07:52:50 【问题描述】:

我编写c 代码并使用gcc 运行它。一切正常。但我不知道我使用的是哪个版本。今天在***C (programming language) 看到该语言的最新稳定版本是C17 / June 2018; 3 years ago。所以,我很想知道我的版本。有没有办法知道这一点?我正在使用 Ubuntu Linux。

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

【问题讨论】:

您使用的是哪个版本的 GCC?使用它来检查 GCC 手册页,它默认为哪个 C 标准版本。 @Someprogrammerdude gcc -v 结果gcc version 9.3.0 单个 C 编译器可能实现给定 C 标准的部分或全部,其中一些(其中包括 gcc)甚至可以在它们使用的版本之间切换。因此,了解编译器的特定版本并不一定能告诉您编译时使用的语言版本,您还必须查看构建文件(或者更具体地说:编译器命令行开关)。 @JoachimSauer 你想说用gcc programm.c我不知道编译用的c语言版本吗? @alhelal:如果您没有明确指定它,则必须查看您的 gcc 版本的手册,以了解它默认使用的内容。通常这是带有 GNU 扩展的最新完全实现的 C 版本。 【参考方案1】:

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

The manual page有很多话要说,开始:

-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.

新鲜。

【讨论】:

gnu89 是 GNU 开发的吗? 根据the docs,C17 和 C11 在 GCC 中实际上是相同的(因为 C17 仅包含也适用于 C11 的更正),唯一的区别是 __STDC_VERSION__ 的值。 @alhelal: gnu89c89 和 GNU extensions。从技术上讲,它不是“标准”,只是 gcc 对语言的自己的更改/添加。 @alhelal 是的,GNU 有自己的 C 方言,其中包含一些 GNU 特定的内容。我认为编译器默认为次优,因此我建议始终更改它,这样您就不会冒险引入 GNU 代码(即非标准代码),这会使切换编译器变得困难。 小注:标准值随着gcc的新版本而变化。例如,在我的本地 gcc 9.3.0 上,手册页指出 gnu17 是 C 代码的默认值。【参考方案2】:

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

gcc --version

gcc -v

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

gcc -std=c17 sample.c -o sample

【讨论】:

【参考方案3】:

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

#include <stdio.h>
int main() 
   printf("%ld\n", __STDC_VERSION__);
   return 0;

使用gcc 9.3 编译,没有标志打印:

201710

使用-std=c2x 选项编译时会产生:

202000

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

【讨论】:

以上是关于如何知道我使用的是哪个版本的 C 语言?的主要内容,如果未能解决你的问题,请参考以下文章

我如何知道我运行的是哪个版本的 SBT? [复制]

我使用的是哪个版本的 C#

004 gcc 编译 C/C++ 默认使用哪个标准

c语言编程中,我用的是VC6.0软件编程,其中代码缩进快捷键是哪个?知道的说下谢谢

如何知道应该使用哪个 cuDNN 版本?

提高 C++ 语言版本和标准库依赖项方面的要求