定义中的预处理器指令? [复制]

2024-01-05

可能的重复:
C 预处理器:在#define 中使用#if? https://stackoverflow.com/questions/2831934/c-preprocessor-using-if-inside-define

有什么技巧可以在定义的 rhs 中包含预处理器指令吗?问题是,预处理器将所有 rhs 折叠成一长行。但也许有一个窍门?

我想要的 rhs 的例子是

#define MY_CHECK \
  #ifndef MY_DEF  \
  # error MY_DEF not defined  \
  #endif

?
其目的是一个缺点:拥有单行快捷方式,而不是多行检查序列。


正如其他人所指出的,预处理器宏不能扩展为任何其他预处理器指令;如果这样做,您通常会收到有关输入中杂散“#”字符的奇怪错误。然而,有时你可以做一些事情来获得你想要的东西。如果您想要一个扩展为以下内容的宏:

#ifdef SOMETHING
...some code...
#endif

where 一些代码不包含任何预处理器指令,您可以定义一个 IFDEF 宏:

#ifdef SOMETHING
#define IFDEF_SOMETHING(X) X
#else
#define IFDEF_SOMETHING(X)
#endif

然后使用IFDEF_SOMETHING(...some code...)在你的另一个宏中。

如果您有一堆想要重复多次的预处理器废品,您可以将其粘贴到自己的文件中,然后使用#include "stuff"在您需要的每个地方。

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

定义中的预处理器指令? [复制] 的相关文章

  • 这段C代码是如何工作的?

    What is a b a define f a b a b define g a a define h a g a main printf s n h f 1 2 how should I interpret this line 1 pr
  • 检查预处理器中整数类型的大小

    如何检查尺寸unsigned在 g 下的预处理器中 sizeof这是不可能的 因为在预处理期间没有定义它 这可能不是最优雅的方法 但您可以利用的一件事是 limits h 中定义的 UINT MAX 那是 如果 UINT MAX 65535
  • C 预处理器:在 #warning 中展开宏

    我想在 warning 指令中打印宏值 展开宏 例如 对于代码 define AAA 17 warning AAA 所需的编译时输出是 warning AAA 17 我该用什么 或者 如何增强代码 您可以使用预处理器指令 pragma me
  • 根据.config剥离Linux内核源代码

    是否有任何有效的方法 也许通过滥用 gcc 预处理器 来获取一组剥离的内核源代码 其中根据 config 不需要的所有代码都被省略 好吧 我们采取了一些解决方案 首先 可以通过以下方式获取所使用的编译器命令 make KBUILD VERB
  • 在 C 中创建字符串的宏

    替代标题 以帮助搜索 将预处理器标记转换为字符串 我怎样才能从一个字符串C宏的价值 原始问题 我想用C define在编译时构建文字字符串 该字符串是因调试 发布等而更改的域 我想做这样的事情 ifdef TESTING define IV
  • 有没有办法在成员名称循环中对 N C++ 类成员应用操作(可能通过预处理器)?

    问题 我有一个 C 类 其中有大量 gt 100 成员 其行为几乎相同 同类型 在函数中 每个成员都有与其他成员完全相同的代码 例如从构造函数中的映射进行赋值 其中映射键与成员键相同 这种行为的相同性在许多函数 gt 20 中重复出现 当然
  • 编译器预处理期间的数学运算

    我经常遇到这样的情况 我需要在编译时生成几个常量以用于移位和屏蔽操作 e g define blockbits 8 define blocksize 256 could be generated from 2 blockbits defin
  • 在 C 预处理器中,“#”字符是否必须位于行的开头? [复制]

    这个问题在这里已经有答案了 我已经用 C 语言编程有一段时间了 在此期间 我了解到将预处理器指令之前的 字符放在第一列是一种常见的约定 Example include
  • 使用运行时参数桥接模板

    我正在处理一个广泛使用模板的第三方 C 库 这使得创建 C API 以便从我的框架中使用它变得困难 抽象问题 假设库提供以下功能 template
  • 如何在宏 gcc 中添加警告禁用编译指示

    我需要禁用以下代码中宏 LOG W 内部产生的警告 为此 我将此宏包装在另一个宏 LOG W 中 并禁用了其中的警告 Wold style cast 然后在代码中我使用 LOG W 代替 但是我仍然收到警告并且无法找出原因 任何指示表示赞赏
  • C 编程:预处理器、宏作为标记

    我正在尝试做一些概念上与此类似的事情 但似乎无法让它发挥作用 最后显示错误 任何想法 include
  • 你能在 C 中#define 注释吗?

    我正在尝试做一个调试系统 但它似乎不起作用 我想要完成的是这样的 ifndef DEBUG define printd else define printd printf endif 有没有办法做到这一点 我有很多调试消息 但我不喜欢这样做
  • #define 导致“预期的主表达式”错误

    define N 10 int main int x for int i 0 i
  • GCC/CLANG 与 MSVC 的预处理器之间有何差异?

    以下预处理器宏 通常的嫌疑人 测试空参数列表并计算参数数量 在 gcc clang 上运行时没有警告 但在 Microsoft VisualC 上失败 IS EMPTY returns nothing if the parameter li
  • 我可以在调用者处将函数参数默认为 __FILE__ 的值吗?

    在 C 中 我可以为函数提供一个默认参数吗 PRETTY FUNCTION FILE and LINE 在调用者处定义 而不是在不使用宏的情况下在头文件中提供默认值的地方 您不能 但您可以通过附加宏来实现此行为 例如 DEFINE THRO
  • C 预处理器字符串化怪异

    我正在定义一个宏 该宏的计算结果为常量字符串 保存文件名和行号 用于记录目的 它工作正常 但我只是不明白为什么需要 2 个额外的宏 STRINGIFY and TOSTRING 当直觉简单地表明 FILE LINE include
  • #ifdef MACRO 相当于注释吗

    假设 MACRO 没有定义 这些是等价的 ifdef MACRO Not valid C or C code endif Not valid C or C code 在 GCC 4 7 1 中 它似乎是等效的 但是否有预处理器可以做更多的事
  • 在 C 中使用 #if 进行转换

    为什么这段代码会出错 include
  • 如何驯服 Windows 标头(有用的定义)?

    在其中一个答案中this https stackoverflow com questions 1394132 macro and member function conflict问题jalf https stackoverflow com
  • Objective-C 字符串文字的预处理器宏值

    我在构建设置中定义了一个预处理器宏 FOO BAR 我想将该值转换为可以传递给方法的 Objective C 字符串文字 以下 define 不起作用 但它应该展示我想要实现的目标 define FOOLITERAL FOO want FO

