您正在查看一些Objective-C代码并找到以下声明:
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
这意味着什么? 那么,这个陈述的语法应该是什么?
提前致谢
答案 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
是一个整数。