Problemi con la macro #DEFINE

di il
9 risposte

Problemi con la macro #DEFINE

Buongiorno a tutti, sto facendo un esercizio sugli algoritmi di ordinamento, in questo caso per sostituzione, il codice è questo:

#include<iostream>
#define n 5
using namespace std;
void scambio(int& a, int& b){
int aux=a;
  a=b;
  b=aux;
}
 
void oridnamento (int a[], int n){
  int i,j;

  for( i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
      if(a[i]>a[j])
        scambio(a[i],a[j]);
}

void stampa (int a[],int n){
  for(int i=0;i<n;i++)
    cout<<a[i]<<" ";
    cout<<"\n";
}


int main () {
int a[5]={12,34,23,45,67};
cout<<"array non ordinato"<<endl;
stampa(a,n);
oridnamento(a,n);
cout<<"array ordinato"<<endl;
stampa(a,n);

return 0;
}
Il problema è che se utilizzo il #DEFINE per n il compilatore mi da questo errore "xpected ‘,’ or ‘...’ before numeric constant
#define" mentre se dichiaro normalmente
const int n=5;
funziona tutto perfettamente. Qualcuno sa dirmi perchè in questo caso non posso usare la macro? grazie a tutti e buon fine settimana

9 Risposte

  • Re: Problemi con la macro #DEFINE

    Al momento della compilazione la riga di codice
    void oridnamento (int a[], int n){
    diventa
    void oridnamento (int a[], int 5){
    da cui gli errori da te riscontrati.
  • Re: Problemi con la macro #DEFINE

    Perchè quando definisci una macro con #define, il compilatore sostituisce ogni elemento che corrisponde alla macro con il valore.

    Risultato, la tua funzione oridnamento() viene sostituita in questo modo in fase di compilazione:
    
    void oridnamento(int a[], int 5) {
    
    Per questo è importante dare dei nomi "particolari" alle macro, in modo che non vi possa essere ambiguità nel codice.

    Ciao.
  • Re: Problemi con la macro #DEFINE

    Effettivamente ho cambiato il nome della macro in pippo e funziona perfettamente . Grazie mille ad entrambi
  • Re: Problemi con la macro #DEFINE

    Hai cambiato il nome della costante non della macro. E sarebbe bene usare nomi in MAIUSCOLO per queste costanti

    #define MAXELEM 5
  • Re: Problemi con la macro #DEFINE

    oregon ha scritto:


    Hai cambiato il nome della costante non della macro. E sarebbe bene usare nomi in MAIUSCOLO per queste costanti

    #define MAXELEM 5
    capito Oregon, seguirò sicuramente il tuo consiglio
  • Re: Problemi con la macro #DEFINE

    E sarebbe bene non usare proprio #define in C++ essendoci constexpr…
  • Re: Problemi con la macro #DEFINE

    Sinceramente non conoscevo constexpr, mi documenterò, grazie mille
  • Re: Problemi con la macro #DEFINE

    Constexpr è stata introdotta in c++ 11 e migliorata in c++ 14

    Se usi versioni precedenti potresti avere problemi
  • Re: Problemi con la macro #DEFINE

    oregon ha scritto:


    Constexpr è stata introdotta in c++ 11 e migliorata in c++ 14

    Se usi versioni precedenti potresti avere problemi
    calcola che il libro che sto usando è parecchio vecchio. Comunque ho fatto una ricerca su internet sulla Constexpr
Devi accedere o registrarti per scrivere nel forum
9 risposte