c语言attribute
㈠ 关于c语言的__attribute__
__attribute__ 是一个gcc的关键字,自己看吧,用法比较多
https://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/gcc/variable-attributes.html
㈡ C语言的定义问题,关于__attribute__的用法,望大家帮忙解答
便于记忆和阅读程序,GPIO_T是代表io口时钟的结构体,都是结构体,一样的标识,不利于阅读
㈢ c语言[Error] expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
(1)要加 #include <time.h> 用于 time(0) 调用
(2)这4个要加分号,作为函数原型声明。
int jia(int x,int y);
int jian(int x,int y);
int cheng(int x,int y);
int chu(int x,int y);
(3)这两句的次序,要先写声明,后写语句
int x,y,z,count=0,i,a,h;
srand(time(0));
(4)开关语句 结束处,漏了一个 闭花括号
switch(h){ ...;
case 4: ....break;
}; // 这里要加闭花括号
scanf("%d",&a);
另外提醒,你的除法运算 是 整除, q=x/y, 例如 8/9 得 0,是你希望的吗?
㈣ C语言 attribute的问题
对于
你的问题
不太明白。
#define
__init_call
__attribute__
((unused,__section__
(".initcall.init
")))
参考GCC说明,意思是说所有以__init_call
前缀
定义
的
函数
在链接
过程
中都放到名字为.initcall.init的段(section)里面。也就是说,如果一个函数冠以__init_call,那么它在编译链接的时候就会放到.initcall.init这个段里面。
㈤ C语言为什么可以重写标准库函数
这个问题是一个好问题,我之前也没思索过或者尝试过,
首先我们弄清楚一件事,函数声明可以放在任何头文件,实现可以放在任何实现该函数的源文件中,那么就存在一个问题:
编译时,到底优先去使用哪一个,为什么没有把标准库中的函数扩展过来;在windows下标准库被编译成了msvcr120.dll(msvcr100.dll,这里指release版),所以并不是扩展到代码中,而是在调用时动态链接;
而题主在其中自定义文件中实现了该函数,所以编译时找到了该函数的实现,并不会去链接dll(这应该是编译器做的一些工作,确定系统的dll需要加载哪些),所以题主的程序执行时就只有一份fputc了,并不冲突。
题主可以通过快捷键跳转声明就知道了,VS下,点选fputc实现函数按F12跳转到声明,指向的是stdio.h,再按一次跳转到你自己的定义了。Qt的话使用F2。
大概就是这样子了,可追问。
㈥ 有精通C语言的吗帮我解释下下面这条语句。
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));
这句话可以这么理衫宏兄解或袭:正常应该这么写:u8 USART_RX_BUF[USART_REC_LEN];
u8 是类型,指 8位无符号型。后面是数组名及数组长度,这都好理解。
难理解的是__attribute__ ((at(0X20001000))),这个应该是每个C编译器对标准语言的扩充,及强制指定数组的起始内存地址。编译语法可能是: <类绝运型> 变量名<[数组长度]> [扩充编译属性]
㈦ 浅尝辄止22-C语言属性-alias
C语言里有时会看到 __attribute__ 这个东西,它就是表示要描述属性了。
gcc的通用属性可以参考 Common-Function-Attributes
alias属哗清性可型判以给符号起一个别名,两个名字用起乱租前来就会是一样的效果。
三个名字都可以调用到原始函数,所以每个名字都是有效的。
㈧ __attribute__((section("__CONFIG1.sec,code")))在C语言中这是啥意思啊大侠帮解释一下呗
《C30编译器用户指南》中有介绍,给个邮箱给你发过去。
2.3.1 指定变量的属性
编译器的关键字 __attribute__ 用来指定变量或结构位域的特殊属性。关键字后的
双括号中的内容是属性说明。下面是目前支持的变量属性:
• address (addr)
• aligned (alignment)
• boot
• deprecated
• fillupper
• far
• mode (mode)
• near
• noload
• packed
• persistent
• reverse (alignment)
• section ("section-name")
• secure
• sfr (address)
• space (space)
• transparent_union
• unordered
• unused
• weak
weak也可以通过在关键字前后使用 __(双下划线)来指定属性(例如,用
__aligned__代替aligned)。这样将使你在头文件中使用它们时不必考虑会出现与
宏同名的情况。
要指定多个属性,可在双括号内用逗号将属性分隔开,例如:
__attribute__ ((aligned (16), packed))。
㈨ C语言常用词汇及函数有那些
常用词汇:
1、short:修饰int,短整型数据,可省略被修饰的int。
2、long:修饰int,长整型数据,可省略被修饰的int。
3、long long:修饰int,超长整型数据,可省略被修饰的int。
4、signed:修饰整型数据,有符号数据类型。
5、unsigned:修饰整型数据,无符号数据类型。
6、restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。
7、return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。
8、continue:结束当前循环,开始下一轮循环。
9、break:跳出当前循环或switch结构。
10、goto:无条件跳转语句。
11、if:条件语句,后面不需要放分号。
12、else:条件语句否定分支(与if连用)。
13、switch:开关语句(多重分支语句)。
14、case:开关语句中的分支标记,与switch连用。
15、default:开关语句中的“其他”分支,可选。
常用函数:
1、int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z'),返回非0值,否则返回0。
2、int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0。
3、int abs(int i) 返回整型参数i的绝对值。
4、double cabs(struct complex znum) 返回复数znum的绝对值。
5、double fabs(double x) 返回双精度参数x的绝对值。
6、long labs(long n) 返回长整型参数n的绝对值。
㈩ __attribute__详解及应用
attribute 是一个编译属性,用于向编译器描述特殊的标识、错误检查或高级优化。它是GNU C特色之一,系统中有许多地方使用到。 attribute 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute)等。
attribute 格式
其位置约束为:放于声明的尾部“;”之前。
函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。
1. format
语法为 attribute ((format( NSString , F, A))),可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译乎和伍器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配。format (archetype, m, n),第一个参数传递archetype指定为哪种类型,string-index指定格式化字符串的位置,n指定可变参数检查开始的位置。
在岁或Objective-C 中通过使用 NSString 格式达到同样的效果,就像在 NSString +stringWithFormat: 和 NSLog() 里使用字符串格式一样
在使用NSLog函数进行输出时,如果我们传入的可变参数没有在格式化字符串中使用,编译器会提示警告,如下:
2.constructor与destructor
constructor属性可以指定函数在main函数执行之前进行调用,与之对应destructor可以指定某个函数在main函数执行结束之后再执行。这是一种非常强大的机制,在实际应用中也非常频繁,例如对以一个拥有模块化和路由功能的应用程序,可以通过这种方式来自动化的进行路由注册(无需手动调用),需要注意,constructor与destructor属性都可以设置一个优先级参数,优先级高的函数会先执行(0-100的优先级为系统保留)
3. unavailable
告诉编译器该方法不可用,如果强行调用编译器会提示错误。比如某个类在构造的时候不想直接通过init来初始化,只能通过特定的初始化方法()比如单例,就可以将init方法标记为unavailable;
实际上unavailable后面可以跟参数,显示一些信息,如:
4.objc_root_class
表示这个类是一个根类(基类),比如NSObject,NSProxy.
5.overloadable
用于c语言函数,可以定义若干个函数名相同,但参棚物数不同的方法,调用时编译器会自动根据参数选择函数原型:
6. objc_subclassing_restricted
指明当前类型不能有子类,相当于final关键字,语法为 attribute ((objc_subclassing_restricted))。例如:
7. objc_requires_super
表示子类重写当前类的方法时,必须要调用super函数,否则会有警告。语法为 __attribute__((objc_requires_super)) ,例如:
8.objc_designated_initializer
指定内部实现的初始化方法,系统宏NS_DESIGNATED_INITIALIZER展开即为该指令,语法为 __attribute__((objc_designated_initializer)) 。例如:
当一个类存在方法带有NS_DESIGNATED_INITIALIZER属性时,它的NS_DESIGNATED_INITIALIZER方法必须调用super的NS_DESIGNATED_INITIALIZER方法。它的其他方法(非NS_DESIGNATED_INITIALIZER)只能调用self的方法初始化。
http://fighting300.com/2016/06/12/iOS-attribute/
https://www.jianshu.com/p/965f6f903114
https://www.jianshu.com/p/29eb7b5c8b2d
https://cloud.tencent.com/developer/article/1622209