Kann ein __attribute__-Spezifizierer sowohl mit dem Funktionsprototyp als auch mit der Funktionsdefinition verwendet werC++

Programme in C++. Entwicklerforum
Anonymous
 Kann ein __attribute__-Spezifizierer sowohl mit dem Funktionsprototyp als auch mit der Funktionsdefinition verwendet wer

Post by Anonymous »

Meine Frage bezieht sich direkt auf __attribute__((noreturn)), könnte sich aber allgemeiner auch auf andere beziehen – beispielsweise __attribute__(noinline). Ich habe mir sowohl das gcc-Handbuch als auch das Keil-Compiler-Referenzhandbuch angesehen, um die richtige Syntax für die Verwendung von __attribute__ mit einer Funktion zu ermitteln. Was ich im Allgemeinen gesehen habe, ist Folgendes:

Code: Select all

void function (void) __attribute__((noreturn));  //Prototype has __attribute__

void function (void)                             //Definition does not.
{
while (1);
}
Ich habe auch gesehen, dass das __attribute__ vor der Funktionsdefinition wie folgt verwendet wurde:

Code: Select all

__attribute__((noreturn)) void function (void)
{
while (1);
}
Allerdings habe ich kein Beispiel dafür gesehen, das sowohl im Funktionsprototyp als auch in der Funktionsdefinition verwendet wurde. Ich denke, dass das __attribute__ an beiden Stellen zu einer besseren Lesbarkeit des Codes führen würde; Anhand des Funktionsprototyps oder der Definition würde ich erkennen, dass ein Attribut angewendet wurde. Das Ergebnis wäre wie folgt:

Code: Select all

__attribute__((noreturn)) void function (void) ;  //Prototype has __attribute__

__attribute__((noreturn)) void function (void)    //Definition has __attribute__
{                                               //as well.
while (1);
}
Ich habe mit der oben genannten Methode erfolgreich Code mit dem Keil-Armcc-Compiler kompiliert. Gibt es einen Grund, warum ich diese Methode nicht mit armcc oder gcc verwenden sollte?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post