2017-02-09 39 views
-6

在追蹤我軟件中的錯誤時,我遇到了一個奇怪的行爲,並想知道是否有人會有一些事後的看法。C++不等號但編譯時沒有賦值

下面是代碼(它編譯,沒有任何運行時錯誤):

#define ERR_OK 0 
#define ERR_NOT_OK -41 

int some_class::some_function(uint32_t verbose){ 
    int ret_value = ERR_OK; 

    if (some_condition) { 
     ret_value ERR_NOT_OK; 
    } 

    return ret_value; 
} 

爲什麼會出現這種線編;它缺少一個等號:

ret_value ERR_NOT_OK; 

xcodebuild聯編日誌:

CompileC /Users/user_name/Library/Developer/Xcode/DerivedData/xxx-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/Objects-normal/x86_64/some_class.o api/src/some_class.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler 
    cd /Users/user_name/Documents/project_name/project_name_dev 
    export LANG=en_US.US-ASCII 
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -Wno-trigraphs -fpascal-strings -O0 -fno-common -Werror -Wno-missing-field-initializers -Wno-missing-prototypes -Wunreachable-code -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wassign-enum -Wshorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -fasm-blocks -funroll-loops -fstrict-aliasing -Wno-deprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.10 -g -Wno-sign-conversion -Winfinite-recursion -Wmove -iquote /Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/project_nameAPI-generated-files.hmap -I/Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/project_nameAPI-own-target-headers.hmap -I/Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/project_nameAPI-all-target-headers.hmap -iquote /Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/project_nameAPI-project-headers.hmap -I/Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Products/Debug/include -I/Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/DerivedSources/include -I/Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/DerivedSources/x86_64 -I/Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/DerivedSources -Wno-address-of-packed-member -Wno-unknown-warning-option -F/Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Products/Debug -Wall -MMD -MT dependencies -MF /Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/Objects-normal/x86_64/some_class.d --serialize-diagnostics /Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/Objects-normal/x86_64/some_class.dia -c /Users/user_name/Documents/project_name/project_name_dev/api/src/some_class.cpp -o /Users/user_name/Library/Developer/Xcode/DerivedData/jal-emkfpcfmbsgbyrammutcuwrgpqox/Build/Intermediates/project_name.build/Debug/project_nameAPI.build/Objects-normal/x86_64/some_class.o 

編輯:刪除分號和改變的#define ERR_NOT_OK 1至#定義ERR_NOT_OK -41;添加了xcodebuild日誌。

+0

什麼工具鏈? – Matt

+1

VS2013不會編譯它。 –

+0

提高警告水平,看看會發生什麼。 –

回答

4

如果ERR_NOT_OK被定義爲-41,那麼你的

ret_value ERR_NOT_OK; 

取代有

ret_value -41; 

這是一個有效的表達式語句,即使它實際上是一個無操作。最初打算作爲一元的-在本文中被解釋爲二進制-

這就是爲什麼它是一個好主意,把它定義爲

#define ERR_NOT_OK (-41) 
+0

這與編譯llvm,我不認爲這是一個有效的表達式。 – Onep

+0

另一個不使用宏作爲常量的原因 – Slava

+0

@Slava:是的,但是如果常量出現在一個頭文件中,這些頭文件可以在C和C++代碼中使用,那麼你沒有太多的選擇。它是宏或枚舉。 – AnT