ausführbare datei in quelltext einfügen (ANSI-C)

Morgen!
ich lerne gerade ANSI-C.
leider geht es nicht mehr voran, weil ein problem vorliegt.
ich habe schon ein kleines programm „rechnen.exe“ geschrieben und nun einen kleinen büromanager. dort will ich, wenn man sich für den rechner entscheidet, dass dieses programm automatisch aufgerufen wird.
wie müsste ein solcher befehl aussehen?
im moment hab ich den quelltext des rechenprogramms einfach in eine case-anweisung getan, nur das macht das ganze sehrt unübersichtlich.

Hallo Britta!

leider geht es nicht mehr voran, weil ein problem vorliegt.
ich habe schon ein kleines programm „rechnen.exe“ geschrieben
und nun einen kleinen büromanager. dort will ich, wenn man
sich für den rechner entscheidet, dass dieses programm
automatisch aufgerufen wird.

So weit, so gut.

wie müsste ein solcher befehl aussehen?

Hier hast du mehrere Möglichkeiten. Eine gibst du selber an. Allerdings würde ich den Source des Programms in eine eigene Funktion (und damit eigene Files) kapseln, was dann die Übersicht in deinem eigentlichen Sourcecode nicht verändern sollte. In dieselbe Richtung geht die Verwendung einer Library (oder eines eigenen Objektfiles), gegen das du den Hauptprogramm dann linkst. Ist im Wesentlichen dasselbe, für deinen Zweck.

Eine andere Möglichkeit ist es, dieses Programm explizit aufzurufen (als Programm, nicht als Funktion). Das geht mit „system(„C:\rechnen.exe“);“. Davon würde ich allerdings komplett abraten, weil es schlechter Stil ist und ein ganzes Heer von Annahmen und Fehlerquellen mit sich bringt (Was tue ich, wenn das Programm nicht da ist? Wie stelle ich das überhaupt fest? Was biete ich dem Benutzer als Alternative an? etc.).

Wenn du weiter Hilfe brauchst, wäre ich dir für eine spezifischere Frage dankbar.

Chris

Hier hast du mehrere Möglichkeiten. Eine gibst du selber an.
Allerdings würde ich den Source des Programms in eine eigene
Funktion (und damit eigene Files) kapseln, was dann die
Übersicht in deinem eigentlichen Sourcecode nicht verändern
sollte. In dieselbe Richtung geht die Verwendung einer Library
(oder eines eigenen Objektfiles), gegen das du den
Hauptprogramm dann linkst. Ist im Wesentlichen dasselbe, für
deinen Zweck.

Eine andere Möglichkeit ist es, dieses Programm explizit
aufzurufen (als Programm, nicht als Funktion). Das geht mit
„system(„C:\rechnen.exe“);“. Davon würde ich allerdings
komplett abraten, weil es schlechter Stil ist und ein ganzes
Heer von Annahmen und Fehlerquellen mit sich bringt (Was tue
ich, wenn das Programm nicht da ist? Wie stelle ich das
überhaupt fest? Was biete ich dem Benutzer als Alternative an?
etc.).

Wenn du weiter Hilfe brauchst, wäre ich dir für eine
spezifischere Frage dankbar.

Chris

Vielen Dank für deine Hilfe…
ich werde vorerst mich auf die 2. Variante einlassen.
und es klappt sogar :smile:
noch kurz eine frage um mein programm schön aussehen zu lassen:
anstatt system(„cls“) kann man ja aus conio.c den befehl clrscr() verwenden.
gibt es sowas auch für system(„pause“)?

Eine andere Möglichkeit ist es, dieses Programm explizit
aufzurufen (als Programm, nicht als Funktion). Das geht mit
„system(„C:\rechnen.exe“);“. Davon würde ich allerdings
komplett abraten, weil es schlechter Stil ist und ein ganzes
Heer von Annahmen und Fehlerquellen mit sich bringt (Was tue
ich, wenn das Programm nicht da ist? Wie stelle ich das
überhaupt fest? Was biete ich dem Benutzer als Alternative an?
etc.).

Vielen Dank für deine Hilfe…
ich werde vorerst mich auf die 2. Variante einlassen.
und es klappt sogar :smile:

Klappen ja, aber gewöhn’ dir das besser erst gar nicht an. Gut gemeinter Rat. Warum machst du das, wenn du von den anderen Programm den Sourcecode hast? Ist dann doch echt überflüssig.

noch kurz eine frage um mein programm schön aussehen zu
lassen:
anstatt system(„cls“) kann man ja aus conio.c den befehl
clrscr() verwenden.

Vermutlich. Ich programmiere nie Windows-spezifisch.

gibt es sowas auch für system(„pause“)?

Drück’ in Visual C++ F1 und such’ mal im Index danach. Auf dem Amiga früher hieß das „delay()“. Und ja, geben tut’s das.

Chris