реклама на сайте
подробности

 
 
> непонятность с #define
romez777
сообщение Jul 22 2005, 08:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Приветствую.

Определяю макро таким образом:

Код
...
int main(int argc, char *argv[], char *envp[])
{
...
 if ( argc > 1 ) {
    if ( strcmp(argv[1], "-d") == 0 ) {
#define DEBUG 1
   printf("DEBUG value is %d\n", DEBUG);
    }
    else {
#undef DEBUG
    }
 }
...
#ifdef DEBUG
 ...
#endif
...
}


Макро определяется, но при этом в код заключенный в #ifdef DEBUG... #endif
мы не попадаем. В чем ошибка?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gab
сообщение Jul 23 2005, 00:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 376
Регистрация: 30-06-04
Из: Moskow
Пользователь №: 218



Цитата(romez777 @ Jul 22 2005, 11:20)
Макро определяется, но при этом в код заключенный в #ifdef DEBUG... #endif
мы не попадаем. В чем ошибка?
*

Макросы не рекурсивны. Т.е. при разрешении макроса внутреннии макросы не вычисляются. И вычисляются отдельно от программы. ИМХО вроде так, согласно стандарту.
В общем, нужно строго следить за макросами и программой на С. Это _разные_ вещи. Прогоните в уме то как должна идти компиляция с т.з. поведения препроцессора и компилятора. Не допускайте вложения макроса в макрос.

PS: Лучше день потерять, зато потом... smile.gif
PPS: Серьёзно, сколько компиляторов - столько и правил. Но стандарт - главнее.


--------------------
serpents on the way to paradise -
dying for love, fighting for ages.

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016