2012-01-27 8 views
9

C99標準でcount関数のパラメータに制限がありませんでした。スタックサイズによってのみ制限されると思います。ファンクションパラメータの最大値

しかし、パラメータの数が多い関数の動作を示すための簡単なテストプログラムを作成しました。そのおよそ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

ケア? –

+0

@Martinsh Shaiters私はソースを生成するためにshスクリプトを書いています。 updt – triclosan

答えて

13

5.2.4.1翻訳限界

- 1つの関数定義で127パラメータ
- これを引き起こしたコードを共有する一つの関数呼び出しの引数127

+0

興味深い参照してください。それほど多くはありません!私は「メモリの大きさによっては無制限」と思っていたでしょう。 –

+1

これは実装が課す可能性のある最小許容限度です。このようなことについては、より大きな制限を設けることも、明示的な制限を設けることも、確かに許されます(望ましい)。 –

+1

ソース行の最大長には1K-何か、あるいはおそらく4K-何かがあります。テストプログラムもこの制限に達する可能性があります。 (最初に来るものは...) – wildplasser