Скрываются ли определения макросов так же как область видимости переменных? - C (СИ)
Формулировка задачи:
char a[10] = { #define DIRECTIVE(count) (count), #include "board_system.h" };
Решение задачи: «Скрываются ли определения макросов так же как область видимости переменных?»
/* ... */ #if defined COND_ONE extern void FunctionOne(void); /* Будет прототип функции FunctionOne */ #elif defined COND_TWO extern int FunctionTwo(int a, int b); /* Будет прототип функции FunctionTwo */ #else #error Either of one must be defined! /* А если ничто не определено, будет сгенерирована ошибка */ #endif
Объяснение кода листинга программы
В данном коде определен условный оператор препроцессора if-else. По этому оператору проверяется, какое из условий COND_ONE или COND_TWO выполняется. Если выполняется условие COND_ONE, то в области видимости данного блока кода будет доступен прототип функции FunctionOne. Это означает, что если в коде будет вызвана функция FunctionOne, то компилятор будет знать, что эта функция существует и у нее нет параметров. Если выполняется условие COND_TWO, то в области видимости данного блока кода будет доступен прототип функции FunctionTwo. Это означает, что если в коде будет вызвана функция FunctionTwo, то компилятор будет знать, что эта функция существует и у нее есть два параметра типа int. Если ни одно из условий не выполняется, то генерируется ошибка. Это означает, что компилятор должен знать, какая функция будет вызвана, чтобы корректно сгенерировать исполняемый файл. Следовательно, в данном коде определения макросов не скрываются, а область видимости переменных определяется областью действия условного оператора.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д