2 Dateien miteinander verknüpfen!



  • Hallo,

    wiedermal eine Anfänger Frage... Ich hoffe ihr könnt mir helfen! Ich hab leider keine Seite gefunden, wo erklärt wird wie man 2 Dateien miteinander verknüpfen kann! Ich weiß auch gar nicht ob das funktioniert!

    Hier z.B. soll wenn ich 1 Drücke "Hallo" erscheinen, und sobald ich die 2 schreibe "Tschüss"!

    Haupt

    #include <stdio.h>
    #include <stdlib.h>
    
    char test;
    
    int main()
    {
        scanf ("%d",&test);
        if (test==1) goto Datei1/sprung1; else Datei2/sprung2;
    }
    

    Datei1

    sprung1:
    printf ("Hallo")
    

    Datei2

    sprung2:
    printf ("Tschüss")
    

    Ich hoffe ich konnt mein Problem vernünftig erklären 🙂

    lg


  • Mod

    Du kannst nicht mittels goto aus einer Funktion herausspringen. Dazu brauchst du mindestens longjmp oder Inline-Assembly.

    Mein Tipp: Nimm zur Kenntnis das die goto und longjmp Funktionalität existiert, aber benutze sie nicht. goto ist schon "considered harmful", longjmp ist noch viel schlimmer. Programmiere strukturiert, dann bleibst du auch bei klarem Verstand! In ein paar Jahren mal, wenn du wirklich viel Erfahrung hast, dann kannst du vielleicht mal so langsam darüber nachdenken, ob an manchen Stellen nicht ein goto eine gute Idee wäre und kannst dies selbstständig richtig entscheiden. Und wenn du mal ein alter Hase bist und Systemprogrammierung der untersten Ebene betreibst oder dir in C die Exceptions aus höheren Sprachen fehlen, dann darfst du dich erinnern, dass es longjmp gibt.



  • http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html
    Köstlich. 😃
    Allerdings scheint mir das ohne automatisches Speichermanagement irgendwie nicht sehr produktiv.


  • Mod

    cooky451 schrieb:

    http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html
    Köstlich. 😃
    Allerdings scheint mir das ohne automatisches Speichermanagement irgendwie nicht sehr produktiv.

    Du kannst alles was du aus C++ kennst in C nachbauen. Es wird bloß beliebig gruselig. Selbst so etwas wie die Verbindung von Exceptions mit Abrollen des Stacks kann man machen. Du müsstest dafür "bloß" zu dem Code springen, wo die (in C explizit aufzurufenden) Destruktoren liegen. Das klingt, wie du merkst, ganz schön umständlich und ist auch einer der Gründe, warum Exceptionbehandlung recht langsam ist, wenn tatsächlich mal eine Exception fliegt (und daher nicht zur Ablaufsteuerung benutzt werden sollte). C++ kann schließlich nicht zaubern und erzeugt Assemblercode, den man wieder zu C-Code decompilen könnte.

    Happy Thread Derailing! 🕶



  • 2 Dateien miteinander verknüpfen 😕

    Macht folgendes allerdings nicht:

    #include <stdio.h>
    
    int main()
    {
        int test;
        printf("1 = Hallo, 2 = Tschüss, 0 = Ende\n");  // stimmt nicht ganz
        do
        {
        	scanf("%d", &test);
    	if (test==1) 
    		printf("Hallo\n");
    	else
    		printf("Tschüss\n");
        }while(test);
    }
    

    Das kann man sicher noch optimieren. Kannst ja andere Zahlen zum Test eingeben und Quelltext anpassen, wenn nötig 😉



  • EasyBoy schrieb:

    Hallo,

    wiedermal eine Anfänger Frage... Ich hoffe ihr könnt mir helfen! Ich hab leider keine Seite gefunden, wo erklärt wird wie man 2 Dateien miteinander verknüpfen kann! Ich weiß auch gar nicht ob das funktioniert!

    Was du suchst, nennt man wohl Funktion. Damit kann man sozusagen in andere Dateien springen. Technisch ist das deinem Versuch sehr ähnlich (du hast natürlich den Rücksprung vergessen).
    Lies ein Buch über C, da werden Funktionen erklärt.



  • Hier nun eine Variante mit mehreren Dateien.
    Ob das deinen Vorgaben eher gerecht wird 😕

    main.c

    #include <stdio.h>
    #include "mfheader.h"
    
    int main()
    {
    	int test;
    	printf("1 = Hallo, 2 = Tschüss, 0 = Ende\n");
    	do
    	{
    		scanf("%d",&test);
    		if (test==1) 
    			mfhallo();
    		else
    			mftsch();
    	}while(test);
    }
    

    mfheader.h

    #ifndef __MFHEADER_H
    #define __MFHEADER_H
    
    void mfhallo();
    void mftsch();
    
    #endif
    

    ausgabe.c

    #include <stdio.h>
    #include "mfheader.h"
    
    void mfhallo()
    {
    	printf("Hallo\n");
    }
    
    void mftsch()
    {
    	printf("Tschüss\n");
    }
    

    Da sind auch noch genügend andere Varianten denkbar 👍

    Jetzt musst du das nur noch deinem Compiler und deinem Linker erklären, wie die das zu bearbeiten haben 😃


Anmelden zum Antworten