Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 04:11

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Vorkompromierter Header

Discussion on Vorkompromierter Header within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 80
Join Date: Oct 2007
Posts: 189
Received Thanks: 21
C++ / Fragen von mir

Hey,

immer wenn ich in Visual Studio 2010 ein neues Projekt starte und auf Win32-Anwendungen gehe, sind schon Funktionen im Projekt integriert.

Doch dort ist z.B. die Bildung des Hauptprogramms nicht einfach int main() sondern int _tmain(int argc, _TCHAR* argv[])

# Was ist der Unterschied?
# Warum muss ich immer stdafx.h angeben? iostream alleine erkennt er viele Funktionen nicht.
# In meinem Buch steht eben nur iostream und in vieler Hinsicht beendet sich die Konsolenanwendung innerhalb weniger Sekunden von selbst.
Im Buch wird keineswegs auf cin.get() hingewiesen...

Da dachte ich mir wenn das ein vorgefertigtes Projekt ist, dann muss ich mir wohl ein neues und leeres Projekt erstellen.
Aber dort ist kein Editor zusehen.
aeo is offline  
Old 04/03/2012, 19:56   #2


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Was ist der Unterschied?
Vorkompilierte Header sparen Compilezeit.

Die Funktion main kann in zwei Formen auftreten:

int main()

oder

int main(int argc, char **argv bzw. char* argv[])

Das eine ist eine normale Funktion ohne irgendwelche Parameter, das zweite nimmt 2 Parameter entgegen, die Anzahl der Startparameter und die Liste (ein Array) der Startparameter.
Also quasi wenn du eine Programm so aufrufst:

programm.exe -blub

Dann wird argc 2 enthalten (der Name ist auch ein Parameter) und argv "programm.exe" und "blub" oder "-blub", ich weiß gerade nicht mehr, ob Windows sowas wie - oder / am Anfang eines Parameters herausfiltert.

_t bzw. _TCHAR stehen für eine dynamische Definition des Compilers von der Funktion main und dem Typ char.
Je nachdem, ob man das Projekt mit dem UNICODE oder als ASCII Zeichensatz erstellt hat, nehmen sie die normalen Formen main und char an oder wmain und wchar_t, was die Äquivalente für UNICODE sind.

Quote:
Warum muss ich immer stdafx.h angeben? iostream alleine erkennt er viele Funktionen nicht.
Weil es deine Projekteinstellungen so sagen.

Quote:
In meinem Buch steht eben nur iostream und in vieler Hinsicht beendet sich die Konsolenanwendung innerhalb weniger Sekunden von selbst.
Im Buch wird keineswegs auf cin.get() hingewiesen...
Weil es auch falsch ist. Das ist eine schlechte Lösung, das Schließen der Konsole zu verhindern.
Ein Programm soll sich ja beenden, nachdem es fertig ist. Wenn du dir das Ergebnis ansehen willst, musst du es halt aus der Konsole heraus starten und nicht direkt über nen Doppelklick bzw. das Debugging von Visual Studio.

Quote:
Da dachte ich mir wenn das ein vorgefertigtes Projekt ist, dann muss ich mir wohl ein neues und leeres Projekt erstellen.
Da hast du absolut richtig gedacht

Quote:
Aber dort ist kein Editor zusehen.
Weil du ja auch ein leeres Projekt, also ohne irgendwelche Dateien erstellt hast. Ein Editor macht nur dann Sinn, wenn irgendwas zum Editieren da ist. Du musst links in den Projektmappen-Explorer gehen und eine Datei über Rechtsklick->Hinzufügen->WeißIchNichtMehr erstellen; die wird dann auch automatisch im Editor geöffnet.
MrSm!th is offline  
Thanks
2 Users
Old 04/03/2012, 21:17   #3
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
das einzige das windows bei parametern filtert sind strings (programm.exe "string mit leerzeichen" einzelne parameter mit -zeichen)

argv[0]="programm.exe"
argv[1]="string mit leerzeichen"
argv[2]="einzelne"
argv[3]="parameter"
argv[4]="mit"
argv[5]="-zeichen"
Tyrar is offline  
Old 04/03/2012, 21:21   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Alles klar, dann hab ich mich da vertan.
MrSm!th is offline  
Old 04/05/2012, 00:21   #5
 
