当询问C中常见的未定义行为时,灵魂比我提到的严格别名规则更加开明.
他们在说什么?
如果我有这样的结构:
typedef struct
{
unsigned char c1;
unsigned char c2;
} myStruct;
Run Code Online (Sandbox Code Playgroud)
将此结构初始化为0的最简单方法是什么?以下是否足够?
myStruct _m1 = {0};
Run Code Online (Sandbox Code Playgroud)
或者我需要将每个成员显式初始化为0吗?
myStruct _m2 = {0,0};
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下语法将结构数组初始化为全0:
STRUCTA array[MAX] = {0};
Run Code Online (Sandbox Code Playgroud)
但是,我从gcc收到以下警告:
警告:初始化程序周围缺少大括号
我做错了什么 - 有另一种/更好的方法吗?
我维护遗留的 C 代码,在很多地方他们都有小数组,比如int a[32];后跟一个memset(a, 0, sizeof a);到零初始化它。
我正在考虑将其重构为int a[32] = {0};并删除 memset。
问题是:与调用 memset 相比,使用零初始值设定项是否会产生更快的代码?
这是什么char buf[MAXDATASIZE] = { 0 };的{0}手段?
试图将其打印出来,但它什么都没打印出来.
#include <stdio.h>
int main(void)
{
char buf[100] = { 0 };
printf("%s",buf);
return 0;
}
Run Code Online (Sandbox Code Playgroud)