【问题标题】:Objective-C coding style - #import or #define at the top of the fileObjective-C 编码风格 - #import 或 #define 在文件的顶部
【发布时间】:2011-11-20 17:51:09
【问题描述】:

我有一个关于 Objective C 的一般编码风格问题。

当我在文件中有#define 时,我将它直接放在#import 代码行的下方和@implementation 代码行的上方:

#import "MyLibrary.h"

#define myConstant 99

@implementation MyClass

这是标准风格,还是有标准风格的地方放定义?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    您应该始终将#defines 放在任何导入之后。否则,您将使用您的 #define 值污染导入的文件,并且在极端情况下会更改它们的工作方式。

    【讨论】:

    • +1 想象#define title AwesomeSauce,然后是#import <AppKit/AppKit.h>。现在每次调用-[NSWindow title] 都会被编译为-[NSWindow AwesomeSauce],这会产生很多错误。规则:先导入,然后定义任何点。
    • @DaveDeLong:即使定义是在导入 AppKit 之后,你自己的代码中仍然会遇到同样的问题。
    【解决方案2】:

    Objective-C 并没有真正使用定义来定义常量。

    但是可以像你一样做,因为 Objective-C 向后兼容 C。

    这就是我在 Objective-C 中的头文件中的做法:

    extern int const MyConstant;
    

    在实现文件中:

    int const MyConstant = 99;
    

    【讨论】:

    • 有趣,但使用#define 似乎更容易一些,有什么理由不使用它吗?
    • 不,没有理由不使用它。有时它甚至更方便,因为预编译器会替换所有引用。
    • 如需更多类似建议,请查看Apple docsextern const 用于浮点数/无关整数,enum 用于相关整数
    • 不使用#define 会更方便,因为您可以在 xcode 中自动完成。此外,如果您将 typedef 枚举用于整数常量,您可以将它们传递给方法并将值限制为枚举中的值
    【解决方案3】:

    我从未见过这方面的任何标准。 #defines 几乎总是在文件的顶部(在#imports 之后),但位置并不重要。

    【讨论】:

    • 查看 cmets 关于 Gil 的回答... #define before #import 可能是一个巨大问题。
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多