gcc默认的c语言标准,当前gcc的默认C模式是什么(尤其是在Ubuntu上)?

最少的测试程序

如果您想凭经验找到它而无需阅读任何手册。

抄送

#include

int main(void) {

#ifdef __STDC_VERSION__

printf("__STDC_VERSION__ = %ld \n", __STDC_VERSION__);

#endif

#ifdef __STRICT_ANSI__

puts("__STRICT_ANSI__");

#endif

return 0;

}

测试:

#!/usr/bin/env bash

for std in c89 c99 c11 c17 gnu89 gnu99 gnu11 gnu17; do

echo $std

gcc -std=$std -o c.out c.c

./c.out

echo

done

echo default

gcc -o c.out c.c

./c.out

结果:

c89

__STRICT_ANSI__

c99

__STDC_VERSION__ = 199901

__STRICT_ANSI__

c11

__STDC_VERSION__ = 201112

__STRICT_ANSI__

c17

__STDC_VERSION__ = 201710

__STRICT_ANSI__

gnu89

gnu99

__STDC_VERSION__ = 199901

gnu11

__STDC_VERSION__ = 201112

gnu17

__STDC_VERSION__ = 201710

default

__STDC_VERSION__ = 201710

结论:默认情况下使用gnu17:

__cplusplus:为-std=c定义但未为-std=gnu定义的GCC扩展名,请参见:[https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html]

__cplusplus:为每个版本设置的C99 + ANSI C宏。 在标准中尚未定义的C89中不存在。

C ++

main.cpp

#include

int main(void) {

#ifdef __cplusplus

std::cout << __cplusplus << std::endl;

#endif

#ifdef __STRICT_ANSI__

std::cout << "__STRICT_ANSI__" << std::endl;

#endif

return 0;

}

测试:

#!/usr/bin/env bash

for std in c++98 c++11 c++14 c++17 gnu++98 gnu++11 gnu++14 gnu++17; do

echo $std

g++ -std=$std -o cpp.out cpp.cpp

./cpp.out

echo

done

echo default

g++ -o cpp.out cpp.cpp

./cpp.out

结果:

c++98

199711

__STRICT_ANSI__

c++11

201103

__STRICT_ANSI__

c++14

201402

__STRICT_ANSI__

c++17

201703

__STRICT_ANSI__

gnu++98

199711

gnu++11

201103

gnu++14

201402

gnu++17

201703

default

201402

结论:__cplusplus是默认值:

__cplusplus:由C ++标准定义的宏,包括C ++ 98起

已在Ubuntu 18.10,GCC 8.2.0上测试。 GitHub上游。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值