[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