相关疑难解决方法(0)

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

我在glibc中看到了debug printfs (void) 0,如果定义了NDEBUG,则内部定义为.同样__noop,Visual C++编译器也是如此.前者适用于GCC和VC++编译器,而后者仅适用于VC++.现在我们都知道上述两个语句都将被视为无操作,并且不会生成相应的代码; 但这是我怀疑的地方.

在这种情况下__noop,MSDN说它是编译器提供的内部函数.来(void) 0〜为什么编译器将其解释为没有操作?这是C语言的一个棘手的用法还是标准说明了它的明确性?或者甚至那与编译器实现有关?

c c++ compiler-construction language-details

48
推荐指数
2
解决办法
3万
查看次数

在C++中没有效果的语句有什么用?

在我使用的一个库中,我看到了这段代码:

template<typename T>
void f(SomeTemplatedClass<T> input)
{
    (void)input;
    ...
    use(input); // code that uses input
}
Run Code Online (Sandbox Code Playgroud)

我不知道这段代码的含义是什么.如果我将演员阵容移除为无效,我会得到一个

statement has no effect 
Run Code Online (Sandbox Code Playgroud)

gcc中的警告.所以我想有人故意这样做,故意添加演员以摆脱警告.

您是否对任何无效的陈述有任何经验,但由于某种原因需要它?

编辑:

假设这与模板无关,这是安全的吗?例如绕过旧的编译器错误等?

c++ templates

5
推荐指数
1
解决办法
728
查看次数