Can't compile C in visual studio 2012

2019-09-16 00:15发布

I have an older c project that uses many variable names that cause it to not compile in c++, new, this etc.

So to try and see if I can get it compiling I have done this:

  1. New empty C++ project
  2. Added a new class, renamed the file .c (code below)
  3. Emptied the header file
  4. Project properties->C/C++->Advanced->Compile As = Compile as C Code (/TC)

Test.c:

#include "Test.h"

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

But it still complains about new, so it's not compiling it as pure C. What am I missing?

EDIT

I'm aware that new, this etc are reserved names in c++. But I am trying to compile this as c And I'm trying to avoid going though renaming in a massive project. If I tell it to compile as c, why does it still enforce these reserved names?

3条回答
倾城 Initia
2楼-- · 2019-09-16 00:57

new is a reserved identifier for assigning memory like in

int* i = new int(123);

You can't use it. Switch to another name for your variable, like

#include "Test.h"

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

The reserved words of C++ may be conveniently placed into several groups. In the first group we put those that were also present in the C programming language and have been carried over into C++. There are 32 of these, and here they are:

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

There are another 30 reserved words that were not in C, are therefore new to C++, and here they are:

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

taken from here.

查看更多
ら.Afraid
3楼-- · 2019-09-16 00:59

You are not compiling C sources as C code, you need to migrate the code to C++, which involves replacing names of variables, which are in c++ used as keywords.

查看更多
祖国的老花朵
4楼-- · 2019-09-16 01:01

See the answer here:

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

There are some additional flags to disable Microsoft extensions which might be applicable.

I know it doesn't answer the question, but you might find that it's less effort to change your variable names, a search and replace on variables called "this" and "new" will only take 5 minutes.

查看更多
登录 后发表回答