Warum static const statt #define ??
-
Warum sollte man static const , #define vorziehen ?
-
Typsicherheit. Der Präprozessor ist dumm.
-
Warum
static const?constreicht normalerweise. Vorteile gegenüber#define:- Explizite Typangabe
- Berücksichtigt Scope
- Vereinfacht Debugging
- Wertet den Initialisierer unmittelbar aus, erspart so Überraschungen
Aber es ist ja nicht so, als ob Suchmaschinen zu diesem Thema keine Resultate fänden...
-
const ist ein Sprachfeature, #define nicht.
-
Was passiert wohl wenn jemand schreibfaul ist und sowas programmiert wie:
#define i "Super Idee" if ( true ) std::cout << i;
-
loks schrieb:
const ist ein Sprachfeature, #define nicht.
Natürlich ist der Präprozessor und damit
#defineein Sprachfeature.nurf schrieb:
Was passiert wohl wenn jemand schreibfaul ist und sowas programmiert wie:
#define i "Super Idee" if ( true ) std::cout << i;Was soll dann passieren? Und wer schreibt schon
if(true)?
-
Nexus schrieb:
nurf schrieb:
Was passiert wohl wenn jemand schreibfaul ist und sowas programmiert wie:
#define i "Super Idee" if ( true ) std::cout << i;Was soll dann passieren? Und wer schreibt schon
if(true)?Es kompiliert nicht ?
-
nurf schrieb:
Es kompiliert nicht ?
Das musst du mir erklären. Ich erwarte aber schon etwas mehr als fehlendes
main()oder#include <iostream>.
Und wer
if(true)schreibt, weiss ich immer noch nicht.
-
nurf schrieb:
Nexus schrieb:
nurf schrieb:
Was passiert wohl wenn jemand schreibfaul ist und sowas programmiert wie:
#define i "Super Idee" if ( true ) std::cout << i;Was soll dann passieren? Und wer schreibt schon
if(true)?Es kompiliert nicht ?
Also bei mir kompiliert das wunderbar.
Ich glaube was nicht mehr geht ist ein weiteres << anzuhängen, so z.B:
std::cout << i << std::endl;*Edit
Bin mal wieder etwas zu spät ^^
-
icarus2 schrieb:
Ich glaube was nicht mehr geht ist ein weiteres << anzuhängen, so z.B:
std::cout << i << std::endl;Doch, natürlich geht das. Der Präprozessor expandiert das Makro
ija lediglich zustd::cout << "Super Idee" << std::endl;
-
Bacid90210 schrieb:
Warum sollte man static const , #define vorziehen ?
Hatten wir doch erst: http://www.c-plusplus.net/forum/viewtopic-var-t-is-268402-and-highlight-is-.html
-
icarus2 schrieb:
nurf schrieb:
Nexus schrieb:
nurf schrieb:
Was passiert wohl wenn jemand schreibfaul ist und sowas programmiert wie:
#define i "Super Idee" if ( true ) std::cout << i;Was soll dann passieren? Und wer schreibt schon
if(true)?Es kompiliert nicht ?
Also bei mir kompiliert das wunderbar.
Ich glaube was nicht mehr geht ist ein weiteres << anzuhängen, so z.B:
std::cout << i << std::endl;Natürlich geht das... i wird schlichtweg durch den Text "Super Idee" ersetzt. Der Compiler (Nicht der Prä-Prozessor!) sieht also folgenden Code:
std::cout << "Super Idee" << std::endl;
Also gar kein Problem.Was abre sehr wohl ein Problem sein kann, ist wenn man später den Bezeichner erneut nutzen möchte:
for (int i = 0; i < n; i++)...Der Compiler wird folgendes sehen:
for (int "Super Idee" = 0; i < n; i++)...
-
Janjan schrieb:
for (int "Super Idee" = 0; i < n; i++)...
Und die anderen i's ignoriert er?

-
knivil schrieb:
Janjan schrieb:
for (int "Super Idee" = 0; i < n; i++)...
Und die anderen i's ignoriert er?

Ja, der Prä-Prozessor ist Hauptschüler.
-
Wahrscheinlich muss ich mich mal wieder schämen... aber wiso funktioniert das hier nicht?
#include <iostream> #include <string> #define i "Super Idee"; int main() { std::cout << i << std::endl; return 0; }
-
icarus2 schrieb:
Wahrscheinlich muss ich mich mal wieder schämen... aber wiso funktioniert das hier nicht?
Wegen dem ;
-
#include <iostream> #define i "Super Idee" int main() { std::cout << i << std::endl; return 0; }
-
@icarus2: Entferne mal das ";" hinter dem #define. Der Präprozessor expandiert das zu:
#include <iostream> #include <string> int main() { std::cout << "Super Idee"; << std::endl; return 0; }Was offensichtlich nich korrekt ist.
-
Jo, dafür muss man sich schämen ^^ Thx
-
icarus2 schrieb:
Wahrscheinlich muss ich mich mal wieder schämen... aber wiso funktioniert das hier nicht?
Liesst du hier auch irgendeinen Beitrag richtig? Soll ich mich selbst zitieren?
knivil schrieb:
Bacid90210 schrieb:
Warum sollte man static const , #define vorziehen ?
Hatten wir doch erst: http://www.c-plusplus.net/forum/viewtopic-var-t-is-268402-and-highlight-is-.html
Dort war genau dieses Problem.