elite*gold: 80
Join Date: Oct 2007
Posts: 189
Received Thanks: 21
Wie meinst du das?:
Quote:
aus der Konsole heraus starten
Wo finde ich das? cmd console?

Quote:
Rechtsklick->Hinzufügen->WeißIchNichtMehr erstellen
Da wird aber viel angezeigt, was ich erstellen kann.
Ich bin nun einfach auf Quelldateien → C++ Datei
Da ich mich nicht auskenne, taste ich mich vorsichtig heran und hoffe ihr versteht das nicht als nervtötend^^
Quote:
Weil es deine Projekteinstellungen so sagen
Ich finde den Reiter bei der Einstellung nicht, wo ich diesen Punkt ausstellen kann.


# Ich habe eine Frage zu den Datentypen

Es wird gesagt ein gewisser Datentyp hat den Speicherplatz von X Bytes und der Wertebereich liegt bei XXX

Was ist mit dem Wertebereich gemeint?
Was bedeutet 1 Byte ? Ich weiß das es eine Datenmenge ist aber was genau hat das mit dem Rechner zu tun?
Wird die Datenmenge (im Sinne eines Programms) vom Rechner erfasst und verarbeitet?


Wenn die Datentypen "char" und "wchar_t" für die Speicherung von Zeichencodes zuständig ist, können die auch Ganzzahlige Zahlen speichern?
Ich habe "char" meistens mit Buchstaben gesehen und frage mich, wenn sie einen
Wertebereich haben -128/+127 (0/255).


Wenn "int" einen Wertebereich von -32768/32767 hat, aber ich diesem Datentyp einen höheren/niedrigeren Wert zuweise, wird das dann ein Fehler?

Ich bedanke mich im vorraus
aeo is offline  
Old 04/05/2012, 01:15   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by dunkis View Post
Wie meinst du das?:
Konsole -> cd zum Verzeichnis -> programm.exe
Quote:
Wo finde ich das? cmd console?
Jo.
Quote:
Da wird aber viel angezeigt, was ich erstellen kann.
Ich bin nun einfach auf Quelldateien → C++ Datei
Da ich mich nicht auskenne, taste ich mich vorsichtig heran und hoffe ihr versteht das nicht als nervtötend^^
Ist richtig.
Quote:
Ich finde den Reiter bei der Einstellung nicht, wo ich diesen Punkt ausstellen kann.
Leeres Projekt war doch die Lösung.
Ansonsten gibts da noch im gleichen Menü (bei der Erstellung des Projekts) die Option Vorkompilierte Header.
Ansonsten Rechtsklick aufs Projekt -> Eigenschaften -> C/C++ -> Vorkompilierte Header

Quote:
# Ich habe eine Frage zu den Datentypen

Es wird gesagt ein gewisser Datentyp hat den Speicherplatz von X Bytes und der Wertebereich liegt bei XXX

