【问题标题】:C struct initialization with macro value使用宏值初始化 C 结构体
【发布时间】:2019-07-17 09:18:55
【问题描述】:

我知道 C++ 并且正在学习 C。我想将 nullptr 定义为 NULL,但是当我使用方括号初始化结构时,它会导致错误并显示预期的“}”。我正在使用 Visual Studio 编译器,我的代码示例如下:

#define nullptr NULL;

typedef struct
{
    int data;
    struct Node* next;
} 
Node;

//works fine
Node myNode1;
myNode1.data = 1;
myNode1.next = nullptr;

//works fine
Node myNode2 = {1, NULL};

//error E0067   expected a '}'
Node myNode3 = {1, nullptr };

【问题讨论】:

  • 您在宏的末尾添加了一个分号。所以在预编译之后,最后一行实际上会变成Node myNode3 {1, NULL;};
  • 我想将 nullptr 定义为 NULL – 实现...什么?
  • 我不会在 C 中定义 nullptr,而只是使用 NULL。重新定义常见(标准)事物会使代码的可读性/可维护性降低。模仿另一种语言通常会使事情变得更糟。由于几乎没有任何理由更喜欢 C 而不是 C++(即使在嵌入式系统上),只需使用 C++ 而不是在 C 中模拟 C++。
  • @Erlkoenig 除了提到分号之外,你写的应该是 the 答案。
  • 附带说明 - 永远不要用小写字母定义宏名称。宏名通常使用大写字母,否则会使代码更难阅读,难以区分什么是宏和什么是变量。

标签: c visual-studio struct undefined-symbol


【解决方案1】:

nullptr 定义为

#define nullptr NULL

没有尾随 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2020-10-03
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多