宏的问题

2024-04-22

HI ,

有人可以帮助我理解为什么 SQUARE(x) 的值为 49 吗?

我正在使用 Visual C++ 6.0 。

#define SQUARE(X) X * X

int main(int argc, char* argv[])
{
    int y = 5;

    printf("%d\n",SQUARE(++y));
    return 0;
}

尼尔·巴特沃斯、马克和帕维尔是对的。

SQUARE(++y) 扩展为 ++y * ++y,它增加 y 值的两倍。

您可能遇到的另一个问题:SQUARE(a + b) 展开为 a + b * a + b,这不是 (a+b)*(a+b) 而是 a + (b * a) + b。在定义宏时,您应该注意在需要时在元素周围添加括号:#define SQUARE(X) ((X) * (X)) 风险较小。 (伊恩·坎普(Ian Kemp)首先在他的评论中写道)

您可以使用内联模板函数(运行时效率同样高),如下所示:

template <class T>
inline T square(T value)
{
    return value*value;
}

您可以检查它是否有效:

int i = 2;
std::cout << square(++i) << " should be 9" << std::endl;
std::cout << square(++i) << " should be 16" << std::endl;

(不需要写

square<int>(++i)

因为 int 类型对于 i 来说是隐式的)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

宏的问题 的相关文章

  • 电话号码的正则表达式,不允许全零

    需要您的正则表达式帮助 我当前的正则表达式是 d 8 最小长度为 8 不允许包含字母 特殊字符和空格 我还想禁止全零 如 00000000 Thanks 该模式应该可以满足您的需求 0 d 8 The 0 部分是负前瞻 将阻止仅输入零 Ex
  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • 获取 std::variant 当前持有的 typeid(如 boost::variant type())

    我已经从 boost variant 迁移到 std variant 但遇到了障碍 我在 boost type 中使用了一个很好的函数 它可以让你获取当前持有的 typeid 看https www boost org doc libs 1
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • 如何使用 wpf webbrowser 将数据发布到 Web 服务器

    我想从数据库获取数据并使用它来让用户登录到网站 我有一个包含 Web 浏览器控件的 wpf 页面 我有这样的代码 用于将用户登录到用 php 编写的网站
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 编译器错误“错误:在文件范围内可变地修改了‘字符串’”

    考虑 include
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代

