Ergebnis 1 bis 9 von 9

Thema: #pragma once, #ifndef, etc.

  1. #1

    #pragma once, #ifndef, etc.

    Soweit ich mitbekommen habe dienen anweisungen wie
    Code:
    #ifndef __HEADERXX__
    #define __HEADERXX__
    ..
    ..
    #endif
    oder #pragma once dazu, zu verhindern, dass Header mehrfach eingefügt werden. Nur was genau macht das #ifndef / #define / #endif eigentlich, damit soetwas verhindert wird? Und was ist der unterschied zwischen der ersten Methode und #pragma once? #pragma once hab ich bisher in nur einer einzigen Anwendung gesehen, dabei scheints viel komfortabler zu sein. Und muss man eigentlich immer wenn man an 2 verschiedenen Stellen denselben Header einbindet darauf achten, eine dieser Methoden anzuwenden oder nicht?

    Und noch ne andere Kleinigkeit:
    Mir ist aufgefallen, dass sehr oft ein Grundgerüst einer Klasse(Funktionen ohne Anweisung und mit ; beendet) in einer Headerdatei erstellt wird und in einer cpp Datei werden per Klassenname::Funktionsname die Anweisungen erstellt. Ansich gefällt mir das Prinzip mit dem Grundgerüst und ausserhalb Funktionsanweisungen erstellen weil man auf einen Blick sieht, wie die Klasse aufgebaut ist, aber die Trennung in eine Header und eine cpp Datei ist mir wiederum zu unübersichtlich. Ist es programmiertechnisch ein Fehler, wenn ich einfach beides in dieselbe Headerdatei schreibe und dann einfach irgendwo inkludiere?
    Mit dem kompilieren gibts da keine Probleme.

  2. #2
    Code:
    #ifndef __HEADERXX__
    #define __HEADERXX__
    ..
    ..
    #endif
    Also zu erst: das sind alles Anweisungen für den Precompiler. Das bedeutet das sie vor dem Compilieren abgearbeitet werden.
    Code:
    #ifndef ...
    bedeutet 'wenn nicht definiert'
    Code:
    #define ...
    bedeutet 'definiere' und
    Code:
    #endif
    bedeutet in C++ 'endif'^^. Das alles wir benutzt, weil eine zweimal definierte Klasse oder Funktion( mit den gleichen Parametern) einen Fehler produzieren.

    Zu deinen zeiten Problem kann ich dir leider nicht helfen. Ich hab da zwar auch schon ein paar mal gesehen aber noch nie gebraucht...

    Ciao
    malu

    PS: Hui, ich hab gemerkt, dass ich mich mal wieder mit C++ beschäftigen sollte. Ich komme ja ganz aus der Übung...

  3. #3
    #pragma ist afaik eine Erfindung von Microsoft und nicht im C Standard enthalten.

    Das man die Funktionen in der Headerdatei beinhaltet ist soweit unproblematisch, solange du diese als inline kennzeichnest und keine statischen Member brauchst, da fuer selbige ein Objectfile erstellt werden muss. Allerdings kann es dir so passieren, dass, wenn due die header in meheren Teilen verwendest, der Code mehrfach compiliert wird und ggf der Linker probleme macht oder fuer den selben sourcecode mehere Maschinencodebloecke erzeugt werden, was das Endergebniss unnoetig belasten koennte.

  4. #4
    Achtung Offtopic!
    Kann mir jemand kurz sagen wie man in C++ hochrechnen kann? ^ ist ja für die XOR - Operation. Ich brauch den Operator um Tangenz hoch -1 zu rechnen. Oder gibts da eine extra Funktion(kann nich so gut englisch ) weil es gibt ja tanf, tanh, atan und atan2. Ich hab aber keine Ahnung was die machen.

  5. #5
    Also hochrechnen kannst du, wenn du zum Beispiel 2³ rechnen willst, so:
    Code:
    2^3
    Wie das mit Tangez hoch -1 ist weis ich allerdings nicht aber vielleicht hat dir das ja auch schon geholfen.

    ciao
    malu

  6. #6
    ich hab oben schon beschrieben, dass es etwas anderes macht oder willst du mir sagen 3^4 gibt 7 und 3^5 gibt 6. Dieser Operator schafft auf Bits.
    ich geb dir ein Beispiel:
    9^12=5
    und das wird wie folgt berechnet:
    1 0 0 1 (= 9)
    1 1 0 0 (= 12)
    ------------------
    0 1 0 1 (= 5)

    die erste Zahl ist immer 2^3 die zweite 2^2 die dritte 2^1 und die letzte 2^0

    Geändert von Drakes (14.08.2006 um 22:25 Uhr)

  7. #7
    Probiere es mal mit pow(). In C++ dürfte das die <cmath> benötigen.

    freundliche Grüße, Rolus

    Geändert von Rolus (16.08.2006 um 00:13 Uhr)

  8. #8
    Zitat Zitat von Rolus
    Probiere es mal mit pow(). In C++ dürfte das die <cmath> benötigen.

    freundliche Grüße, Rolus
    Pow ist zum Potenzieren da, zu nichts anderem. Ein einfaches pow(tan(x),-1) == 1/(tan(x)) ist aber sicherlich nicht das, was du mit TAN^-1(x) erreichen wolltest. In der Mathematik bezeichnet F^-1(x) idR. die Umkehrfunktion von F, so dass gilt F (x) * F^-1(x) == 1. In diesem Fall ist dein tan^-1(x), was du suchst, der Arcustangens, kurz atan(x).

    atan2 macht im Grunde genau das selbe, nur uebergibst du statt einem Funktionswert x das Parameterpaar (x,y) welches als X- und Y-Koordinaten deiner Tangenskurve zu x/y evaluiert wird, und dir ermoeglicht, den Winkel im korrekten Quadranten als Ergebnis zurueck zu bekommen

  9. #9
    danke @ Rolus und Ineluki, falls ich mal wieder keine Ahnung hab(das heisst sehr bald) meld ich mich wieder(oder wenn ich mal ausnahmsweise Ahnung hab beim helfen).

    Geändert von Drakes (18.08.2006 um 16:42 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •