C++实操 - 如何判断是使用C还是C++编译器以及编译器版本

C/C++的语言标准有不同的版本,比如C99,C++11。

我们在使用C/C++编程时,一般其实是默认在某个标准版本下进行,只不过新版标准向后兼容,所以通常我们用新编译器编译老代码一般没问题。

根据选用的编译器和编译器的版本,决定了编译器是按照那个标准来编译我们的代码。

如果你使用新标准的语言特性,确实用旧版本编译器来编译,肯定会编译出错。

C/C++标准里同样规定了一些标准本身的信息,通过预定义宏来获得。

在我们的代码里,我们可以使用这些预定义宏。

下面是C/C++标准定义的一些语言标准本身相关的信息:

Name

Macro

Standard

C89

__STDC__

ANSI X3.159-1989

C90

__STDC__

ISO/IEC 9899:1990

C94

__STDC_VERSION__ = 199409L

ISO/IEC 9899-1:1994

C99

__STDC_VERSION__ = 199901L

ISO/IEC 9899:1999

C11

__STDC_VERSION__ = 201112L

ISO/IEC 9899:2011

C18

__STDC_VERSION__ = 201710L

ISO/IEC 9899:2018

C++98

__cplusplus = 199711L

ISO/IEC 14882:1998

C++11

__cplusplus = 201103L

ISO/IEC 14882:2011

C++14

__cplusplus = 201402L

ISO/IEC 14882:2014

C++17

__cplusplus = 201703L

ISO/IEC 14882:2017

我们使用我的Ubuntu里面的gcc/g++来试一下:

test.c

#include <stdio.h>



int main()

{

  printf("STDC: %d.\n", __STDC__);

  printf("Ver:%ld.\n", __STDC_VERSION__);

  return 0;

}



$ gcc -o test test.c

$ ./test

STDC: 1.

Ver:201710.

我们看到__STDC__这个宏被定义且值为1,而__STDC_VERSION__这个值表示C18标准。

test.cpp



#include <cstdio>



int main()

{

  printf("STDC: %d.\n", __STDC__);

  printf("Ver:%ld.\n", __cplusplus);

  return 0;

}



$ g++ -o test test.cpp

$ ./test

STDC: 1.

Ver:201402.

我们看到__STDC__这个宏被定义且值为1,而__cplusplus这个宏表示是C++14版本。

总结:

1,如果定义了__STDC__,那就是C或C++程序。此时,如果定义了__cplusplus,就表示C++,否则是C。

2,C语言的话编译器使用的版本用__STDC_VERSION__的值来判断。

3,C++语言的话,编译器使用的版本用__cplusplus的值来判断。

参考:

Pre-defined Compiler Macros / Wiki / Standardsicon-default.png?t=L9C2https://sourceforge.net/p/predef/wiki/Standards/

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值