2016-12-15 1 views
0

J'essaie d'utiliser l'attribut de fonction gcc sur une fonction automatique avec un type de fin, mais le compilateur gcc continue de rejeter le code. Je fonde la position de l'attribut gcc sur les exemples ici:Où placer l'attribut de fonction gcc dans la fonction automatique

https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Function-Attributes.html

// ok 
    int my_int_gcc_func() 
    __attribute__((abi_tag ("tag1") , weak)) //ok 
    ; 

    // error 
    auto my_auto_gcc_func_not_working() 
    __attribute__((abi_tag ("tag2") , weak)) // error 
    -> int 
    // cant place attribute here, get different warning.. 
    ; 

Les documents de référence placer l'attribut immédiatement après les paramètres de la fonction.

J'ai remarqué par tâtonnement que je peux déplacer le mot-clé d'attribut devant toute déclaration de fonction, mais ne trouve aucune spécification formelle disant que cela est autorisé/soutenu par gcc ...

// ok 
    __attribute__((abi_tag ("tag2") , weak)) // seems ok 
    auto my_auto_gcc_func_no_error() 
    -> int 
    ; 

Répondre

0

Semble qu'il est permis d'utiliser un mot-clé d'attribut devant une déclaration de fonction.

Les règles suivantes que je trouve dans la syntaxe d'attribut gccspec:

Une liste de spécificateur d'attribut peut apparaître immédiatement avant un déclarateur (autre que la première) dans une liste de déclarateurs séparés par des virgules dans une déclaration de plus d'un identifiant utilisant une seule liste de spécificateurs et de qualificateurs.

et

Une liste de spécification d'attribut peut apparaître immédiatement avant la virgule, point-virgule = ou mettre fin à la déclaration d'un identificateur autre qu'une définition de fonction. Ces spécificateurs d'attribut s'appliquent à l'objet ou à la fonction déclarés.