__FILE__ == Makro oder Konstante?
- 
					
					
					
					
 Hi, was ist z.B. sowas wie __FILE__? Ist dies ein Makro, eine Konstante oder eine Definition oder was ganz anderes? Wie nennt man diesen Typ? 
 
- 
					
					
					
					
 
 
- 
					
					
					
					
 '''''''''''''''''''''' schrieb: Hi, was ist z.B. sowas wie __FILE__? Ist dies ein Makro, eine Konstante oder eine Definition oder was ganz anderes? Wie nennt man diesen Typ? __FILE__ ist ein "ding", das verwendbar ist, um es nach char const* auszuwerten und den als nullterminierten string zu betrachten. 
 aber makro isses net, man kann ja schlecht #ifdef __FILE__ machen. und augf machen compilern kann man nicht bla##__FILE__ machen und auf machen kann man __FILE__ nicht als templateparameter machen und auf manchen gibt sizeof(__FILE__) 4 und auf manchen die echte stringlänge. seltsam über seltsam.
 
- 
					
					
					
					
 volkard schrieb: [...]und auf manchen gibt sizeof(__FILE__) 4 und auf manchen die echte stringlänge. Was du so alles ausprobierst :D. 
 
- 
					
					
					
					
 __FILE__ ist ein text 
 
- 
					
					
					
					
 Wozu spekulieren, wenn man auch in den Standard gucken kann? Abschnitt 16.8 "Predefined macro names" führt u.a. __FILE__ auf. 
 
- 
					
					
					
					
 Bashar schrieb: Wozu spekulieren, wenn man auch in den Standard gucken kann? Abschnitt 16.8 "Predefined macro names" führt u.a. __FILE__ auf. gute idee. ich verlasse mich ab jetzt drauf, daß sizeof(__FILE__)-1 mir die zeichenanzahl gibt. das steht so da. 
 leider kann ich bei __LINE__ nicht so genau erkennen, was eine "decimal constant" ist. gat der compilerbauer es mit "int const __LINE__=17" oder mit "#define __LINE__ 17" oder noch anders gemacht? ich frage mich, ob "int myVar##__LINE__;" erlaubt ist.
 
- 
					
					
					
					
 man könnte natürlich auch strlen(__FILE__) verwenden  
 
- 
					
					
					
					
 guesswho1 schrieb: man könnte natürlich auch strlen(__FILE__) verwenden  nicht zur compilezeit. 
 
- 
					
					
					
					
 volkard schrieb: leider kann ich bei __LINE__ nicht so genau erkennen, was eine "decimal constant" ist. gat der compilerbauer es mit "int const __LINE__=17" oder mit "#define __LINE__ 17" Imo liegt die Betonung mehr auf decimal, als auf constant. Der Compiler soll also __LINE__ zB so definieren #define __LINE__ 20und nicht zB #define __LINE__ 0x14Das ist im Hinblick auf den ## Operator von Bedeutung. volkard schrieb: ich frage mich, ob "int myVar##__LINE__;" erlaubt ist. Da, so wie ich den Standard verstehe, alles Makros sind, ist das erlaubt. 
 
- 
					
					
					
					
 int var ## __LINE__;funktioniert nur in Makros, außerhalb wird ## vom Präprozessor nicht behandelt, was dazu führt, dass der Compiler sich über nen Syntaxfehler beschwert. Innerhalb eines Makros geht das, allerdings wird __LINE__ dann durch die Zeilenzahl ersetzt, an der das Makro steht - nicht der Aufruf. Aus dem selben Grund funktioniert auch puts(# __LINE__ );nicht. 
 
- 
					
					
					
					
 volkard schrieb: leider kann ich bei __LINE__ nicht so genau erkennen, was eine "decimal constant" ist. Ich auch nicht. Vielleicht hat man das ohne Nachzudenken vom C-Standard abgeschrieben. In C++ müsste es eigentlich "decimal literal" o.ä. heißen.