Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] #define o typedef ?? (Differenze)

    Che differenza c'e' tra typedef e #define ??

    Perche' in un caso del genere sono Uguali
    codice:
    #define MIO_DEFINE_INT     unsigned short int
    typedef unsigned short int MIO_TYPEDEF_INT
    
    int main() {
        MIO_DEFINE_INT a = 5;
        MIO_TYPEDEF_INT b = 5;
    
        printf("#define unsigned short size: %d\r\n", sizeof(a));
        printf("typedef unsigned short size: %d\r\n", sizeof(b));
        return(0);
    }
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    In pratica è uguale, è differente il livello in cui vengono interpretati.

    #define a livelo di preprocessore, è come fare un "TROVA - SOSTITUISCI"
    typedef a livello di processore. Secondo me è + elegante

  3. #3
    typedef sara' anche piu' elegante... ma se e' come hai detto tu... da' "piu' lavoro" al processore... o Sbaglio ?

  4. #4
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Be credo che si guadagni molto più di chiarezza rispetto al lavoro di processore... non so come un normale compilatore implementi il typedef.
    Ho provato a fare 2 programmini di esempio... il typedef ha circa 500 byte in + su 24K ...

    Credimi, un uso improprio del #define può provocare molti casini!

  5. #5
    Non sono sempre uguali.
    Prova a fare qualcosa del genere con una macro:

    codice:
        typedef void (*FUNCTION)(int);
        ...
        FUNCTION f;
    Più in generale il typedef ha grandi potenzialità, e ti permette di fare cose diverse e qualcosa di più complesso rispetto a un #define. Puoi ad esempio definire tipi "complicati" a passi graduali.

    codice:
    1.21:	How do I declare an array of N pointers to functions returning
    	pointers to functions returning pointers to characters?
    
    A:	The first part of this question can be answered in at least
    	three ways:
    
    	1.  char *(*(*a[N])())();
    
    	2.  Build the declaration up incrementally, using typedefs:
    
    		typedef char *pc;	/* pointer to char */
    		typedef pc fpc();	/* function returning pointer to char */
    		typedef fpc *pfpc;	/* pointer to above */
    		typedef pfpc fpfpc();	/* function returning... */
    		typedef fpfpc *pfpfpc;	/* pointer to... */
    		pfpfpc a[N];		/* array of... */
    
    	3.  Use the cdecl program, which turns English into C and vice
    	    versa:
    
    		cdecl> declare a as array of pointer to function returning
    			pointer to function returning pointer to char
    		char *(*(*a[])())()
    
    	    cdecl can also explain complicated declarations, help with
    	    casts, and indicate which set of parentheses the arguments
    	    go in (for complicated function definitions, like the one
    	    above).  See question 18.1.
    
    	Any good book on C should explain how to read these complicated
    	C declarations "inside out" to understand them ("declaration
    	mimics use").
    
    	The pointer-to-function declarations in the examples above have
    	not included parameter type information.  When the parameters
    	have complicated types, declarations can *really* get messy.
    	(Modern versions of cdecl can help here, too.)
    
    	References: K&R2 Sec. 5.12 p. 122; ISO Sec. 6.5ff (esp.
    	Sec. 6.5.4); H&S Sec. 4.5 pp. 85-92, Sec. 5.10.1 pp. 149-50.
    Preso da qui, una miniera di informazioni...

    Summum crede nefas animam preferre pudori e propter vitam vivendi perdere causas.
    (Giovenale)

  6. #6

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.