Patrick Dohmen wrote:
> 1. Wo gehört "__attribute__" hin?
> - vor den Prototypen
> - hinter den Prototypen
> - vor den Funktionsrumpf
> - hinter die schliessende Klammer der Argumentliste
> - vor/hinter Prototyp und Funktionsrumpf
Hmm, ich mache es immer so:
1 | rettype myfunc(arglist) __attribute__((...));
|
2 | rettype
|
3 | myfunc(arglist)
|
4 | {
|
5 | /* implementation */
|
6 | }
|
Ich bin mich nicht sicher, welche Wege es noch gäbe.
> 2. Warum verändert es den Pointertypen?
"Das ist eben so." :-)
Naja, auch derjenige, der die Callback-Funktion ruft, muss ja
u. U. darüber etwas wissen. Wenn ich das richtig sehe (kenne mich mit
ARM nicht aus), verlässt du ja damit den normalen Weg, wie der
Compiler einen indirekten Funktionsaufruf zusammenbasteln würde.
Damit muss er natürlich auch innerhalb des Timeout-Handlers wissen,
dass er anderen Code generieren soll.
> 3. Wäre ein Cast hier richtig?
Erst einmal nicht. Richtig wäre es, die Attribute auch in der
Timerqueue sauber mitzuführen. Ob der Cast tolerierbar wäre, hängt
letztlich davon ab, ob meine bei 2. genannten Ausführungen tatsächlich
Auswirkungen auf den generierten Code haben oder nicht.