I\'m getting \"error: expected \'}\'\"
where the \'^\' is pointing when I compile in the following C++ source:
typedef enum { false, true } Boolean;
false
and true
are C++ keywords, so you can't use them as enum
identifiers.
In C they are not keywords so your code will work, but if you include <stdbool.h>
then it will fail to compile because that header defines false
and true
as macros.
Note that you probably shouldn't implement a boolean type yourself. C++ already has the bool
type, and if you are using a C99 compiler, you can include stdbool.h
. This will give you a bool
type that has false
and true
values, similar to C++.
To solve this you need to do:
#ifdef __cplusplus
typedef bool Boolean;
#else
typedef enum { false, true } Boolean;
#endif
That way, you are not trying to use C++ keywords (true
and false
) in an enum
.
The true
and false
are keywords in C++. You cannot use them in enum identifiers.
As it is said in the standard :
2.12 Keywords [lex.key]
The identifiers shown in Table 4 are reserved for use as keywords (that is, they are unconditionally treated as keywords in phase 7) except in an attribute-token.
In table 4:
false ... true
In C, they are not keywords, your code should work but the best should be to include <stdbool.h>
who already defines true
and false
then you don't need to define them by yourself.