如何知道我使用的是哪个版本的 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.c
或gcc -o programm.out programm.c
时,我想知道gcc
使用的c
版本。其实gcc
默认使用的是哪个c
版本。
【问题讨论】:
您使用的是哪个版本的 GCC?使用它来检查 GCC 手册页,它默认为哪个 C 标准版本。 @Someprogrammerdudegcc -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: gnu89
是 c89
和 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 语言?的主要内容,如果未能解决你的问题,请参考以下文章