c 预处理器:串联算术

2023-12-28

如何让预处理器进行串联算术运算?
我尝试过:

#define DECL_FUNCT3(ch1, ch2) \
        void funct_ ## ch1 ## _and_ ## ch2 ## _(void);

#define DECL_FUNCT2(ch1, ch2) DECL_FUNCT3(ch1, ch2)
#define DECL_FUNCT1(ch1, ch2) DECL_FUNCT2(ch1, ch2)
#define DECL_FUNCT(ch) DECL_FUNCT1(ch, ch+16)

DECL_FUNCT(0)
DECL_FUNCT(1)

我想得到:

void funct_0_and_16_(void);
void funct_1_and_17_(void);

但我得到的是:

$ gcc -E test.c 
[...]
void funct_0_and_0+16_(void);
void funct_1_and_1+16_(void);

是否可以?


If ch介于 0 到 240 之间,您可以使用BOOST_PP_ADD https://www.boost.org/doc/libs/1_72_0/libs/preprocessor/doc/ref/add.html来自boost预处理器库 https://www.boost.org/doc/libs/1_72_0/libs/preprocessor/为了那个原因:

#include <boost/preprocessor/arithmetic/add.hpp>

#define DECL_FUNCT3(ch1, ch2) \
        void funct_ ## ch1 ## _and_ ## ch2 ## _(void);

#define DECL_FUNCT2(ch1, ch2) DECL_FUNCT3(ch1, ch2)
#define DECL_FUNCT1(ch1, ch2) DECL_FUNCT2(ch1, ch2)
#define DECL_FUNCT(ch) DECL_FUNCT1(ch, BOOST_PP_ADD(ch,16))

DECL_FUNCT(0)
DECL_FUNCT(240)

Godbolt 演示(使用 C++,但也应该适用于 C):

https://godbolt.org/z/2edrua https://godbolt.org/z/2edrua(这定义了空函数,而不是声明它们以获得一些可见的汇编输出)。

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

