意外错误C2632:'char'后跟'char'是非法的

时间:2013-08-26 17:07:30

标签: visual-c++ compiler-errors

我有一段代码

    typedef unsigned char   _uint8;
    typedef unsigned short  _uint16;
    typedef unsigned int    _uint32;
    typedef float           _float32;

    typedef char            _int8;
    typedef short           _int16;
    typedef int             _int32;

我在最后三行的行中出现错误

错误消息是

错误C2632:'char'后跟'char'是非法的 错误C2632:'short'后跟'short'是非法的

错误C2632:'int'后跟'int'是非法的

2 个答案:

答案 0 :(得分:2)

在您的代码尝试之前,已经通过typedef(可能)或#define(更有可能)创建了这些类型;看看预处理器输出(如果可以使用Visual-C ++)可以帮助您找出原因。

答案 1 :(得分:2)

在C和C ++中,定义您自己的以下划线开头的标识符是非法的(调用未定义的行为)。只允许编译器和标准库使用以下划线开头的名称。似乎这些特定名称(_int8等)已被定义为宏或内在类型。

您必须选择不同的名称。

引用

从n1570§7.1.3,

  

所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。

     

...

     

如果程序在保留它的上下文中声明或定义标识符(除了7.1.4允许的标识符),或者将保留标识符定义为宏名称,则行为未定义。

因此,通过尝试定义类型_int8,您的程序将调用未定义的行为。 “未定义的行为”是一个技术术语,它意味着编译器使无保证:可能会收到错误消息,也许它会按预期工作,或者可能完全发生其他事情。也许没有错误信息,但你的程序将无法正常工作。

实施例

尝试在Visual Studio中编译以下代码...

int main()
{
    _int8 x = 1;
    return 0;
}

它编译...这意味着编译器已经在使用_int8来定义类型。它似乎是未记录的类型,因为MSDN搜索没有任何内容。但是,无论如何都不允许定义自己的_int8