Grundlegende Fragen und Borland C++ Builder spezifische Fragen
-
Hallo,
ich würde gerne einige Hintergrundinformationen über die vorgefertigten Programme vom Borland C++ Builder erhalten um einige Sachen besser zu verstehen. Ich benutze den Borland C++ Builder 5. Ich arbeite hauptsächlich mit den vorgefertigten Programmen "Anwendung" und "Konsolen-Experte" aus der Borland Objektgalerie.
1. Dies sind doch sogesehen vorgefertigte Programme, oder?
Wenn ich nun über Datei->Neu->Konsolen-Experte mit folgenden Eingaben ein neues Projekt erstelle
http://img690.imageshack.us/img690/3858/80130257.png
erhält man über die Funktion main() ein Konsolenfenster.
Was mich nun irritiert ist, das es heißt
DATENTYP main() {}
die main() Funktion also sogesehen dort programmiert wird. Man kann auch die main() Funktion compilieren ohne einen Datentyp angegeben zu haben.
2. Wieso funktioniert das?
3. Ist die main() Funktion überhaupt irgendwo deklariert? Es wurde nämlich keine Header-Datei zu der Cpp-Datei erstellt.Wenn ich das Programm compiliere ohne etwas in die main() geschrieben zu haben wird ein Konsolenfenster aufgerufen.
4. Warum wird dieses aufgerufen? In der Funktion steht doch nichts. Das Konsolenfenster muss ja auch irgendwo programmiert worden sein.
Normalerweise deklariert man eine Funktion ja in einer Header-Datei und programmiert diese in einer Cpp-Datei.
5. Ein Beispiel um zu fragen/zeigen ob/das ich das richtig verstanden habe:
funktion.h
----------bool test(char var1);
funktion.cpp
------------bool test(char var1) { if(var1 == 'y') { return true; } else { return false; } }
6. Kann man Header-Dateien auch ganz weglassen?
7. Wozu dienen Header-Dateien?
8. Wo allokiert man standardmäßig seine Variablen? In einer Header-Datei oder einer Cpp-Datei?Wenn ich jetzt über Datei->Neu->Konsolen-Experte mit folgenden Eingaben ein neues Projekt erstelle
http://img530.imageshack.us/img530/9526/44783451.png
also ohne die Angabe "Konsolen-Anwendung" erhalte ich die Funktion
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)9. Was soll WINAPI denn für ein Datentyp sein?
Diese Funktion erstellt ein ganz normales Windows Programm ohne jegliches Fenster.
10. Benötigt ein Programm mit der Funktion WINAPI WinMain() Systemdateien oder irgendwelche Biblioteken vom Windows-System oder ist das Programm komplett eigenständig?
11. Wie sieht es bei der main() Funktion aus? Benötigt ein Programm mit der main() Funktion Systemdateien oder irgendwelche Biblioteken vom Windows-System oder ist das Programm komplett eigenständig? Ist das Programm vielleicht von der Windows Konsole abhängig oder benutzt genau diese?
12. Benötigt die main() Funktion eine WINAPI WinMain() Funktion, wenn ja warum finde ich diese nirgendwo, wenn ich eine "Konsolen-Anwendung" programmiere?
Mit freundlichen Grüßen,
DarkBug
-
int main() - also der Standard-Einstiegspunkt wird unter Windows immer ein Konsolenfenster aufrufen. WINAPI WinMain() ist ein Windows-spezifischer Einstiegspunkt, der für die Programmierung von Win32-Anwendungen genutzt wird. Wenn du unter Windows grafische Anwendungen programmieren willst, ist WINAPI WinMain() immer der Einstiegspunkt dafür.
WINAPI ist übrigens ein Makro und standardmäßig als __stdcall deklariert. Was es mit __stdcall auf sich hat, da musst du mal im Netz suchen.
Ein Programm dass lediglich einen einfachen main-Einstiegspunkt hat, hat i.d.R. keine weiteren Abhängigkeiten - außer du nutzt in deinem Code explizit externe Bibliotheken.
-
DarkBug schrieb:
Hallo,
ich würde gerne einige Hintergrundinformationen über die vorgefertigten Programme vom Borland C++ Builder erhalten um einige Sachen besser zu verstehen. Ich benutze den Borland C++ Builder 5. Ich arbeite hauptsächlich mit den vorgefertigten Programmen "Anwendung" und "Konsolen-Experte" aus der Borland Objektgalerie.
1. Dies sind doch sogesehen vorgefertigte Programme, oder?
Wenn ich nun über Datei->Neu->Konsolen-Experte mit folgenden Eingaben ein neues Projekt erstelle
http://img690.imageshack.us/img690/3858/80130257.png
erhält man über die Funktion main() ein Konsolenfenster.
Was mich nun irritiert ist, das es heißt
DATENTYP main() {}
die main() Funktion also sogesehen dort programmiert wird. Man kann auch die main() Funktion compilieren ohne einen Datentyp angegeben zu haben.
2. Wieso funktioniert das?
3. Ist die main() Funktion überhaupt irgendwo deklariert? Es wurde nämlich keine Header-Datei zu der Cpp-Datei erstellt.Wenn ich das Programm compiliere ohne etwas in die main() geschrieben zu haben wird ein Konsolenfenster aufgerufen.
4. Warum wird dieses aufgerufen? In der Funktion steht doch nichts. Das Konsolenfenster muss ja auch irgendwo programmiert worden sein.
Normalerweise deklariert man eine Funktion ja in einer Header-Datei und programmiert diese in einer Cpp-Datei.
5. Ein Beispiel um zu fragen/zeigen ob/das ich das richtig verstanden habe:
funktion.h
----------bool test(char var1);
funktion.cpp
------------bool test(char var1) { if(var1 == 'y') { return true; } else { return false; } }
6. Kann man Header-Dateien auch ganz weglassen?
7. Wozu dienen Header-Dateien?
8. Wo allokiert man standardmäßig seine Variablen? In einer Header-Datei oder einer Cpp-Datei?Wenn ich jetzt über Datei->Neu->Konsolen-Experte mit folgenden Eingaben ein neues Projekt erstelle
http://img530.imageshack.us/img530/9526/44783451.png
also ohne die Angabe "Konsolen-Anwendung" erhalte ich die Funktion
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)9. Was soll WINAPI denn für ein Datentyp sein?
Diese Funktion erstellt ein ganz normales Windows Programm ohne jegliches Fenster.
10. Benötigt ein Programm mit der Funktion WINAPI WinMain() Systemdateien oder irgendwelche Biblioteken vom Windows-System oder ist das Programm komplett eigenständig?
11. Wie sieht es bei der main() Funktion aus? Benötigt ein Programm mit der main() Funktion Systemdateien oder irgendwelche Biblioteken vom Windows-System oder ist das Programm komplett eigenständig? Ist das Programm vielleicht von der Windows Konsole abhängig oder benutzt genau diese?
12. Benötigt die main() Funktion eine WINAPI WinMain() Funktion, wenn ja warum finde ich diese nirgendwo, wenn ich eine "Konsolen-Anwendung" programmiere?
Mit freundlichen Grüßen,
DarkBug1. Kenne mic mit dem Borland C++ Builder nicht aus, aber vermutlich erstellt er ein Programmgerüst. So das man direkt anfangen kann zu programmieren.
2. Kann sein, dass der Borland C++ Builder main auch ohne Datentyp akzeptiert. Das ist aber kein gültiges C++. Der Borland C++ Builder ist dann einfach nur "nett", dass er das trotzdem akzeptiert.
3. und 4. Die Funktion main dient einem Konsolenprogramm immer als sogenanner Einstiegspunkt. Das Betriebssystem sorgt dafür, dass die Konsole erzeugt wird. Davon bekommst du nur nichts mit.
5. Ja, das ist so korrekt.
6. Nein, Headerdateien erfüllen einen bestimmten Zweck, sie machen Funktionen bekannt. Du brauchst diese also.7. Beispiel:
int main() { func(); // Error, func ist hier nicht bekannt. } void func() { }
Schreibst du nun in eine Headerdatei:
void func();
und inkludierst diese, so wird der Code laufen.
8. Eine Konsolenanwendung hat den Einstiegspunkt main und eine Windows-Anwendung WinMain.
11. Das Programm ist sogesehen eigenständig und würde auch unter Linux laufen. Vorausgesetzt du nutzt keine Windows-Funktionen, etc.
12. Nein, eine Konsolenanwendung benötigt nur eine main Funktion. Die WinMain Funktion ist also nicht notwendig. Das ist auch der Grund, warum du sie nicht findest.
-
Vielen Dank für eure Antworten. Nun ist das ganze verständlicher für mich.
Mein Grundlegendes Problem war, das ich zuerst ein Programm ohne jegliches Fenster haben und nach einiger Zeit eine Konsole aufrufen wollte. Ich habe folgendes versucht:
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { void main() { } return 0; }
Das funktionierte natürlich nicht. Durch weiteres Suchen bin ich auf die Funktion AllocConsole() gestoßen, mit der man in der WinMain() eine Konsole aufrufen kann.
Mit freundlichen Grüßen,
DarkBug