随机推荐

  • 禁用表单提交上的提交按钮的问题

    我正在使用 jQuery 禁用提交插件 但我遇到了问题 如果我禁用提交按钮 它们不会传递回服务器 因此我无法判断按下了哪个按钮 这是正常的吗 我能做些什么吗 我真的不想重组我的网站 所以我必须在表单提交时设置一个变量来告诉按下了哪个按钮 有
  • SFML 在 Windows 下加载字体时出错

    我一直在尝试使用 SFML 开发适用于 Windows 和 Linux 的跨平台应用程序 到目前为止一切都很顺利 除了 Windows 版本似乎无法加载字体 不过我在 Linux 下没有任何问题 我做了研究 并根据我执行的位置确保文件就位
  • 在Python中使用Popen执行Powershell脚本,如何获取Powershell脚本的输出并将其更新到网页?

    我创建了一个带有按钮的简单 HTML 当用户单击该按钮时 它将调用在服务器端执行的Python文件 在Python文件中 我使用Popen调用Powershell脚本 如下代码 command line r C WINDOWS system
  • 在Python中组合模块文件

    有没有一种方法可以将 Python 文件组合在一起 类似于 Java 中的 JAR 我需要一种打包 Python 类和函数集的方法 但与标准模块不同 我希望它位于一个文件中 在寻找同一问题的解决方案后 我最终编写了一个简单的工具 它将多个
  • 如何从Flash加载flex swf?

    我有一些在 Flex 中编译的 swf 我想将其加载到 flash pro 中的影片剪辑中 那么如何在 Flash CS4 中加载 flex swf 呢 怎么做这样的事情 您可以在这里阅读更多相关信息 http troygilbert co
  • Cakephp 路由前缀

    我的应用程序有 3 种不同的布局 与内容的不同部分相关 我想定义我的 url s 以便他们在开头的 ex 中包含该部分 mypage com part1 controller 我不知道如何改变路线来实现这一点 附 我不想要普通的前缀路由 其
  • 如何在日志文件名中的文件扩展名之前附加滚动索引

    我正在使用RollingLogFileAppender它工作得很好并且正在滚动到新文件中 但它在文件的最后添加了 1 2 等 所以我最终得到 log 1 log 2等等 所以从技术上讲 每个文件都有一个资源管理器不知道的新扩展名 所以我不能
  • scanf 不超过缓冲区溢出

    我有一个缓冲区 我不希望用户输入的字符多于缓冲区可以容纳的字符 以避免缓冲区溢出 我在用scanf并做了这样的事情 char buffer 30 0 scanf 30s buffer 但是 我知道如果用户输入超过 30 个 我会受到保护 但
  • 用户空间和内核线程之间的共享内存

    我正在开发一个涉及 kthreads 的内核应用程序 我创建一个结构数组并在用户空间中使用 malloc 分配内存 然后我调用系统调用 我实现的 并将数组的地址传递到内核空间 在我创建的系统调用处理程序中 我创建了 2 个 kthreads
  • 使用分组依据和按日期排序的 SQL 选择

    我正在使用 SQL Server 2008 我想知道是否可以在一个 select 语句中完成我的查询 而无需子查询 如果记录中的字段在最近 10 个创建的记录中为 true 我想将变量设置为 true 如果该字段在最后 10 个记录中为 t
  • Google GData .Net OAuthUtil.GetAccessToken 400 错误请求

    我正在尝试通过 Google Net GData 客户端库生成 OAuth 访问令牌 我一直在使用中的说明http code google com apis gdata docs auth oauth html http code goog
  • 在数据库中使用DXL导入SSJS脚本库

    我们需要使用 DXL 在数据库中导入 SSJS 库 为此 我们编写了一个 Java 代理 其代码如下 import lotus domino public class JavaAgent extends AgentBase private
  • 堆栈不足以继续安全地执行程序。 ASP.NET MVC 4

    我的搜索功能似乎在无限循环中继续 每次我的调试命中 POST actionresult 下面的操作时都会被触发 在我的 Masterpage cshtml 中 我有以下操作 li Html Action Search Search li 这
  • 递归删除数组键前缀

    我有一个以下格式的数组 每个子数组都以父级的键作为前缀 input array seo text gt array seo text title gt seo text description gt seo text button gt a
  • 一键上传文件

    如何在需要发送文件的 html 中制作一个按钮 允许您选择文件 然后将其发送到我想要的页面上 而不使用按钮来选择文件并使用按钮将其发送到另一个页面 感谢您
  • python3.6 - TypeError:write() 参数必须是 str,而不是 bytes - 但不涉及文件

    以下代码返回错误 我不明白为什么 在Python 3 6上运行 import subprocess import sys import os def execute shell cmd cmd process subprocess Pope
  • Qt 上的“GLib-ERROR **:无法创建管道主循环唤醒:打开的文件太多”

    我正在 Ubuntu 上工作 当我运行程序大约 1 小时后 我收到此错误 GLib ERROR 无法创建管道主循环唤醒 打开的文件太多程序意外完成 当我使用 gdb 运行时 它不会崩溃 我不明白为什么 以及此错误的原因是什么 非常感谢 打开
  • 后台模式下的 iOS 区域监控

    我在我的应用程序中使用区域监控 但遇到了一个问题 但找不到任何答案 区域监控在后台模式下如何工作 根据位置感知 PG 的说法 每次用户的当前位置 跨越边界区域 系统 生成适当的区域事件 为您的应用程序 如果你的 应用程序已经在运行 这些 活
  • 寻找一个 Perl 模块来在共享 RAM 中存储哈希结构

    我想将数据结构持久存储在 RAM 中 并可以从预分叉中访问它 Perl 中的 Web 服务器进程 理想情况下 我希望它的行为类似于 memcached 但不需要单独的守护进程 有任何想法吗 Use 缓存 FastMmap http sear
  • 定义中的预处理器指令? [复制]

    这个问题在这里已经有答案了 可能的重复 C 预处理器 在 define 中使用 if https stackoverflow com questions 2831934 c preprocessor using if inside defi