Tag: 语言的细节

为什么(void)0在C和C ++中没有任何操作?

我已经看到在glibc中debuggingprintf,如果定义了NDEBUG ,它在内部被定义为(void) 0 。 同样,Visual C ++编译器的__noop那里。 前者适用于GCC和VC ++编译器,后者仅适用于VC ++。 现在我们都知道,上述两个语句都将被视为无操作,并且不会生成相应的代码; 但是这里是我有疑问的地方。 在__noop情况下,MSDN表示这是编译器提供的内部函数。 来(void) 0 0〜为什么编译器解释为没有操作? 这是C语言的一个棘手的用法还是标准说明了一些关于它的意义? 或者甚至这与编译器实现有关?