我想聲明一個C宏,它是根據傳遞給宏的參數定義的。換句話說,我想在C宏中使用#if
指令。它應該是這樣的:我可以在C宏中使用#if指令嗎?
#define XLType_id 1
#define XLTypeCastToVoidPointer(type) #if XLType_##type \\
(__bridge void *)\\
#define XLTypeCast(type) (__bridge id)\\
#else \\
&\\
#define XLTypeCast(type) *(type*)\\
#endif
我想用XLTypeCastToVoidPointer()
和XLTypeCast()
宏重鑄一個變量(void *)
類型。
- (NSInteger) value{
NSInteger returnValue = 100;
// the same as -> void *aValueToReturn = &returnValue;
void *aValueToReturn = XLTypeCastToVoidPointer(NSInteger) returnValue;
// Do something with this void pointer here.
// the same as -> return *(NSInteger*) aValueToReturn;
return XLTypeCast(NSInteger) aValueToReturn;
}
- (NSString*)string{
NSString* aString = @"a string";
// the same as -> void *aValueToReturn = &returnValue;
void *aValueToReturn = XLTypeCastToVoidPointer(id) aString;
// Do something with this void pointer here.
// the same as -> return *(NSInteger*) aValueToReturn;
return XLTypeCast(id) aString;
}
然而,它似乎不允許使用#if
指令在C宏。有沒有辦法做到這一點?
沒有,你可以不在預處理器宏中定義預處理器宏。 – 2013-10-06 08:10:30
不僅你不能這樣做,預處理階段也不知道類型。它只知道令牌序列。也許你應該告訴我們你想達到什麼目的? –
我不這麼認爲。 –