1
我想使用一个assert宏,这个宏包含用于ObjC方法的NSAssert
以及用于C函数内部的普通assert
(或其他)。如何确定我在Obj-C方法内执行?
是否有一种干净的方式来检测我目前在ObjC方法中执行的运行时(或更好的编译时!)?
我知道self
和_cmd
将在方法中定义和有效,但我不确定是否有明显的方法来安全地检查局部变量的存在。我忘了一些明显的东西吗?
我想使用一个assert宏,这个宏包含用于ObjC方法的NSAssert
以及用于C函数内部的普通assert
(或其他)。如何确定我在Obj-C方法内执行?
是否有一种干净的方式来检测我目前在ObjC方法中执行的运行时(或更好的编译时!)?
我知道self
和_cmd
将在方法中定义和有效,但我不确定是否有明显的方法来安全地检查局部变量的存在。我忘了一些明显的东西吗?
也许您可以使用标准的预定义宏来测试该文件是否由objective-c编译器编译。
//in the header file
#define MyAssert(A) NSAssert(A) assert(A)
//in the C file
#if !defined(__OBJC__)
#define NSAssert(A)
//in the Obj-C file
#if defined(__OBJC__)
#define assert(A)
/**/
f()
{
//...
MyAssert(TestCase && "Error Message");
//...
}
这不会捕获与.m文件混合的纯C函数,但足够公平;这似乎是最好的可用方法。谢谢。 –
在编译时如何工作?也许我误解了这个问题? –
@JustinMeiners:不知道,也许llvm/clang预处理器奇迹般地产生了一些常量,这些常量在方法内部定义,但在其他地方没有定义? –
它看起来像你有一个Obj-C和C文件的混合物,对吗?假设在Obj-C方法中使用'NSAssert'时,在C函数中使用'assert'时,是否不正确? – Davyd