#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
Этот код дает результат 100, но если препроцессор реализован, printf
будет переписан как:
printf("%d",var##12);
Тогда как пришел результат?
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
Этот код дает результат 100, но если препроцессор реализован, printf
будет переписан как:
printf("%d",var##12);
Тогда как пришел результат?
Двойной хеш ##
— это вставка токена оператор препроцессора. printf
будет переписано так:
printf("%d",var12); // No double-hash
Двойной цифровой знак или оператор «вставки токена» (##), который иногда называют оператором «слияния», используется как в объектно-подобных, так и в функционально-подобных макросах. Он позволяет объединять отдельные токены в один и поэтому не может быть первым или последним токеном в определении макроса.
#define MYVAR var##12
, а затем printf("%d",MYVAR);
- person Sergey Kalinichenko; 24.05.2013
Потому что f(var, 12)
заменено на var12
, которое является именем переменной, которую вы объявили и присвоили в строке выше. Директива препроцессора ##
объединяет два аргумента.