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

时间:2013-03-19 10:04:34

标签: c pointers coding-style

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

以下是两种可能的方法,但两者都有缺点。

  1. 自引用指针:

    static const void * const propertyKey = &propertyKey;
    //...
    objc_getAssociatedObject(object, propertyKey);
    

    下行:宣言长而可怕!很容易混淆那些不知道它是什么的人。 好处:一旦你明白它的作用就很难用,它很容易使用。

  2. 应引用的静态const:

    static const char propertyKey;
    //...
    objc_getAssociatedObject(object, &propertyKey);
    

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

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

2 个答案:

答案 0 :(得分:2)

我也喜欢你的第一个想法。我只想去那。你的第二个想法冒着编译器可能会将多个static const char变量合并为一个变量的风险,因为它们始终保持值0,并且从编译器的角度来看,我不是肯定的。足够明显。而且我想不出比你的第一个想法更好的解决方案。

(取消评论中的讨论答案。)

答案 1 :(得分:1)

3:指针设置为有意义但又独特的东西:

static const void *const key = "PropertyKey";