Was ist mit dem Wertebereich gemeint?
Der Zahlenbereich der mit dem Speicherplatz maximal darstellbar ist.
Quote:
Was bedeutet 1 Byte ? Ich weiß das es eine Datenmenge ist aber was genau hat das mit dem Rechner zu tun?
Ja was haben denn Bytes mit dem Rechner zu tun? Das ist die kleinster (adressierbare) Einheit, die man zur Speicherung von Daten verwenden kann.
Ein Byte besteht aus 8 Bits und diese sind jeweils 1 oder 0. Aus einfacher Mathematik (Binärsystem -> Dezimalsystem) ergibt sich dann, dass man mit einem Byte maximal 256 (2^8) verschiedene Werte speichern kann.
Mit einem doppel so großen Speicherplatz, also 2 Byte, lassen sich 65536 (2^16) verschiedene Werte darstellen.
Quote:
Wird die Datenmenge (im Sinne eines Programms) vom Rechner erfasst und verarbeitet?
Wie genau meinst du das? Die größe heißt, dass du nur Zahlen in diesem Bereich damit verarbeiten kannst.
Quote:
Wenn die Datentypen "char" und "wchar_t" für die Speicherung von Zeichencodes zuständig ist, können die auch Ganzzahlige Zahlen speichern?
Ich habe "char" meistens mit Buchstaben gesehen und frage mich, wenn sie einen
Wertebereich haben -128/+127 (0/255).
Ja, können sie. Zeichen sind nur kleine Bildchen auf dem Bildschirm, der PC weiß davon nix. In Wirklichkeit sind es auch nur numerische Werte im Speicher, die da verarbeitet werden, eben im Falle von char im Bereich von 2^8 verschiedenen Zahlen und bei wchar_t sind es 2^16 verschiedene Zahlen (ein wchar_t hat 2 Byte). In der ASCII Tabelle ist gegenübergestellt, welches Zeichen zu welchem Wert gehört. Da 256 Zeichen etwas wenig sind, um alle Sprachen dieser Welt darzustellen, kam später der UNICODE Zeichensatz und damit wchar_t, womit du halt gleich mal ~65000 Zeichen darstellen kannst.
Quote:
Wenn "int" einen Wertebereich von -32768/32767 hat,
Nein, ein int hat 32 Bit, also 4294967296 oder -2147483648 bis +2147483647 als Wertebereich.
Quote:
aber ich diesem Datentyp einen höheren/niedrigeren Wert zuweise, wird das dann ein Fehler?
Das kommt darauf an, wie du Fehler definierst. Das Programm wird nicht abstürzen, nein (zumindest nicht alleine deswegen).

Um das zu verstehen muss man etwas tiefer in die Rechnerarchitektur schauen: Wie gesagt, der PC arbeitet im Grunde nur mit Bits, die für den Programmierer in Bytes zusammengefasst sind, welche er einzeln ansprechen kann. Wenn du ein Byte, also 8 Bit hast und du hast den maximal möglichen Wert 1111 1111 (also in binärer Schreibweise; 255 im Dezimalsystem), was passiert dann, wenn du +1 rechnest?
Aufgrund der Schaltung, in der die Addition implementiert ist, wird das ganze überlaufen, du kommst also wieder bei 0 an.
Eigentlich wäre es ja 1 0000 0000, aber da nur 8 Bits gespeichert werden können, fällt die 1 am Anfang wieder weg.

Das ganze war nun für unsigned, also nicht vorzeichenbehaftete Werte beschrieben. Wie gesagt, ein Byte kann 256 verschiedene Werte annehmen.
Das kannst du als 0-255 oder -128 - +127 (2^7) interpretieren; das erste Bit fällt nämlich weg, da man dieses zur Bestimmung des Vorzeichens verwendet.

Nun sind also binär die Werte 0000 0000 - 0111 1111 positiv und die negativen Zahlen werden durch alles darüber bis zum Maximalwert 1111 1111 dargestellt, also:
1000 0000 - 1111 1111 (-128 - -1)

Was nun passiert, wenn du zum maximalen positiven Wert einer vorzeichenbehafteten Zahl 1 addierst, kannst du dir wohl vorstellen:
0111 1111 + 1 = 1000 0000
127 + 1 = -128

Das ganze läuft also in eine negative Zahl über.

Die genannte Problematik ist auch Ursache einiger unschöner Sicherheitslücken in vielen Programmen, die eigentlich nur positive Werte zulassen sollen, bei denen aber (aus Unvorsichtigkeit) auf das unsigned Schlüsselwort verzichtet wurde, weshalb der Compiler Code generiert hat, der auch mit negativen Zahlen rechnen kann.
Und schon ist 128 plötzlich kleiner als 127, weil es in Wirklichkeit zur -128 überläuft.

Genaueres zu Bits, Bytes und dem Binärsystem kannst du dir bei Wikipedia ansehen, da ist das imho sehr gut erklärt.
MrSm!th is offline  
Thanks
3 Users
Old 04/05/2012, 01:42   #7
 