c 预处理器:串联算术 的相关文章

  • C 预处理器宏不解析逗号分隔的标记?

    我想根据参数的数量选择两个函数之一 nargs 0 gt f1 nargs gt 0 gt f2 宏执行以下操作 获取第一个参数 如果没有提供参数 则会添加两个逗号 NULL NULL 然后它会从返回的参数列表中选择第二个参数 例如 f H
  • 将字符串连接到python列表中所有元素的末尾

    我想知道如何将字符串连接到列表中所有元素的末尾 例如 List1 1 2 3 string a output 1a 2a 3a 在列表理解和使用中重建列表str format在两个参数上 gt gt gt string a gt gt gt
  • 有没有办法在输出二进制文件中存储 clang 编译时标志?

    使用 clang 时 有没有办法在输出二进制文件中存储编译时标志 例如运行后 clang O3 c main c 所结果的main o文件应该包含在某处 O3 gcc has frecord gcc switches https stack
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 为什么 gcc 链接时没有 lpthread 标志?

    我当时正在做一个业余爱好项目 其中互斥体的行为很神秘 我将其归结为这个显然应该陷入僵局的测试用例 include
  • GCC 5 及更高版本中的 AVX2 支持

    我编写了以下类 T 来加速操作 使用 AVX2 的 字符集 然后我发现它不起作用 gcc 5 及更高版本当我使用 O3 时 谁能帮我追踪到一些编程结构 已知不适用于最新的编译器 系统 该代码的工作原理 底层结构 bits 是一个 256 字
  • 要求编译器发出无分支/恒定时间代码

    在密码学中 任何依赖于秘密数据 例如私钥 的代码都必须在恒定时间内执行 以避免侧信道定时攻击 https en wikipedia org wiki Timing attack 目前最流行的架构 x86 64 和 ARM AArch64 都
  • Clang 3.2 构建在构建 gcc 4.7 后损坏

    所以我知道 Clang 大多数时候 依赖于 Gnu 的 libstdc 3 但是在构建 gcc 4 7 0 因为太棒了 之后 我似乎遇到了问题 clang 的所有路径都是错误的 我是否需要清理我的构建目录并从头开始使用 clang 特别是它
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • 连接路径的函数?

    是否有现有的函数来连接路径 我知道实施起来并不困难 但仍然 除了照顾尾随 or 我需要注意正确的操作系统路径格式检测 即我们是否编写C dir file or dir file 正如我所说 我相信我知道如何实施它 问题是 我应该这样做吗 现
  • 除了 gcc 之外,还有哪些编译器可以对代码进行向量化?

    GCC can 矢量化循环 ftp gcc gnu org pub gcc summit 2004 Autovectorization pdf当指定某些选项并给出正确的条件时 会自动进行 是否还有其他广泛可用的编译器可以执行相同的操作 IC
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • C 编译器无法在 Mac OS Mountain Lion 上创建可执行文件

    我几乎浏览了每一页 但所有提示都不能解决问题 我正在运行 Mountain Lion 我有 Xcode 所有最新的开发工具 最新的 GCC 等等 我正在尝试设置 rbenv 和 ruby build 一切似乎都正常 但是当我去安装 ruby
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • gcc 删除内联汇编代码

    看起来 gcc 4 6 2 删除了它认为函数中未使用的代码 test c int main void goto exit handler asm volatile jmp 0x0 exit return 0 拆解main 0x0804840
  • 如何使用 mingw gcc 链接 msvcr90.dll?

    如何使用 mingw gcc 链接 msvcr90 dll 我尝试了 lmsvcr90 这是最小的示例 include
  • 为什么在重新扫描期间参数替换没有被替换?

    考虑以下宏定义和调用 define x x 0 define y arg arg y x 此调用扩展为x 0 在 Visual C 2010 g 4 1 mcpp 2 7 2 和 Wave 上测试 Why 具体来说 为什么它不扩展到x 0
  • 用于定义数字的数字常量之前应有非限定 ID

    我是 C 新手 所以我不知道 phidget 代码示例中的此错误意味着什么 Main cpp 8 16 错误 数字常量之前预期有不合格的 id verander de volgende informatie naar de informat
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中

