Warum static const statt #define ??
-
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.
-
knivil schrieb:
Liesst du hier auch irgendeinen Beitrag richtig? Soll ich mich selbst zitieren?
Ja, ist eine Katastrophe, dass ich nicht alles in dem geposteten Beitrag gelesen habe und deshalb die gleiche Frage nochmal gestellt habe...
-
STEINIGT IHN!
-
Fellhuhn schrieb:
STEINIGT IHN!
