c - 数字常量之前的预期说明符限定符列表

标签 c macros

我不是宏向导,我想知道是否有一种方法可以使用 _Generic 宏来根据常量评估函数。截至目前,我的宏如下:

#define getData(data) _Generic((data), 1: printone, default: printdefault)(data)

如果这在 C 中不可能做到,我欢迎其他建议!我认为没有必要,但如果需要更多代码来回答这个问题,那么我很乐意提供。

谢谢!

最佳答案

这是不可能的。通用关联的左侧必须1由类型或关键字default组成。

由于您要对常量进行硬编码,因此没有理由不对类型进行硬编码:

#define getData(data) _Generic((data), int: printone, default: printdefault)(data)

常量 1 始终具有 int 类型,但如果要使用具有较大值的常量(可能具有其他有符号类型),只需将这些类型添加到 _Generic 选择中即可。

以下内容将涵盖仅使用数字形成的所有可能的有符号整数常量。换句话说,任何整数常量,即使是一个很大的常量,例如 9223372036854775807 都将被覆盖:

#define getData(data) _Generic((data), int: printone, 
                                       long: printonel, 
                                       long long: printonell, 
                                       default: printdefault)(data)
<小时/>

1(引自 ISO/IEC 9899:201x 6.5.1.1 通用选择 1。)
通用关联:
类型名称:赋值表达式
默认值:赋值表达式

关于c - 数字常量之前的预期说明符限定符列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42522710/

相关文章:

c++ - 有没有办法在不链接到-framework ApplicationServices 的情况下运行c 或c++ 文件?

macros - 如何通过 Erlang 的预处理器有条件地排除整个子句?

macros - haxe:从haxe.macro.Position获取行号和行位置

objective-c - 在 Objective-C 中存储 iOS 应用程序常量

emacs - 为什么在 Lisp 中将代码视为数据很有用

c - dlopen 会为具有相同文件的两次调用产生相同的句柄吗?

c++ - 重置 C/C++ 预处理器 #line 物理文件/行

无法理解程序(结构数组的排序)

python - 将 c 结构体返回给 python 时出错

oracle - PL/SQL 宏,就像 C 编程中的那样