Quiz #define

di il
3 risposte

Quiz #define

#include <stdio.h>


#define M(x) x / x

int main() {
	printf("%d\n", M(M(4)));

	return 0;
	
}
Qualcuno potrebbe spiegarmi perchè viene 0? Io avevo pensato venisse 1, dato che M(4) è uguale a 1, per cui M(1) viene 1

3 Risposte

  • Re: Quiz #define

    La macro non esegue istruzioni, sostituisce semplicemente i simboli nel codice che solo dopo viene compilato per eseguire istruzioni. Tieni bene a mente questa cosa quando scrivi una macro perché altrimenti puoi generare risultati inaspettati.

    prova questo:
    
    	// M(4) == 4 / 4;
    	// M(M(4)) == 4 / 4 / 4 / 4;
    
    	int s = (4 / 4 / 4 / 4);
    	printf("(4 / 4 / 4 / 4); %d\n", s);
    
    	float q = (4.0f / 4.0f / 4.0f / 4.0f);
    	printf("(4.0f / 4.0f / 4.0f / 4.0f); %f\n", q);
    
  • Re: Quiz #define

    Unqualunque ha scritto:


    La macro non esegue istruzioni, sostituisce semplicemente i simboli nel codice che solo dopo viene compilato per eseguire istruzioni. Tieni bene a mente questa cosa quando scrivi una macro perché altrimenti puoi generare risultati inaspettati.

    prova questo:
    
    	// M(4) == 4 / 4;
    	// M(M(4)) == 4 / 4 / 4 / 4;
    
    	int s = (4 / 4 / 4 / 4);
    	printf("(4 / 4 / 4 / 4); %d\n", s);
    
    	float q = (4.0f / 4.0f / 4.0f / 4.0f);
    	printf("(4.0f / 4.0f / 4.0f / 4.0f); %f\n", q);
    
    Grazie mille, sei stato chiarissimo
  • Re: Quiz #define

    Quindi non dimenticare le parentesi

    #define M(x) (x / x)
Devi accedere o registrarti per scrivere nel forum
3 risposte