2011-04-02 59 views
16

您可以使用gcc向C中的標識符添加多個屬性嗎? 這是我現在擁有的。我忽略了包含的陳述,因爲他們在帖子中爭先恐後。 如果有一種方法可以添加兩個,那麼一般的語法是什麼,以及如何使用定義和原型來做到這一點?謝謝。 :-)C中多於一個__attribute__和gcc

main() { 
    printf("In Main\n"); 
} 
__attribute__ ((constructor)) void beforeMain(void) 
{ 
    printf("Before Main\n"); 
} 

回答

21

已經有C與海灣合作委員會指定多個屬性的兩種不同的方式:

#include <stdio.h> 

// Attributes in prototypes: 
__attribute__((constructor, weak)) void beforeMain(void); 
__attribute__((constructor)) __attribute__((weak)) void beforeMain2(void); 

int main(){ 
    printf("In Main\n"); 
    return 0; 
} 

// Attributes in definitions: 
__attribute__((constructor, weak)) void beforeMain(void){ 
    printf("Before Main 1\n"); 
} 

__attribute__((constructor)) __attribute__((weak)) void beforeMain2(void){ 
    printf("Before Main 2\n"); 
} 

上面編譯代碼和gcc 4.4.3版本下正常運行對我來說。

+2

lol,pmg。大多數時間我工作與微型微控制器,其中返回值main()是毫無意義的,不知何故,在GCC中沒有警告的情況下編譯的「void main」代碼,但我改變它返回一個int來讓你開心:) – 2011-04-02 21:54:49

+1

+1 - 我現在很開心,謝謝@David。如果你用'-Wall'編譯(或者只是'-Wmain'),gcc會抱怨'void main' :) – pmg 2011-04-02 22:01:32

+1

謝謝:-),那肯定會回答我的問題。 – rubixibuc 2011-04-03 08:06:09

2

您可以使用多個由空格分隔的__attribute__說明符。

char s[3] __attribute__((aligned(32))) __attribute__((weak)); 
+0

這也回答了我的問題,但不能接受兩個答案:-( – rubixibuc 2011-04-03 08:05:36

+1

np。格雷森有更好的答案在這裏。 – Heatsink 2011-04-03 14:22:06

相關問題