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