__attribute__((__const__))
时间: 2023-11-29 13:44:14 浏览: 34
__attribute__((__const__))是GCC编译器的一个特性,它用于告诉编译器一个函数不会修改任何全局变量或静态变量的值,也不会调用任何非const函数。这意味着,如果函数的输入参数相同,则函数的输出结果也必须相同。因此,编译器可以选择在程序的多个位置调用该函数,并缓存其返回值,以避免重复计算。这个特性可以提高程序的性能和可读性。
举个例子,如果我们有一个函数,它的返回值只依赖于输入参数,而不依赖于任何全局变量或静态变量的值,那么我们可以使用__attribute__((__const__))来告诉编译器这个函数是一个const函数,从而让编译器进行优化。
例如:
```c++
int square(int x) __attribute__((const));
int main() {
int a = square(5);
int b = square(5);
return 0;
}
int square(int x) {
return x * x;
}
```
在上面的例子中,由于square函数被标记为const函数,编译器可以选择在程序的多个位置调用该函数,并缓存其返回值,以避免重复计算。因此,a和b的值都将是25。
相关问题
__attribute__
`__attribute__` 是一个 GCC 编译器的扩展语法,它可以用来修饰变量、函数、类型和代码段等,以达到特定的目的。常见的用途包括:
- `__attribute__((packed))`:告诉编译器对结构体进行紧凑排列,不使用对齐字节;
- `__attribute__((aligned(n)))`:告诉编译器对变量进行对齐,n 表示对齐字节数;
- `__attribute__((noreturn))`:告诉编译器函数不会返回,可以用于优化代码;
- `__attribute__((deprecated))`:告诉编译器函数已经过时,不建议使用;
- `__attribute__((const))`:告诉编译器函数不会修改任何全局变量或静态变量;
- `__attribute__((format))`:告诉编译器函数参数和格式字符串的对应关系,可以用于检查格式化字符串的安全性。
需要注意的是,`__attribute__` 不是标准的 C 或 C++ 语言特性,它只能在 GCC 编译器下使用。在其他编译器下,可能会有相似的语法扩展,但具体的使用方法和效果可能会有所不同。
DEVICE_ATTR
"DEVICE_ATTR"是Linux内核中的一个宏定义,用于定义一个设备(device)的属性(attribute)。它定义了一个名为"dev_attr_<name>"的静态结构体实例,其中"<name>"是属性的名称,该结构体包含了属性的名称、读取函数和写入函数等信息。
以下是一个示例"DEVICE_ATTR"的定义:
```
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
```
其中,参数含义如下:
- "_name":属性名称,类型为字符串;
- "_mode":属性文件的访问权限,包括读/写、读和写权限等;
- "_show":读取属性值的函数,类型为"ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf)";
- "_store":写入属性值的函数,类型为"ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)"。
通过使用"DEVICE_ATTR"宏定义,可以方便地为一个设备添加新的属性,并且在sysfs文件系统中创建相应的属性文件,从而实现对设备的属性进行读取和写入操作。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)