C语言问题 变量声明在函数名和大括号(“{”)间,能编译通过,求解释

EP 2014-07-26 11:18:08
在公司的播放器代码里找到一个文件,发现里面的函数是这样定义的:

static int mem_write(b , in , inl)
BIO *b; //一个结构体指针
char *in;
int inl;
{
... //具体就不写了,用到了上面的变量
}

我发现这个代码是可以用公司的gcc编译通过的(具体是哪个版本我不清楚,因为我刚来的),此外,我发现如果我在公司的代码里没有将变量声明写在函数体中开头的位置,而直接在需要的时候直接上定义,那么在编译时会报错的(用的是gmake -f makefile.mk指令),报错会显示声明前有可执行语句,请问这是编译器控制的,还是用makefile或者其他什么控制的?
...全文
739 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-07-29
  • 打赏
  • 举报
回复
C 语言,还支持这种形式的函数定义。 C++ 就不一定支持了 如果需要编译这种函数 把他放在 .c文件里,参与编译。
dbzhang800 2014-07-28
  • 打赏
  • 举报
回复
引用 9 楼 shenmafuyunnan 的回复:
我想知道我的第二个问题,就是变量的定义必须定义在函数体的开头,也是因为这个代码比较早的原因吗?
这是你所用编译器不支持C99的原因
jmppok 2014-07-28
  • 打赏
  • 举报
回复
涨姿势...
NianNian酱 2014-07-28
  • 打赏
  • 举报
回复
确实是很老了。最新的编译器应该都支持的。
lm_whales 2014-07-27
  • 打赏
  • 举报
回复
叫做 K&R 式样的函数定义
EP 2014-07-27
  • 打赏
  • 举报
回复
谢谢大神的回答,这是一个10年前开始的项目了,一直升级沿用到现在,而且是日本一线厂商的智能蓝光播放器里的代码,不过貌似这一段没用了,但是没有删。 我想知道我的第二个问题,就是变量的定义必须定义在函数体的开头,也是因为这个代码比较早的原因吗?
Iflyinsky2013 2014-07-27
  • 打赏
  • 举报
回复
涨知识了。。。。。。。。。
blueroger07 2014-07-27
  • 打赏
  • 举报
回复
C程序设计语言 K&R C
derekrose 2014-07-26
  • 打赏
  • 举报
回复
taodm 2014-07-26
  • 打赏
  • 举报
回复
这得多老的代码了
lm_whales 2014-07-26
  • 打赏
  • 举报
回复
这是老式函数定义 叫做 K&C 式样的函数定义 具体做法是 函数参数表里只写参数名 参数在参数表的小括号后面定义(声明) ; 参数声明语句(若干个),有语句结束符分号; 然后才是函数体 static//函数存储类型 int //函数(返回值)类型 mem_write(b , in , inl) //函数头 参数表的小括号里,只有参数名字。 BIO *b; //一个结构体指针 //参数 b的声明 char *in;//参数 in的声明 int inl;//参数 inl的声明 {//函数体开始的大括号 ... //具体就不写了,用到了上面的变量 }//函数体结束的大括号

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