问一个关于C语言的问题

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

最近看到一些SDK,里面在调用函数的时候,很多地方都写的全名,比如如下调用
5 w9 C; }: Y& V1 z2 ]4 y& O* M  void tcp_connect_init( void );# d8 ]3 D% _5 p/ I5 P4 ]* W" c0 B
  tcp_connect_init();
% k% h( x  Q% A6 H* u5 C0 _9 z$ k" n1 [/ p
还有一种就是只写了% o, b* O- o7 s6 d4 y( Q& u
  void tcp_connect_init( void );
2 z# ?9 l8 V0 F' ~& `2 u4 D  这种方式调用,
. w& P; J! L6 \3 c* \请问下这两种调用方式有什么差别?为什么要写全函数名调用,就像函数声明那种方式调用?- c% Z; Q2 j1 \7 F# ]+ v1 _
# S+ V3 ^  Q/ S5 e2 t/ m' X! c

% R. D- \  r8 q# X) G
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-4-19 13:39:14 | 显示全部楼层
还有一种就是只写了
7 r  }9 d& t/ G  void tcp_connect_init( void );
. X. g( C* P  b7 r! Q+ j3 v; d# J- ]! X) b- L; D% F/ r
这是函数声明,只能写在函数外面,不属于函数调用
使用道具 举报 回复
发表于 2019-6-11 10:25:52 | 显示全部楼层
如果是被调函数(如:void tcp_connect_init( void ))和调用它的函数(如:void main(void))在同一个.c文件里面,当被调函数写在调用它的函数之前的话,那么当调用它的函数去调用被调函数时,可以直接调用而不需要声明,当然,这种情况下声明被调函数也是ok的。当被调函数写在调用它的函数之后的话,那么当调用它的函数去调用被调函数之前,必须声明被调函数。
使用道具 举报 回复
发表于 2019-6-15 10:44:32 | 显示全部楼层
1 函数声明是可以写在函数里面, 只是这样不太好
4 G, u* K) U* x1 x2 总体来说函数声明应该写在.h文件中, 再由c文件包含, 出现在c文件中的函数声明往往是静态函数或是特殊原因没有放到.h中的外部函数(由于c语言的符号可见性控制不是很完善).& I7 e  _# l0 c2 @  D# G$ I# F! T
3 函数声明只是列出了这个函数的原型是什么样的, 它并不是定义函数, 更不是调用.
使用道具 举报 回复
发表于 2019-6-15 18:33:08 | 显示全部楼层
  void tcp_connect_init( void );/* 这一句是函数的声明 */. t& r! s7 w+ A
  tcp_connect_init(); /* 这一句是函数的调用 */
使用道具 举报 回复
发表于 2019-6-19 19:18:20 | 显示全部楼层
tyustli 发表于 2019-6-15 18:33
. k- x& ^8 f2 N; f. U5 v9 Bvoid tcp_connect_init( void );/* 这一句是函数的声明 */4 D- w2 s4 E6 C  b8 @$ ^
  tcp_connect_init(); /* 这一句是函数的调用 ...

& c9 N) R7 b2 {. t# i% J* l确实,我测试发现了,关键是这句申明竟然放在了函数内部,我之前没遇到过这种弄情况,所以感觉很奇怪
使用道具 举报 回复
发表于 2019-6-20 09:13:44 | 显示全部楼层
函数声明放在哪里都行,仅仅是一个声明
使用道具 举报 回复
发表于 2019-6-20 12:38:46 | 显示全部楼层
是的,反正函数声明最后不会产生任何机器码
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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