【发布时间】:2017-04-14 15:03:59
【问题描述】:
我正在使用 ndk-build (r10e) 编译一个混合 C 和 C++ 文件的库。我的 mk 文件有几行:
LOCAL_CPPFLAGS += -Wall
LOCAL_CPPFLAGS += -Wno-unused-parameter
LOCAL_CFLAGS += -Wall
LOCAL_CFLAGS += -Wno-unused-parameter
但是,当我编译这段代码时:
void func2()
{
unsigned int size = 3;
int pos;
for ( pos = 0; pos != size; ++pos )
{
}
}
在 cpp 文件中,我收到了预期的警告:
file.cpp:4:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for ( int pos = 0; pos != size; ++pos )
在 c 文件中,我没有收到任何警告...
LOCAL_CFLAGS 不是为C 文件指定警告级别的正确方法吗?
奖励问题:有没有办法使用简单的变量为C 和C++ 指定警告级别(以避免重复LOCAL_CPPFLAGS/LOCAL_CFLAGS 行)?
【问题讨论】:
-
您是否考虑过 C 编译器可能根本不会针对此代码发出警告?您是否尝试过其他警告?只是一个想法。
-
LOCAL_CFLAGS适用于 C 和 C++ 代码,除非您使用的是旧版本的 NDK。 -
至少对于 GCC,
-Wall仅对 C++ 代码启用-Wsign-compare。对于 C 代码,您需要-Wextra(或-Wsign-compare)。 (见gcc.gnu.org/onlinedocs/gcc/Warning-Options.html) -
@JesperJuhl:使用
QMAKE_CXXFLAGS_WARN_ON += -Wallqmake 选项使用 QTCreator 编译的相同代码报告 C 文件的警告... -
为什么 C 编译器默认警告完全有效的代码? C 和 C++ 是不同的语言;期望它们的行为即使对于相同的语法也一样是一个非常糟糕的主意。
标签: c++ android-ndk gcc-warning ndk-build