Странное объявление #define, не могу понять, к чему оно расширяется - PullRequest
0 голосов
/ 10 октября 2011

У меня есть это #define утверждение в устаревшем коде, который я проверяю в C .

#define STEP(x)         case x: STEP ## x : WPAN_Startup_Step = x;

Это макрос для замены наблюдений в очень большом автомате переключения. Я не могу понять, что происходит в этом макросе. На что это распространяется?

1 Ответ

3 голосов
/ 10 октября 2011

## выполняет конкатенацию, это означает, что результат будет примерно таким:

STEP(1)

case 1: STEP1: WPAN_Startup_Step = 1;

или другой пример:

STEP(v)

case v: STEPv: WPAN_Startup_Step = v;

этот макрос не имеет большого смысла для меня, так как он генерирует x: STEPx: может быть, пример использования прояснит это.

если вы хотите увидеть расширение макроса, используйте: gcc -E program.c

также хорошее место для изучения макросов: http://gcc.gnu.org/onlinedocs/cpp/Macros.html

...