【发布时间】:2013-10-06 08:07:45
【问题描述】:
我想声明一个根据传递给宏的参数定义的 C 宏。换句话说,我想在 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;
}
但是,似乎不允许在 C 宏中使用 #if 指令。有没有办法做到这一点?
【问题讨论】:
-
不,您不能在预处理器宏中定义预处理器宏。
-
不仅不能这样,预处理阶段对类型也一无所知。它只知道令牌序列。或许你应该告诉我们你到底想要达到什么目标?
-
也输入
void*,因为你想在这里做这件事对我来说完全是多余的。在 C 中,void*被隐式转换为任何其他数据指针而不会出现问题。 (我的猜测是在 Objective-C 中这将是相同的,但我不是这方面的专家。)
标签: objective-c c macros