__FUNCTION__ и друзья ведут себя странно в Xcode

Это работает

printf("%s body\n",__PRETTY_FUNCTION__);

Но этого не происходит (Ошибка Expected ')'):

printf(__PRETTY_FUNCTION__" body\n");

Я не могу заставить IDE показать мне, что __PRETTY_FUNCTION__ оценивает, чтобы определить, почему это не работает.


person Steven Lu    schedule 21.06.2012    source источник


Ответы (1)


__PRETTY_FUNCTION__ не является макросом. Он ведет себя как статическая переменная, созданная на лету в этой функции.

Последний абзац в приведенной выше ссылке гласит:

Эти идентификаторы не являются макросами препроцессора. В GCC 3.3 и ранее, только в C, __FUNCTION__ и __PRETTY_FUNCTION__ обрабатывались как строковые литералы; они могут использоваться для инициализации массивов символов и могут быть объединены с другими строковыми литералами. GCC 3.4 и более поздние версии обрабатывают их как переменные, например __func__. В C ++ __FUNCTION__ и __PRETTY_FUNCTION__ всегда были переменными.

person jxh    schedule 21.06.2012
comment
@sixletter Не уверен, что это лучший справочник, так как вопрос о лязгах… но я тоже впервые нашел его. - person Konrad Rudolph; 21.06.2012
comment
@KonradRudolph: похоже, что clang определяет его как макрос для Microsoft, но не для других платформ. - person user7116; 21.06.2012
comment
@sixletter Очевидно, он нацелен на максимальную совместимость (согласно комментариям) - что имеет смысл, но это странно, поскольку MSVC даже не знает __PRETTY_FUNCTION__ (и разработчики clang даже упоминают это в комментариях). - person Konrad Rudolph; 21.06.2012