Objective c ObjC宏——是否可以包含检查以查看变量是否在当前范围内定义?

Objective c ObjC宏——是否可以包含检查以查看变量是否在当前范围内定义?,objective-c,c,macros,llvm,Objective C,C,Macros,Llvm,这不是我试图创建的宏,但这种尝试创建在Obj-C和C上下文中工作的自定义日志函数的类比说明了这一点: #define Log(_s, ...) do { \ /* obviously this won't work as written, */\ /* but it's what i'm trying to accomplish: */\ #if (self && _cmd) /* \ LogObjectiveC(_s, ##__VA_ARGS__); \ #

这不是我试图创建的宏,但这种尝试创建在Obj-C和C上下文中工作的自定义日志函数的类比说明了这一点:

#define Log(_s, ...) do { \ 


/* obviously this won't work as written, */\
/* but it's what i'm trying to accomplish: */\

#if (self && _cmd) /*  \
    LogObjectiveC(_s, ##__VA_ARGS__);  \
#else \
    LogC(_s, ##__VA_ARGS__); \
#endif \
} while (0)
在本例中,我们尝试合并两个宏,它们的使用取决于它们的定义位置。(
LogObjectiveC
在Obj-C方法中使用,而
LogC
在C函数中使用


是否可以检查宏定义中是否存在“隐藏”参数(
self
\u cmd
)?

这是不可能的,因为方法、函数和参数在宏展开时不存在。在编译器对代码执行任何操作之前,预处理器会展开宏


我想的最接近的是在运行时检查< C++ >函数>代码>,看看它是从“+”或“-[”开始的,因为所有Objy-C方法都从其中之一开始,没有合法的C或C++函数。

< P>我把恰克·巴斯的答案标记为正确答案,谢谢回答。
在又搜索了15分钟后,我无意中发现了这个重复的问题:(这实际上与@Chuck的建议是一致的)

但是即使你检查
\uuuu func\uu
是否以
+[
开头-[
,您不能有条件地检查
cmd
的值——如果该变量不在范围内,您仍然会得到语法错误。