Domanda

So che il numero minimo di parametri nella definizione di funzione è pari a zero, ma qual è il numero massimo di parametri nella definizione di funzione? Chiedo la questione solo per il gusto della conoscenza e per curiosità, non che mi accingo a scrivere una funzione reale.

È stato utile?

Soluzione

Sì, ci sono dei limiti imposti dalla realizzazione. La risposta è data nel testo in grassetto nel seguente estratto da Visual C ++.

1. C ++ Language

Allegato B - quantità di attuazione

  1. Poiché i computer sono finite, C + + implementazioni sono inevitabilmente limitate nella dimensione dei programmi che possono elaborare correttamente. Ogni implementazione deve documentare quelli limitazioni se noto. Questo documentazione può citare limiti fissi dove esistono, dicono come calcolare limiti variabili in funzione di risorse disponibili, o dire quello fissato limiti non esistono o sono sconosciuti.

  2. I limiti possono vincolare quantità che comprendono quelli descritti qui sotto o altri. Il numero tra parentesi che segue ciascun quantitativo è consigliato come minima per tale quantità. Tuttavia, queste quantità sono solo linee guida e non determinare la conformità.
    - livelli di nidificazione di istruzioni composte, iterazione controllano strutture, e strutture di controllo selezione [256]
    . - livelli di nidificazione di condizionale inclusione [256].
    - Pointer, array e dichiaratori funzione (in qualsiasi combination) modificando un'aritmetica, struttura, unione o tipo incompleto in una dichiarazione [256].
    - Nesting livelli di espressioni tra parentesi all'interno di una piena espressione [256].
    - Numero di personaggi in un interno identificatore o nome della macro [1 024].
    - Numero di caratteri in un esterno identificatore [1 024].
    - esterno identificatori in un'unità di traduzione [65 536].
    - identificatori con blocco portata dichiarata in un blocco [1 024].
    - identificatori macro simultaneamente definita in un'unità di traduzione [65 536].
    - I parametri in una funzione definizione [256].
    - Argomenti in uno funzione di chiamata [256]

    -. I parametri in una macro definizione [256].
    - Gli argomenti a un'invocazione macro [256].
    - Personaggi in una logica linea di source [65 536].
    - Personaggi in un letterale stringa di caratteri o larga stringa letterale (dopo la concatenazione) [65 536].
    - dimensione di un oggetto [262 144].
    - Livelli di parentesi per #include file [256].
    - Caso etichette per un istruzione switch (esclusi quelli per eventuali istruzioni switch nidificate) [16 384].
    - membri di dati in un unico di classe, la struttura, o unione [16 384]
    . - Enumerazione costanti in un unico enumerazione [4 096].
    - I livelli di nidificato di classe, la struttura, o unione definizioni in un unico struct dichiarazione-list [256].
    - Funzioni registrate da atexit () [32].
    - diretti e indiretti classi di base [16 384].
    - classi base dirette per un Classe singolo [1024].
    - Membri ha dichiarato in una singola classe [4 096]
    . - Finali funzioni virtuali imperative una classe, accessibili o no [16 384].
    - basi virtuali diretti e indiretti di un Classe [1 024].
    - i membri statici di una Classe [1 024].
    - dichiarazioni Amico in una classe [4 096].
    - controllo accessi dichiarazioni in una classe [4 096].
    - initializers membri in un costruttore definizione [6 144].
    - Ambito di applicazione qualifiche di un identificatore [256].
    - annidati esterna specifiche [1 024].
    - Modello argomenti in una dichiarazione modello [1 024].
    - ricorsivamente modello nidificato instantiations [17].
    - gestori per blocco try [256].
    - Lancio specifiche su una singola funzione dichiarazione [256].

Inoltre, dice anche a $ 18,3 / 6,

Limiti Implementazione: I attuazione è sostenere il registrazione di almeno 32 funzioni.

Altri suggerimenti

2. Linguaggio C

5.2.4.1 Traduzione Limiti

L'applicazione deve essere in grado di translate e execute almeno un programma che contiene almeno un'istanza di ognuno dei seguenti limiti:
- 127 livelli di nidificazione di blocchi
- 63 livelli di nidificazione di condizionale inclusione
- 12 puntatore, matrice, e dichiaratori funzione (in qualsiasi combinazione) modifica di un aritmetica, la struttura, l'unione, o tipo incompleto in una dichiarazione
- 63 livelli di nidificazione di dichiaratori tra parentesi all'interno di una completa dichiaratore
- 63 livelli di nidificazione di espressioni tra parentesi all'interno di una piena espressione
- 63 personaggi significativi iniziali in un identificatore interno o un nome di macro (ogni Nome carattere universale o un carattere sorgente estesa è considerato un singolo Personaggio)
- 31 personaggi significativi iniziali in un identificatore esterno (ciascuna universale nome del personaggio
specificando un breve identificatore di 0000FFFF o meno è considerato 6 caratteri, ognuno universale nome carattere che specifica una breve identificativo 00010000 o più è considerato 10 caratteri, e ogni carattere sorgente estesa è considerato lo stesso numero di caratteri come il nome carattere universale che corrisponde, se del caso)
- 4095 identificatori esterni in una traduzione unità
- 511 identificatori con portata blocco dichiarate in un blocco
- 4095 macro identificatori contemporaneamente definito in una pre-elaborazione unità di traduzione
- 127 parametri in una funzione Definizione di - 127 argomenti in una chiamata di funzione
- 127 parametri in una definizione di macro
- 127 argomenti in un unico macro invocazione
- 4095 caratteri in una fonte logica linea di
- 4095 caratteri in un letterale stringa di caratteri o larga letterale stringa (dopo la concatenazione)
- 65535 byte in un oggetto (in un ambiente ospitato solo)
- 15 livelli di annidamento per i file #included
- 1023 etichette di casi per un'istruzione switch (esclusi quelli per qualsiasi switch nidificato dichiarazioni)
- 1023 membri in un'unica struttura o unione
- 1023 costanti di enumerazione in un unico enumerazione
- 63 els lev di definizioni annidate struttura o unione in un unico struct-dichiarazione-list

Tuttavia, si dice nella nota che,

13) Implementazioni dovrebbero evitare imporre limiti fissati traduzione quando possibile.

Come answerers precedenti hanno adeguatamente notato, il numero di parametri dipende dal compilatore C ++. Il limite di compilatore potrebbe essere a causa delle limitazioni imposte da ambienti hardware.

Ad esempio il VAX CPU architettura utilizza un campo di 8 bit che contiene il numero di argomenti, in modo conforme codice VAX non può passare più di 255 parametri.

Allo stesso modo molti piccoli processori come i Intel 8048 della famiglia sono così costretti per la memoria che la maggior parte C e C ++ compilatori dare dolore se si utilizzano più su quattro parametri. Mentre molti sviluppatori tradizionali possono deridere il 8048, i suoi discendenti rimangono una delle più diffusa CPU-per lo più in dispositivi embedded.

Molti architettura implementazioni RISC specificano un metodo passaggio dei parametri utilizzando registri, piuttosto che la pila. Una CPU base ARM, per esempio, ha solo 16 registri. Il numero massimo di parametri potrebbe dipendere da linea di comando del compilatore che influenzano il modo genera codice per passare parametri. Forse più di otto sono spinti su una pila. Forse no.

Se questi esempi sembrano eccessivamente restrittivo, si consideri che il Palm OS limitata una funzione C per un singolo parametro, e che doveva essere di tipo int o void *.

Naturalmente, se si sta scrivendo una funzione in C con un gran numero di argomenti tale, è probabilmente vuole ripensare la progettazione del vostro programma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top