Sun Studio 10 имеет странную "солнечную" постоянную? - PullRequest
3 голосов
/ 11 апреля 2011

Странно, следующая программа C ++ компилируется в Sun Studio 10 без выдачи предупреждения для неопределенной переменной:

int main()
{
  return sun;
}

Кажется, что значение sun равно 1. Откуда эта переменная и для чего она нужна?

Ответы [ 3 ]

4 голосов
/ 11 апреля 2011

Это почти наверняка предопределенный макрос. Формально С и Стандарты C ++ резервируют имена, начинающиеся с подчеркивания и заглавная буква, или содержащая два подчеркивания, для этого, но практически, компиляторы имели такие символы, определенные до стандарт, и продолжать поддерживать их, по крайней мере, в их несовместимые режимы, который является режимом по умолчанию для всех составители я знаю. Я помню, как у меня были проблемы с `linux ' когда-то, но не тогда, когда я вызывал g ++ с -std = c ++ 89.

2 голосов
/ 11 апреля 2011

Это должен быть один из автоматических макросов, созданных компилятором.

Попробуйте то же самое, замените sun на gnu и используйте компилятор gcc в Linux. Вы получите аналогичный результат.

С помощью gcc вы можете получить все предопределенные макросы с помощью: echo "" | gcc -E - -dM.

1 голос
/ 31 декабря 2016

sun определено для исторической обратной совместимости до того, как было принято соглашение начинать с подчеркивания. Для Studio это задокументировано в справочных страницах cc (1) и CC (1) под флагом -D:

   -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)
...

Различные опции соответствия стандартам могут отключить его, как и флаг +p для CC.

...