Aua. So ein Käse in Studenbriefen / Unterlagen mancher FHs drinnen. TO, besorg' dir ein online Tutorial über C und vergiss den Quatsch - ausser du musst das für eine Übung so lernen, dann bist angeschmiert
Gibt es diese Möglichkeit unter C/C++ oder kann ich mein Ziel auch anders erreichen?
Merke: mit c++ geht "alles".
ich befürchte aber es liegt ein XY Problem vor
Du Fragst nach X, willst aber eigentlich Y.
Beschreibe nicht was du glaubst machen zu müssen, sondern beschreibe, was du machen willst!
// vor dem setup():
void myFunction (byte parameter)
{
byte andereVariable = parameter; //Substituierung des übergebenen Parameters in eine neue Variable
andereVariable = andereVariable*2; //interpretieren des Inhalts der neuen Variable für die folgenden Abfragen/Zuweisungen usw.
Serial.println(andereVariable);
}
// und im Programm
//Aufruf einer Unterroutine mit 1 Übergabeparameter vom Typ byte
byte start_M1 = 42; // Variablennamen immer klein beginnen lassen
myFunction (start_M1 );
Hallo zusammen,
entschuldigt, dass ich mich wahrscheinlich etwas missverständlich ausgedrückt habe. Ich komme eben von einer anderen Programmiersprache, indem die gewünschte Funktion eben "INTERPRET" heist.
kann
Ich will es mal so versuchen. Ich möchte eine Funktion haben, die ich so benutzen kann, dass x dem übergegebnen Wert motorNummer entsprechen soll. Die realen Variablen lauten:
Motor1_T, Motor2_T usw.
Die Funktion soll also aus dem Teilen "Motor" und dem übergebenen Parameter motorNummer und dem abschließenden Teil "_T zusammengesetzt werden.Danach soll diese Variable ganz normal in der Abfragelogik:
if (digitalRead(Motorx_T) == 0 && (Situation_Mx == false))
Man kann das gleich voll objektorientiert machen indem alle Eigenschaften eines Motors in einer Klasse zusammenfasst.
Man kann auch Motor-Objekte an Funktionen übergeben:
void tu_was(Motor& motor)
{
motor.move(...);
}
Motor motor1;
...
tuwas(motor1);
Wenn man irgendeine Nummerierung braucht kann man auch ein Array aus Motor-Objekten anlegen. Sowas ist oft besser als Variablen durchzunummerieren. Vor allem wenn man mehrmals das Gleiche mit dem Objekt machen will
interpret:
Die Funktion soll also aus dem Teilen "Motor" und dem übergebenen Parameter motorNummer und dem abschließenden Teil "_T zusammengesetzt werden.
Am nächsten kommtst Du dem mit Arrays. Motor wird ein Array, und die motorNummer gibt an, welches Element des Arrays gemeint ist.
Aber wenn Du erklärst, wofür die Erzeugung synthetischer Variablennamen gut sein soll, dann gibt es sicher bessere Lösungen, z.B. Pointer.
Aber mit der Concatenation kannst Du keinen Variablennamen bauen und das will der/die TO anscheinend.
Das geht schon:
#define XXX(NAME,EXT) NAME ## EXT
void main () {
int XXX(name,X)=10;
printf("%d",nameX);
}
[/quote]
Mit diesen Dingerchen kannst du ein ziemlich transparentes Klassen/Objektsystem in C bauen.
Zur Präprozessorzeit war wohl nicht die Intention des TO, eher zur Laufzeit und da kann man Dein Prinzip nicht benutzen, da defines vorm Compiler aufgelöst werden.
zwieblum:
Spannende Frage, was der TO eigendlich gemeint haben könnte
Ja, denn woher weiß irgendein Programmteil, welche neue Namen erzeugt werden könnten, und welcher davon wofür benutzt werden soll?
Dann müßte doch der Name im fraglichen Programmteil schon vorher bekannt sein, dort könnte dann auch die entsprechende Variable deklariert werden. Dann läuft der Weg genau andersrum, die Zielvariable wird (per Pointer?) an das Unterprogramm übergeben, das den gewünschten Wert reinschreibt.