Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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++ - Fatal编程技术网

C++中的宏结果和意外结果

C++中的宏结果和意外结果,c++,C++,我找不到这个问题的合适标题,对此表示抱歉 我在博客中找到了下面的一段代码 #include <iostream> #define TEN 10; #define EIGHT TEN-2; int main() { int size = EIGHT; std::cout << size; } Out Put: 10 为什么是10而不是8 define中表达式的求值应包含在括号中: #define EIGHT (TEN - 2) 从 表单的预处理指

我找不到这个问题的合适标题,对此表示抱歉

我在博客中找到了下面的一段代码

#include <iostream>

#define TEN 10;
#define EIGHT TEN-2; 

int main() {
    int size = EIGHT;
    std::cout << size;
}

Out Put: 10
为什么是10而不是8

define中表达式的求值应包含在括号中:

#define EIGHT (TEN - 2)

表单的预处理指令:

#define identifier replacement-list new-line 
定义一个类似对象的宏,该宏使宏名称的每个后续实例被构成指令其余部分的预处理标记的替换列表替换

所以没有任何;正如@TartanLlama所指出的,这是需要的。那是你的问题造成的

define中表达式的求值应包含在括号中:

#define EIGHT (TEN - 2)

表单的预处理指令:

#define identifier replacement-list new-line 
定义一个类似对象的宏,该宏使宏名称的每个后续实例被构成指令其余部分的预处理标记的替换列表替换


所以没有任何;正如@TartanLlama所指出的,这是需要的。这是你的问题。

宏是预处理器的指令,不是C++语句。它们不需要以分号结尾,只需对令牌进行替换即可

您的代码扩展为:

int main() {
    int size = 10;-2;;
    std::cout << size;
}

但是,你应该使用const int而不是宏来像这样的常数来避免像刚才遇到的问题。

宏是预处理器的指令,而不是C++语句。它们不需要以分号结尾,只需对令牌进行替换即可

您的代码扩展为:

int main() {
    int size = 10;-2;;
    std::cout << size;
}

但是,对于这样的常量,您应该使用const int而不是宏,以避免出现类似刚才遇到的问题。

您看过编译器的预处理输出了吗?这通常是类似于.E.为什么C++中避免了宏?你是否已经查看过编译器的预处理输出?这通常是类似于.e的,为什么C++中应该避免使用宏。