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

Posted yorkyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了004 gcc 编译 C/C++ 默认使用哪个标准相关的知识,希望对你有一定的参考价值。

0. 前言

  • 我挺久没碰 C,不想就这么忘了,最近重温了一些相关知识

1. C 语言的几种“方言”

  • 简单地说,有这么几种常见的
年份 名称
1983 ANSI C
1987 C87
1999 C99
2011 C11
  • C 语言的全国二级等级考试采用的标准是 ANSI C (如果没变的话)

2. gcc 编译 C 默认使用哪个标准

  • 查了一些资料,说法不一,大概因为大家使用的是不同版本的 gcc

2.1 我使用的 gcc 版本

$ gcc -v
... ...
Target: x86_64-w64-mingw32
... ...
Thread model: win32
gcc version 8.1.0 (x86_64-win32-seh-rev0, Built by MinGW-W64 project)

2.2 网上的一种方法

  • 我想到之前装过 Cygwin,就打开试了这条代码
$ gcc -posix -E -dM - </dev/null
... ...
#define __STDC_VERSION__ 201112L
... ...
  • 结果很长,有用的是这句,但只能看出来是 2011 的版本

2.3 想到了一个 Linux 的命令:man

  • 同样是在 Win10 的环境打开 Cygwin
$ man gcc
...
gnu11
gnu1x
    GNU dialect of ISO C11. This is the default for C code. The name gnu1x is deprecated.
...
  • 我截了张图

技术图片

  • 总算得到了结果:gcc 8.1.0 编译 C 所使用的默认标准为 gnu11

3. gcc 编译 C++ 默认使用哪个标准

  • 直接上图

技术图片

  • 结论:gcc 8.1.0 编译 C++ 所使用的默认标准为 gnu++14

以上是关于004 gcc 编译 C/C++ 默认使用哪个标准的主要内容,如果未能解决你的问题,请参考以下文章

TDM-GCC是从mingw-w64项目patch而来,全部使用静态链接,对线程不需要额外的DLL,默认使用SJLJ异常(真是好东西)

gcc和g++使用澄清

windows下的c编译器用啥比较好

Linux gcc编译之-std选项

gcc和g++的区别

GCC是啥编译器?跟vc自带的有啥不同?