Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>C/C++ Compiler (XCode will nicht)

C/C++ Compiler (XCode will nicht)

Forumposter05.05.0819:03
HILFE! ARGS! Derzeit krieg ich etwas zuviel.

Derzeit lerne ich C und C++ parallel in der Uni und möchte ein wenig programmieren. Die anfänglichen Beispiele sind halt "Hello World" und die verschiedenen Schleifen-Typen, aber soweit komme ich erst gar nicht. Ich hatte mal unter Tiger etwas getestet, hab ein wenig Code gehackt und es lief auf Anhieb. Unter Leopard sieht das leider anders aus. Ich wähle New Project/Command Line Utility/Standard Tool (für C) bzw. /C++ Tool (für C++). Das Beispiel ist C-Code:
#include <stdio.h>

int main ()
{
  printf("Hello World!\n");
  
  system("PAUSE");
  return 0;
}
Soweit so gut. Die Console gibt zwar "Hello World" aus, aber mit dem Zusatz "sh: PAUSE: command not found". Was soll das? Gilt das nur für Windows Programme und funktioniert nicht unter Mac?
Das nächste Beispiel ist einfach eine printf(), scanf(), printf() Anweisung. Er druckt den printf() Teil in die Konsole, nimmt aber keine Tastaturbefehle an bzw. gibt sie dann nicht im zweiten printf() aus, als würde er's komplett ignorieren. Ich verzweifel leider daran, weil so absolut nichts läuft und ich keine Basis zum Arbeiten habe.
Gibt es eigentlich eine Möglichkeit so ein CLI als .app zu kompilieren, so wie unter Windows die .exe die dann einfach nur ein Konsolenfenster öffnet?

Mit Ausblick auf ein größeres (End)Projekt am Semesterende. Ist XCode ein "mächtiger" Compiler, oder eher was für "Anfänger", denn er ist ja kostenlos (was nicht heissen soll, dass kostenlos = schlecht ist).
0

Kommentare

MacRabbitPro05.05.0819:23
Xcode ist gar kein Compiler sondern "nur" eine IDE - eine professionelle IDE.
Der Compiler "dahinter" ist gcc. den kannst Du auch über die Shell bedienen - ganz ohne Xcode - was ich Dir auch bei solchen ganz simplen Programmen und gerade wenn es ums Lernen geht, empfehlen würde.

Zu deinen Problemen:
Mal eine Frage: Hackst Du die Programme nur hinein und drückst auf "Build&Run" oder versuchst Du auch zu verstehen was sie tun? Falls letzteres: Was macht den der Befehl "system()"?

Gruß,
MacRabbitPro

P.S. das was "PAUSE" unter DOS macht tut "sleep" unter OS X. Mehr Infos gibt es mit "man sleep" im Terminal.
0
Moe99999
Moe9999905.05.0819:34
also scanf() und printf() sollten ohne Probleme funktionieren, erkläre doch mal genauer was dein Problem damit ist..

die system() Funktion führt einen Kommandozeilen Befehl aus, also muss der Übergabeparameter je nach OS ein String sein der in der jeweiligen konsole auch ausgeführt werden kann.
Eine Portable Lösung wäre z.B. ein getchar();

der compiler von xcode ist wie bereits erwähnt der gcc, in der Komandozeile "man gcc" eingeben und du bekommst alle nötigen infos darüber..


„42“
0
Forumposter05.05.0819:36
Ne, ich versteh schon den Code dahinter, zumindest noch :o)
Was system() genau macht, weiss ich aber nicht, das wurde uns, wie so oft, auch gar nicht erklärt, sondern als "gegeben" hingenommen. Beim Programmieren an den Windows Rechnern in der Uni bin ich aber über das Problem gestolpert, dass das Dos Fenster sofort wieder zu ging, deshalb hab ich es dann als system("pause"); erzeugt "Bitte eine Taste drücken", um das Fenster künstlich offen zu halten, interpretiert.

Auf jedenfall schon mal danke für die Hilfe, ich werd's mal direkt in der Konsole versuchen.
0
Moe99999
Moe9999905.05.0819:47
#include <stdio.h>

int main ()
{
  int zahl;    
  printf("Bitte geben Sie eine Zahl ein: ");
  scanf("%d",&zahl);
  printf("Die Zahl war %d\n",zahl);
  getchar();getchar();
  return 0;
}
funktioniert bei mir ohne Probleme..
„42“
0
Moe99999
Moe9999905.05.0819:48
unter windows das erste getchar(); durch ein fflush(stdin); ersetzen, das funktioniert aber auf dem mac wieder nicht..
„42“
0
Forumposter05.05.0822:03
Genau so hatte ich's, aber ohne getchar().
Danke.
0
iCode
iCode07.05.0810:30
Anmerkung zu Xcode:
Xcode ist ein sehr mächtiges und umfangreiches Tool. Sei froh das es nichts kostet.

Anmerkung zum Thema C:
Wenn Du C lernst halte Dich erstmal an die etablierten C-Normen der ANSI (C89, C90, C99). Damit stolpert man weniger, weil damit nahezu alle Compiler und Platformen klar kommen.

Wenn Du platform spezifische Funktionen oder Bibliotheken (Bsp. "conio") verwendest, solltest Du die natürlich vorher ersetzen. Wenn Du den Code auf einer anderen Platform verwendest.

PS: Man kann sich natürlich auch eine Bridge basteln. (Letzter Beitrag)
0
iCode
iCode07.05.0810:44
Anmerkung zu fflush:
Die Verwendung von fflush zum Löschen des Eingabe-Puffers ist zwar unter Windows weit verbreitet, aber prinzipiell falsch.
fflush() is only for output streams.

Die korrekte Funktion für diesen Zweck ist fpurge, denn das ist zum Löschen gepufferter Streams.
The function fpurge() erases any input or output buffered in the given stream.

Wann immer man ein fflush(stdin) findet, ersetze man es durch ein fpurge(stdin). Dann klappt's vieleicht auch mit dem Nachbarn.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.