Записать через #define команды #pragma
От: roman313  
Дата: 14.08.11 10:06
Оценка:
Привет !

Что-то я совсем препроцессор забыл, может кто-подскажет,
как к примеру через #define определить команду

#pragma pack (push)
#pragma pack (pop)
#pragma pack (push, 1)


или подобные ?
Re: Записать через #define команды #pragma
От: okman Беларусь https://searchinform.ru/
Дата: 14.08.11 10:09
Оценка:
Здравствуйте, roman313, Вы писали:

R>Привет !


R>Что-то я совсем препроцессор забыл, может кто-подскажет,

R>как к примеру через #define определить команду

R>#pragma pack (push)

R>#pragma pack (pop)
R>#pragma pack (push, 1)


R>или подобные ?


Никак.
Компилятор С++ однопроходной и рекурсивные макроопределения не вычисляет.
Именно по этой причине невозможно записать, например, так:
// Работать не будет
#define DEFINE(A,B) #define A B
Re: Записать через #define команды #pragma
От: Abyx Россия  
Дата: 14.08.11 10:27
Оценка: 15 (4) +1
Здравствуйте, roman313, Вы писали:

R>Привет !


R>Что-то я совсем препроцессор забыл, может кто-подскажет,

R>как к примеру через #define определить команду

R>#pragma pack (push)

R>#pragma pack (pop)
R>#pragma pack (push, 1)


R>или подобные ?


RTFM
http://msdn.microsoft.com/en-us/library/d9x1s805.aspx
In Zen We Trust
Re: Записать через #define команды #pragma
От: SX Россия  
Дата: 14.08.11 10:46
Оценка: 1 (1)
Здравствуйте, roman313, Вы писали:

R>Привет !


R>Что-то я совсем препроцессор забыл, может кто-подскажет,

R>как к примеру через #define определить команду

R>#pragma pack (push)

R>#pragma pack (pop)
R>#pragma pack (push, 1)


R>или подобные ?


Если правильно понимаю, то необходимо что-то подобное
#define SOMETHING /*#pragma pack(push, 1)*/  struct packed_struct {};  /*#pragma pack(pop)*/
?

Если да, то:
* для MS Visual C++ — использовать __pragma, как написал Abyx
Автор: Abyx
Дата: 14.08.11

#define SOMETHING __pragma(pack(push, 1))  struct packed_struct {};  __pragma(pack(pop))

* для GCC, начиная с версии 4.5 (может и раньше):
#define SOMETHING struct packed_struct {} __attribute__((packed));

*для C++ Builder — решения не знаю. Кто-нибудь использовал аналоги для компилятора в этой среде программирования?
Re[2]: Записать через #define команды #pragma
От: roman313  
Дата: 14.08.11 10:56
Оценка:
Да, так подойдет, спасибо



Здравствуйте, SX, Вы писали:

SX>Здравствуйте, roman313, Вы писали:


R>>Привет !


R>>Что-то я совсем препроцессор забыл, может кто-подскажет,

R>>как к примеру через #define определить команду

R>>#pragma pack (push)

R>>#pragma pack (pop)
R>>#pragma pack (push, 1)


R>>или подобные ?


SX>Если правильно понимаю, то необходимо что-то подобное

SX>
SX>#define SOMETHING /*#pragma pack(push, 1)*/  struct packed_struct {};  /*#pragma pack(pop)*/
SX>
?


SX>Если да, то:

SX>* для MS Visual C++ — использовать __pragma, как написал Abyx
Автор: Abyx
Дата: 14.08.11

SX>
SX>#define SOMETHING __pragma(pack(push, 1))  struct packed_struct {};  __pragma(pack(pop)) 
SX>

SX>* для GCC, начиная с версии 4.5 (может и раньше):
SX>
SX>#define SOMETHING struct packed_struct {} __attribute__((packed));
SX>

SX>*для C++ Builder — решения не знаю. Кто-нибудь использовал аналоги для компилятора в этой среде программирования?
Re: Записать через #define команды #pragma
От: dilmah США  
Дата: 14.08.11 12:32
Оценка:
_Pragma есть в стандарте С99
Re: Записать через #define команды #pragma
От: jyuyjiyuijyu  
Дата: 16.08.11 09:09
Оценка:
__pragma конечно мега удобная фича буду юзать
а вот можно ли придумать способ чтоб родить новый макрос внутри
определения другого макроса ? тоже бывает очень нужно пример
#define spec1(...) ....


spec1(...);
spec2(...); // spec2 авто-определен внутри spec1 так как ему для своего определения
нужен доступ к аргументам spec1

можно ли что то придумать ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.