0

我有一个较旧的 c 项目,它使用了许多变量名,导致它无法在 c++ 中编译newthis等等。

所以为了尝试看看我是否可以编译它,我已经这样做了:

  1. 新的空 C++ 项目
  2. 添加了一个新类,重命名了文件.c(下面的代码)
  3. 清空头文件
  4. 项目属性->C/C++->高级->编译为=编译为C代码(/TC)

测试.c:

#include "Test.h"

int test()
{
    int new = 123;
    return new;
}

但它仍然抱怨new,所以它没有将它编译为纯 C。我错过了什么?

编辑

我知道new,this等是c++. 但是我试图将其编译为c并且我试图避免在大型项目中重命名。如果我告诉它编译为c,为什么它仍然强制执行这些保留名称?

4

3 回答 3

2

在这里查看答案:

https://stackoverflow.com/a/5770919/1191089

有一些额外的标志可以禁用可能适用的 Microsoft 扩展。

我知道它不能回答问题,但您可能会发现更改变量名称的工作量更少,对名为“this”和“new”的变量进行搜索和替换只需 5 分钟。

于 2013-04-02T10:15:22.577 回答
1

new是用于分配内存的保留标识符,如

int* i = new int(123);

你不能使用它。为您的变量切换到另一个名称,例如

#include "Test.h"

int test()
{
    int i = 123;
    return i;
}

C++ 的保留字可以方便地分成几组。在第一组中,我们将那些也存在于 C 编程语言中并已被转移到 C++ 中的内容。其中有 32 个,它们是:

auto   const     double  float  int       short   struct   unsigned
break  continue  else    for    long      signed  switch   void
case   default   enum    goto   register  sizeof  typedef  volatile
char   do        extern  if     return    static  union    while

还有另外 30 个保留字不在 C 中,因此对 C++ 来说是新的,它们是:

asm         dynamic_cast  namespace  reinterpret_cast  try
bool        explicit      new        static_cast       typeid
catch       false         operator   template          typename
class       friend        private    this              using
const_cast  inline        public     throw             virtual
delete      mutable       protected  true              wchar_t

取自这里

于 2013-04-02T10:07:27.020 回答
0

您没有将 C 源代码编译为 C 代码,您需要将代码迁移到 C++,这涉及替换变量的名称,这些变量在 C++ 中用作关键字。

于 2013-04-02T11:14:51.433 回答