Предварительная обработка - это в основном просто замена строк, которая происходит до того, как начинается «настоящая» компиляция. Таким образом, мы не имеем ни малейшего представления о том, что такое переменная на данный момент.
Запятые здесь не являются специальным синтаксисом. Это приведет к тому, что любое появление MSG_FLAG
в коде будет заменено на 5, REG, MSGCLR
У большинства компиляторов есть флаг, который просто запускает препроцессор, так что вы можете убедиться сами. На gcc это -E.
Итак, чтобы убедиться в этом, у нас может быть какой-то бессмысленный источник:
#define MSG_FLAG 5, REG, MSGCLR
MSG_FLAG
Компилировать с gcc -E test.c
И вывод:
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
5, REG, MSGCLR