Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未使用值警告:C对C++;使用gcc 是否可以让GCC处理C的未使用的值警告,比如G++处理C++?对于p&&++*p C中有警告,但不是C++。设置-wno unused value并不是一个真正的解决方案,因为它还会删除有用的警告(如下面的第2行)。例如:_C++_C_Gcc_G++ - Fatal编程技术网

未使用值警告:C对C++;使用gcc 是否可以让GCC处理C的未使用的值警告,比如G++处理C++?对于p&&++*p C中有警告,但不是C++。设置-wno unused value并不是一个真正的解决方案,因为它还会删除有用的警告(如下面的第2行)。例如:

未使用值警告:C对C++;使用gcc 是否可以让GCC处理C的未使用的值警告,比如G++处理C++?对于p&&++*p C中有警告,但不是C++。设置-wno unused value并不是一个真正的解决方案,因为它还会删除有用的警告(如下面的第2行)。例如:,c++,c,gcc,g++,C++,C,Gcc,G++,$(gcc-version | head-1;ls-l qwe.*;cat qwe.x;echo$sep;gcc-c-O2-Wall qwe.c;echo$sep;g++-c-O2-Wall qwe.cc)2>&1 | sed's/^/' gcc (Debian 4.9.2-10) 4.9.2 lrwxrwxrwx 1 tml tml 5 Jul 23 10:12 qwe.c -> qwe.x lrwxrwxrwx 1 tml tml 5 Jul 23 10:12 qwe.cc

$(gcc-version | head-1;ls-l qwe.*;cat qwe.x;echo$sep;gcc-c-O2-Wall qwe.c;echo$sep;g++-c-O2-Wall qwe.cc)2>&1 | sed's/^/'

gcc (Debian 4.9.2-10) 4.9.2
lrwxrwxrwx 1 tml tml    5 Jul 23 10:12 qwe.c -> qwe.x
lrwxrwxrwx 1 tml tml    5 Jul 23 10:12 qwe.cc -> qwe.x
-rw-r--r-- 1 tml tml 1384 Jul 23 10:49 qwe.o
-rw-r--r-- 1 tml tml   55 Jul 23 10:49 qwe.x
void g(int *p) { p && ++*p; }
void f(int *p) { *p+5; }
-------------------------------------------
qwe.c: In function ‘g’:
qwe.c:1:20: warning: value computed is not used [-Wunused-value]
 void g(int *p) { p && ++*p; }
                    ^
qwe.c: In function ‘f’:
qwe.c:2:18: warning: statement with no effect [-Wunused-value]
 void f(int *p) { *p+5; }
                  ^
-------------------------------------------
qwe.cc: In function ‘void f(int*)’:
qwe.cc:2:20: warning: statement has no effect [-Wunused-value]
 void f(int *p) { *p+5; }
                    ^

可以通过将其强制转换为空来手动删除它们

void f(int *p) { (void)*p+5; }
但这些警告是有原因的。这些其实什么都没用。这里没有副作用。因此,调用此函数的结果与不调用此函数的结果相同


调用函数
f(&x)
可能会被一个合理的编译器完全优化掉。

gcc和g++基本上是同一个编译器,就编译时警告而言,不同之处在于C/C++。我对问题进行了编辑以反映这一点,如果您觉得我做得太过分,请随意回滚编辑。@EdHeal为了演示这个问题,有问题的代码很可能是一个MVCE。@marton-l-toth我认为我在测试中做错了什么。我删除了我的评论,直到我知道我测试了什么…如果你把代码改成
If(p)+*p,这会改变什么吗?@hyde:在这种情况下没有警告(当然,否则这个警告将完全无法使用:);但是——正如您在上面正确指出的那样——这只是一个简单的示例,有时(特别是在使用预处理器时)我想“保留它为表达式”。我怀疑他们想隐藏
p&++*p
,但他们提供了
*p+5
作为他们仍希望看到的警告示例