Пожалуйста, обратите внимание на следующий фрагмент кода,Понимание маркера склеивание
#include<stdio.h>
#define AB "HELLO"
#define A "WORLD"
#define MAC1 A##B
void main(void)
{
printf(MAC1"\n");
}
При компиляции и выполняется печать ПРИВЕТ. Пожалуйста, помогите понять, почему ##
игнорируются между A
и B
.
Кроме того, когда следующий код компилируется, дает следующее сообщение об ошибке,
#include<stdio.h>
#define AB "HELLO"
#define A "WORLD"
#define MAC2 A#B
void main(void)
{
printf(MAC2"\n");
}
21.c: In function âmainâ:
21.c:11:2: error: stray â#â in program
21.c:11:9: error: expected â)â before string constant
Почему такое поведение?
## является лексема/символ конкатенации, # принимает операнд и превращает его в строку (например, #define макинтош (х) #x, если я прохожу макинтош (MYVAR) I получите «myVar» в своем месте. Для литеральной конкатенации строк просто поместите их рядом с eachother (например, «Hello» «World» или в #define MAC1 AB A) – ydobonebi