OBJC_EXTERN:目的是什么?

 yeeling610 发布于 2023-02-08 14:22

您正在查看一些Objective-C代码,并发现以下声明:

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

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

提前致谢

1 个回答
  • 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++源代码中,extern"C"的作用是什么?

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


    NS_FORMAT_FUNCTION 被定义为

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

    并且__attribute__((format(...)))是一个GCC特定的扩展,Clang也理解:

    http://clang.llvm.org/docs/LanguageExtensions.html#format-string-checking

    http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

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

    CLSLog(@"%s", 123);
    

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

    2023-02-08 14:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有