静态函数的声明

libinbluewolf 2011-01-24 04:31:53
又是一个关于static的问题:
请先看下面这段代码:

/*static int read_h264file(void);*/

int main(int argc, char* argv[])
{
static int read_h264file(void);
if ((filesize = read_h264file()) <= 0) {
printf("read h264 file error.\n");
exit(-1);
}
... ...
}
static int read_h264file(void)
{
/* do some thing */
}

当前的问题是:函数static int read_h264file(void)的声明放在第一句中编译就可以通过,而放在main函数内部(函数调用之前)编译的错误结果是:

h264oip.c: 在函数‘main’中:
h264oip.c:39: 错误:函数‘read_h264file’的存储类无效
h264oip.c: 在文件层:
h264oip.c:170: 错误:对‘read_h264file’的静态声明出现在非静态声明之后
h264oip.c:40: 附注:‘read_h264file’的上一个隐式声明在此

请问这是为什么啊?不加static关键字的函数就可以这样声明啊!为什么静态函数这样声明不可以?
...全文
1009 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
libinbluewolf 2011-01-24
  • 打赏
  • 举报
回复
感谢几位回答,结贴!
“函数内部不允许使用static方式声明一个函数”!
另外,函数没有static关键字时,是可以在另一个函数内部声明的,这也是我之前的一个习惯:把不是借口函数的函数声明放在调用之前,而不是放在头文件中;把这个习惯套用在static函数了……
pengzhixi 2011-01-24
  • 打赏
  • 举报
回复
There can be no static function declarations within a block
可乐崽 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 diamont1001 的回复:]

你把它放到main()函数里面声明的话,就是要吧read_h264file(void)函数声明为main()函数的内部函数,而在外面定义的时候有吧它定义为文件中的内部函数,彼此矛盾!
要不你就把声明放到第一行,声明定义都用static,要不就把声明放到main()函数内,声明可以用static ,而定义不能用!
[/Quote]
我错了,应该:
你把它放到main()函数里面声明的话,就是要吧read_h264file(void)函数声明为main()函数的内部函数,而在外面定义的时候有吧它定义为文件中的内部函数,彼此矛盾!
要不你就把声明放到第一行,声明定义都用static,要不就把声明放到main()函数内,声明定义都不能用static!因为楼上的说的对,函数内部不允许使用static方式声明一个函数。
educw 2011-01-24
  • 打赏
  • 举报
回复
static int read_h264file(void)
{
/* do some thing */
}
如果你写在
int main(int argc, char* argv[])
{
static int read_h264file(void);
if ((filesize = read_h264file()) <= 0) {
printf("read h264 file error.\n");
exit(-1);
}
... ...
}
函数之前就不用加static
yuppy 2011-01-24
  • 打赏
  • 举报
回复
不加static 关键字的函数也不可以这样申明..lz你测试过没?

static修饰的函数 表示仅能在该c文件中使用.
bdmh 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justkk 的回复:]
函数内部不允许使用static方式声明一个函数
[/Quote]
可乐崽 2011-01-24
  • 打赏
  • 举报
回复
你把它放到main()函数里面声明的话,就是要吧read_h264file(void)函数声明为main()函数的内部函数,而在外面定义的时候有吧它定义为文件中的内部函数,彼此矛盾!
要不你就把声明放到第一行,声明定义都用static,要不就把声明放到main()函数内,声明可以用static ,而定义不能用!
xzjxylophone 2011-01-24
  • 打赏
  • 举报
回复
函数内部能声明 函数吗?

所以当然出错了。。。。
justkk 2011-01-24
  • 打赏
  • 举报
回复
函数内部不允许使用static方式声明一个函数
bdmh 2011-01-24
  • 打赏
  • 举报
回复
第一句不写,main方法中找不到read_h264file的声明啊,不加static也一样,必须在调用地方之前显示声明

70,037

社区成员

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

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