К каким другим скрытым переменным (предопределенным с помощью макросов) у меня есть доступ в g ++? - PullRequest
2 голосов
/ 09 августа 2011

примечание: я использую g ++ версии 4.3.4

Итак, я узнал об утверждениях assert и наткнулся на макрос assert для homebrew, который использует переменные __LINE__ и __FILE__, которые (умно) даютномер строки и имя файла, откуда они были вызваны - в этом случае, откуда не удалось выполнить диссертацию.Это эпическая информация!

Я смог сделать вывод, что переменная __FUNCTION__ даст вам имя функции, в которой вы находитесь ... удивительно !!Однако, когда assert.h работает, вы также получаете аргументы функции (то есть function: int main(int, char**), и все, что я могу сейчас сделать, это получить имя функции ...

Вообще, где я могу узнатьбольше об этих замечательных скрытых переменных и получить полный список всех из них?

ps Я думаю, теперь я понимаю, почему вы не должны использовать имена переменных, начинающиеся с __

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Вообще говоря, вы можете узнать все, что вы хотите о языке, прочитав его документ по стандартам и / или документацию по одиночной реализации.В случае C ++ это будет ISO / IEC 14882: 2003, стандарт C ++ 2003.У меня нет копии, но у меня есть стандарт C99 (ISO / IEC 9899: 1990), в котором также перечислены (в §6.10.8) магические макросы __DATE__ и __TIME__, которые расширяются до строк, содержащихдата и время компиляции исходного файла.(Кроме того, вместо __FUNCTION__, C99 имеет __func__ (§6.4.2.2); это прежний стандарт C ++ или расширение компиляции?)

EDIT: единственный список этих специальных имен для GCC /G ++, который я могу найти, это этот раздел руководства GCC, в котором описаны __func__, __FUNCTION__ и __PRETTY_FUNCTION__.

0 голосов
/ 09 августа 2011

Что касается получения аргументов функции, вы можете попробовать использовать __PRETTY_FUNCTION__ вместо __FUNCTION__.Более подробная информация доступна здесь: http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html

Что касается списка предопределенных макросов, вы можете найти их много, если поохотитесь здесь: http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html#Predefined-Macros

Iне могу с уверенностью сказать, что приведенный выше список полон.Причина, по которой я это говорю, заключается в том, что __PRETTY_FUNCTION__ не может быть найдено в списке предопределенных макросов ... почему я не могу этого сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...