Конкатенация выполняется препроцессором, потому что вы использовали команду ##
.
Если вы не уверены, что делает препроцессор, вы можете попросить gcc остановить его после запуска препроцессора. Поскольку это происходит до запуска компилятора, вывод довольно прост для понимания.
Например, предположим, что у вас есть файл pre.c
#define FOO 123
#define CONCAT(x,y) x##y
#define STRING(x) #x
void main()
{
int a = FOO;
int b = CONCAT(123,4567);
char* c = STRING(IGetQuoted);
}
Вы можете получить вывод препроцессора, передав опцию -E
в gcc.
$ gcc -E pre.c
# 1 "pre.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "pre.c"
void main()
{
int a = 123;
int b = 1234567;
char* c = "IGetQuoted";
}
Имейте в виду, что #include
извлечет содержимое указанного файла и может сделать вывод препроцессора довольно длинным.