Les paramètres de la fonction max nombre
Je n'ai trouvé aucune limitation de la fonction de comptage des paramètres dans le standard C99 et je suppose que c'est seulement limité par la taille de la pile.
Cependant, j'ai écrit un programme de test simple pour illustrer le comportement d'une fonction avec un grand nombre de paramètres. Quand il est sur le 10k, j'obtiens l'erreur suivante sur gcc (gcc version 4.5.3 sur Cygwin):
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xa9): undefined reference to `_WinMain@16'
Je me rends compte qu'un tel grand nombre de paramètres est peu probable, mais je me demande ce paramètre de le compilateur détermine cette limite?
MODIFIER
script pour générer une source 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
Soins de partager le code qui a causé cela?
Shaiters j'ai écrit quelques sh-script pour générer des sources. Voir updt
Shaiters j'ai écrit quelques sh-script pour générer des sources. Voir updt
OriginalL'auteur triclosan | 2012-01-27
Vous devez vous connecter pour publier un commentaire.
La Norme spécifie un certain nombre minimal de chaque mise en œuvre doit prendre en charge,
5.2.4.1 Traduction Limites
Ce sont les limites minimales acceptables une mise en œuvre peut imposer. C'est certainement admissible (et souhaitable) d'avoir une plus grande limite ou sans limite explicite sur ce genre de choses.
Il est aussi à la limite sur la longueur maximale d'une ligne de source, 1K-quelque chose, ou peut-être le 4K quelque chose. Le programme de test sera probablement atteint cette limite, trop. (tout ce qui vient en premier ...)
Pour ne pas mentionner il ya un limite maximale acceptable imposées par les humains qui ont à lire votre code, le dépassement de cette limite peut provoquer un Comportement non défini dans ces personnes. Afin de ne pas étirer 🙂
CR/LF, bien sûr. Des points-virgules fin d'une instruction.
OriginalL'auteur Alok Save