2017-04-14 66 views
-1

我正在用ndk-build(r10e)編譯混合C和C++文件的庫進行編譯。我的MK文件有行:Android ndk構建:爲C和C++指定警告級別

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) 

交流文件,我沒有得到任何警告...

是不是LOCAL_CFLAGS指定警告級別的正確方法C文件? 獎金問題:是否有方法使用簡單變量(避免重複行LOCAL_CPPFLAGS/LOCAL_CFLAGS)爲CC++指定警告級別?

+0

您是否認爲C編譯器可能根本不會警告此代碼?你有沒有嘗試過其他警告?只是一個想法。 –

+0

'LOCAL_CFLAGS'應用於C和C++代碼,除非您使用的是古老版本的NDK。 – Michael

+0

對於GCC來說,'-Wall'只能爲C++代碼啓用'-Wsign-compare'。對於C代碼,您需要'-Wextra'(或'-Wsign-compare')。 (請參閱https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html) – Michael

回答

2

根據GCC文檔的3.8 Options to Request or Suppress Warnings部分,-Wall僅對啓用C++代碼。使用Fo C代碼,您需要明確使用-Wextra或啓用-Wsign-compare

獎金的問題:是否有指定C和警告級別的方式C++

是的,LOCAL_CFLAGS適用於C和C++代碼。 (source