GCC属性

 

gcc扩展功能极多,__attribute__是gcc的关键字,用以描述变量属性,gcc.info中都有详细介绍。

下面举几例内核中常见的:


__attribute__((regparm(0))) int printk(const char * fmt, ...) __attribute__ ((format (printf, 1, 2)));禁止printk使用寄存器传递调用参数,并将printk的参数1作为printf格式串,从参数2开始检查其类型;

void __switch_to(struct task_struct *prev, struct task_struct *next) __attribute__((regparm(3))) ;__switch_to保留3个寄存器用作传递参数;

void __attribute__ ((__section__ (".text.init"))) mem_init();将mem_init编绎到.text.init段;

struct tasklet_head tasklet_vec[32 ] __attribute__((__aligned__((32)),__section__(".data.cacheline_aligned"))) ;将tasklet_vec[32]编绎到.data.cacheline_aligned段,并将它在32字节边界上对齐;

void do_exit(long error_code)__attribute__((noreturn));do_exit不会返回;

struct Xgt_desc_struct { unsigned short size; unsigned long address __attribute__((packed));};将address在结构中紧凑排列。


用__attribute__还可以将一个函数声明为weak, 当没有其他同名函数声明时调用weak, 有其他同名函数时调用其他同名函数.

你可能感兴趣的:(GCC属性)