gpt4 book ai didi

objective-c - 我可以在 C 宏中使用 #if 指令吗?

转载 作者:行者123 更新时间:2023-11-30 15:45:08 26 4
gpt4 key购买 nike

我想声明一个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 指令。有什么办法可以做到这一点吗?

最佳答案

不,你不能。语言的定义不允许这样做。编译器也不支持这一点。

C 预处理器被指责过于复杂。现代语言不使用类似的功能。您所要求的东西将来出现的可能性极小。

尽管如此,从我的角度来看,您所问的问题并没有什么特别不好的问题。我曾考虑在自己的解析器中实现它,但后来放弃了。

关于objective-c - 我可以在 C 宏中使用 #if 指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19206747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com