Я хочу объявить макрос C, который был определен в соответствии с параметром, переданным макросу. Другими словами, я хочу использовать директиву #if
в макросе C. Это должно быть так:Могу ли я использовать директиву #if в макросе C?
#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;
}
Однако, похоже, в макросе C не используется директива #if
. Есть какой-либо способ сделать это?
Нет, вы можете 'Определять макросы препроцессора в макросах препроцессора. –
Не только то, что вы не можете сделать это так, фаза предварительной обработки также ничего не знает о типах. Он знает только о последовательностях токенов. Возможно, вы должны сказать нам, чего именно вы хотите достичь? –
Я так не думаю. –