c - 类函数宏的参数名称中的前导下划线是否有意义?

标签 c linux gcc linux-kernel c-preprocessor

我遇到的一些预处理器宏的参数名称包含前导下划线;例如,在 Linux 内核中:

#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)

这些参数看起来就像常规的宏参数一样,所以我不明白为什么作者决定在每个参数名称前加上一个下划线。与 _name 的连接是否有意义,或者下划线只是作者选择使用的约定?

最佳答案

不,没有特殊意义:这些是常规标识符。我猜测作者为什么决定添加这样的下划线是为了使这些属性的组成更清晰:

dev_attr_##_name

更容易阅读
dev_attr##name

然而,__ATTR 看起来很可疑:在 C 中,标识符以下划线开头,后跟大写字母或另一个下划线,are reserved for the implementation。 .在本例中,它是两个下划线,所以我希望 __ATTR 是一个系统宏。

关于c - 类函数宏的参数名称中的前导下划线是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16287303/

相关文章:

c - 运行独立共享库时 gdb 不加载符号

gcc - "gcc -s"和 "strip"命令有什么区别?

ubuntu - ubuntu 13.04 中太多级别的符号链接(symbolic link)/usr/bin/gcc

c++ - SDL 在 1920x1080 上设置窗口显示模式

linux - 如何在文件中的特定字符串附近附加一个字符串?

php - 从 PHP 启动 shell 命令

linux - riscv/gcc/ld - "Undefined reference to printf"使用自己的脚本链接

c - 如何从右到左填充变量 Char?

c - 正确填充二维数组

c - 初学者C分配