算术表达式作为 c 中宏的参数

2024-02-21

使用宏和预处理器指令 #define 我编写了以下两个代码。

  • 第一个代码传递表达式,例如a+b

_valid_pagesize(a+b)

  • 在第二个代码中

c=a+b

然后将此 c 作为参数传递给宏。

_valid_pagesize(c)

第二个代码可以完美运行,而第一个代码则不能。 我们能不能像函数一样将表达式作为参数传递给宏? 为什么不..?

代码传递表达式作为参数:

#include<stdio.h>
#include<stdlib.h>

#define _valid_pagesize(_newsize) (!(_newsize % 0x80000000)?1:      \
        (!(_newsize % 0x40000000)?1:      \
        (!(_newsize % 0x10000000)?1:      \
        (!(_newsize % 0x4000000) ?1:0))))


int main(int argc, char* argv[]){
    uint64_t size[2];
    size[0]=atoi(argv[1]);
    size[1]=atoi(argv[2]);

    if(_valid_pagesize(size[0]+size[1])){
            printf("success\n");
            }
    return 0;
}

宏规则#1 是将所有参数括在括号中,以避免出现您所看到的问题。

#define _valid_pagesize(_newsize) (!((_newsize) % 0x80000000)?1:      \
    (!((_newsize) % 0x40000000)?1:      \
    (!((_newsize) % 0x10000000)?1:      \
    (!((_newsize) % 0x4000000) ?1:0))))

当你通过时a+b对于宏观来说,它展开为

a + b % 0x40000000

自从%优先级高于+,你没有得到你期望的结果。通过将参数括在括号中,宏将扩展为

(a + b) % 0x40000000

其按预期工作。

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

算术表达式作为 c 中宏的参数 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内

随机推荐

  • 范围 A 到 B,其中 F# 中 A > B

    我刚刚在 F 中发现了一些我称之为怪癖的东西 想知道它是设计使然还是错误 如果是设计使然 为什么会这样 如果编写任何第一项大于第二项的范围表达式 则返回的序列为空 看一下反射器表明这是设计使然 但我真的找不到为什么必须如此的原因 重现它的一
  • 使用 python fileinput 模块时跳过第一行的优雅方法?

    使用时是否有一种跳过文件第一行的优雅方法python文件输入模块 我有数据文件 其中数据格式良好 但第一行是标题 使用fileinput如果该行似乎不包含数据 我将必须包含检查和丢弃行 问题是它会对文件的其余部分应用相同的检查 和read
  • 时间轴视图、日视图、周视图、月视图并添加事件日历颤动库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在寻找Flutter 中的日历库它支持网络和移动设备 日历必须具有以下所有视图 时间表视图 日视图
  • 加载之前的Javascript?

    onLoad onPageShow 之前是否有任何事件处理程序 onLoad 的问题是 如果显示有任何变化 页面将原样显示 直到完全加载 然后脚本才会运行 确保它尽快运行的最佳方法是什么 如果你把 JavaScript声明 而不是函数定义
  • 如何使用 Carrierwave + FactoryGirl 测试上传

    我想为我的应用程序创建一些测试 但出现以下错误 1 User feeds ordering should order feeds by id desc Failure Error post 1 FactoryGirl create post
  • 使用Drools 6 Maven架构完全离线

    我正在使用 Drools 6 0 1 并利用新的基于 Maven 的架构来部署我的规则 该项目的 POM 如下所示 我用参数启动项目 Dkie maven settings custom X maven2 settings xml 为 Dr
  • Weblogic 12c:如何将“活动配置文件”传递给 Spring Boot 应用程序?

    我正在开发一个 Spring Boot 应用程序 并且我have让它在我们的Weblogic 12c服务器 如战争 我试图找到一种方法来传递默认值弹簧活动剖面 info here http docs spring io spring boo
  • javascript 中的对象变量是否按照添加顺序枚举? [复制]

    这个问题在这里已经有答案了 可能的重复 元素顺序 javascript 中的 for in 循环 https stackoverflow com questions 280713 elements order for in loop in
  • 如何替换 MPMoviePlayer 通知?

    在 iOS 9 中 MPMoviePlayer 及其所有组件均已弃用 我们使用 MPMoviePlayerController 通知 例如MPMoviePlayerLoadStateDidChangeNotification MPMovie
  • 如何限制用户只能使用 CakePHP 3 进行一次会话?

    我的授权工作正常 用户可以登录和退出 没有问题 问题是 如果用户共享登录信息 那么他们都可以与一个用户同时登录 不好 我需要让 CakePHP 知道用户何时登录 我认为这是一个使用以下命令启动的进程 Session gt defaults
  • 转义正则表达式中的变量[重复]

    这个问题在这里已经有答案了 我正在尝试获取输入文本字段的值并在正则表达式中使用它 这是我必须匹配行开头的内容 regex new RegExp inputValue i 它适用于以字母数字字符开头的常规字符串 但我也将其用于美元金额 当输入
  • `DList` 和 `[]` 与 Co密度的关系

    我一直在尝试Codensity最近这应该与DList with 除其他事项外 不管怎样 我从来没有找到说明这种关系的代码 经过一些实验我最终得到了这个 LANGUAGE RankNTypes module Codensity where n
  • GWT JPA - 响应无法反序列化

    我使用 GWT 和 JPA 来实现持久性 我创建了一个域 JPA 魔法类 DAO 和 RPC 用于它们之间的通信 一切正常 客户端通过 RPC 将对象发送到服务器 但无法得到响应 服务器无法以与客户端兼容的方式反序列化 所以我无法使用服务器
  • 使用java本机接口获取Windows当前用户

    我试图做一个概念证明 在 cpp 程序中我获取 Windows 用户名 然后使用 Java 本机接口 JNI 从 java 代码调用该程序 现在我到目前为止拥有的是一个示例 JNI hello world 程序 它能够编译和打印 Hello
  • 如何使用 jQuery Mobile 动态添加侧面板菜单项并保留所有 CSS 样式?

    我从代码中提取了非常小的片段来展示我的问题的一个非常简单的示例 我把它放在 JSFiddle gt http jsfiddle net hollycoffee LjLMU http jsfiddle net hollycoffee LjLM
  • 快速编辑具有约束的多个文本字段时移动键盘

    I have UIViewController看起来像这样 我设置了所有相关的constraints 我正在尝试改变UIView当键盘出现时 当我点击UITextfields below 我有以下代码 static func addRemo
  • 为什么 javascript eval 在 chrome、safari 中可以工作,但只有在 firebug 打开时才能在 firefox 中工作?

    谢谢这个答案 https stackoverflow com questions 4333326 why doesnt javascript execute in php file loaded with ext ajax request
  • PNG 图像的页面速度 URL 很奇怪?

    我将具有 alpha 透明度的 PNG 图像上传到我的服务器 文件名为 logo png 但是 当在页面上使用该图像并且我去查看它的文件路径时 我得到 http example com i 300x300xlogo png pagespee
  • 如何使用 hooks 处理异步 firebase 调用

    我想创建一个用于将数据添加到 firestore 数据库的钩子 我不确定我是否误解了 hooks 的工作原理或 firestore 的工作原理 我对两者都是新手 警告 无法对已卸载的组件执行 React 状态更新 这是一个空操作 但它表明应
  • 算术表达式作为 c 中宏的参数

    使用宏和预处理器指令 define 我编写了以下两个代码 第一个代码传递表达式 例如a b valid pagesize a b 在第二个代码中 c a b 然后将此 c 作为参数传递给宏 valid pagesize c 第二个代码可以完