Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用无符号整型位字段结构时出错_C_Struct_Bit Fields - Fatal编程技术网

在C中使用无符号整型位字段结构时出错

在C中使用无符号整型位字段结构时出错,c,struct,bit-fields,C,Struct,Bit Fields,我将struct与unsigned int位字段完美地结合使用,但在复制了其中一个字段后,编译器突然失去了理智(似乎是这样)。这是我的密码: typedef struct myStruct { unsigned int myVar:1; } myStruct; // my compiler requires TWO declarations of the name for typedef myStruct myNewStructVar; myNewStructVar.myVar =

我将
struct
unsigned int
位字段完美地结合使用,但在复制了其中一个字段后,编译器突然失去了理智(似乎是这样)。这是我的密码:

typedef struct myStruct {
    unsigned int myVar:1;
} myStruct; // my compiler requires TWO declarations of the name for typedef

myStruct myNewStructVar;

myNewStructVar.myVar = 0; // throws error that "myNewStructVar" is unknown to the compiler

有什么好处?同样,我有两个版本的这个确切的东西,它工作得很好

您可以将变量声明为函数范围外的全局变量,但不能使用单独的代码行来设置其值。在单独的行上设置值是可执行代码,而不是初始化,因此不允许在该行中进行设置

如果要在声明时对其进行初始化,请尝试:

myStruct myNewStructVar = {0};

这应该适用于现在的情况。

您可以将变量声明为函数范围之外的全局变量,但不能使用单独的代码行来设置其值。在单独的行上设置值是可执行代码,而不是初始化,因此不允许在该行中进行设置

如果要在声明时对其进行初始化,请尝试:

myStruct myNewStructVar = {0};

这应该可以在现在的位置工作。

您的代码在MSVS2010中运行良好。你的编译器是什么?C89用于微芯片,在使用C89的Xcode中出现同样的错误。Xcode抛出“未知类型名”错误。所以也许有人可以回答这个问题,它不允许我在方法之外的变量声明区域中这样做。然而,在一种方法中,它工作得很好。天哪!“方法”?你是说C、C++还是别的什么?对不起,我在做C++而不是C++。不在使用点表示法的方法之外赋值是标准的。我被++宠坏了:)您的代码在MSVS2010中运行良好。你的编译器是什么?C89用于微芯片,在使用C89的Xcode中出现同样的错误。Xcode抛出“未知类型名”错误。所以也许有人可以回答这个问题,它不允许我在方法之外的变量声明区域中这样做。然而,在一种方法中,它工作得很好。天哪!“方法”?你是说C、C++还是别的什么?对不起,我在做C++而不是C++。不在使用点表示法的方法之外赋值是标准的。我被++宠坏了:)