2012-11-26 21 views
1

我想使用一个assert宏,这个宏包含用于ObjC方法的NSAssert以及用于C函数内部的普通assert(或其他)。如何确定我在Obj-C方法内执行?

是否有一种干净的方式来检测我目前在ObjC方法中执行的运行时(或更好的编译时!)?

我知道self_cmd将在方法中定义和有效,但我不确定是否有明显的方法来安全地检查局部变量的存在。我忘了一些明显的东西吗?

+0

在编译时如何工作?也许我误解了这个问题? –

+0

@JustinMeiners:不知道,也许llvm/clang预处理器奇迹般地产生了一些常量,这些常量在方法内部定义,但在其他地方没有定义? –

+0

它看起来像你有一个Obj-C和C文件的混合物,对吗?假设在Obj-C方法中使用'NSAssert'时,在C函数中使用'assert'时,是否不正确? – Davyd

回答

0

也许您可以使用标准的预定义宏来测试该文件是否由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"); 
//... 
} 
+0

这不会捕获与.m文件混合的纯C函数,但足够公平;这似乎是最好的可用方法。谢谢。 –