OBJC_EXTERN:目的是什么?

时间:2013-12-23 15:38:44

标签: objective-c extern

您正在查看一些Objective-C代码并找到以下声明:

OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);

这意味着什么? 那么,这个陈述的语法应该是什么?

提前致谢

1 个答案:

答案 0 :(得分:5)

OBJC_EXTERN<objc/objc-api.h>中定义为

#if !defined(OBJC_EXTERN)
#   if defined(__cplusplus)
#       define OBJC_EXTERN extern "C" 
#   else
#       define OBJC_EXTERN extern
#   endif
#endif

因此即使上述声明是,也会阻止“C ++名称重整” 包含在C ++源文件中,例如:

对于纯C代码,您只需删除OBJC_EXTERN,因为extern 函数声明中不需要关键字。


NS_FORMAT_FUNCTION定义为

#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))

__attribute__((format(...)))是GCC特定的扩展,也是理解的 作者:Clang:

它允许编译器检查变量参数列表的数量和类型 对格式字符串。例如

CLSLog(@"%s", 123);

会导致编译器警告,因为%s是字符串的占位符, 但是123是一个整数。