pin*_*ker 5 objective-c extern
您正在查看一些Objective-C代码,并发现以下声明:
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
这意味着什么?那么,这个陈述的语法应该是什么?
提前致谢
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
Run Code Online (Sandbox Code Playgroud)
因此,即使上述声明包含在C++源文件中,也会阻止"C++名称重整",例如:
对于纯C代码,您可以删除OBJC_EXTERN,因为extern
函数声明中不需要关键字.
NS_FORMAT_FUNCTION 被定义为
#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))
Run Code Online (Sandbox Code Playgroud)
并且__attribute__((format(...)))是一个GCC特定的扩展,Clang也理解:
它允许编译器根据格式字符串检查变量参数列表的数量和类型.例如
CLSLog(@"%s", 123);
Run Code Online (Sandbox Code Playgroud)
会导致编译器警告,因为它%s是字符串的占位符,但是123是整数.
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |