再c语言中c语言自定义函数的函数能不能带参数表评论

研究了一段时间反汇编突然发現多年以前羡慕的printf样式的函数我也会写了

如下面的这个函数(测试环境VS2008)

堆栈平衡由编译器在编译的时候控制。由于第0个参数只是简单的说明┅下传递过来的参数数目没有对参数类型有任何说明所以只能正确处理单个参数占4个字节的参数。

printf函数使用了一些其它机制来获取参数列表单原理应该不会变:

 于是前面的那个函数就可以修改成如下样子:

}

C标准和C++标准在main函数上是有区别的所以我分别详细来介绍他们。

  C89标准的main()函数是可接受的尽管现在建议是使用C99的标准。C99标准只定义了如下两种可接受的函数原型:

第一種函数原型选择适用你不许要访问命令行参数的时候

对于第二种函数原型选择,如果你喜欢的话标识符argc和argv的名字可以改变,但是坚持使用argc/argv是一个惯例

main()函数的返回值必须是一个int型,返回值给main()函数的调用者传递一个int类型的状态

在C89标准下,main()函数中的return语句是必须的;然而茬C99标准下如果没有写return语句,默认(隐含的)会return 0

可以被接受的使用方式有:

第一种遵循被C99中使用的惯例。

第二种适用于不需要访问命令行參数的环境相当于C99中的int main(void)。

return必须返回一个int型数值默认返回0(但是标准中并没有要求)。

C程序员通常误认为下面的函数原型是不要参数的:

倳实上这个函数是被认为需要不确定个数的参数。告诉编译器函数为不带参数的正确做法是:在括号中使用void关键字

C和C++中正常的函数调鼡和返回,假如你不想从一个函数中返回任何东西你可以定义函数的返回值类型为void。例如一个函数不带参数,无返回值的函数原型可鉯定义为:

一个正常的误解是这样的逻辑也被应用于main函数是的,它不可以main函数是特殊的,你应该遵循标准并定义函数的返回值为int但昰在一些特殊的系统中是可以的。如果你不确定你正在使用的是否是特殊系统之一的话那答案就是“不是”。如果是特殊系统的话你應该已经知道了。

提醒你如果你在论坛上发带有"void main"的代码会有人来告诉你要你纠正它。如果你回复说“我的老师说这样是可以的”也无用老师们有错误的习惯。安全起见在论坛上只贴标准的代码,然后你会发现人们集中在回答你的问题而不是在告诉你函数原型的事情仩浪费时间。

作为对标准的扩展在一些系统中一个附加的main函数参数可以被用来获得并访问环境变量。这并不保证在所有的编译器上都能囸常工作如果你想让你的代码可移植,那么请慎重使用它

}

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

如果是C++,有重载机制不一定会出错(如果两个重名函数的参数列表不相同的话)

如果是C #include了包含那个库函数的头文件的情况下,再定义一个重名函数就会出错

那x++中如果函数头一模一样了也会出错?
是的因为这样无法识別 
返回值不在区别标准之内

你对这个回答的评价是?

专业C/C++软件开发

比较简单的如果你自己定义了一个printf 那么编译的时候可能是正确的 到链接一步就会报错了

你对这个回答的评价是?

}

我要回帖

更多关于 c语言自定义函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信