Макрос расширяется препроцессором обычным исходным кодом C, а затем используется так же. Например, если у вас есть макрос , который должен быть #define
d для номера, вы можете проверить его значение во время выполнения, как и с любым другим номером.
if (MY_NUMBER == 42)
printf("MY_NUMBER is 42\n");
else
printf("MY_NUMBER is not 42 but rather %d\n", MY_NUMBER);
Однако, если ваш макрос раскрывается в неприятные вещи, и вы хотели бы, чтобы проверить, что текст, вы должны преобразовать макрос в строку, а затем посмотреть на эту строку. Например:
if (strcmp(STRINGIZE(MY_MACRO), "for (;;)") == 0)
printf("MY_MACRO was #define'd to an infinite loop.");
Обычный трюк для «строгания» макроса выглядит так, если вы его раньше не видели.
#define STRINGIZE_R(X) #X
#define STRINGIZE(X) STRINGIZE_R(X)
возможно дубликат [сравнение строк в условиях препроцессора в C] (http://stackoverflow.com/questions/18278868/string-comparison-in-preprocessor-conditions-in-c) – hugomg