Подтвердить что ты не робот

Более одного __ атрибута__ в C с gcc

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

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

Ответ 1

Существует два разных способа задания нескольких атрибутов в 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.

Ответ 2

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

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