随机推荐

  • AWS CloudFormation 用户数据中的 Crontab

    使用 AWS CloudFormation Userdata 时如何设置 crontab 我正在设置 crontab l echo 0 wget O q http www example com cron php crontab 但 cro
  • 如何将“=”附加到字符串

    我正在尝试添加 在我的数组的末尾 然后通过附加 0 来结束它 这就是我分配空间的方式 char postExpr malloc sizeof char MAX LEN 我已经尝试了很多方法 但仍然无法在字符串末尾附加字符 其他每个字符都可以
  • QT C++ 的新手问题 - Qimage 不起作用?

    我正在尝试执行控制台应用程序来从图像中读取像素 include
  • R/Shiny 图不显示在浏览器中

    我最近开始玩Shiny 我试图写一些东西来证明中心极限定理 我的代码如下 ui R ui R file code library shiny shinyUI pageWithSidebar headerPanel Central Limit
  • MYSQL 查询左连接显示一张表中的所有数据

    SELECT A CODE B NOTE C NUMBER FROM A LEFT JOIN B ON A CODE B CODE LEFT JOIN C ON A CODE C NUMBER WHERE C ID B ID 需要显示 3
  • Django 1.5.1 运行测试时出现“ImportError:没有名为 urls 的模块”

    我已经开始使用 Django 1 5 项目 我有以下配置文件应用程序的 URL 视图和测试 When I browse localhost 8000 profiles it works just fine 但是当我对配置文件应用程序运行测试
  • 消失 SmartTabLayout pageViewer 内容

    我正在尝试从这里使用 SmartTabLayouthttps github com ogaclejapan SmartTabLayout https github com ogaclejapan SmartTabLayout 我有一个抽屉
  • ASP.NET MVC - Html.TextBox - 未通过 ViewData 字典设置值

    我在页面上有一个带有 Html TextBox 控件的搜索框 实际上是在部分视图中 但不确定是否相关 该操作方法将 query 作为参数 我编辑该值以清理传入的字符串 public ActionResult SearchQuery stri
  • 如何静态链接 C# 类库的库?

    我正在使用 microsoft 提供的 Dlls 在 c 中创建一个类库 现在我想将 Microsoft 提供的库静态添加到 My Dll 中 我该如何执行此操作 我只是添加了对 Microsoft 提供的 Dll 的引用并创建了 My D
  • 包含非 ASCII 字符的批处理文件

    我需要链接到批处理脚本中包含字符 的文件夹 不过 当我运行脚本时 我遇到了麻烦 命令提示符会误读非 ASCII 字符 我尝试将文件保存为 ANSI 和 Unicode 我运行的是 Windows 7 这是一个最小的例子 echo l 没有使
  • Java:如何输出所有可能的二进制组合(256个不同的序列)?

    我需要创建一个函数来输出所有可能的二进制组合 2 8 256 个不同的 8 位序列 我真的很难过这个 我必须使用嵌套循环来完成此操作 并且不知道如何进行 以下是我到目前为止所尝试的 有人告诉我 我可以使用 8 个嵌套循环来编写这个程序 每个
  • 如何在 Google Cloud Functions 上运行 C++ 文件?

    据我所知 Google Cloud Functions 只允许您部署 NodeJs 或 Python 脚本 问题 我怎样才能部署一个简单的Hello World cpp谷歌云功能 例如 编写一个 hello world HTTP 函数 有哪
  • 如何按时间而不是按大小对 shell 脚本输入进行分块?

    在 bash 脚本中 我使用多生产者单消费者模式 生产者是将行写入 fifo 的后台进程 通过 GNU Parallel 消费者从 fifo 读取所有行 然后排序 过滤并将格式化结果打印到 stdout 然而 可能需要很长时间才能获得完整的
  • cURL:通过代理进行 https

    我需要向 https URL 发出 cURL 请求 但我还必须通过代理 这样做有什么问题吗 我在使用curl和php执行此操作时遇到了很多麻烦 因此我尝试在Python中使用urllib2执行此操作 结果发现urllib2在通过代理时无法P
  • AVAssetReader,如何使用流而不是文件?

    AVAssetReader 非常棒 但我只能看到如何将它与本地资产 文件或我猜的组合一起使用 So assetReader try AVAssetReader asset self asset assetReader addOutput r
  • Spring-boot jersey maven 无法运行 war 文件

    我们正在创建一个 spring boot jersey 应用程序 现在我们要创建可执行的 war 文件 问题是当我运行它时应用程序运行良好 mvn spring boot run 但是当我尝试将其打包为 war 并使用 java jar A
  • 如何在文档中找到 to_string 可用于 &str?

    我试图了解发生了什么事读一行 https stackoverflow com questions 27972686 read only one line to string in one line of code 但我找不到有一个方法to
  • WPF - 即时修改图像颜色 (C#)

    是否可以通过代码 甚至使用模板 修改 WPF 中图像的颜色 假设我有一个图像需要应用于图块 默认情况下它具有白色前景色和透明背景 类似于下面的 PNG 它就在这里 我不想添加不同的图像 具有不同的颜色 而是想操纵白色 并将其更改为黑色 如果
  • 如何编写仅查看日期时间字段的时间部分的 activerecord 查询?

    是否可以执行仅查看日期时间字段的时间部分的 activerecord 查询 e g Battle where start time lt and start time gt 12 00 06 00 查找早上 6 点到中午 12 点之间开始的
  • c 预处理器:串联算术

    如何让预处理器进行串联算术运算 我尝试过 define DECL FUNCT3 ch1 ch2 void funct ch1 and ch2 void define DECL FUNCT2 ch1 ch2 DECL FUNCT3 ch1 c