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?