为什么函数允许变量名和数据类型名,但关键字不允许

Why variable name and datatype name is allowed with function but not with keyword?

本文关键字:关键字 不允许 数据类型 函数 变量名 为什么      更新时间:2023-10-16

以前我们使用malloc进行动态内存分配,

struct node* node = (struct node*) malloc(sizeof(struct node));

它工作正常。

在进行重构时,我将其更改为,

struct node* node = new node;

它给了我错误,

错误

1 错误 C2061:语法错误:标识符"节点"

为什么相同的变量node名称适用于函数(malloc),而不适用于(新)。

我正在使用Visual Studio 2012。

问题是:

struct node* node = new node;
             ^^^^

一旦编译器看到带下划线的部分,令牌node就会引用该变量。所以当它处理new node时,它是new name_of_a_variable没有意义的。要解决此问题,您可以将变量称为其他名称(无论如何,这是一个好主意)。

malloc 版本没有问题,因为您从不单独使用 node,您始终使用 struct node 它明确是一个类型名称。

确认另一个答案(说是使用关键字 struct使malloc示例能够编译),该程序使用 C++14 编译并在 https://ideone.com 上运行:

#include <iostream>
struct node { int x; };
int main()
{
  struct node* node = new struct node;
  node->x = 1;
  std::cout << node->x << std::endl;
  return 0;
}

因此,struct node您可以在具体的例子。 这确实是相同的问题和解决方案无论您将nodenew一起使用还是与malloc一起使用.

但正如已经指出的,最好为您的类型和变量选择不同的名称。