【问题标题】:Android ndk build: Specifying warning level for both C and C++Android ndk build:为 C 和 C++ 指定警告级别
【发布时间】: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 文件指定警告级别的正确方法吗? 奖励问题:有没有办法使用简单的变量为CC++ 指定警告级别(以避免重复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 += -Wall qmake 选项使用 QTCreator 编译的相同代码报告 C 文件的警告...
  • 为什么 C 编译器默认警告完全有效的代码? C 和 C++ 是不同的语言;期望它们的行为即使对于相同的语法也一样是一个非常糟糕的主意

标签: c++ android-ndk gcc-warning ndk-build


【解决方案1】:

根据 GCC 文档的 3.8 Options to Request or Suppress Warnings 部分,-Wall 仅对 C++ 代码启用 -Wsign-compare。 Fo C 代码你要么需要使用-Wextra,要么显式启用-Wsign-compare

额外问题:有没有办法为 C 和 C++ 指定警告级别

是的,LOCAL_CFLAGS 适用于 C 和 C++ 代码。 (source)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2014-01-10
    相关资源
    最近更新 更多