功能参数最大数量

时间:2012-01-27 14:30:15

标签: c parameter-passing stack-overflow

我没有发现C99标准中计数函数参数的任何限制,我猜它只受堆栈大小的限制。

但是我编写了一个简单的测试程序来演示具有大量参数的函数的行为。当它大约10k时,我在gcc上遇到以下错误(gg版本4.5.3在Cygwin上):

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

我意识到如此大量的参数不太可能,但我想知道编译器的哪个参数决定了这个限制?

修改

脚本生成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

1 个答案:

答案 0 :(得分:15)

标准规定了每个实施必须支持的特定最小数量,

5.2.4.1翻译限制

  

- 一个函数定义中的127个参数
   - 一个函数调用中的127个参数