N'abend, folgendes Szenario:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
macro argument error ... sagt er Warum haut das nicht hin? Bronko
|
Anzeige
|
#define FrageN'abend, folgendes Szenario:
macro argument error ... sagt er Warum haut das nicht hin? Bronko
Gast
#1807772
Weil es IO_PORT_WRITE2 nicht gibt? Da ist eigentlich eine 2. Copy&Paste Fehler von mir.
Gast
#1807786
IO_PORT_WRITE hat nur ein Argument, Du übergibst 2!
Gast
#1807792
Schau dir für solche Zwecke eher inline-Funktionen an, da meckert wenigstens der Compiler richtig :-) Absolut logisch! Das wars, danke. Falls das jemals jemand braucht:
Gast
#1807810
>Falls das jemals jemand braucht: Wozu soll das gut sein? >#define IO_PORT_WRITE(x,value) IO_PORT_WRITE2(x,value) Doppelt hält besser oder was? > Doppelt hält besser oder was?
Beim C-Präprozessor mit seinen nicht ganz einfachen Expansionsregeln
muss man manchmal etwas doppelt machen, das ist schon ok.
Ich frage mich aber trotzdem, wozu das gut sein soll, zumal das erste
Argument von IO_PORT_WRITE2 gar nicht benutzt wird.
OK, weils euch interessiert. Ziel war es eine möglichst effektive IO pin Abstraktion für alle uC, die ich programmiere, zu haben. D,h. folgende Zeile funktioniert sofort beim AVR, PIC, R8C, ..., weil das Makro in einem Headerfile z.B. io.h ist und ich somit nur noch das Macro anfassen muss und dessen Argument, das restliche Programm bleibt unverändert. IO_PORT_WRITE(PORT_0, 0xFF); Das mit inline ist mir bekannt und ist auch die "bessere" Lösung. Das inline ist unter Umständen compilerspezifisch. Gruß Bronko PS: Das zweite Argument ist für das dataDirektion Makro gut Es gibt noch weitere Makros Bronko Pavel schrieb: > PS: Das zweite Argument ist für das dataDirektion Makro gut > Es gibt noch weitere Makros Ok, in diesem Kontext ergibt die Sache einen Sinn. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|