Programmieren auf dem iMac

D

dino368

Neues Mitglied
Thread Starter
Dabei seit
19.10.2011
Beiträge
11
Reaktionspunkte
0
Hey Leute,

ich bin vor einigen Tagen auf den iMac umgestiegen und möchte nun meine fertige Übungsaufgabe für die Programmierung in C/C++ einfach als .exe speichern und meinem Professor schicken, ist das generell möglich? In diesen und anderen diversen englischen Foren bin ich nicht schlauer geworden.

Ich nutze natürlich die Xcode Oberfläche und das Programm läuft 1A und würde es auch, wenn ich es auf einem WinPC aufspielen würde und dort compiliere. Ich bin es jedoch ein wenig leid immer hin und her zu switchen.

Vielen Dank.

Gruß

Dino
 
Auf einem Mac kannst du natürlich ein ausführbares Programm erstellen (Build-and-Go-Button drücken, fertig). Aber das Programm wird nur für Mac OS X übersetzt (.app Datei o.ä., keine .exe).

Du kannst ja auch unter Windows kein Mac-Programm erstellen - umgekehrt geht das eben auch nicht.

Gruß, Micha
 
naja, das geht schon. Google mal nach Crosscompilern. Ich kenne nur relativ alte Sachen, wo ich bezweifle dass die noch unter Lion laufen :)
 
Du kannst ja auch unter Windows kein Mac-Programm erstellen - umgekehrt geht das eben auch nicht.

Das geht schon, man braucht nur den richtigen Compiler wie minilux schon sagte. Crosscompiler C/C++ könnte hier helfen. Ich kenne hier aber nur Realbasic, bei C/C++ kenne ich nur Crosscompiler für Linux, nichts für Windows.
 
Vergiss es. Auch ich musste C-Programmieren im Studium und es macht keinen Sinn, wenn ihr unter Windows programmiert, dies nicht auch unter Windows zu tun. Wenn dein Programm unter MacOS läuft, muss es noch lange nicht unter Win laufen (außer du nutzt nur ANSI-C, aber wer tut das schon?). Ein Beispiel: Wir sollten alle unsere Programme mit system("pause"); return 0; beenden. Der Befehl system("pause") funktioniert natürlich nicht, da pause ein DOS-Programm ist, das es unter MacOS so nicht gibt/anders heißt.

Und zu Cross-Compiling rate ich nicht! Man hat schon genug Sorgen, dass sein Programm überhaupt läuft und das tut, was es soll. Wenn dann auch noch der Compiler streikt oder Schwierigkeiten macht, dauert alles länger und wird unnötig kompliziert.
Installier dir Windows als VM oder mittels Boot Camp und fertig.
Was mich noch wundert ist, dass ihr dem Prof die .exe schicken sollt!? Viel mehr Sinn macht es doch, ihm die Quelldatei zu schicken. Dort sieht er Fehler besser und er kann es auf seiner Maschine selber kompilieren.
 
Ein Beispiel: Wir sollten alle unsere Programme mit system("pause"); return 0; beenden. Der Befehl system("pause") funktioniert natürlich nicht, da pause ein DOS-Programm ist, das es unter MacOS so nicht gibt/anders heißt.

*schauder* Wo lernt man denn sowas? Ohne Not nicht nur Plattformabhängigkeit in den Code bringen, sondern auch noch den teuren system() Befehl statt eines simplen getch() (und wegen mir davor einer "Press any key"-Textausgabe) zu verwenden... ganz schlechter Stil.

On Topic:
Jemand, der gerade C++ erlernt würde ich auch nicht empfehlen sich mit der Einrichtung einer Cross-Compiling-Toolchain herumzuschlagen. Wenn es eine .exe sein soll, würde ich da auch empfehlen wohl oder übel unter Windows zu übersetzen.
 
  • Gefällt mir
Reaktionen: minilux und redweasel
*schauder* Wo lernt man denn sowas? Ohne Not nicht nur Plattformabhängigkeit in den Code bringen, sondern auch noch den teuren system() Befehl statt eines simplen getch() (und wegen mir davor einer "Press any key"-Textausgabe) zu verwenden... ganz schlechter Stil.

Ich möchte nicht abschweifen, aber getch() ist Bestandteil der conio.h oder windows.h (jedenfalls in C) und so genauso plattformabhängig wie "pause()". Wir wurden darauf hingewiesen, dass system("pause") nicht plattformunabhängig ist.
Das Verhalten von pause ist mit ANSI-C nicht eben in einer Code-Zeile erstellt (wenn es überall funktionieren soll). Und da es uns Ingenieuren nicht darauf ankommt, dass unser Programm auf allen OS läuft, sondern auf einem und dort tut, was es soll, ist das reichlich egal. Wär ich Informatiker und man würde uns so etwas beibringen, dann hätte ich dir zugestimmt.
PS: getchar() hingegen wäre ANSI-C, jedoch muss ich die Eingabe mit ENTER bestätigen (wie scanf für ein einzelnes Zeichen), was keine befriedigende Lösung wäre.

EDIT: Hier mal eine Version von getch(), dass auf UNIX sowie Windows funktionieren würde und den Befehl system() hier ersetzen könnte:

http://openbook.galileocomputing.de...en_006.htm#mj4097573a931a82cba06a1c2ce037325d [Quelle: C von A bis Z, Jürgen Wolf, Galileo Computing]

