Frage zu #define



  • Hi

    ich weiss die Frage mag vllt etwas deppert klingen aber ich stell sie einfach mal:

    Wenn ich folgenden Code habe:

    #include <iostream>
    
    #define A 314
    
    int main()
    {   
    	int d = -1;
    	std::cout << A/d << std::endl;
    	std::cin.get();
    	return 0;
    }
    

    Wie wird das A beim Rechnen behandelt, also ich mein signed/unsigned int/long/float etc.
    Passt sich immer an oder hat es einen festen Datentyp ?

    Ich habe nun schon diverse Bücher durchsucht und auch schon im Internet gesucht aber nichts gefunden, was meine Frage beantwortet.

    Ich hoffe ihr könnt mir helfen.

    mfg
    Knacks



  • genauso, wie wenn du es direkt in den Code schreiben wuerdest



  • Nimm eine Konstante statt dem define und du weißt welcher Typ dahinter steht.



  • Knacks schrieb:

    Wie wird das A beim Rechnen behandelt, also ich mein signed/unsigned int/long/float etc.
    Passt sich immer an oder hat es einen festen Datentyp ?

    Grundsätzlich:
    1. Makros (#define) sind reine Textersetzungen. Wenn du im Code 314 schreibst ist das ein Integer (sonst musst du Suffixe verwenden wie: 314l für long...).
    2. Gewöhn dir diesen Stil lieber gleich ab. Makros sollte man nur verwenden wenn es wirklich keine Alternativen gibt (z.B. als Includeguards...).

    cu André



  • joar - würde auch int sagen ^^
    wenn du noch nen . rein machst, dann hast du pi 😉



  • Das der Stil #define für triviale Dinge zu benutzen nicht gut ist, ist mir durch aus bewußt. Ich bin beim Stöbern durch verschiedene Tutorials darüber gefallen.
    Ich weiss nicht mehr genau welches, aber dort wurde diese Verwendung von #define als Negativbeispiel verwendet. Und ich habe mich nun einfach gefragt, wie es sich in einer Rechnung verhält, da dort nix dazu gesagt wurde und ich anderweitig auch nichts gefunden habe, hab ich hier einfach mal gefragt.

    gruß

    edit:

    von unskilled
    wenn du noch nen . rein machst, dann hast du pi 😉

    Das wäre dann aber "ziemlich ungenau" ^^ 😉



  • Das einfachste ist, du merkst dir einfach, dass #defines im Quelltext ersetzt werden, dann brauchst du dir auch keine weiteren Überlegungen bezüglich des Datentyps zu machen.

    Dennoch würde ich sie vermeiden, wo möglich. Im Forum gibt es einige Threads bezüglich #define vs. const ...



  • hmm...
    [klugscheiß]
    man kann pi jeden wert zwischen 2 und 4 annehmen lassen, in dem man die metrik einfach entsprechend definiert - weil pi nicht als 3,1415926... definiert ist sondern eben als verhältins zischen umfang und flächeninhalt...
    und somit ist pi auch keine konstante - pi ist immer nur für die jeweilige metrik konstant
    [/klugscheiß]

    so! das wollt ich scho immer ma sagen ^^ 🤡

    bb


Anmelden zum Antworten