Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 代码无法选取声明的宏_C++_C_Macros - Fatal编程技术网

C++ 代码无法选取声明的宏

C++ 代码无法选取声明的宏,c++,c,macros,C++,C,Macros,在下面的代码中,输出值与宏中的定义不同,这是因为这些值必须在预处理器阶段之前可用吗 #define INT_MAX 100 #include <iostream> using namespace std; int main() { int x = INT_MAX; x++; cout<<x<<INT_MAX; } #定义整数最大值100 #包括 使用名称空间std; int main() { int x=int_MAX; x++

在下面的代码中,输出值与宏中的定义不同,这是因为这些值必须在预处理器阶段之前可用吗

#define INT_MAX 100

#include <iostream>

using namespace std;

int main()
{
    int x = INT_MAX;
    x++;
    cout<<x<<INT_MAX;
}
#定义整数最大值100
#包括
使用名称空间std;
int main()
{
int x=int_MAX;
x++;

cout在
limits.h
中定义了一个名为
INT\u MAX
的宏。我假设
iostream
包括
limits.h
并覆盖您自己对
INT\u MAX
的定义。
这会在
x++
处导致整数溢出,因为
INT\u MAX
是可以用整数表示的最大值。

发生的事情是,在您自己定义INT\u MAX之后,您包括了iostream。这会引入限制。h,它将INT\u MAX重新定义为最大可用32位INT-请参阅。递增具有最大值的int是未定义的,但在大多数CPU体系结构/编译器组合中,它会返回到可能的最小int值

根据编译器警告级别的不同,您应该会收到一条关于重新定义INT_MAX的警告。如果在include语句后将其定义为100,则应该得到101


重新定义标准库提供的宏可能会导致混淆,因此我建议您为宏选择不同的名称。

等等。谁说它未定义?错误消息在哪里?您正在测试当您增加超过
INT\u MAX
时会发生什么。这与它是一个宏无关。您使用的编译器是什么?是的,我尝试在include语句之后定义它,现在它的工作正常。肯定会覆盖原始值。不是吗?如果我的其他开发人员在这个项目中使用相同的宏,如果他们不知道这个定义,这也会破坏代码。是的。这就是为什么我编辑了添加的答案“重新定义标准库提供的宏往往会导致混淆,因此我建议您为宏选择不同的名称。”“如预期”并不完全正确,因为溢出已签名的int是错误的