define vs. typedef
-
Hallo!
Ist es richtig, dass man eher typedef als define für neue Typennamen hernehmen soll aus diesem Grund:
Wenn man mit typedef einen Zeiger auf einen Datentypen definiert, z.B. typedef long* PLONG; so ist, wenn man bei der Var.def. dann schreibt PLONG v1,v2; beides vom Typ long*, während bei #define PLONG long* nur die erste Variable v1 vom Typ long* ist, während v2 vom Typ long wäre.
Soweit so richtig?
Spricht sonst noch was gegen define bei Typvereinbarungen?
-
ja.
#define ist reine textersetzung. #define ist deshalb eher zu meiden wenn moeglich.
denn #define macht dir aus jedem PLONG ein long*, auch wenn es keinen typenkontext hat
und der fall mit den zeigern hast du ja selber entdeckt.
-
harry3 schrieb:
Spricht sonst noch was gegen define bei Typvereinbarungen?
für typen taugt #define wirklich nix, aber sonst, für einfache sachen wie 'echte' konstanten oder trickreiche function-like makros sind manchmal ganz praktisch. kannst dir ja mal 'boost-preprocessor' anschauen. da werden #defines voll ausgereizt.
-
d.h.
#define long* PLONG int PLONGBONGDONG;
interpertiert der comiler als
int long*BONGDONG;
???
und
typedef long* PLONG; int PLONGBONGDONG;
interpertiert der compiler trozdem als
int PLONGBONGDONG;
???
-
BorisDieKlinge schrieb:
d.h.
#define long* PLONG int PLONGBONGDONG;
interpertiert der comiler als
int long*BONGDONG;
???
Nein. Der Praeprozessor arbeitet auf Token-Basis, er wuerde also das PLONG in PLONGBONGDONG nicht finden.
(Du meintest uebrigens bestimmt #define PLONG long*, andersherum funktioniert das eher nicht.)
-
ich meinte:
//#define PLONG long* typedef long* PLONG; int main() { PLONG PLONG; }