C 为什么是;“静态”;忽略?

C 为什么是;“静态”;忽略?,c,C,我在全局中声明一个静态枚举。但Visual Studio给出了警告: 警告C4091:“静态”:未声明变量时忽略“RetType”左侧的 为什么它会忽略“static”?因为它是一个枚举定义,所以将它设置为static是没有意义的。您可能打算这样做: static enum RetType { SET_SUCCESS=0, SET_ET_ERROR = -1, SET_CBL_ERROR = -2, SET_SEN

我在全局中声明一个静态枚举。但Visual Studio给出了警告:

警告C4091:“静态”:未声明变量时忽略“RetType”左侧的


为什么它会忽略“static”?

因为它是一个枚举定义,所以将它设置为static是没有意义的。您可能打算这样做:

 static enum RetType
        {
        SET_SUCCESS=0,
        SET_ET_ERROR = -1,
        SET_CBL_ERROR = -2,
        SET_SEN_ERROR = -3,
        SET_TAR_ERROR = -4,
        SET_ENG_ERROR = -5,
        SET_IO_ERROR = -6
        };

enum RetType ret = SET_SUCCESS;

正如其他人提到的,static只能与变量(或函数)一起使用。基本上,“static”关键字用于在进程内存的数据部分(而不是堆栈上)声明变量。在本例中,您将
RetType
全局定义为一个类型(而不是变量或函数)。因此,在您的情况下,您必须:

typedef enum 
{
  SET_SUCCESS   =  0,
  SET_ET_ERROR  = -1,
  SET_CBL_ERROR = -2,
  SET_SEN_ERROR = -3,
  SET_TAR_ERROR = -4,
  SET_ENG_ERROR = -5,
  SET_IO_ERROR  = -6,
} RetType;

...

static RetType ret = SET_SUCCESS;

如果要静态声明
ret
。这里,
ret
属于类型
RetType
,它出现在.data部分中。

因为您只能将变量设置为静态,而不是类型本身。因为静态在该上下文中是不相关/冗余的。通常,设置为statisc的变量会自动分配给值0。警告告诉您:当未声明变量时。
static
是一个存储类:它们不适用于枚举定义(也不适用于结构或联合定义)未分配存储的地方。@barbaros-我不确定您在这里要完成什么:只有当编译单元可以看到
enum
类型定义时,它才有用。如果您不想让其他一些dot-c文件知道枚举,那么请确保它不在它包含的任何头文件中。你想用这种“隐藏”来达到什么目的?
enum RetType
        {
        SET_SUCCESS=0,
        SET_ET_ERROR = -1,
        SET_CBL_ERROR = -2,
        SET_SEN_ERROR = -3,
        SET_TAR_ERROR = -4,
        SET_ENG_ERROR = -5,
        SET_IO_ERROR = -6
        };
static enum RetType ret = SET_SUCCESS;