Более одного __attribute__ в C с gcc - PullRequest
18 голосов
/ 03 апреля 2011

Можете ли вы добавить более одного атрибута к идентификатору в C с помощью gcc? Вот что у меня сейчас. Я пропустил операторы включения, потому что они пострадали от поста. Если есть способ добавить два, каков общий синтаксис и как я могу сделать это как с определением, так и с прототипом? Спасибо. : -)

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

Ответы [ 2 ]

25 голосов
/ 03 апреля 2011

Существует два разных способа указания нескольких атрибутов в C с помощью GCC:

#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.

4 голосов
/ 03 апреля 2011

Вы можете использовать несколько спецификаторов __attribute__, разделенных пробелами.

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