相关疑难解决方法(0)

究竟什么是"假设"规则?

正如标题所说,

究竟什么是"假设"规则?

一个典型的答案是:

允许任何和所有代码转换不会改变程序的可观察行为的规则

我们会不时地从某些实现中获取行为,这些行为归因于此规则.好多次错了.那么,这个规则究竟是什么呢.标准没有明确地将此规则作为一个部分或段落提及,那么究竟什么属于这条规则的范围?对我来说,这似乎是一个灰色区域,标准没有详细定义.有人可以根据标准的参考资料详细说明细节.

注意:将其标记为C和C++,因为它与两种语言都相关.

c c++ optimization c++-faq as-if

83
推荐指数
2
解决办法
7359
查看次数

什么是在C++中实现无操作语句的可移植方式?

有一段时间,需要在C++中使用无操作语句.例如,当实现assert()在非调试配置中禁用时(也请参阅此问题):

#ifdef _DEBUG
#define assert(x) if( !x ) { \
                     ThrowExcepion(__FILE__, __LINE__);\
                  } else {\
                     //noop here \
                  }
#else
#define assert(x) //noop here
#endif
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的印象是正确的方法是(void)0;用于无操作:

(void)0;
Run Code Online (Sandbox Code Playgroud)

但是我怀疑它可能会在某些编译器上触发警告 - 类似于C4555: expression has no effect; expected expression with side-effectVisual C++警告,这种情况不是针对这种特殊情况发出的,而是在没有强制转换时发出的void.

它普遍便携吗?有没有更好的办法?

c++ no-op

26
推荐指数
6
解决办法
3万
查看次数

内联asm是ANSI C标准的一部分吗?

我一直认为这是因为许多IDE和语法突出显示工具没有在C中突出显示ASM,但它们总是使用C++.内联汇编是否是C标准(ANSII或ISO)的一部分?

c c++ inline-assembly

8
推荐指数
1
解决办法
3649
查看次数

标签 统计

c++ ×3

c ×2

as-if ×1

c++-faq ×1

inline-assembly ×1

no-op ×1

optimization ×1