- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想将所有结构成员初始化为 0。常见的解决方案是做这样的事情:
struct foo bar = {0}
我创建了这个例子:
#include <stdio.h>
struct Stru2 {
int c;
int d;
};
struct Stru1 {
int a;
Stru2 b;
};
int main()
{
struct Stru1 aaa = { 0 };
return aaa.b.c;
}
然后我用这个参数编译(gcc 4.6.3)它,以确保 ANSI 如何处理这个
gcc -Wall -Wextra -pedantic -ansi main.cpp
我收到以下警告:
main.cpp: In function ‘int main()’:
main.cpp:36:28: warning: missing initializer for member ‘Stru1::b’ [-Wmissing-field-initializers]
问题是,为什么 -Wextra 会产生这个警告?也许不总是“= {0}”,将所有成员设置为0?
最佳答案
这只是一个保姆警告.. = {0}
肯定会将所有成员设置为零。将它作为警告包含在内的原因是您可能会向结构中添加一个字段并且您希望确保它被正确初始化。收到警告可以让您快速找到这些地方并修复它们。例如,假设您修复了一个类似于以下内容的初始化程序:
struct Stru1 aaa = { 1, { 2, 3 } };
现在,添加一个字段int e
到Stru2
:
struct Stru2 {
int c;
int d;
int e;
};
让我们假设 e
的初始化非常重要。好吧,如果没有 -Wmissing-field-initializers
,您将不得不在您的代码中四处寻找以找到您关心的每个地方。有了警告,您会收到一条诊断消息,就像您看到的那样,您可以很容易地找到并修复它们:
struct Stru1 aaa = { 1, { 2, 3, 4 } };
不过,要利用此警告,您必须完成并完全初始化所有结构。在您的情况下,这意味着:
struct Stru1 aaa = { 0, { 0, 0 } };
关于c++ - 将结构成员初始化为 0 (gcc -Wextra),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238635/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!