|
19.06.2012, 10:33 | #1 |
Участник
|
Проверка на пустоту строки в макросе
Здравствуйте! Проверяю пустую строковую переменную на наличие в ней знаения в макросе, а он выдаёт, что она не пуста. Передаю пустую строку как параметр явно, выдаёт, что параметр - пустая строка. Подскажите, что неверно делаю? Спасибо!
X++: str s = ''; ; #localmacro.McRoss #define.string(%1) #ifnot.string('') info("Не пустая"); #endif #if.string('') info("Пустая"); #endif #endmacro #McRoss('') // Возвращает "пустая" #McRoss(s) // Возвращает "Не пустая" |
|
19.06.2012, 10:40 | #2 |
Участник
|
почему бы не сделать проверку в таком виде?
str s = ''; ; #localmacro.McRoss #define.string(%1) if(#string != "") info("Не пустая"); #endif if(#string == "") info("Пустая"); #endif #endmacro #McRoss('') // Возвращает "пустая" #McRoss(s) // Возвращает "пустая"
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
19.06.2012, 10:53 | #3 |
Участник
|
2Cardagant: макрос #ifnot и #if не проверяют значение переменной, они проверяют переданный параметр на этапе компиляции
|
|
19.06.2012, 10:58 | #4 |
Участник
|
Цитата:
Сообщение от ice
2Cardagant: макрос #ifnot и #if не проверяют значение переменной, они проверяют переданный параметр на этапе компиляции
|
|
19.06.2012, 11:12 | #5 |
Участник
|
#ifnot.empty(%1) или #if.empty(%1) - это проверки на передан параметр или нет
Последний раз редактировалось ice; 19.06.2012 в 11:21. |
|
19.06.2012, 11:37 | #6 |
Участник
|
Спасибо всем за советы!
|
|
19.06.2012, 10:56 | #7 |
Участник
|
Макрос - это просто текстовая подстановка уровня компиляции.
Макрос работает с текстом программы(!) а не со значениями переменных. Макрос не преобразует имя переменной в значение. Если вы объявили макрос через имя переменной, то значением макроса будет буквально имя переменной, а не её значение. X++: int NameOfVariable = 777; ; #define.test1(NameOfVariable) #define.test2(777) #if.test1(NameOfVariable) info("Test1: NameOfVariable"); #endif #if.test1(777) info("Test1: 777"); #endif #if.test2(NameOfVariable) info("Test2: NameOfVariable"); #endif #if.test2(777) info("Test2: 777"); #endif |
|
|
За это сообщение автора поблагодарили: Cardagant (1). |