我想使用一个断言宏,它既NSAssert
包含 ObjC 方法,又assert
包含 C 函数内部的普通(或其他东西)。
有没有一种干净的方法可以在运行时(或者更好的是,编译时!)检测我当前在 ObjC 方法中执行的操作?
我知道这一点,self
并且_cmd
将在一个方法中定义和有效,但我不确定是否有一种明显的方法可以安全地检查局部变量的存在。我忘记了一些明显的事情吗?
我想使用一个断言宏,它既NSAssert
包含 ObjC 方法,又assert
包含 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");
//...
}