Número máximo de parámetros de función

3 minutos de lectura

Número máximo de parámetros de función
triclosán

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.

Sin embargo, he escrito un programa de prueba simple para demostrar el comportamiento de una función con una gran cantidad de parámetros. Cuando se trata de 10k, aparece el siguiente error en gcc (gcc versión 4.5.3 en Cygwin):

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xa9): undefined reference to `_WinMain@16'

Me doy cuenta de que es poco probable una cantidad tan grande de parámetros, pero me pregunto qué parámetro del compilador determina este límite.

EDITAR

script para generar fuente 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

  • ¿Te importaría compartir el código que causó esto?

    – Martín Verde

    27 de enero de 2012 a las 14:35

  • @Martinsh Shaiters, escribí algunos sh-script para generar fuentes. Ver actualización

    – triclosán

    27 de enero de 2012 a las 14:37


Número máximo de parámetros de función
Guardar

El Estándar especifica un cierto número mínimo que cada implementación debe soportar,

5.2.4.1 Límites de traducción

— 127 parámetros en una definición de función
— 127 argumentos en una llamada de función

  • Interesante. ¡Eso no es mucho! También habría pensado “ilimitado, dependiendo del tamaño de la memoria”.

    – Señor Lister

    27 de enero de 2012 a las 14:56

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

    – R.. GitHub DEJA DE AYUDAR A ICE

    27 de enero de 2012 a las 16:33

  • También existe el límite en la longitud máxima de una línea fuente, 1K y algo, o tal vez 4K y algo. Es probable que el programa de prueba también alcance este límite. (lo que ocurra primero…)

    – salvaje

    27/01/2012 a las 17:00

  • Sin mencionar que hay un límite máximo aceptable impuestos por los humanos que tienen que leer su código, y exceder este límite puede causar un Comportamiento Indefinido en esas personas. Así que no lo estires 🙂

    – Jorgensen

    27 de enero de 2012 a las 17:43

  • @wildplasser ¿”línea de origen” significa una línea que termina con un CR/LF, o una línea que termina con un punto y coma? El primero sería un límite que es fácil de evitar. Este último límite sería más difícil de evitar.

    –Craig McQueen

    3 de marzo de 2014 a las 0:21


¿Ha sido útil esta solución?