Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的函数调用_C_Function - Fatal编程技术网

C语言中的函数调用

C语言中的函数调用,c,function,C,Function,可能重复: 守则: #include <stdio.h> #include <stdlib.h> void test_print() { printf("test print\n"); } int main() { test_print(1,2); return 0; } #包括 #包括 无效测试_打印() { printf(“测试打印”); } int main() { 测试打印(1,2); 返回0; } 虽然在主函数中,TestPrd

可能重复:

守则:

#include <stdio.h>
#include <stdlib.h>

void test_print()
{
    printf("test print\n");
}

int main()
{
    test_print(1,2);
    return 0;
}
#包括
#包括
无效测试_打印()
{
printf(“测试打印”);
}
int main()
{
测试打印(1,2);
返回0;
}

虽然在主函数中,TestPrdPress的调用方与函数的定义有不同的参数,但是代码可以很好地工作,但是如果将其转换成C++版本,就会出现编译错误:“函数太多的参数……”。 为什么C允许参数不匹配调用函数,我们什么时候可以使用这种调用方式?以及为什么它在C++中被禁止。< /P> 系统ubuntu 11.10
编译器:函数的c empty

()
中的gcc 4.6.1

表示函数可以接受任意数量的参数。
如果要指定函数不接受任何参数,请执行以下操作:

void test_print(void) 

<>但是,在函数C++中,空<代码>()<>代码>意味着它不接受任何参数。注意,C++中的这一点很重要,因为在C++中,可以根据所能使用的参数的数量来重载函数。

< P>因为根据C标准;br>

int foo(void); //Is the only way a function won't allow any parameters
引用标准:

10 void类型的未命名参数作为唯一 列表中的项指定函数没有参数


将括号留空表示没有参数或任何数量的参数

这是一个很好的编程原则,可以确保找到编译器选项,确保所有函数在使用前都使用完整的原型声明,并确保始终使用编译器选项,并在编写时注意其警告:

void test_print() { ... }
您尚未为函数提供原型,因此编译器不应将调用与参数列表进行比较。要提供原型,您必须编写一个显式的
void

void test_print(void) { ... }
或提供单独的原型声明:

void test_print(void);

但是最好使函数定义与原型声明相匹配,因此始终编写
void
。是的,这是C++中不同的一个区域。在C中,如果没有一个原型,那么C++中就不能使用一个函数,而C++可以将一个空的参数列表当作一个空的参数列表。在C99或更高版本中,您应该在范围内有一个原型,但除非您添加更严格的选项(
-Wmissing prototype-Wstrict rprototypes-Wold style definition-Wold style declaration
是可能的GCC选项),否则编译器通常不会强制执行该原型。但与前标准C的向后兼容性要求意味着C89无法在不破坏大量以前有效的C代码的情况下强制执行“空括号表示没有参数”规则,这将阻止标准被接受。

在C99中,这将调用未定义的行为。请参阅:C99 6.5.2.2/6如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并将具有float类型的参数提升为double。这些被称为默认参数。如果参数的数量不等于参数的数量,则行为未定义。