__attribute__

GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

关键字__attribute__ 也可以对结构体(struct )或共用体(union )进行属性设置。大致有六个参数值可以被设定,即:aligned, packed, transparent_union, unused, deprecated 和 may_alias 。

1、aligned (alignment)

该属性设定一个指定大小的对齐格式(以字节 为单位),例如:

struct S {

short b[3];

} __attribute__ ((aligned (8)));

typedef int int32_t __attribute__ ((aligned (8)));

该声明将强制编译器确保(尽它所能)变量类 型为struct S 或者int32_t 的变量在分配空间时采用8 字节对齐方式。

2、packed

使用该属性对struct 或者union 类型进行定义,不使用内存对齐,packed_struct 类型的变量数组中的值将会紧紧的靠在一起,aligned 属性使被设置的对象占用更多的空间,相反的,使用packed 可以减小对象占用的空间。

3、unused

使用该属性,表示可能用不到,函数参数中使用,表示参数可以不传,编译器也不会报错

//-------------------------------------------

__attribute__ 可以对函数属性进行设置,有const,noreturn

1、

__attribute__((noreturn)) 表示函数可能没有返回值,编译器处理时,没有返回值也不会报错

链接:http://www.cnblogs.com/astwish/p/3460618.html 有详细介绍

时间: 2024-09-29 05:28:20

__attribute__的相关文章

__attribute__系列之介绍篇

1.什么是__attribute__? __attribute__机制是GNU C的一大特色,它可以设置函数属性.变量属性和类型属性等.可以通过它们向编译器提供更多数据,帮助编译器执行优化等. 2.__attribute__语法格式? https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Attribute-Syntax.html#Attribute-Syntax __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面

__attribute__系列之aligned

__attribute__的属性aligned,作用是为了设置字节对齐. aligned是对 变量和结构体进行 字节对齐的属性设置. 通过aligned属性设置(aligned(对齐字节数)),可以显示的设置对齐字节数,如果使用缺省属性(aligned()),编译器会有一个默认的字节对齐数. aligned特性:aligned属性只能增加对齐字节数,不能减少到比默认对齐字节数还小. aligned支持的最大对齐字节数由linker决定. aligned (alignment) This attr

GNU C __attribute__ 机制简介

摘要: 在学习linux内核代码及一些开源软件的源码(如:DirectFB),经常可以看到有关__attribute__的相关使用.本文结合自己的学习经历,较为详细的介绍了__attribute__相关语法及其使用. --------------------------------------------------------- 声明: 此文为原创,欢迎转载,转载请保留如下信息 作者:聂飞(afreez) 北京-中关村 联系方式:[email protected] (欢迎与作者交流) 初次发布

基于Linux下的GCC编译器的内部预宏定义与__attribute__属性

***************************************************************************************************************************** 作者:EasyWave                                                                                    时间:2015.02.20 类别:Linux应用-GCC编

Objective-C 源码初探 __attribute__

#import <Foundation/Foundation.h> #define onExit\ __strong void (^block)() __attribute__((cleanup(cleanup),unused)) = ^ __attribute__((constructor)) void ExecuteBefore_main(){ printf("ExecuteBefore_main\n"); } __attribute__((destructor)) v

IOS UIKIT_EXTERN, __attribute__((visibility (&quot;default&quot;))) 是啥?

问题提出 在学习IOS时候,碰到一个函数NSStringFromCGPoint (UIGeometry.h) 其原型是 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); 原型分析 NSString* , CGPoint好理解, 前者是库自带的字符串类型, 后者是一个表示2维平面上的点的结构体.但是UIKIT_EXTERN是什么呢?查找发现 UIKitDefines.h 1 #ifdef __cplusplus 2 #define

__attribute__((packed))的作用

__attribute__((packed))的作用 在结构体变量的声明中,经常可以看到__attribute__((packed))修饰符.这是做什么用的呢?请看一下程序: #define u8 unsigned char #define u16 unsigned short #define u32 unsigned int int main() { struct { u16 reg; u32 test2; u8 test1; u8 val[256]; } msg = { .reg = 0x8

STM32学习笔记之__attribute__ ((at())绝对定位分析

指定数据存贮的绝对地址 这里其实就是要搞懂2个C语言关键字就可以了. 首先,__attribute__,这个是 用来指定变量或结构位域的特殊属性,该关键字后的双括弧中的内容是属性说明. 然后是at关键字,该关键字可以用来设置变量的绝对地址,也就是你可以通过这个关键字,指定某个变量处于内存里面的某个给定的地址. 综合起来,就是设置变量处于0X68000000这个地址. 学习STM32也会遇到这样的绝对定位的问题,如下: uint8_t   UART_RX_BUF[1024]   __attribu

__attribute__系列之cleanup

cleanup属性:当变量离开它的作用域时,设置的cleanup_function函数将被调用. cleanup (cleanup_function) The cleanup attribute runs a function when the variable goes out of scope. This attribute can only be applied to auto function scope variables; it may not be applied to param

gcc之__attribute__简介及对齐参数介绍

GNU C的一大特色就是__attribute__机制.__attribute__机制可以设置函数属性(Function Attribute).变量属性(Variable Attribute)和类型属性(Type Attribute). __attribute__语法格式为:__attribute__((attribute-list)). __attribute__对结构体(struct)或共用体(union)进行属性设置: 大致有六个参数值可以被设定,即:aligned,packed,tran