Linux gcc支持的语法 __attribute__ 属性设置
__attribute__实际上是gcc专有的一种语法,是用来设置函数属性、变量属性、类属性的
语法:之前在C中的结构体对齐中提到过,当时是用来告诉编译器这个结构体的对齐方式
,其实他还有很多种用法,可以设置很多的属性。
语法: __attribute__ (parameter)
对于变量:
int a __attribute__ ((xxxxx)) = 10; //也可以放在变量的前面,比较灵活
int a __attribute__ ((xxxxx)); // 也可以放在变量的前面,比较灵活
对于结构体:
struct info{
.....
} __attribute__ ((xxxxx));
struct info{
.....
} __attribute__ ((xxxxx)) sb;
struct info{
.....
}sb __attribute__ ((xxxxx));
对于函数:
void __attribute__ ((xxxxx)) func(void); //注意可以放在void的前面,总之只要
void func(void) __attribute__ ((xxxxx)); //是在 func(void) 的左右都行
void __attribute__ ((xxxxx)) func(void)
{
}
例如:
struct fd{
...
...
}__sttribute__ ((align(4))) fd; //指定struct fd类的字节对齐方式
int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
这里涉及到两个属性:
weak属性:使得cpu_mmc_init是一个弱标号(我估计是内部链接),而不是一个全局标号
,另外即使cpu_mmc_init函数没有定义,调用cpu_mmc_init编译器也是不会报错的,不过
没有意义,所以一般会和alias属性连用。
alias属性:指定cpu_mmc_init是后面 "__def_mmc_init" 函数的一个别名,所以
cpu_mmc_init函数如果没有定义,那么调用cpu_mmc_init其实就是会调用__def_mmc_init
函数,如果定义就不会调用这个了,注意__def_mmc_init函数是一定要有定义的。
unused属性:指定这个变量或者函数如果没有被使用也不要输出警告信息。
section属性:指定该函数或者是变量最后链接在我们的指定段中,用法:section
(".u_boot_cmd"),注意了,我们链接脚本中使用的段名其实就是一个变量的形式,他是
不需要定义的,能够直接用,也就是说,我们可以在连接脚本中随意使用一个段名,如果
我们在我们的C中有该段的内容就会链接到该段中,如果没有就直接跳过。注意在我们的
内核驱动中一般是用 __section__ 来代替我们的section,具体差别不详。
__attribute__ ((__section__(".u_kernel_cmd")))
align属性:设置字节对齐
Linux gcc支持的语法 __attribute__ 属性设置的更多相关文章
- Linux之文件权限属性设置
文件权限属性设置 1.chown命令 chrep命令 chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组. 用户可以是用户或 ...
- <2013 08 09> __attribute__是GCC编译器特有语法
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关,g ...
- Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用
Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用 在串口编程模式下,open未设置O_NONBLOCK或O_NDELAY的情况下. c_cc[VTIME]和c_cc[VMIN] ...
- Winform下让你的DataGridView控件支持点语法(即显示list中的子对象属性)
前言: 不想看前言的直接去看正文吧!另外文末有彩蛋. DataGridView可以支持多种数据源格式,比如DataTable和List. DataTable没啥特殊的,本身就是一张二维的表,可以和Da ...
- JS window对象 Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL。 语法: location.[属性|方法]
Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL. 语法: location.[属性|方法] location对象属性图示: location 对象属性: lo ...
- CSS-基本语法/引用/文本设置/选择器/css3属性
CSS-基本语法/引用/文本设置 css基本语法及页面引用 css基本语法 css的定义方法是: 选择器 { 属性:值; 属性:值; 属性:值;} 选择器是将样式和页面元素关联起来的名称,属性是希望设 ...
- linux gcc安装
2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.java.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0 ...
- Swift3.0P1 语法指南——属性
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- linux c学习笔记----互斥锁属性
转自:http://lobert.iteye.com/blog/1762844 互斥锁属性 使用互斥锁(互斥)可以使线程按顺序执行.通常,互斥锁通过确保一次只有一个线程执行代码的临界段来同步多个线程. ...
随机推荐
- apache make
https://jingyan.baidu.com/article/7e4409533d7f0f2fc0e2ef91.html 1. apr apr-util http://archive.apach ...
- bzoj2783 树
第一行是两个整数N和S,其中N是树的节点数. 第二行是N个正整数,第i个整数表示节点i的正整数. 接下来的N-1行每行是2个整数x和y,表示y是x的儿子. 输出格式: 输出路径节点总和为S的路径数量. ...
- 替换res\drawable中的图片
现象 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是 ...
- maven install 跳过测试
mvn命令跳过测试:mvn install -Dmaven.test.skip=true 测试类不会生成.class 文件mvn install -DskipTests 测试类会生成.class文件 ...
- httpclient pool帮助类
摘自爬虫类 用于频繁请求减少网络消耗 import java.io.IOException; import java.io.InterruptedIOException; import java.i ...
- python一些不错的东西
1 cmd命令行写代码的加强版 ipython 直接用pip安装就可以 php install Ipython 2 不错的数据分析 机器语言的 Python(x,y)是一个基于python的科 ...
- div+css 命名规则
编写网页的时候,一般都没有把命名规则认真对待.在结合语义以及搜索优化两方面给出了一套命名方案,对增强阅读性.规范性和提高开发效率是有帮助的,当然,这方面的规范,仁者见仁智者见智,网上有许多前辈们以经验 ...
- python学习-day 1
Python开发IDE(工具)Pycharm.eclipse1.循环while 条件 #循环体 #条件为真则执行 #条件为假则执行break用于退出所有循环continue用于退出当前循环 2.Pyc ...
- HTML5 APP
jquery,bootstrap http://www.bcty365.com/content-74-2640-1.html JS运行效率,浏览器 html+js+css3 css3是在css的 ...
- padding margin border 和元素大小
元素占用宽度 = 元素宽度+padding+border+margin 注意margin只是隔开元素,不会使得元素变大,而padding会使得元素变大,也就是说 元素真实宽度=元素宽度+padding ...