Может ли кто-нибудь объяснить мне почему? Все, что я прочитал, мне доверяют, но я просто не могу просто доверять чему-то, потому что кто-то сказал это.
Я пробовал этот подход, и я не могу найти никаких ошибок:
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
Итак почему мне нужно сделать это так (цитата с веб-страницы):
Однако, если вы используете ##, вам нужен двойной слой косвенности. В основном вам нужно создать специальный макрос для "склейки маркеров" как:
#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b
Поверьте мне в этом - вам действительно нужно сделать это! (И, пожалуйста, никто не напишет мне, что это иногда работает без второй слой косвенности. Попробуйте конкатенировать символ с помощью __ LINE__ и посмотрим, что произойдет потом.)
Изменить: Может ли кто-то объяснить, почему он использует NAME2_HIDDEN
, прежде чем он будет указан ниже? Кажется более логичным определить макрос NAME2_HIDDEN
, прежде чем использовать его. Это какой-то трюк здесь?