问一个关于C语言的问题

发表在 内核学习营2019-4-18 09:28 [复制链接] 7 365

最近看到一些SDK,里面在调用函数的时候,很多地方都写的全名,比如如下调用, |. A. H& c6 P+ I1 k
  void tcp_connect_init( void );
2 {  `" \7 B* E0 M  tcp_connect_init();
( P) C; l3 I2 p8 H; t0 m, @2 D6 [& L) [+ O- x$ Q4 |4 b
还有一种就是只写了
6 }% b% @0 ~# X, B) w0 [+ Q' L  void tcp_connect_init( void );
. P# M2 ?+ r9 t% B' J/ d" k  这种方式调用,! h" _) `7 d8 `$ m& w4 h  j0 F
请问下这两种调用方式有什么差别?为什么要写全函数名调用,就像函数声明那种方式调用?0 c/ U$ `5 F* r5 r; v
# H5 E9 G5 u( W( @. V6 Q

; e' L4 a/ U3 ]& o* v2 C. _
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-4-19 13:39:14 | 显示全部楼层
还有一种就是只写了* h- O! D  a. B& `% F
  void tcp_connect_init( void );
! _/ O9 Y- `5 L- Y: }3 e
& c& m9 |% Y  r* }% p这是函数声明,只能写在函数外面,不属于函数调用
使用道具 举报 回复
发表于 2019-6-11 10:25:52 | 显示全部楼层
如果是被调函数(如:void tcp_connect_init( void ))和调用它的函数(如:void main(void))在同一个.c文件里面,当被调函数写在调用它的函数之前的话,那么当调用它的函数去调用被调函数时,可以直接调用而不需要声明,当然,这种情况下声明被调函数也是ok的。当被调函数写在调用它的函数之后的话,那么当调用它的函数去调用被调函数之前,必须声明被调函数。
使用道具 举报 回复
发表于 2019-6-15 10:44:32 | 显示全部楼层
1 函数声明是可以写在函数里面, 只是这样不太好) u; c1 z; I& d( `# u2 V5 {
2 总体来说函数声明应该写在.h文件中, 再由c文件包含, 出现在c文件中的函数声明往往是静态函数或是特殊原因没有放到.h中的外部函数(由于c语言的符号可见性控制不是很完善).* i: N: L. i3 ?
3 函数声明只是列出了这个函数的原型是什么样的, 它并不是定义函数, 更不是调用.
使用道具 举报 回复
发表于 2019-6-15 18:33:08 | 显示全部楼层
  void tcp_connect_init( void );/* 这一句是函数的声明 */
$ E/ N; }, ^% n9 t2 B  tcp_connect_init(); /* 这一句是函数的调用 */
使用道具 举报 回复
发表于 2019-6-19 19:18:20 | 显示全部楼层
tyustli 发表于 2019-6-15 18:33
8 t. ?- b: {' w7 ivoid tcp_connect_init( void );/* 这一句是函数的声明 */& V3 F- `1 f1 L. u, c8 l
  tcp_connect_init(); /* 这一句是函数的调用 ...
3 y; t  m/ j3 J% p8 [
确实,我测试发现了,关键是这句申明竟然放在了函数内部,我之前没遇到过这种弄情况,所以感觉很奇怪
使用道具 举报 回复
发表于 2019-6-20 09:13:44 | 显示全部楼层
函数声明放在哪里都行,仅仅是一个声明
使用道具 举报 回复
发表于 2019-6-20 12:38:46 | 显示全部楼层
是的,反正函数声明最后不会产生任何机器码
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区  

© 2013-2017 上海睿赛德电子科技有限公司 沪ICP备13014002号-1

Powered by RT-Thread

快速回复 返回顶部 返回列表