随机推荐

  • ResolveUrl 无法内联工作

    我在 asp net 4 0 中收到以下代码的错误 错误消息 CS1525 无效的表达式术语 我在 Site Master 的 head 标签中使用此代码 你不能使用 gt EDIT如果您收到一条错误消息 The Controls coll
  • 按键值对字典数组进行排序

    我有一个字典数组 我想按每个字典中的 itemName 键按字母顺序对它们进行排序 我怎样才能在斯威夫特做到这一点 我想对项目数组进行排序 let array PFUser currentUser objectForKey Collecti
  • 使用(现在默认)Ember Data JSON-API 适配器处理错误

    我使用的是 Ember 1 13 7 和 Ember Data 1 13 8 它们默认使用 JSON API 标准来格式化发送到 API 和从 API 接收的有效负载 我想使用 Ember Data 的内置错误处理来向用户显示红色 错误 表
  • 如何在应用程序级别设置react-router的基本url?

    我有一个使用 create react app 创建的应用程序 我想将其安装在我网站的子目录中 推荐的方法是添加process env PUBLIC URL作为基本网址 IE
  • 如何使用Hibernate定义友谊关系?

    我需要有 FriendRequest 和 ListOfFriends 功能 类似于facebook 它显示收到的好友请求数量和批准的好友数量 我所说的 FriendRequest 是指拥有用户收到的好友请求的列表 通过 ListOfFrie
  • Spring mvc使用AJAX一次上传多个文件不起作用

    我正在使用 Spring boot 2 0 1 我正在尝试使用 dropzone 上传多个文件 当我使用时一切都工作正常uploadMultiple false on Dropzone js 当我设置uploadMultiple true
  • solr 中的文本字段排序

    我正在使用 solr 3 4 并希望 solr 搜索结果在文本字段上排序 如何实现像 int 自然排序一样对文本字段进行排序 有没有办法在查询时将文本字段转换为int 我的排序字段是字符串类型 我希望它在排序时表现得像 int 字段 我无法
  • ' 在常量表达式中不可用' aria-label='GCC:'std::is_same_v' 在常量表达式中不可用'> GCC:'std::is_same_v' 在常量表达式中不可用

    尝试实施下面的代码 https godbolt org z zPMae4 template
  • 通过 Windows 网络访问长度接近 MAX_PATH 的文件

    我正在使用 C 并通过网络访问 UNC 路径 该路径略大于 MAX PATH 所以我无法获取文件句柄 但是 如果我在有问题的计算机上运行该程序 则该路径不大于 MAX PATH 这样我就可以获得文件句柄 如果我将文件重命名为更少的字符 减去
  • 如何动态地为类方法定义别名方法?

    我有一个名为 计算器 的模块 我想将其包含在 产品 类中 计算器将扩展 Product 它将类方法复制到 Product 上 这些类方法之一是 memoize 我的想法是我可以做这样的事情 module Calculator def sel
  • 在 Python 中用交替颜色填充轮廓

    我正在尝试获得一种用交替颜色填充图像轮廓的算法 首先是白色 然后是黑色 然后再次白色 然后再次黑色 就像下图所示 到目前为止 我所取得的成就是用白色填充图像的轮廓 然后用黑色保留图像内部的轮廓 代码如下 import numpy as np
  • 如何匹配空手道中嵌套 json 对象中的动态键?

    尝试匹配空手道框架中 API 响应中的嵌套 json 对象 以下是我的 API 响应 status code 0 message Successful data PHX name Phoenix All city code PHX coun
  • 什么时候函数名太长?

    在可能的情况下 我尝试对我的函数名称进行描述 这有时会导致函数名称在二十到三十个字符范围内 例如GetActionFromTypeName or GetSelectedActionType 在什么时候函数会变得太长而难以管理 对于编译器来说
  • django - 登录视图没有反向匹配

    我只是尝试 d jango 并按照文档进行身份验证 基本上我想看一下用户登录表单页面 但我得到 Caught NoReverseMatch while rendering Reverse for django contrib auth vi
  • 如何在 Rails 3 中使用 Draper 修饰嵌套属性(关联)?

    我的环境 Rails 3 2 with draper https github com jcasimir draper gem 我正在使用嵌套资源 并且无法确定在哪里声明装饰器 app controllers users controlle
  • Chart.js如何获得组合条形图和折线图?

    我想问一下使用 Chart js 是否可以http www chartjs org http www chartjs org 获得组合条形图和折线图 感谢您的任何建议 下面的答案与 Chart js 1 x 有关 Chart js 2 x
  • Facebook 如何在不重新加载页面的情况下更改 url? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在不重新加载和 hack 的情况下更改 Windows 位置 https stackoverflow com questions 3997181 how could i change window
  • 如何从用户列表中查找PC

    我需要一些帮助 我不太确定这是否可能 我有清单samAccountName in csv文件 我需要从中获取他们的 PC 名称和 IP 我不太确定如何构建这样的脚本 一种方法是循环访问环境中的所有计算机并测试每台计算机 这当然会是SLOW
  • 泛型显式转换

    我实现了从字符串到名为 Foo 的对象的显式转换 所以 gt Foo f Foo foo 数据 作品 我需要实现一个将字符串转换为通用 T 的函数 在本例中 T 是 Foo 数据类型 public T Get
  • 宏的问题

    HI 有人可以帮助我理解为什么 SQUARE x 的值为 49 吗 我正在使用 Visual C 6 0 define SQUARE X X X int main int argc char argv int y 5 printf d n