function attributes, MDK
__attribute__((attribute1,attribute2, ...))
__attribute__((__attribute1__,__attribute2__, ...))
void * Function_Attributes_malloc_0(int b) __attribute__((malloc));
static int b __attribute__((__unused__));
Table 9-3 Function attributes that the compiler supports, and their equivalents
| Function attribute | Non-attribute equivalent |
|---|---|
__attribute__((alias)) |
- |
__attribute__((always_inline)) |
__forceinline |
__attribute__((const)) |
__pure |
__attribute__((constructor[( |
- |
__attribute__((deprecated)) |
- |
__attribute__((destructor[( |
- |
__attribute__((format_arg( |
- |
__attribute__((malloc)) |
- |
__attribute__((noinline)) |
__declspec(noinline) |
__attribute__((no_instrument_function)) |
- |
__attribute__((nomerge)) |
- |
__attribute__((nonnull)) |
- |
__attribute__((noreturn)) |
__declspec(noreturn)) |
__attribute__((notailcall)) |
- |
__attribute__((pcs(" |
- |
__attribute__((pure)) |
- |
__attribute__((section(" |
- |
__attribute__((unused)) |
- |
__attribute__((used)) |
- |
__attribute__((visibility(" |
- |
__attribute__((weak)) |
__weak |
__attribute__((weakref("target"))) |
- |
Usage
void AddGlobals(void) __attribute__((always_inline));
__attribute__((always_inline)) void AddGlobals(void) {...}
__attribute__((used)) is safer than __attribute__((unused)), and __attribute__((noinline)) is safer than __attribute__((always_inline)).1. __attribute__((alias))
Examples
#include <stdio.h>
void foo(void)
{
printf("%s\n", __FUNCTION__);
}
void bar(void) __attribute__((alias("foo")));
void gazonk(void)
{
bar(); // calls foo
}
2. __attribute__((always_inline))
此函数属性指示函数必须内联。无论函数的特征如何,编译器都会尝试内联该函数。但是,如果这样做会导致问题,编译器不会内联函数。例如,递归函数只内联一次。
这个函数属性是ARM编译器支持的GNU编译器扩展。它具有相当__forceinline关键字。
Examples
static int max(int x, int y) __attribute__((always_inline));
static int max(int x, int y)
{
return x > y ? x : y; // always inline if possible
}
3. __attribute__((const))
许多函数只检查传递给它们的参数,除了返回值没有作用。这是一个比__attribute__((pure))更严格的等级,因为允许读取全局内存是不是一个函数。如果已知函数只对其参数进行操作,则它可能受到常见的子表达式消除和循环优化的影响。
此函数属性是ARM编译器支持的GNU编译器扩展。它的关键字等效_pure
int Function_Attributes_const_0(int b) __attribute__((const));
int Function_Attributes_const_0(int b)
{
int aLocal=;
aLocal += Function_Attributes_const_0(b);
aLocal += Function_Attributes_const_0(b);
return aLocal;
}
在此代码中,可能只调用一次函数_properties_const_0,结果加倍以获得正确的返回值。
4.
function attributes, MDK的更多相关文章
- Uboot命令U_BOOT_CMD分析
其中U_BOOT_CMD命令格式如下: U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help") 各 ...
- Backbone源码分析(二)
在传统MVC框架模式中,Model承担业务逻辑的任务.Backbone作为一个mvc框架,主要的业务逻辑交由Model与Collection来实现.Model代表领域对象,今天主要学一下Model源码 ...
- RequireJS与Backbone简单整合
前言 昨天我们一起学习了Backbone,最后做了一个备忘录的例子,说是做了不如说是看了下官方提供的例子,所以最终我感觉我们还是没能掌握Backbone,今天还得做个其它例子先. 然后前面也只是草草学 ...
- 前端MVC框架Backbone 1.1.0源码分析(二) - 模型
模型是什么? Models are the heart of any JavaScript application, containing the interactive data as well a ...
- 用backbone实现的一个MVC的小demo
一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> ...
- Backbone源码阅读手记
Backbone.js是前端的MVC框架,它通过提供模型Models.集合Collection.视图Veiew赋予了Web应用程序分层结构.从源码中可以知道,Backbone主要分了以下几个模块: ( ...
- __attribute__
转来的: http://www.cnblogs.com/astwish/p/3460618.html __attribute__ 你知多少? GNU C 的一大特色就是__attribute__ 机制 ...
- Programming Entity Framework 翻译(1)-目录
1. Introducing the ADO.NET Entity Framework ado.net entity framework 介绍 1 The Entity Relationship Mo ...
- 【转】Backbone使用总结
转自 http://www.pchou.info/javascript/2014/06/26/backbone-summary-01.html 开始在项目中大规模使用backbone,一路磕磕碰碰, ...
随机推荐
- JZOI1062 【USACO2013JAN】invite
#include <bits/stdc++.h> #define ll long long #define INF 2147483647 #define ll_INF 9223372036 ...
- STM32嵌入式开发学习笔记(六):串口通信(上)
本文我们将了解STM32与外部设备通过串口通信的方式. 所谓串口通信,其实是一个类似于计算机网络的概念,它有物理层,比如规定用什么线通信,几伏特算高电平,几伏特算低电平.传输层,通信前要发RTS,CT ...
- Python代码规范问题及解决
Python代码规范问题及解决 为了养成使用Python编程好习惯,尽量保证自己写的代码符合PEP8代码规范,下面是过程中报出的警告及解决方法,英文有些翻译不太准确见谅,会不断更新: PEP 8 只是 ...
- C++——Lambda表达式
0.使用场景---只有一两个地方使用的简单操作 独立出来一个函数,但这个函数实现相对简单并且可能在整个项目只使用了一次(即不存在复用的情况),那么这个时候我们就可以考虑使用下lambda表达式了. ? ...
- POJ 3130 How I Mathematician Wonder What You Are! (半平面交)
题目链接:POJ 3130 Problem Description After counting so many stars in the sky in his childhood, Isaac, n ...
- 什么是NVMe硬盘?
本文摘自:https://zhidao.baidu.com/question/590890784.html NVMe硬盘指的是非易失性内存主机控制器接口规范(Non-Volatile Memory e ...
- 进程共享变量#pragma data_seg用法
#pragma data_seg介绍 用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为: #pragma data_seg ("shareddata" ...
- 20140513 matlab画图
1.matlab画图 x1=[1.00E-06,2.00E-06,4.00E-06,9.00E-06,2.00E-05,4.00E-05,8.00E-05,2.00E-04,4.00E-04,7.00 ...
- MySQL在Win10与Ubuntu下的安装与配置
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 近段时间把自己电脑(win).虚拟机(Ubun ...
- 天道神诀--samba和NFS部署
samba yum -y install samba samba-client rpm -qa |grep samba service smb start(445端口) service nmb sta ...