Да, это сработает.
Но для вашей личной информации, вот некоторые упрощенные правила о макросах, которые могут вам помочь (это выходит за рамки, но, вероятно, поможет вам в будущем). Я постараюсь сделать это как можно проще.
Определения «определены» в порядке их включения / чтения. Это означает, что вы не можете использовать определение, которое не было определено ранее.
Полезное ключевое слово препроцессора: #define, #undef, #else, #elif, #ifdef, #ifndef, # if
Вы можете использовать любой другой ранее #define в вашем макросе. Они будут расширены. (как в вашем вопросе)
Определения макроса функций принимают два специальных оператора (# и ##)
operator # stringize аргумент:
#define str(x) #x
str(test); // would translate to "test"
оператор ## объединяет два аргумента
#define concat(a,b) a ## b
concat(hello, world); // would translate to "helloworld"
Также есть несколько предопределенных макросов (из языка), которые вы можете использовать:
__LINE__, __FILE__, __cplusplus, etc
Смотрите в разделе вашего компилятора обширный список, поскольку он не "кроссплатформенный"
- Обратите внимание на расширение макроса
Вы увидите, что люди используют журнал круглых скобок "()" при определении макросов. Причина в том, что при вызове макроса он раскрывается "как есть"
#define mult(a, b) a * b
mult(1+2, 3+4); // will be expanded like: 1 + 2 * 3 + 4 = 11 instead of 21.
mult_fix(a, b) ((a) * (b))