One of the best (but little known) features of GNU C is the __attribute__ mechanism, which allows a developer to attach characteristics to function declarations to allow the compiler to perform more error checking. It was designed in a way to be compatible with non-GNU implementations, and we've been using this for years in highly portable code with very good results.
Table of Contents
- __attribute__ format
- __attribute__ noreturn
- __attribute__ const
- Putting them together
- Compatibility with non-GNU compilers
- Other References
Note that __attribute__ spelled with two underscores before and two after, and there are always two sets of parentheses surrounding the contents. There is a good reason for this - see below. Gnu CC needs to use the -Wall compiler directive to enable this (yes, there is a finer degree of warnings control available, but we are very big fans of max warnings anyway).
分享到:
相关推荐
GNU CC 是一种基于 GCC(GNU Compiler Collection)的C编译器,它提供了许多扩展功能,其中一个重要的特性就是__attribute__机制。__attribute__允许程序员在声明函数、变量或类型时添加额外的元数据,以便让编译器...
在 C 语言中,`__attribute__` 是 GNU 编译器集合 (GCC) 的一个扩展特性,它允许开发人员向函数、变量或类型添加元数据,从而增强编译时的错误检查能力并优化代码性能。虽然这个特性并不广泛出现在初学者教程中,但...
本文将详细介绍 GCC 的__attribute__扩展功能,__attribute__是 GNU C 的一大特色,它可以设置函数属性、变量属性和类型属性。__attribute__书写特征是:__attribute__前后都有两个下划线,并且后面会紧跟一对圆括弧...
2. **声明中的类型注解 (Type Attributes)**:GNU C允许在声明中添加类型属性,如`__attribute__((aligned))`用于指定对齐要求,`__attribute__((malloc))`用于表示函数返回的新分配内存,还有`__attribute__((no...
在Linux开发及GCC(GNU Compiler Collection)的使用过程中,深入理解`__attribute__`是至关重要的。`__attribute__`是GCC提供的一种特性,用于向编译器传递额外的信息,帮助优化代码、减少错误并提高程序的可读性和...
《GNU C 手册》是学习C语言编程在Linux环境下不可或缺的参考资料,它由GNU组织编写,旨在提供全面、深入的C语言指南。手册详细介绍了GNU C编译器GCC的使用,以及如何在Linux系统中进行程序开发。下面将根据标题和...
__attribute__是GNU编译器(GCC)的一个特性,后来被集成到ARM编译器(armcc)中。通过使用__attribute__,程序员能够以一种非标准的方式向编译器传递指令,以改变函数或变量的属性,优化性能,控制布局或名称修饰等...
1. **内联函数**:C语言标准中没有内联函数的概念,但在GNU C中,通过`inline`关键字,程序员可以请求编译器尝试将函数体插入到每个调用处,以减少函数调用的开销。 2. **变长参数列表**:标准C语言中,函数的参数...
3. **属性指定**:GNU C允许使用__attribute__((packed))等属性来控制变量或结构体的对齐方式,这对于优化内存使用非常有帮助。 ### 五、学习资源推荐 为了更好地学习GNU C,以下是一些推荐的学习资源: 1. **...
7. **GNU扩展**:除了标准C库,GNU C语言库还提供了一系列特有的扩展功能,如varargs宏、setjmp/longjmp、__attribute__等,这些扩展为程序员提供了更多的灵活性和控制力。 8. **线程和进程管理**:在Linux环境下,...
GNU C扩展是GNU编译器集合(GCC)提供的非标准C语言特性,旨在为开发者提供额外的功能和优化手段。这些扩展不仅提高了编程灵活性,还增强了代码的安全性和性能。本文将详细介绍一些常用的GNU C扩展,并通过实例进行...
当编译环境支持GCC时(即`__GNUC__`被定义),则使用`__attribute__((always_inline))`标记函数;否则,不添加任何标记,即默认处理方式。接着定义了一个名为`add`的内联函数,它接受两个整型参数并返回它们的和。 ...
ARM编译器还会提供版本信息,如`__GNUC__`指示使用的是GCC编译器,`__GNUC_MINOR__`和`__GNUC_PATCHLEVEL__`分别表示次要版本和补丁级别。这些信息在调试和升级时非常有用。 5. **其他宏**: 还有一些其他预定...
- **__GNUC__** 和 **__clang__**:这两个宏分别用于GNU Compiler Collection (GCC) 和 Clang 编译器。 - **__weak**、**__packed** 和 **__align** 系列宏:用于定义弱符号、内存对齐属性以及数据打包。 这些宏都...
在C编程环境下,GCC(GNU Compiler Collection)和Glibc(GNU C Library)提供了多种方法来帮助程序员优化代码,提高程序运行效率。以下将详细介绍如何利用这些工具进行程序优化。 1. **类型转换优化**: 在示例...
在GNU C和ARM编译器中,`__attribute__((section("section_name")))`可以将定义的函数或数据放入指定的内存段。 以MDK(Keil uVision)和STM32开发为例,虽然可以直接修改链接文件(如`.sct`文件)来控制程序在内存...
本课程是《C语言嵌入式Linux编程》第5期主要内容包括:Linux内核、驱动程序中,GNU C对标准C扩展的大量的语法。学员在掌握这些扩展语法的基础上,消除阅读Linux内核、驱动、GNU开源软件的障碍。能够看懂这些“稀奇...
GNU C 是 GNU 编译器集合 (GCC) 对标准 C 语言的一系列扩展,它增强了标准 C 的功能,包括优化、代码布局和安全性检查。在Linux内核开发中,GNU C 扩展被广泛使用,使得GNU CC成为编译内核的首选编译器。下面我们将...
在C语言中,如果你想要在`main`函数开始之前执行特定的函数...在GCC中,`__attribute__((constructor))`和`__attribute__((destructor))`是很好的选择,而在VC中,我们需要利用`.CRT`段来安排初始化和清理函数的执行。