[P&AM Lab] GOST 28147-89
Одинцов Егор
rg-400 на list.ru
Чт Апр 7 17:14:26 MSK 2011
В Чтв, 07/04/2011 в 11:46 +0400, LonelyRuyK пишет:
> Начал разбирать исходники GOST, появилась пара вопросов по макросам в
> macros.h. Скажите пожалуйста что такое
> __FILE__, \
> __LINE__, \
> __FUNCTION__, \
> в макросе return_if_fail.
> В принципе то что в них содержится понятно, просто неизвесно откуда они
> взялись.
> И что такое #expr? Почему # и что это значит?
>
> И ещё вопрос по #define FALSE (0). Есть ли какой-то хитрый смысл в том что 0 в
> скобки взят?
> _______________________________________________
> Lab mailing list
> Lab на wiki.syktsu.ru
> http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab
Мануал по препроцессору:
http://gcc.gnu.org/onlinedocs/cpp/index.html
__LINE__, __FUNCTION__ и т.п. - это предопределенные макросы.
Т.е. ты можешь писать свои макросы, а есть еще дополнительные, о которых
знает препроцессор, и ты можешь их использовать.
Можно прочитать про них в разделе Standart predefined macros
Про #expr.
Раздел Stringification.
Там вроде все понятно написано.
Скобки ставят чтобы не получить непредвиденный результат.
Например, если у тебя было бы выражение в макросе:
#define TWO 1+1
...
TWO * TWO получишь 1+1 * 1+1 = 3
#define TWO (1+1)
...
TWO * TWO получишь (1+1) * (1+1) = 4.
Так что лучше уж перестраховаться и поставить лишние скобки, чем потом
искать, где ошибка, так как в макрос могут передавать выражения, а в
отсутствии скобок может измениться порядок выполняемых операций.
#define FALSE (0);
Но тут я затрудняюсь сказать, где можно накосячить, если применить его
без скобок.
Можно посмотреть, что получает компилятор от препроцессора используя
ключ -E.
Подробная информация о списке рассылки Lab