Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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_Xc8 - Fatal编程技术网

C 初始化联合/结构的正确方法是什么?

C 初始化联合/结构的正确方法是什么?,c,xc8,C,Xc8,我有以下工会: typedef union { struct { uint8_t LSB; uint8_t MSB; }; int16_t complete; }uint16ByteT; 知道我想使用我的类型并初始化变量。扫描之后,我(我认为)找到了解决方案: uint16ByteT myVariable = {0}; 但是我的编译器给了我一条错误消息: “@”所需的简单类型 通常,xc8编译器使用“@”将变量带到

我有以下工会:

typedef union
{
    struct
    {
        uint8_t LSB;
        uint8_t MSB;
    };
    int16_t     complete;
}uint16ByteT;
知道我想使用我的类型并初始化变量。扫描之后,我(我认为)找到了解决方案:

uint16ByteT   myVariable  = {0};
但是我的编译器给了我一条错误消息:

“@”所需的简单类型


通常,xc8编译器使用“@”将变量带到特定地址。

要初始化匿名
结构
/
联合
,可以使用:

uint16ByteT myVariable = {{0}, .complete = 0};
或者干脆

uint16ByteT myVariable = {{0}};
注意
uint16字节
而不是
uint16字节


还请注意,由于此版本中引入了匿名
struct
s/
union
s,因此需要以C11模式编译。

uint16Byte
vs
uint16Byte
。如果这只是一个输入错误,那么错误似乎与显示的代码无关。您使用哪种编译器?用于“@”?你能逐字复制并粘贴错误信息吗?这将有助于使其成为a。这正是上面写的错误消息a,很抱歉输入错误。xc8似乎不支持C11:此编译器符合ISO/IEC 9899:1990编程语言标准。这通常称为C90标准。本手册中称为ANSI C标准。在这种情况下,您不能使用匿名
struct
s(使用内部匿名
struct
)问题中的初始值设定项应该同样适用于初始化为0。@FelixPalmen,也许足够了,但这样您就跳过了警告:
警告:(接近“myVariable”的初始化)。[-Wmissing brates]
是,一些编译器会显示这一点。但仍然与问题中的(相当模糊的)问题无关。OP应该澄清。@KeineLust:你可以让一个抱怨缺少大括号的编译器闭嘴,只需满足它的要求,比如:
…={{0}};在这种情况下