Gast
#6571534
Wie kann ich zwei Macro-Parameter mit :: verbinden damit ein voll qualifizierter Name ensteht? mit _ geht es aber nicht mit :: godbolt: https://gcc.godbolt.org/z/TvY7YT
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
|
Anzeige
|
C++17, Macro-Parameter mit :: Verbinden?
Gast
#6571534
Wie kann ich zwei Macro-Parameter mit :: verbinden damit ein voll qualifizierter Name ensteht? mit _ geht es aber nicht mit :: godbolt: https://gcc.godbolt.org/z/TvY7YT
Gast
#6571538
Hintergrund: ich wollte mir für ein Reverse-Engineering Projekt so ein kleines Hilfs-Macro für die Analyse schreiben - normalerweise nutze ich keine Macros aber hier wäre so was schon eine Arbeitserleichterung, wird auch nicht teil irgendwelchen Produktiv-Codes
Gast
#6571551
so würde es gehen aber das sieht schon sehr verrückt aus
Gast
#6571558
funktioniert nicht? cppbert schrieb: > Wie kann ich zwei Macro-Parameter mit :: verbinden damit ein voll > qualifizierter Name ensteht? > > mit _ geht es aber nicht Hä? > mit :: Hä? > godbolt: https://gcc.godbolt.org/z/TvY7YT > // wenn ich hier den Unterstrich durch :: ersetze hagelt es > Fehlermeldungen > #define FULL_MEMBER( Struct, Member ) Struct ## _ ## Member > struct A Ja, denn es handelt sich um den "token pasting operator". Der fügt die beiden Operanden zusammen, so dass sie vom Compiler als ein einzelnes Wort betrachtet werden. Bei :: darf das aber nicht passieren, denn Struct, :: und Member müssen drei separte Tokens bleiben, damit der Compiler was damit anfangen kann. Warum verwendest du den Operator überhaupt?
Gast
#6572109
Rolf M. schrieb: > Warum verwendest du den Operator > überhaupt? Macro-Unerfahrenheit so geht es, Danke
Gast
#6572181
so wie oben geht es mit dem clang, gcc und intel - aber nicht mit dem VS2017 oder VS2019 - mit dem ich arbeite :/ gcc.godbolt: https://gcc.godbolt.org/z/v1GGE6
Gast
#6573269
Alignof funktioniert nur auf einen Typ. Je nach dem was mit dem Wert bezweckt werden soll müsste man vermutlich das alignment der struct mit dem offset des members verrechnen. Ich denke mal (ohne besonders darüber nachgedacht oder nachgesehen zu haben) dass structs automatisch mindestens das maximum an alignments der members bekommen, also keine 32bit-aligned struct ein 64bit-aligned member haben kann. Von daher - wozu wäre der Wert gut?
funktioniert im godbolt mit VS.
Gast
#6573445
>Alignof funktioniert nur auf einen Typ.
hab mich verwirren lassen weil clang, gcc und intel das ohne Problem
durchgehen lassen
alignof(decltype(Struct::Member))
sollte dann aber das was ich haben will (mit deiner Korrektur) sein
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|