elite*gold: 80
Join Date: Oct 2007
Posts: 189
Received Thanks: 21
Hier im Buchsteht kann int sowohl 2 Byte(16 Bits) als auch 4 Byte sein.
Deine Zahl ist aber auch richtig wird aber als 4 Byte(32 Bits) abgespeichert.
Naja verstanden habe ich das nicht so ganz wahrscheinlich liegts daran das mein Hirn nur noch mit der Hälfte seiner Leistungsfähigkeit arbeitet ^^

Der erste Teil habe ich ganz gut verstanden doch grad beim letzten Teil wo du in die Computerarchitektur reingreifst.

Also können meine Programme von Typ "char" genaus so rechnen wie mit "int" aber das ist glaube ich nicht sinnvoll oder?

char besitzt eine nicht gerade einen großen Wertebereich laut der Tabelle hier im Vergleich zu int.
aeo is offline  
Old 04/05/2012, 03:12   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Genau so ist es, mit char kann man genau so rechnen, allerdings hat man sich darauf geeinigt, dass char für Zeichen verwendet wird. Für Zahlen nimmt man in dem Fall short, auch wenn short i.d.R. 2 Bytes groß ist.
Das stimmt, int kann auch den Wertebereich von 0 - 2^16 haben, der Standard definiert, dass ein int diesen Bereich mindestens halten muss; die meisten Compiler geben int aber trotzdem eine Größe von 2^32.
Mit long hast du ganz sicher einen Bereich von mind. 2^32.

Außerdem, wie du schon sagst, char hat einen Bereich von 0-255. Das ist nicht gerade viel, in den meisten Fällen kann dir eine Ersparnis von 3 Bytes echt egal sein und du nimmst einfach für alles int. Wenn du Netzwerkanwendungen schreibst, wo vielleicht so viele Bytes wie möglich eingespart werden sollen, wird auch mal short verwendet, wenn man keine Werte bis 2^32 braucht. char wird da auch nur für sehr kleine Werte verwendet, von denen man weiß, dass sie nicht größer als 255 werden, zb. Flags oder boolsche Werte, allerdings sieht man hier oft aus Gründen der Code-Lesbarkeit (wie gesagt, char ist für Zeichen gedacht, also würde man erstmal denken, dass dort ein einzelnes Zeichen versendet wird) typedefs sehen, die dem Typen unsigned char den neuen Namen byte geben, damit klar wird, dass es sich um eine arithmetische Variable und nicht um ein Zeichen handelt.
MrSm!th is offline  
Thanks
1 User
Old 04/05/2012, 12:57   #9
 
elite*gold: 80
Join Date: Oct 2007
Posts: 189
Received Thanks: 21
So geschwind wieder alles gelesen und soweit verstanden.

Auf der Xbox 360 gibts nämlich in CoD Hacker Lobbys und wenn man ein Blick auf die Rangliste wirft, sieht man sehr oft die Zahl: -2147483648 oder 214748647
Dann erklärt sich ja schon in welche Richtung der Datentyp gehen kann.

Werde diesen Thread für zukünftige für Unklarheiten verwenden und jeweils den Titel etwas für mich allgemein abändern.
aeo is offline  
Old 04/10/2012, 11:43   #10
 
elite*gold: 80
Join Date: Oct 2007
Posts: 189
Received Thanks: 21
BUMP

Hey

#1
ich habe eine Frage und zwar, wie kann ich in C++ bei Angabe der Formel mit Klammern rechnen.

z.B. summe = (a+b)*(a-b)
Wenn ich es aber in Klammern setze akzeptiert er es nicht, wie lautet den die richtige Eingabe wenn das Programm mit Klammernregeln rechnen soll?

#2
Bei der Funktion pow() muss ich da immer den Datentyp double nehmen?
aeo is offline  
Old 04/10/2012, 11:53   #11
 
.Punkt.'s Avatar
 
elite*gold: 51
Join Date: Jan 2012
Posts: 675
Received Thanks: 89
Quote:
Originally Posted by dunkis View Post
BUMP

Hey

#1
ich habe eine Frage und zwar, wie kann ich in C++ bei Angabe der Formel mit Klammern rechnen.

z.B. summe = (a+b)*(a-b)
Wenn ich es aber in Klammern setze akzeptiert er es nicht, wie lautet den die richtige Eingabe wenn das Programm mit Klammernregeln rechnen soll?

