Newsgroup: it.comp.lang.c
Titolo: dev C++ macro "max" passed 3 arguments, but just takes 2

Buongiorno a tutti, sto scrivendo questo programma per caricare una 
matrice con degli interi, e trovare il valore massimo e minimo. Ricevo 
però questo errore:
macro "max" passed 3 arguments, but just takes 2
Non riesco a capire cosa significa: potete aiutarmi? Ecco il codice:
#include<stdio.h>
#include<conio.h>
#include<windows.h>
//#define righe 10
//#define colonne 10
//prototipi funzioni//
void carica(int matrice[10][10],int riga,int colonna);
int max(int matrice[10][10],int riga,int colonna);
int min(int matrice[10][10],int riga,int colonna);
void leggi_righe(int matrix[10][10],int riga,int colonna);
main()
{     //dichiarazione variabili//
  int matrix[10][10];
  int r,c;
  int massimo,minimo;
     //chiamate alle funzioni//
  carica(matrix,10,10);
  massimo=max(matrix,10,10);
  minimo=min(matrix,10,10);
  system("cls");
  printf("\n\npremi invio per visualizzare la tua matrice\n");
  getchar();
  leggi_righe(matrix,10,10);
  printf("\n\nil valore massimo contenuto nella matrice e': %d",massimo);
  printf("\n\nil valore minimo contenuto nella matrice e': %d",minimo);
  getchar();
}//chiusura main//
            //dichiarazione funzioni//
            //caricamento matrice//
  void carica(int matrice[10][10],int riga,int colonna)
  {
       int r,c;
       for(r=0;r<riga;r++)
       {
        for(c=0;c<colonna;c++)
        {
         printf("\n\ninserisci un numero nella riga %d colonna %d: ",r,c);
         scanf("%d",&matrice[r][c]);
        }
       }
  };
            //ricerca valore massimo//
   int max(int matrice[10][10],int riga,int colonna)
   {
       int r,c;
       int massimo;
       massimo=matrice[r][c];
       for(r=0;r<riga;r++)
       {
        for(c=0;c<colonna;c++)
        {
         if(max<matrice[r][c])
         {massimo=matrice[r][c];}
        }
       }
       return massimo;
    };
             //ricerca valore minimo//
   int min(int matrice[10][10],int riga,int colonna)
   {
       int r,c;
       int minimo;
       minimo=matrice[r][c];
       for(r=0;r<riga;r++)
       {
        for(c=0;c<colonna;c++)
        {
         if(min>matrice[r][c])
         {minimo=matrice[r][c];}
        }
       }
       return minimo;
    };
            //lettura matrice riga per riga//
    void leggi_righe(int matrice[10][10],int riga,int colonna)
    {
       int r,c;
       for(r=0;r<riga;r++)
       {
        printf("\n\n");
        for(c=0;c<colonna;c++)
        {
         printf("%d\t",matrice[r][c]);
        }
       }
    };
Grazie in anticipo.

 
dico la mia:
in uno degli include e' definita la macro max
piu' o meno  cosi'
#define max(a,b) ......
[ i puntini sono solo per lasciare appesa la sua implementazione ]
che si sovrappone alla tua definizione di funzione max()
tieni conto che in C l'espansione delle macro avviene prima della fase 
di compilazione e non tiene assolutamente conto di eventiali funzioni 
con lo stesso nome ( macro max, funzione max )
per cui il preprocessore si ritrova ad avere una macro max con 2 
paramentri che viene usata con 3 parametri da cui l'avviso
la soluzione: cambia il nome alle tue funzioni


 
Verifica che in qualche header file non sia già definita una macro di 
nome max.
Alcuni compilatori la includono nei file standard.  In questo caso 
devi cambiare nome alle funzioni min(,,) e max(,,).
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

Era quello l'errore, grazie. Ora però mi restituisce un valore a caso 
nella ricerca del maggiore! Probabilmente è un errore banale, ma al 
momento non riesco davvero a trovarlo. Puoi darmi una mano? Grazie ancora.
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define righe 3
#define colonne 3
//prototipi funzioni//
void carica(int matrice[3][3],int riga,int colonna);
int maggiore(int matrice[3][3],int riga,int colonna);
int minore(int matrice[3][3],int riga,int colonna);
void leggi_righe(int matrix[3][3],int riga,int colonna);
main()
{     //dichiarazione variabili//
  int matrix[3][3];
  int r,c;
  int massimo,minimo;
     //chiamate alle funzioni//
  carica(matrix,3,3);
  massimo=maggiore(matrix,3,3);
  minimo=minore(matrix,3,3);
  system("cls");
  printf("\n\nla tua matrice\n");
  leggi_righe(matrix,3,3);
  printf("\n\nil valore massimo contenuto nella matrice e': %d",massimo);
  printf("\n\nil valore minimo contenuto nella matrice e': %d",minimo);
  getchar();
}//chiusura main//
            //dichiarazione funzioni//
            //caricamento matrice//
  void carica(int matrice[3][3],int riga,int colonna)
  {
       int r,c;
       for(r=0;r<riga;r++)
       {
        for(c=0;c<colonna;c++)
        {
         printf("\n\ninserisci un numero nella riga %d colonna %d: ",r,c);
         scanf("%d",&matrice[r][c]);
        }
       }
        getchar();
  };
            //ricerca valore massimo//
   int maggiore(int matrice[3][3],int riga,int colonna)
   {
       int r,c;
       int maggiore;
       maggiore=matrice[r][c];
       for(r=0;r<riga;r++)
       {
        for(c=0;c<colonna;c++)
        {
         if(maggiore<matrice[r][c])
         {maggiore=matrice[r][c];}
        }
       }
       return maggiore;
    };
             //ricerca valore minimo//
   int minore(int matrice[3][3],int riga,int colonna)
   {
       int r,c;
       int minore;
       minore=matrice[r][c];
       for(r=0;r<riga;r++)
       {
        for(c=0;c<colonna;c++)
        {
         if(minore>matrice[r][c])
         {minore=matrice[r][c];}
        }
       }
       return minore;
    };
            //lettura matrice riga per riga//
    void leggi_righe(int matrice[3][3],int riga,int colonna)


 
in questi casi sono cattvissimo :-) usa il debugger ed esegui passo 
passo il programma, e' molto educativo
<snip>
hint:
nella funzione maggiore la prima
maggiore=matrice[r][c];
non mi piace affatto, nulla e' garantito sui valori iniziali di r e c

 non mi piace affatto, nulla e' garantito sui valori iniziali di r e c
Risolto prima di leggere la tua risposta: :-) ho inizializzato a zero le 
variabili r e c. Grazie ancora!




            //dichiarazione funzioni//



       int r=0;
       int c=0;
       int maggiore;
       maggiore=matrice[r][c];
       for(r=0;r<riga;r++)
       {
        for(c=0;c<colonna;c++)
        {
         if(maggiore<matrice[r][c])
         {maggiore=matrice[r][c];}
        }
       }
       return maggiore;
    };
             //ricerca valore minimo//
   int minore(int matrice[3][3],int riga,int colonna)
   {
       int r=0;
       int c=0;
