首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中的宏和意外结果

c++中的宏和意外结果
EN

Stack Overflow用户
提问于 2015-08-11 07:35:24
回答 2查看 93关注 0票数 1

对于这个问题,我找不到合适的title,对不起;

我在博客中发现了下面的代码

代码语言:javascript
复制
#include <iostream>

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

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

Out Put: 10

为什么10不是8

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-11 07:39:49

宏是对预处理程序的指令,而不是C++语句。它们不需要用分号结束,它们只是在令牌上进行替换。

您的代码扩展为:

代码语言:javascript
复制
int main() {
    int size = 10;-2;;
    std::cout << size;
}

注意,分号已被替换。简单的解决办法是更改宏:

代码语言:javascript
复制
#define TEN 10
#define EIGHT TEN-2

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

票数 4
EN

Stack Overflow用户

发布于 2015-08-11 07:38:18

  1. #define中表达式的计算应该用括号来覆盖: #定义8(10-2)
  2. 来自N4296。 表单的预处理指令: #定义标识符替换-列表新行 定义一个类似对象的宏,该宏将导致宏名称的每个后续实例被构成指令剩余部分的预处理标记替换列表所替换。

因此,正如@TartanLlama所指出的,不需要任何;。这就是你的问题所在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31935833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档