【发布时间】: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