类型重载宏

2024-01-31

我有一堆 printf 调试辅助宏,如果不指定类型,那会很酷,您可以做些什么来允许 c 中的宏重载(如果在 gcc 4.3 中可用,则可以是 gcc 特定的)。我想也许是 typeof 但显然这不起作用。

示例宏(我还有一些 ascii 终端颜色的东西,我记不清了)

#ifdef _DEBUG
#define DPRINT_INT(x) printf("int %s is equal to %i at line %i",#x,x,__LINE__);
.
.
.
#else
#define DPRINT_INT(x)
.
.
.
#endif

尝试这个;它使用 gcc 的 __builtin 方法,并尽可能自动为您确定类型,并生成一个简单的 DEBUG 宏,您无需指定类型。当然,你可以将 typeof(x) 与 float 等进行比较。

#define DEBUG(x)                                                 \
  ({                                                             \
    if (__builtin_types_compatible_p (typeof (x), int))          \
        fprintf(stderr,"%d\n",x);                                \
    else if (__builtin_types_compatible_p (typeof (x), char))    \
        fprintf(stderr,"%c\n",x);                                \
    else if (__builtin_types_compatible_p (typeof (x), char[]))  \
        fprintf(stderr,"%s\n",x);                                \
    else                                                         \
        fprintf(stderr,"unknown type\n");                        \

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

类型重载宏 的相关文章

随机推荐

  • Android:将静态库合并为一个

    我使用 Android NDK r8 生成多个静态库包括 BUILD STATIC LIBRARY 我成功得到 lib1 a lib2 a lib3 a等 现在我想将这些静态库合并为一个 我尝试使用 Android NDK 中的 ar ex
  • 为什么有 BigInteger(String) 而没有 BigInteger(long)?

    在 Java 中 要将 String 转换为 BigInteger 可以使用构造函数new BigInteger String 但要转换 int long 你可以使用工厂函数BigInteger valueof long 这是为什么 Mor
  • AngularDart 组件和模型绑定

    是否可以将 AngularDart ngComponent 绑定到模型 然后从组件操作该模型 并查看 ngComponent 外部更改之外的更改 例如
  • WordPress - $wpdb->插入 - MySQL NOW()

    是否有可能在 wpdb gt insert 调用中使用 MySQL NOW 当我使用以下代码时 NOW 不起作用 data array id gt NULL order gt serialize POST data Order create
  • 从另一个 .ipynb 文件导入函数

    我在名为 functions ipynb 的文件中定义了一个 hello world 函数 现在 我想使用 导入函数 导入另一个文件中的函数 我确信它们位于同一个文件夹中 但是 它仍然显示 ImportError 没有名为函数的模块 顺便说
  • fputs和fflush,写入和缓冲过程

    我对 C 中的写入处理如何进行感到困惑 所以我有一个字符串 s 我想将其写入输出 为此 我使用 fputs fputs s stdout 但显然这不会写入输出 而只是收集数据进行写入 具体是在哪里收集的 所以我必须等到程序退出或者直到我调用
  • 如何正确使用SerialPort.DiscardInBuffer?

    我编写了一个应用程序 它以非常快的速度从串行设备读取数据 然而 串行端口对象无法触发收到数据 https learn microsoft com en us dotnet api system io ports serialport dat
  • 删除单链表中的元素

    在此代码中 我删除链接列表中的元素 11 gt 12 gt 13 gt 14 gt 15 gt 12 gt 16 如果我想删除 12 它只删除第一次出现的元素 即 o p 将是 11 gt 13 gt 14 gt 15 gt 12 gt 1
  • Orgmode:如何过滤掉缠结的块?

    在 Orgmode 中 有没有办法仅缠结子树中与特定标签匹配 或不匹配 的块 例如使用以下代码 A BEGIN SRC c printf Not exported END SRC B D BEGIN SRC c printf Exporte
  • 从 Flutter 中的 Firestore 集合中获取所有内容

    我在我的项目中设置了 Firestore 我创建了名为的新集合categories 在此集合中 我创建了三个具有唯一 ID 的文档 现在我想在我的 Flutter 应用程序中获取这个集合 所以我创建了CollectionReference
  • 测试使用 Hooks 获取数据的 React 组件

    我的 React 应用程序有一个组件 可以从远程服务器获取要显示的数据 在前钩时代 componentDidMount 是该去的地方 但现在我想为此使用钩子 const App gt const state setState useStat
  • 从 PHP 数组中删除“<”和“>”标签

    我有一个像这样的数组 Array 0 gt lt email protected cdn cgi l email protection gt 1 gt lt email protected cdn cgi l email protectio
  • 创建两个日期之间所有天数的向量

    R 中是否有一种简单的方法可以列出两个指定日期之间发生的所有有效日期 例如 我想要以下输入 itemizeDates startDate 12 30 11 endDate 1 4 12 生成以下日期 12 30 11 12 31 11 1
  • 如何在rails活动记录查询中使用包含内部的联接?

    我只是想改进查询 从而提高应用程序的性能 Student includes parents gt emails where emails email address is not null and emails email address
  • VBA 用户窗体:相同字体大小的文本根据 Top 属性更改大小

    我有一个用户表单 在多个不同控件的多种情况下 我观 察到具有相同宽度 高度 字体和字体大小的对象显示不同的字体大小 具体取决于它们在用户窗体上的放置位置 上面是一个例子 这两个文本框的宽度均为 26H 和 48W Left 为 90 两者的
  • 将带有两个参数的函数应用于列

    你能用两个不同列中的值作为参数创建一个 pandas 函数吗 我有一个函数 如果两列的值在同一范围内 则返回 1 否则返回 0 def segmentMatch RealTime ResponseTime if RealTime lt 56
  • 响应正文为空,状态为 200

    我正在使用 Angular 的新 HttpClient 来处理请求 当我使用旧的 http 时 我的组件返回正文文本很好 但现在正文文本为空 我不明白 服务器正在发送它 但我总是收到 null 作为正文 响应的所有其他部分都是正常的 状态
  • UI - 如何同时显示 GridView 和 Linear 布局

    我想在网格视图下方显示 GridView 带有文本和图像 和文本框组 问题是我的 gridview 没有固定的条目 它在 1 和 10 之间变化 我想根据网格视图中的项目数量调整它的大小 我怎样才能做到这一点 在哪里可以获取JAVA代码中g
  • 如何检测 Android 中 ListView 项目的双击? [复制]

    这个问题在这里已经有答案了 我想做一些像 instagram 应用程序这样的事情 当用户在照片上双击它时 它就像 而他只按一次标签 它会以全屏方式打开 如果您不需要防止单击被触发 您可以做得更简单 Override public void
  • 类型重载宏

    我有一堆 printf 调试辅助宏 如果不指定类型 那会很酷 您可以做些什么来允许 c 中的宏重载 如果在 gcc 4 3 中可用 则可以是 gcc 特定的 我想也许是 typeof 但显然这不起作用 示例宏 我还有一些 ascii 终端颜