首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sun Studio 10有奇怪的‘Sun’常量吗?

Sun Studio 10有奇怪的‘Sun’常量吗?
EN

Stack Overflow用户
提问于 2011-04-11 15:40:26
回答 3查看 195关注 0票数 3

奇怪的是,以下C++程序在Sun Studio10上编译时没有为未定义的变量生成警告:

代码语言:javascript
复制
int main()
{
  return sun;
}

sun的值似乎是1。这个变量从哪里来,它是用来做什么的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-11 16:17:46

它几乎肯定是一个预定义的宏。在形式上,C和C++标准保留以下划线和大写字母开头或包含两个下划线的名称,但实际上,编译器在标准之前定义了这样的符号,并继续支持它们,至少在它们的非兼容模式下,这是我所知道的所有编译器的默认模式。我记得有一次“`linux”出现了问题,但当我用-std=c++89调用g++时就不记得了。

票数 4
EN

Stack Overflow用户

发布于 2011-04-11 15:43:00

它必须是编译器创建的自动宏之一。

尝试同样的方法,将sun替换为gnu,并在Linux上使用gcc编译器。您将得到类似的结果。

使用gcc,您可以使用:echo "" | gcc -E - -dM获取所有预定义的宏。

票数 2
EN

Stack Overflow用户

发布于 2016-12-31 14:22:46

sun是为了历史上的向后兼容性而定义的,从约定开始以下划线开始。对于Studio,它记录在cc(1)和CC(1)手册页中的-D标志下:

代码语言:javascript
复制
   -Dname[=def]

       Defines  a  macro  symbol  name  to  the preprocessor.  Doing so is
       equivalent to including a #define directive at the beginning of the
       source.  You can use multiple -D options.

       The following values are predefined.

       SPARC and x86 platforms:


         __ARRAYNEW
         __BUILTIN_VA_ARG_INCR
         __DATE__
         __FILE__
         __LINE__
         __STDC__ = 0
         __SUNPRO_CC = 0x5130
         __SUNPRO_CC_COMPAT = 5 or G
         __TIME__
         __cplusplus
         __has_attribute
         __sun
         __unix
         _BOOL if type bool is enabled (see "-features=[no%]bool")
         _WCHAR_T
         sun
         unix
         __SVR4 (Oracle Solaris)
         __SunOS_5_10  (Oracle Solaris)
         __SunOS_5_11  (Oracle Solaris)
...

各种符合标准的选项可以禁用它,CC的+p标志也可以禁用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5618242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档