|  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:56 | #4 | 
| Участник | 
			
			Макрос - это просто текстовая подстановка уровня компиляции.  Макрос работает с текстом программы(!) а не со значениями переменных. Макрос не преобразует имя переменной в значение. Если вы объявили макрос через имя переменной, то значением макроса будет буквально имя переменной, а не её значение. 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). | |
|  19.06.2012, 10:58 | #5 | 
| Участник | Цитата: 
		
			Сообщение от ice
			   2Cardagant: макрос #ifnot и #if не проверяют значение переменной, они проверяют переданный параметр на этапе компиляции | 
|  | 
|  19.06.2012, 11:12 | #6 | 
| Участник | 
			
			 #ifnot.empty(%1) или #if.empty(%1) - это проверки на передан параметр или нет
		 Последний раз редактировалось ice; 19.06.2012 в 11:21. | 
|  | 
|  19.06.2012, 11:37 | #7 | 
| Участник | 
			
			Спасибо всем за советы!
		 | 
|  |