Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как задать в #define конструкцию #if...#endif

3.8K
28 ноября 2006 года
VovaL
50 / / 26.09.2005
Может кто знает - как поместить внутри #define конструкцию типа
#if ...
...
#endif
263
28 ноября 2006 года
koltaviy
816 / / 16.12.2004
Цитата: VovaL
Может кто знает - как поместить внутри #define конструкцию типа
#if ...
...
#endif


В смысле как?:

 
Код:
#define DEBUG
 #if DEBUG
   ...   //Это скомпилируется
 #endif
#undef DEBUG
 #if DEBUG
   ...   //А вот это уже нет
 #endif
355
28 ноября 2006 года
<SCORP>
786 / / 21.10.2006
 
Код:
#define somth #if... \
....\
#endif
3.8K
28 ноября 2006 года
VovaL
50 / / 26.09.2005
Нет, речь идет о конструкции типа

#define check(state) #ifdef state .... #endif
3.8K
28 ноября 2006 года
VovaL
50 / / 26.09.2005
[QUOTE=<SCORP>;156484]
 
Код:
#define somth #if... \
....\
#endif
[/QUOTE]



Все простое перепробовал - ошибки в компиляции
309
28 ноября 2006 года
el scorpio
1.1K / / 19.09.2006
В принципе, ответ SCORP'а подойдёт, вот только ВНУТРИ макросов для обозначения '#' используется "##"
355
28 ноября 2006 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата: el scorpio
В принципе, ответ SCORP'а подойдёт, вот только ВНУТРИ макросов для обозначения '#' используется "##"



maybe, потому что в работе не проверял -- скомпилилось знач работает ;)

3.8K
28 ноября 2006 года
VovaL
50 / / 26.09.2005
Цитата: el scorpio
В принципе, ответ SCORP'а подойдёт, вот только ВНУТРИ макросов для обозначения '#' используется "##"



Я уже пробовал c "#":

#define bb {int i = 0;}
#define check(state) "#"ifdef aa state "#"endif
check(bb)

и c "##" (без кавычек не проходит совсем)

но компилятор выдает
[C++ Error] Unit1.cpp(18): E2379 Statement missing ;

откуда это вылезает, непонятно

3.8K
28 ноября 2006 года
VovaL
50 / / 26.09.2005
Пожоже, не лечится!

Syntax

#define macro_identifier <token_sequence>

Description

..........
However, if the macro expands into what looks like a preprocessing directive, such a directive will not be recognized by the preprocessor. There are these restrictions to macro expansion:

Any occurrences of the macro identifier found within literal strings, character constants, or comments in the source code are not expanded.
A macro won't be expanded during its own expansion (so #define A A won't expand indefinitely).

Example

#define HI "Have a nice day!"
#define empty
#define NIL ""
#define GETSTD #include <stdio.h>
2.1K
28 ноября 2006 года
vectoroc
234 / / 25.07.2006
я всегда думал что ## внутри используется для соединения строк...
3.8K
28 ноября 2006 года
VovaL
50 / / 26.09.2005
Цитата: vectoroc
я всегда думал что ## внутри используется для соединения строк...



Так оно и есть - параметры макры "склеивает" - иногда удобно задавать новые имена.

You can paste (or merge) two tokens together by separating them with ## (plus optional whitespace on either side). The preprocessor removes the whitespace and the ##, combining the separate tokens into one new token. You can use this to construct identifiers.
Given the definition

#define VAR(i, j) (i##j)

the call VAR(x, 6) expands to (x6).

355
28 ноября 2006 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата:
#define GETSTD #include <stdio.h>


ты ж сам привёл кусок доки - там в екзампле такая строка есть. разве это не оно?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог