C++没有等号,而是在不分配值的情况下进行编译
C++ no equal sign but compiles without assigning value
在追踪软件中的错误时,我遇到了一种奇怪的行为,想知道是否有人会有一些后见之明。
这是代码(它编译并且没有任何运行时错误(:
#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 更改为 #define ERR_NOT_OK -41;添加了 xcodebuild 日志。
如果ERR_NOT_OK
定义为-41
,则您的
ret_value ERR_NOT_OK;
替换为
ret_value -41;
这是一个有效的表达式语句,即使它实际上是一个无操作。在这种情况下,最初打算作为一元-
的内容被解释为二进制-
。
这就是为什么将其定义为
#define ERR_NOT_OK (-41)
相关文章:
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 为什么它在不分配内存的情况下工作正常
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 在不释放所有动态分配的资源的情况下结束程序是否有风险
- 在不工作的情况下为数组分配指针,但反过来也可以
- 在这种情况下,数组a会被取消分配吗
- (C++)如何在不导致 mem 泄漏的情况下将指针传递到分配了'new'的函数?
- 在不放置新运算符的情况下,在预分配的内存上使用虚函数初始化对象 - 这可能吗?如果没有,为什么
- 如何在没有动态内存分配(堆)的情况下为可变大小数组(矢量)定义安全容器或视图
- 是否可以在不分配内存或复制数据的情况下构造对象?
- 有没有办法在不覆盖实际分配的情况下使用 vulkan 内部分配回调?
- 在以下情况下,是否可以分配未对齐的对象?
- 为什么在这种情况下不调用我的移动构造函数?(首先分配 r 值引用并创建对象)
- 我可以在不手动将它们分配在堆上的情况下存储iostreams集合
- C++没有等号,而是在不分配值的情况下进行编译
- 在哪些情况下,从 std::forward 分配比从 std::move 分配更可取?为什么
- 如何在不违反 const 限制的情况下动态分配模板类中的空间