2012-01-27 27 views
9

No encontré ninguna limitación de los parámetros de la función de conteo en el estándar C99 y supongo que solo está limitado por el tamaño de la pila.Parámetros de función número máximo

Sin embargo, he escrito un programa de prueba simple para demostrar el comportamiento de una función con un gran recuento de parámetros. Cuando está a unos 10 k, me sale el siguiente error en gcc (gcc versión 4.5.3 de Cygwin):

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xa9): undefined reference to `[email protected]' 

Soy consciente de que tan grande recuento de parámetros es poco probable pero me pregunto qué parámetro del compilador determina este límite ?

EDITAR

secuencia de comandos para generar fuente de C

#!/bin/sh 

num=$1 

echo "" > out.c 
echo "#include <stdio.h>" >> out.c 

echo "int getsum(" >> out.c 

i=0 
while [ $i -lt $num ] 
do 
    ((i++)) 
    if [ $i -eq $num ] 
    then 
     echo "int p$i)" >> out.c 
    else 
     echo -ne "int p$i," >> out.c 
    fi 
done 

echo "{" >> out.c 

echo -ne " return " >> out.c 

i=0 
while [ $i -lt $num ] 
do 
    ((i++)) 
     if [ $i -eq $num ] 
     then 
       echo "p$i;" >> out.c 
     else 
       echo -ne "p$i + " >> out.c 
     fi 
done 

echo "}" >> out.c 

echo "int main(){" >> out.c 
echo "printf(\"Sum of %d elements is %d\", $num, getsum(" >> out.c 

i=0 
while [ $i -lt $num ] 
do 
     ((i++)) 
     if [ $i -eq $num ] 
     then 
       echo "$i" >> out.c 
     else 
       echo -ne "$i," >> out.c 
     fi 
done 

echo "));" >> out.c 

echo "return 0;}" >> out.c 
gcc out.c 
./a.exe 
+0

Cuidado para compartir el código que causó esto? –

+0

@Martinsh Shaiters He escrito algunos sh-script para generar fuentes. Ver updt – triclosan

Respuesta

13

El estándar especifica un número mínimo determinado, que debe ser compatible con todas las implementaciones,

5.2.4.1 Límites de traducción

- 127 parámetros en una definición de función
- 127 argumentos en una llamada a la función

+0

Interesante. ¡Eso no es mucho! Hubiera pensado "ilimitado, dependiendo del tamaño de la memoria" también. –

+1

Estos son * los límites mínimos aceptables * que una implementación puede imponer. Ciertamente es permisible (y deseable) tener un límite mayor o ningún límite explícito en cosas como esta. –

+1

También existe el límite en la longitud máxima de una línea fuente, 1K-algo, o tal vez 4K-algo. El programa de prueba también alcanzará este límite. (lo que sea que venga primero ...) – wildplasser

Cuestiones relacionadas