Autor Thema: Werte übergeben  (Gelesen 2512 mal)

Paula

  • Gast
Gespeichert
« am: 29. May 2014, 21:26 »
Hallo,
ich möchte zwischen meinem Programm und meiner Funktion einen Wert übergeben.
Aber ich krieg es nicht hin, und bevor mir wer mit irgendeiner Lib ankommt, frag ich lieber hier nach wo man keine Lib nutzt. Sondern ja eigentlich vieles ohne Lib selbst programmieren muss.
Mein Code:

myfunc.h
extern void myfunc(char fu1[], char fu2[])
{

/*
Code
fu1 und fu2 kriegen noch eine Größe, die wird aber erstmal errechnet
*/

}

main.cpp
int main (void)
{

myfunc(Test1, "WertDieErste");

}

Doch er weiß nicht was Test1 und WertDieErste sind, wie erklär ich dem Compiler denn das am besten?

LG

Svenska

  • Beiträge: 1 784
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 29. May 2014, 21:57 »
Das sind Grundlagen. Von Libs bist du im Augenblick ungefähr so weit weg wie von Australien. ;-)

Du hast dem Compiler nicht gesagt, was Test1 ist. Also weiß er das nicht. Also kann er das auch nicht an die Funktion übergeben. "WertDieErste" ist dagegen ein Stringliteral (eine konstante, ausgeschriebene Zeichenkette), die kann er ohne Probleme übergeben.

In Headerfiles deklariert man Funktionen nur, man implementiert sie dort besser nicht. Lass den Header für den Anfang weg und schreibe alles in eine einzige (C oder C++) Datei.

"extern" sagt dem Compiler, dass die Funktion woanders zu finden ist. Keine Ahnung, ob das bei Funktionen überhaupt sinnvoll ist, ich kenne es nur im Zusammenhang mit Variablen. Brauchen tut man es nur selten.

void myfunc(char* fu1, char* fu2)
{
    /* tu was */
}

int main(void)
{
    myfunc("Test1", "Test2");
    return(0);
}

Tut zwar immernoch nichts, aber compiliert.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 30. May 2014, 11:20 »
Das extern funktioniert auch bei Funktionen, allerdings bin ich mir nicht sicher, ob er die Funktion in diesem Fall nimmt,
da das extern ihm sagt, dass sie woanders liegt und er gleichzeitig eine Definition findet.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Paula

  • Gast
Gespeichert
« Antwort #3 am: 30. May 2014, 12:36 »
Damit ihr mein Problem vielleicht besser versteht, erklär ich euch jetzt überhaupt mal was ich machen will :)
Ich arbeite grade an meiner String-Lib denn mit Strings zu hantieren finde ich einfacher als mit einzelnen chars
Und das ganze soll so ablaufen:

1. String erstellen
myfunc(Test1, "WertDieErste");Test1 ist der Name des Strings und WertDieErste ist der Wert.
void myfunc(char fu1[], char fu2[])fu1 soll den Namen kriegen und fu2 den Wert

2. In der Funktion wird mit einer for Schleife, die Länge/Größe (in einer Zahl) von in diesem Beispiel WertDieErste ermittelt (Sicherheitshalber wird die Zahl um 4 erhöht: +2 sicherheitshalber für /0 und noch mal +2 Sicherheitshalber einfach dazu) um dann eine char zu erstellen die den Namen Test1 hat und denn Wert WertDieErste hat, sowie die Größe die ermittelt wurde.

3. Der String soll zurückgegeben werden, damit ihn das Programm verwenden kann.

Das Problem ist das ich es gebacken kriege den String denn Namen Test1 zugeben und den String zurückzugeben.

Svenska

  • Beiträge: 1 784
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 30. May 2014, 12:49 »
Was du vor hast, funktioniert nicht.

Paula

  • Gast
Gespeichert
« Antwort #5 am: 30. May 2014, 13:21 »
Warum?

Svenska

  • Beiträge: 1 784
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 30. May 2014, 13:48 »
Lern C.

Variablennamen sind keine Zeichenketten.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 30. May 2014, 14:31 »
Hier mal ein rudimentärer String:

struct String {
    char *m_charArr;
    int m_length;
};

So könnten Strings verwaltet werden.
Dann würde deine Funktion so aussehen:
void myfunc(struct String* i_string, const char[] text);

Das Problem an der ganzen Geschichte ist, dass du nichts gewinnst. Weder Lesbarkeit, noch einfacheren Code.
Denn du musst die gesamte String-Funktionalität wieder auf char-Arrays rechnen. Macht C++ auch nicht anders.
Somit musst du im Prinzip alle Funktionen der string.h-Datei auf "struct String" implementieren. Das tut nicht weh,
aber ist unnötig. Der einzige offensichtliche Vorteil ist die Möglichkeit die Länge des Char-Arrays/String implizit zu bestimmen
und somit auf strlen verzichten zu könne.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Lichie

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 29. July 2014, 17:49 »
Ich glaube manchmal macht man es sich echt komplizierter als nötig. Oder handelt es sich dabei um eine Testaufgabe?

 

Einloggen