Tag: 挥发性

崩溃线程*(int *)NULL = 1; 有问题?

我在multithreadingc应用程序中发现了这一点。 作者评论说它用于在自定义断言函数中使线程崩溃。 海湾合作委员会对它很好,但是clang发出以下警告: note: consider using __builtin_trap() or qualifying pointer with ‘volatile’ 并且对于assert函数的每次使用,还会发出其中一个: warning: indirection of non-volatile null pointer will be deleted, not trap 这里发生了什么? __builtin_trap特定于clang? 我应该用吗?

为什么“volatileQualifiedExpr + volatileQualifiedExpr”不一定是C中的UB而是C ++中的UB?

当我今天阅读C标准时,它说的是副作用 访问易失性对象,修改对象,修改文件或调用执行任何这些操作的函数都是副作用 和C ++标准说 访问由volatile glvalue(3.10)指定的对象,修改对象,调用库I / O函数或调用执行任何这些操作的函数都是副作用 因此,因为禁止在同一个标​​量对象上发生无序的副作用,C允许以下内容,但C ++使其成为未定义的行为 int a = 0; volatile int *pa = &a; int b = *pa + *pa; 我正确地阅读了规格吗? 如果出现差异,原因是什么?

什么 – 或做 – “挥发性无效function(……)”做什么?

从语法的角度来看,我已经看过“volatile”关键字在C ++函数中有多少用法? 关于在函数上使用volatile关键字,但没有明确解释该问题的案例1做了什么。 只有一位受访者表示这似乎毫无意义/无用。 然而,我不能完全接受这种说法,因为GNUC的AES软件实现已经使用了几年,它们有许多这样的function: INLINE volatile void functionname( /* … */ ) { /* … */ asm( /* … */ ) // embedded assembly statements /* … */ } 必须有这种用法的原因。 谁能: A. 告诉我原来的原因是什么; 和 B。 现在如何达到预期的效果? 我正在使用Ubuntu和GCC 4.6.3。 注意:我最接近解释的是,在GCC 2.5之前,您可以通过以下方式欺骗在2.5中实现的’noreturn’属性: void fatal( /* … */ ) { /* … */ exit(1); } typedef void […]