#2
Bei der Funktion pow() muss ich da immer den Datentyp double nehmen?


zu Frage 2 kann ich dir leider nicht Helfen aber bei Klammern kannst du das ganze einfach so machen:

Ist jetzt nicht die perfekte Lösung aber klappt.

Kannst das ganze auch noch ausschmücken:


PS: Lerne auch gerade C++
.Punkt. is offline  
Old 04/10/2012, 12:11   #12
 
elite*gold: 80
Join Date: Oct 2007
Posts: 189
Received Thanks: 21
Aber die Header-Dateien sind nicht nötig oder?
Weil cmath bzw. math braucht man ja nur bei mathematischen Standardfunktionen heißt soviel wie bei Berechnung von Sinus, Cosinus oder Tangens.
Aber ich glaube bei Klammern ist die Berechnung nicht von cmath abhängig.

Ich habe nur Schwierigkeiten mit den Deklarationen der Funktionen/ Funktionsaufruf mit pow() oder void für Funktionen ohne return-Wert
Muss mir die Seiten nochmal intensiv angucken ^^ Aber ich werds schon packen ich lese es mir gerne 2 bis 4 mal genau durch.

Wünsche dir Viel Glück beim Lernen


// Ich mach gerne Schadensberechnungen von MMORPG's damit kann ich sehr gut üben..
aeo is offline  
Old 04/10/2012, 12:16   #13
 
.Punkt.'s Avatar
 
elite*gold: 51
Join Date: Jan 2012
Posts: 675
Received Thanks: 89
Weiß nicht genau ob
Code:
#include <math.h>
benötigt wird aber hab es einfach mal rein geschrieben .

Deine andere Frage kann ich leider nicht beantworten soweit bin ich noch nicht..
.Punkt. is offline  
Old 04/10/2012, 12:17   #14
 
elite*gold: 80
Join Date: Oct 2007
Posts: 189
Received Thanks: 21
Kannst mich ja unter Skype Adden: aeoxes
aeo is offline  
Old 04/10/2012, 13:17   #15


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Natürlich werden Klammern akzeptiert und haben dieselbe Bedeutung wie in der Mathematik Oo

@Punkt:

1. system() ist böse
2. Wenn du selbst noch nicht so viel Ahnung hast, solltest du es lassen Ratschläge zu erteilen.

Was die zweite Frage angeht: Was für ein Problem hast du denn mit Double?
MrSm!th is offline  
Reply


Similar Threads Similar Threads
[S] Header [B] eG
02/14/2012 - elite*gold Trading - 6 Replies
^topic Suche Header So einen: http://www.elitepvpers.com/forum/warrock-trading/ 1712158-g1-credits-store-real-life-g-nstig-schnell -und-sicher.html Mit meinem NAmen
[s] header [b]E*G
12/28/2011 - Trading - 0 Replies
^^ Topic reqeelt
Header
07/24/2011 - General Art - 2 Replies
Hallo, Ich suche jemanden der mir den Header Bearbeitet. http://mariodev.de/uploader/bild.php/787,logoLAA1 E.png Format soll alles so bleiben. Ambesten Schrift etc. alles gleich. Aber anstatt Servername soll da XyosMt2 stehen. Untendrunder anstatt your own slogan soll da Enjoy your Time stehen.
css wie mach ich ein header und vom header der hintergrund z.B blau
11/14/2010 - Coding Tutorials - 2 Replies
Hallo leute meine Frage kann man kaum erklären ich will nen Header z.B http://web85.germaninfo29.erfurt16.de/ebay/ftp_bi lder/header_moeller_1220_358.jpg also da steht traum company aber ich will in mein Header jetz Traum company und dann nur für denn Header ein blauen hintergrund also
HP Header >>>>
02/21/2010 - Metin2 Private Server - 24 Replies
Hey leute, ich suche jmd der mir für mein DynDns Server ein Homepage Header macht es sollte der name drauf stehen sprich FantasticMT2 wer lust drauf hat einfach posten :) mfg Luan



All times are GMT +1. The time now is 04:12.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.