Hallo, ein paar Fragen zur C-Programmiersprache: Wie definiere ich Funktionen variabler Argumentenanzahl? z.B.: sende(1,2); sende(8,4,5,6); sende(0,2,0,'H',"allo",x,str[0]) // Variablen, Konstanten, Arrays bilden eine Argumentenkette Kann ich in einer Variable auch ganze Terme speichern? x = Term_zuweisen("a+b"); a = 3; b = 4; x -> 7 Wie definiere ich einen neuen Datentyp? z.B.: var_on_ser_eeprom x; var_on_ser_eeprom y; fifo f; var_on_HDD h[10]; x = 10; // Ausgeführt wird aber save(0,10); y = x + 1; // Ausgeführt wird aber save(1,load(0)+1); Wie kann ich Variblen halb-gobal-local definieren? z.B.: char x for print, send; void print(void) { PORTA = x // Variable x } void send(void) { PORTB = x // gleiche Variable x } void pause(void) { char x; // andere Variable x for(x=0;x<=10;x++) {} } Wie kann ich mit einem Pointer auf Konstanten und Variablen gleichermaßen Lesezugriffe starten? z.B.: print("Hallo"); Print(str[0]);
Hi http://www.schellong.de/c.htm http://www.amazon.de/exec/obidos/ASIN/3446154973/qid=1112022705/sr=8-4/ref=pd_ka_3/028-1450849-1022156 Matthias
danke, beim überfliegen sah es jedoch nicht so aus als würe es alle meine fragen beantworten. Ich verwende übrigens den cc5xfree - Compiler.
>Wie definiere ich Funktionen variabler Argumentenanzahl? >... >Arrays bilden eine Argumentenkette Vgl. beliebiges besseres C-Buch, nach va_start suchen. Alternativ: die Sendefunktion soll wohl ein paar Bytes rausschrieben, also uebergibt man ein Bytearray (und dessen Laenge). Das Array selbst wird vorher zusammengestellt -> sende(uint8_t sendefolge[], uint16_t anzahlbytes) >Kann ich in einer Variable auch ganze Terme speichern? >x = Term_zuweisen("a+b"); >a = 3; >b = 4; >x -> 7 So etwas funktioniert nicht "mit Bordmitteln" und so transparent wie gewuenscht auch nicht in "normalem" C (schon in C++, aber auch nicht "einfach so"). Auf jeden Fall braucht man "extra Code". Wie auch immer - unter "function parser" findet man gut "vorgekautes" im Netz (meist aber Code fuer etwas mehr RAM als bei kleinen µCs verfuegbar). >Wie definiere ich einen neuen Datentyp? >z.B.: >var_on_ser_eeprom x; >var_on_ser_eeprom y; >fifo f; >var_on_HDD h[10]; > >x = 10; // Ausgeführt wird aber save(0,10); >y = x + 1; // Ausgeführt wird aber save(1,load(0)+1); Betr "var_on_hdd" und "fifo": C-Buch lesen. Betr. Eeprom ist die Vorgehensweise aehnlich wie bei anderen "externen" Speichermedien (auch HDD). Man liest die Variablen mit speziellen Funktionen (abh. von Controller/Eeprom/Compiler/Library) und schreibt auch "indirekt". Syntax wie gewuenscht ist erst in C++ moeglich (oder firmenspezifisch erweiterten C-Compilern), aber vielleicht erstmal Hintergrund nachvollziehen und dann nochmal konkreter Fragen. >Wie kann ich Variablen halb-gobal-local definieren? >z.B.: char x for print, send; >... Sowas steht wirklich in einem C-Buch/Tutorial. Globale und lokale Variablen mit gleichem Namen machen nur Code schlecht lesbar. Wenn schon Globale dann mit aussagekraeftigem Namen und vielleicht je nach "Geschmack" oder Firmenrichtlinien noch ein "g" davor. (z.B. gUartSendBufferStat). >Wie kann ich mit einem Pointer auf Konstanten und Variablen >gleichermaßen Lesezugriffe starten? >z.B.: >print("Hallo"); >Print(str[0]); wird so eher nichts. (print(char a[]) bzw. P(p)rint(char a) sind nicht identisch (a) C-Buch (b) evtl. nochmal konkrekter nachfragen.
danke, (Frage 1:) dass man eine Array verwenden kann wusste ich. Es geht aber darum die Argumente gleich in der Funktion anzugeben, damit das nicht so unübersichtlich wird. etwa so Adresse: 10 (Gerät Nr. 10 - Monitor) Kommando: 12 (print) Daten: "Wert:", x, "km" -> sende(10,12,"Wert:",x,"km"); Wie wird das denn bei der printf - Funktion gelöst, da kann man doch z.B. schreiben: printf("Wert: %d km",x); // 2 Argumente oder aber printf("Werte: %d V, %d A, %d Ohm",x,y,z); // 4 Argumente Wie wurde diese Funktion definiert? Ich hab zwar mal die printf.h angesehen -> ist aber total unübersichtlich, d.h. ich hab da nicht wirklich eine Antwort auf meine Frage gefunden.
ich zitier mal: "Vgl. beliebiges besseres C-Buch, nach va_start suchen." da solltest du weitersuchen
http://www.pronix.de/pronix-813.html da steht es ist in stdarg.h definiert. Die hab ich (glaube ich) gar nicht. Was nun? Selbst schreiben?! Wie?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.