C ошибка с использованием макроса else "ожидаемый параметр объявления" - PullRequest
0 голосов
/ 11 апреля 2020

Я написал следующий код C (согласно стандарту C99), и он работал без проблем:

#include <stdio.h>

#ifdef _WIN32
printf("Running on Windows");
#endif

void test(int x);

int main() {
    return 0;
}

, но добавление else вызвало столько ошибок (около 12), в чем проблема с новым кодом:

#ifdef _WIN32
printf("Running on Windows");
#else
printf("Running on Windows");
#endif

Некоторые ошибки:

error: expected parameter declarator
expected ')'
warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
error: conflicting types for 'printf'

1 Ответ

0 голосов
/ 11 апреля 2020

Когда вы используете условную компиляцию, препроцессор добавляет код в вашу программу перед этапом компиляции. Итак, если символ _WIN32 существует, то вы фактически говорите

printf("Running on Windows");

void test(int x);

int main() {
    return 0;
}

, и это синтаксически неверно, поскольку у вас есть исполняемый код (вызов printf) вне всех функций.

Если у вас не было проблем до того, как вы добавили «#else», это произошло потому, что символ _WIN32 не существует, а препроцессор не добавил оператор printf в ваш код.

...