Ein Paar Einsteiger-Fragen
-
Hallo,
ich möchte nicht für jede Kleinigkeit einen neuen Thread erstellen, deswegen stelle ich hier mal ein paar Fragen, die ich mich als Anfänger frage.
Vorweg: ich benutzte die neuste Version von Dev-C++!
- Woran merkt man als Einsteiger, ob man C oder C++ Befehle nutzt? Ich meine, man sollte es ja vermeiden, C Befehle zu benutzten, oder?
- Brauche ich zum Programmieren verschiedener kleiner Programme immer ein neues Projekt? Es reicht doch, wenn ich alles immer in einen leeren Quelltext schreibe oder?
- Dev-C++ gibt mir immer eine Warning aus, wenn ich schreibe: #include <iostream.h>! Wenn ich mir die Warning-Datei "backward_warning.h" ansehe, steht dort folgendes:
#ifdef __DEPRECATED
#warning This file includes at least one deprecated or antiquated header. \
Please consider using one of the 32 headers found in section 17.4.1.2 of the \
C++ standard. Examples include substituting the <X> header for the <X.h> \
header for C++ includes, or <iostream> instead of the deprecated header \
<iostream.h>. To disable this warning use -Wno-deprecated.
#endifNutzte ich also #include <iostream> anstatt #include <iostream.h>, so bekomme ich einen Fehler "4 C:\Dev-Cpp\test.cpp `cin' undeclared (first use this function) " bei folgendem Programm:
#include <iostream>
int main() {
cin.get();
}Was ist da nun los?
- In einigen Tutorials steht, man solle void main() verwenden, falls man keinen Rückgabewert hat (wie bspweise bei "Hello World" etc). Leider funktioniert das nicht: "3 C:\Dev-Cpp\test.cpp `main' must return `int' ". Wenn iuch int main() statt void main() nutzte, funktioniert alles wunderbar.
- Wie kann ich die Funktion sleep() nutzten? Welche Bibliothek brauche ich dafür? Bei folgendem Code meckert mein Compiler:
#include <iostream>
#include <stdlib.h>
using namespace std;int main() {
cout << "Hello World!";
sleep( 1000 );
}-> 8 C:\Dev-Cpp\test.cpp `sleep' undeclared (first use this function)
- Was nutzt mir "using namespace std"? Manchmal funktioniert mein Programm nur, wenn ich das unter die Headerdirektiven schreibe, manchmal funktioniert es auch ohne.
Vielen vielen Dank im voraus!
Mfg
Björn
-
man sollte NIE void main() nehmen, immer int main()!
iostream.h ist veraltet, nimm iostream
dazu brauchst du aber dann noch den namensraum std, um den fehler mit cin zu verhindern:
std::cin; using std::cin //brauchst nur bei cin kein std using namespace std; //du brauchst niw das std::
-
Ohne jetzt genau zu wissen, was in den FAQs steht, würde ich sagen, dass dort min. die Hälfte deiner Fragen beantwortet wird.
-
Danke schonmal ser1al.
Bzgl des "using namespace std" bzw "using std::cin" bzw "std:cin": was ist denn am sinnvollsten. Für mich klingt das mittlere am besten, aber ich weiß es nicht ...
Gibt es einen Befehl, der genau ein Zeichen einließt und dann im Programm weitergeht (so wie bei Turbo Pascal readkey)?
-
jahLives! schrieb:
Danke schonmal ser1al.
Bzgl des "using namespace std" bzw "using std::cin" bzw "std:cin": was ist denn am sinnvollsten. Für mich klingt das mittlere am besten, aber ich weiß es nicht ...
hm....also ich persönlich nehme bei kleinen projektem (nicht mehr wie 1 oder 2 dateien using namespace std;
sonst die einzelnen usings
jahLives! schrieb:
Gibt es einen Befehl, der genau ein Zeichen einließt und dann im Programm weitergeht (so wie bei Turbo Pascal readkey)?
hmm..getch() aus conio (werd ich sicher gleich geschlagen)
oder cin.get()
-
warum, ist getch schlecht? meinst du mit "aus conio", dass ch #include <conio> brauche?
brauche ich dann dafür auch einen namespace, oder verwendet man das einfach so?
cin.get() ließt aber mehr als ein zeichen ein. ich möchte halt nur ein zeichen einlesen und ohne auf enter zu drücken, soll das programm fortfahren ...

wie kann ich denn sleep verwenden?
-
jahLives! schrieb:
warum, ist getch schlecht?
Ja, weil nicht plattformunabhängig.
cin.get() ließt aber mehr als ein zeichen ein. ich möchte halt nur ein zeichen einlesen und ohne auf enter zu drücken, soll das programm fortfahren ...

Das geht in Standard C++ auch nicht plattformunabhängig (deshalb wenns sein muss trotzdem getch
)wie kann ich denn sleep verwenden?
Auch nicht plattformunabhängig. Unter Linux isses in unistd.h und erwartet Sekunden .
-
danke
nun versteh ich das auch mal :>aber wie sieht es mit sleep() unter windows aus? Warum kann ich es nicht benutzten? Muss ich dafür eine Bibliothek einbinden, und falls ja, welche? Danke

-
unter WinAPI gibt es die Funktion "Sleep()" (beginnt mit großem S und erwartet Millisekunden) in der <winbase.h> (benötigt noch die kernel32.lib).
-
ich verstehe nicht so ganz, warum dsa dann nicht auf linux läuft. der compiler übersetzt das doch in maschinensprache, dann müsste das doch eigentlich funktionieren oder?
-
Erstens kennt der Linux-Compiler die Funktion "Sleep()" nicht (die gehört zur WinAPI), hat also keine Ahnung, was er damit anfangen soll. Und zweitens nutzen sleep() (Linux) und Sleep() (Windows) vermutlich ganz unterschiedliche Methoden des drunterliegenden Betriebssystems.
-
ja, ein Linux Compiler versteht sleep() vielleicht nicht. Aber wenn ichs auf Windows compiliere, dann müsste ich das Programm (die exe-Datei) doch theoretisch auf Linux ausführen können, da doch direkt die Maschine (also der PC) angesprochen wird, oder?
-
Das wird schon dadurch problematisch dass es unter Linux keine .exe-Dateien gibt.
Nein, das geht natürlich nicht. Wenn das gehen würde bräuchten wir kein Windows oder Linux, sondern nur Maschinensprache.
-
Achsooo
Deswegen muss man auch oft sourceDateien wie z.b. php erst unter Linux kompilieren
K, wieder was neues 
-
PHP wird aber nicht kompiliert, sondern interpretiert. Daher muss man die PHP-Datei nur kopieren auf das andere System und kann diese mit einem entsprechenden Interpreten ausführen.
Mit Standard-C++ ist das fast das gleiche, solange du dich an den Standard hältst, werden deine Programme sowohl unter Windows als auch Unix laufen, allerdings musst du diese immer noch zu einer ausführbaren Datei compilieren und linken.
-
Ja, ich weiß, dass PHP interpretiert wird. Ich meinte die SourceFiles von PHP; also damit man die PHP Module auf Linux installireen kann, muss man diese zuerst kompilieren

-
Achso meinst du das
