- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
一旦我学会了信号,就会有一个处理信号的 list 。
有一个 struct sigaction
,它是第一个 memset()
到所有字节为零的以下行:
memset(&sa, 0, sizeof(sa));
而且我不确定作者为什么使用这种方法。
最佳答案
如前所述,尝试从结构的未初始化成员中读取值会导致未定义的行为。那是无条件的坏。因此,您有责任确保所有字段在读取之前都已初始化。
如果您知道结构的所有元素并打算显式初始化它们,则不需要 memset()
。如果结构在您的控制之下,这是可管理的——您只需要记住确保在向结构添加新成员时更新所有初始化发生的地方。如果您编写一个函数来执行此操作(想想“C++ 构造函数的 C 模拟”,初步近似),则可以省略 memset()
。如果您在许多地方临时设置值,那么如果结构发生变化,您可能会遇到问题。
在类似 struct sigaction
的情况下,它来自系统定义的 header ,不同的系统可以(并且确实)向结构添加额外的字段——超出您计划的字段初始化。请注意,POSIX 仅指定必须存在的字段;它不规定字段的顺序,也不强制结构中没有其他字段。但是,使用结构的额外(非 POSIX)元素的函数不应该这样做,除非用户指示这些成员已初始化,通常带有一些显式标志,所以你不应该遇到问题 - 但它更安全比抱歉。
因此,在您无法控制结构的上下文中,memset()
方法很容易防御:它保证将所有结构归零,甚至是您不想要的位不知道 — 即使结构定义在编写代码后发生变化(增长)。
您可以使用 struct sigaction sa = { 0 };
或 struct sigaction *sap = calloc(sizeof(*sap), 1);
归零相反,结构 — 它部分取决于您使用的一组编译器选项的挑剔程度(以及您使用的编译器版本;例如,GCC 随着时间的推移改变了它的行为)。
您可能想要查找 POSIX 标准中的宏,例如 PTHREAD_MUTEX_INITIALIZER
— 或者您可能更愿意完全忽略它们的存在。
关于c - 在使用之前对结构进行 memset 是一种很好的风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105736/
我正在寻找一种使此打印 HTML 代码 fragment 向后兼容旧 Android 版本的简单方法: @TargetApi(Build.VERSION_CODES.KITKAT) private v
我在 GCC 终端 (centos linux) 中为 ATM 项目编译以下 c 和 .h 代码时收到以下错误。请帮忙,因为我是编程新手。 validate_acc.h #ifndef _VALIDA
在写关于 SO 的不同问题的答案时,我制作了这个片段: @import url('https://fonts.googleapis.com/css?family=Shadows+Into+Light'
试图弄清楚我应该如何在 my_div_class 之前放置一个 span 而不是替换所有它。现在它取代了 div,但我不想这样做。我假设它类似于 :before 但不知道如何使用它。 { va
我正在使用选择库 http://github.hubspot.com/select/和 noUiSlider https://refreshless.com/nouislider/ .我面临的问题如下
我是开发新手,独自工作。我正在使用 Xcode 和 git 版本控制。可能我没有适本地组织和做错事,但我通常决定做 promise 只是为了在我破坏一切之前做出安全点。在那一刻,我发现很难恰本地描述我
我想确保在同一个桶和键上读取和写入时,应该更新获取的值,也就是说,应该在对其进行写入操作之后获取它。我怎样才能做到这一点? 我想要的是,如果我更新一个键的值,如果我同时使用不同线程获取值,则更新同一个
我的问题与this有关问题,已经有了答案: yes, there is a happens-before relationship imposed between actionsof the thre
The before and after hook documentation on Relish仅显示 before(:suite) 在 before(:all) 之前调用。 我什么时候应该使用其中
我有 CSV 行,我想在其中检测所有内部双引号,没有文本限定符。这几乎可以正常工作,但我的正则表达式还可以检测双引号后的字符。 CSV 部分: "7580";"Lorem ipsum";"";"Lor
是否可以通过Youtube数据API检查广告是否可以与特定视频一起显示? 我了解contentDetails.licensedContent仅显示视频是否已上传至同一伙伴然后由其声明版权。由于第三者权
考虑一下用漂亮的彩色图表描述的“像素管道” https://developers.google.com/web/fundamentals/performance/rendering/ 我有一个元素(比
之前?
在 MVC3 中,我可以轻松地将 jQuery 脚本标签移动到页面底部“_Layout.vbhtml” 但是,在 ASP.NET MVC3 中,当您使用编辑器模板创建 Controller 时,脚手
悬停时内容被替换,但是当鼠标离开元素时我希望它变回来。我该怎么做? $('.img-wrap').hover(function(){ $(this).find('h4').text('Go
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码以重现该问题。
版本:qwt 6.0.1我尝试开发频谱的对数缩放。我使用简单的线条来启用缩放plotspectrum->setAxisScaleEngine(QwtPlot::yLeft, new QwtLog10S
我有两个相同的表,I_Subject 和 I_Temp_Subject,我想将 Temp_Subject 表复制到 Subject 表。 I_Temp_Subject 由简单用户使用,I_Subjec
我的印象是第一次绘制发生在触发 DOMContentLoaded 事件之后。特别是,因为我认为为了让第一次绘制发生,需要渲染树,它依赖于 DOM 构造。另外,我知道 DOM 构造完成时会触发 DOMC
我是一名优秀的程序员,十分优秀!