栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 



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 



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 / Standardshttps://sourceforge.net/p/predef/wiki/Standards/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号