声明常量指针的最明确方法是什么?

Ben*_*hen 11 c pointers coding-style

我正在使用一对使用指针作为唯一键的函数.我想声明一个常量指针用作键.这样做最安全,最清晰的方法是什么?

这里有两种可能的方法,但两者都有缺点.

  1. 自引用指针:

    static const void * const propertyKey = &propertyKey;
    //...
    objc_getAssociatedObject(object, propertyKey);
    
    Run Code Online (Sandbox Code Playgroud)

    缺点:宣言长而可怕!很容易混淆那些不知道它是什么的人.好处:一旦你了解它的功能就很难用,它很容易使用.

  2. 应该引用的静态const:

    static const char propertyKey;
    //...
    objc_getAssociatedObject(object, &propertyKey);
    
    Run Code Online (Sandbox Code Playgroud)

    缺点:使用时必须引用变量而不是简单地使用变量,这很容易被忽略(但编译器应该将其指出为类型不匹配).如果声明被修改以便分配一个值,那么它可能会产生灾难性的影响,因为无法再保证指针的唯一性.好处:宣言更容易理解.

我不认为其中任何一个都是显而易见的.有更好的建议吗?

rra*_*rra 2

我也喜欢你的第一个想法。我就同意了。您的第二个想法存在编译器可能将多个变量折叠为一个的风险static const char,因为它们保证始终保留该值0,并且从编译器的角度来看,我不确定它们是否足够不同。我想不出比你的第一个想法更好的解决方案。

(从评论中的讨论中提取答案。)