Jetzt stellt sich mir die Frage, ob es sinnvoller ist, jemandem, der gerade C lernt, dieses beizubringen, oder ihm einfach zu sagen, dass system("pause") zwar nicht toll ist, es aber einfach ist und wir es daher verwenden.
 
Zuletzt bearbeitet:
Ich möchte nicht abschweifen, aber getch() ist Bestandteil der conio.h oder windows.h (jedenfalls in C) und so genauso plattformabhängig wie "pause". Wir wurden darauf hingewiesen, dass system("pause") nicht plattformunabhängig ist.
Das Verhalten von pause ist mit ANSI-C nicht eben in einer Code-Zeile erstellt (wenn es überall funktionieren soll). Und da es uns Ingenieuren nicht darauf ankommt, dass unser Programm auf allen OS läuft, sondern auf einem und dort tut, was es soll, ist das reichlich egal. Wär ich Informatiker und man würde uns so etwas beibringen, dann hätte ich dir zugestimmt.
PS: getchar() hingegen wäre ANSI-C, jedoch muss ich die Eingabe mit ENTER bestätigen (wie scanf für ein einzelnes Zeichen), was keine befriedigende Lösung wäre.

Der Vollständigkeit halber: die Kombination cin.ignore(); cin.get(); wäre m.E. der sauberste Ersatz (in C++).

Allerdings: Ich bin zwar Mathematiker, arbeite aber in einem Entwicklerteam, das sonst ausschließlich aus Ingenieuren besteht - und da ist sowas trotzdem keinesfalls egal. Unsere Software ist Plattformübergreifend (Win/Linux) und muss so performant wie möglich sein...
Es lohnt sich m.E. immer den Leuten von Anfang an sauberes Entwickeln/Arbeiten beizubringen.
 
Zuletzt bearbeitet:
Sorry, meinte natürlich getchar(). Der Vollständigkeit halber: die Kombination cin.ignore(); cin.get(); wäre m.E. der sauberste Ersatz.

Allerdings: Ich bin zwar Mathematiker, arbeite aber in einem Entwicklerteam, das sonst ausschließlich aus Ingenieuren besteht - und da ist sowas trotzdem keinesfalls egal. Unsere Software ist Plattformübergreifend (Win/Linux) und muss so performant wie möglich sein...
Es lohnt sich m.E. immer - auch wenn es nur Ingenieure sind ;) - den Leuten von Anfang an sauberes entwickeln beizubringen.

cin.get() habe ich nie gehört. Nehme an, dass es sich hier um C++ handelt. Wie gesagt, in C ist das nicht so einfach! Siehe mein EDIT in #7.

Es ist ja nicht so, dass ich die Benutzung von system toll finde und wie du siehst, haben wir es ja doch gelernt, sonst wüsste ich das jetzt nicht! Aber es war eben Vorgabe, Programme damit zu beenden. Und wenn man nur ein Semester Zeit hat, jemandem die epische Breite von structs, pointers und arrays beizubringen, da nimmt man denke ich die Benutzung von system() in Kauf. In MATLAB spielt das alles zum Glück keine Rolle ;)
 
In MATLAB spielt das alles zum Glück keine Rolle

Da irrst du dich aber gewaltig. Wenn ich nur an die Akquisition Toolbox denke. Die hätte ich gern auf meinem Mac...

Es lohnt sich m.E. immer den Leuten von Anfang an sauberes Entwickeln/Arbeiten beizubringen.

Das ist IMO das Wichtigste überhaupt. Wenn man erstmal was Falsches gelernt hat wird's extrem schwierig das Richtige zu lernen.
 
Der Vollständigkeit halber: die Kombination cin.ignore(); cin.get(); wäre m.E. der sauberste Ersatz (in C++).

Das funktioniert so nicht. Ich muß zweimal Return drücken, bis ich aus dem Programm draußen bin.

Warum nicht einfach cin.get () ?
 
Warum nicht einfach cin.get () ?

Das tut's natürlich fast immer - wenn vom cin-stream nicht direkt davor eingelesen wurde. Das cin.ignore() braucht man in dem Fall, dass davor noch ein "cin >> variable" vorkam - dann steht nämlich noch ein "newline" im cin-stream stehen, der dann direkt von getline() oder cin.get() ausgelesen wird (womit das Programm dort dann nicht anhält). Deshalb wollte ich den zweiten Befehl für den allgemeinen Fall dazunehmen.
Sollte zuvor cin nicht verwendet werden, muss man dem Befehl erstmal was zum ignorieren geben ;) , daher musstest du zweimal Return drücken.

Sorry - hätte ich vorher dazu schreiben sollen, der Kommentar war viel zu knapp und unvollständig.
 
Zuletzt bearbeitet:
Hey Leute,

danke für die vielen Antworten, ich freu mich das ich euch auch soviel Gesprächsstoff beschert habe. :)

Hab mich nun mehrere Stunden damit beschäftigt das irgendwie hinzubekommen, musste allerdings das Handtuch werfen! Ich denke ich werde wohl oder übel ne VM dafür anschaffen, macht am meisten Sinn und ich hab ja als Ingenieur noch mehr zu tun als mich mit irgendwelchen Compilierschwierigkeiten rum zu plagen. :p

Gruß Dino
 
Zurück
Oben Unten