【问题标题】:Convention to define global const map定义全局常量映射的约定
【发布时间】:2013-06-03 14:57:39
【问题描述】:

目前我做以下事情:

parser.h

typedef enum {
    FIN = 0x80,
    RSV1 = 0x40
} WS_FLAGS;

parser.c

int main() {
    return WS_FLAGS.FIN;
}

定义全局常量映射的惯例是什么?

例如,我更喜欢这样的东西:

int main() {
    return WS_FIN;
}

博多

【问题讨论】:

    标签: c map enums constants c-preprocessor


    【解决方案1】:

    在 C 中,FIN 未定义为 WS_FLAGS 的本地定义。它不同于 C# 等其他语言。

    我不知道这是否是一种约定,但由于您不能在 C 中声明命名空间,因此它通常会在我的枚举声明之前加上一些让人想起枚举名称的名称:

    typedef enum {
        WS_FLAG_FIN = 0x80,
        WS_FLAG_RSV1 = 0x40
    } WS_FLAGS;
    

    typedef enum {
        WS_FIN = 0x80,
        WS_RSV1 = 0x40
    } WS_FLAGS;
    

    ...所以WS_FIN 不太可能与任何其他something_FIN 声明发生冲突。

    然后,在您的主要内容中,您只需通过以下方式调用 I:

    int main()
    {
        return WS_FLAG_FIN;
    }
    

    【讨论】:

    • 以及如何从另一个文件调用 WS_FLAG_FIN
    • 您必须在使用WS_FLAGS 的每个C 文件中包含parser.h。你打电话给WS_FLAG_FIN 只是写WS_FLAG_FIN,而不是WS_FLAGS.WS_FLAG_FINWS_FLAGS.FIN。这不是 C 的工作方式。
    【解决方案2】:

    查看枚举,如#define

    如果你写:

    typedef enum {
        FIN = 0x80,
        RSV1 = 0x40
    } WS_FLAGS;
    

    然后你必须写:

    int   main()
    {
       return FIN;
    }
    

    您可以像这样使用枚举作为参数:

    int  foo(WS_FLAGS flag)
    {
        return flag;
    }
    
    int  main()
    {
        return foo(FIN); // return FIN
    } 
    

    【讨论】:

      猜你喜欢
      • 2016-05-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多