2012-01-27 57 views
9

我沒有發現C99標準中的計數函數參數的任何限制,我想它只受堆棧大小的限制。函數參數最大數量

但是我寫了一個簡單的測試程序來演示大量參數的函數的行爲。當其10K左右,我得到的gcc下面的錯誤(在Cygwin的gcc版本4.5.3):

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

我意識到,參數,大計數是不可能的,但我不知道什麼參數的編譯器來確定這個限度?

EDIT

腳本來生成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

保健佳品導致此代碼? – 2012-01-27 14:35:20

+0

@Martinsh Shaiters我寫了一些sh腳本來生成源代碼。見updt – triclosan 2012-01-27 14:37:05

回答

13

該標準規定了其每一個實現必須支持一定的最小數目,

5.2.4.1翻譯限制

- 127參數函數定義
- 127參數在一個函數調用

+0

有趣。這不是很多!我會認爲「無限制,取決於內存大小」。 – 2012-01-27 14:56:39

+1

這些是實施可能施加的最小可接受限制。對於像這樣的事情,它肯定是允許的(並且是合乎需要的)有更大的限制或者沒有明確的限制。 – 2012-01-27 16:33:56

+1

源代碼行的最大長度也有限制,例如1K或者4K。測試程序也可能達到此限制。 (不管什麼先來...) – wildplasser 2012-01-27 17:00:48