2010-04-19 14 views
9

Makroda bir makroya C++ yerleştirmek mümkün mü?Makrolar içinde Makrolar

şey gibi:

#define Something\ 
#ifdef SomethingElse\ //do stuff \ 
#endif\ 

Denedim ve onu düzeltebilirim sözdizimi çeşit olmadıkça bu yüzden benim tahminim, çalışmıyor ise işe yaramadı?

cevap

11

Hayır, ancak #ifdef'u üst düzey olarak çekerek ve #ifdef'un doğru ve yanlış dalları için iki farklı #define Something ... sürümünü kullanarak bunu basitçe yeniden düzenleyebilirsiniz.

15

Makrolar, evet. ne yayınlanmıştır, hiçbir

2

sayılı Ben başka bir deyişle, c++ macros with memory?

Eğer ön işleme ortamı incelemek veya değiştirmek istiyorsanız bu cevaplandırılır önişlemci direktifleri, bir dize değiştirme yerine ön işleme altprogramı tanımlamak için Makro, bir başlık kullanmanız gerekir, ancak bunun meşru nedenleri az ve çok arasında.

4

Sen makroları önişlemci kullanamazsınız, ancak SomethingElse tanımlı olup olmadığını kontrol ve farklı bir makro çağırmak istiyorsanız bu (a c99 ön işlemcisi ve Boost.Preprocessor kütüphane gerektirir) gibi, bunu başarmak olabilir:

SomethingElse o MACRO1 arayacak tanımlanırsa
#define PP_CHECK_N(x, n, ...) n 
#define PP_CHECK(...) PP_CHECK_N(__VA_ARGS__, 0,) 

//If we define SomethingElse, it has to be define like this 
#define SomethingElse ~, 1, 

#define Something \ 
BOOST_PP_IF(PP_CHECK(SomethingElse), MACRO1, MACRO2) 

, aksi takdirde MACRO2 arayacak. Bu işlemin gerçekleşmesi için, SomethingElse böyle tanımlanmalıdır: http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement

:

arada
#define SomethingElse ~, 1, 

, bu nedeniyle derleyici bir hata nedeniyle, Visual Studio işe yaramaz, burada bir çözüm vardır

İlgili konular