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:
- New empty C++ project
- Added a new class, renamed the file
.c
(code below)
- Emptied the header file
- 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?
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.
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.
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.