| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 596 人关注过本帖
标题:层层迷雾的外部函数调用问题!
取消只看楼主 加入收藏
jacoblion
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-8-20
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
层层迷雾的外部函数调用问题!
tt.c
程序代码:
#include<stdio.h>
int m=22;
void abcc();
int main(void)
{
        abcc(m);
        return 0;
}
abcc.c
程序代码:
#include<stdio.h>
int m;
void abcc(void)
{
        printf("%d\n",m);
}

编译执行结果如下:
[root@localhost tmp]# gcc -Wall -o test abcc.c tt.c
[root@localhost tmp]# ./test
22

看似abcc(m)调用,m值传递成功了,gcc编译也不报错,还能打印出m的值。求解。
但很显然,abcc.c中定义的abcc函数是无参数传递的,abcc(m)就是个错误用法。正确用法是abcc()。
改成abcc()是可以,不过整个代码看起来还是很别扭。
搜索更多相关主题的帖子: 函数 
2011-08-20 05:04
jacoblion
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-8-20
收藏
得分:0 
回复 3楼 voidx
#include<stdio.h>
int m=22;
void abcc(int x);
int main(void)
{
        abcc(23);
        return 0;
}

tt.c改成这样,结果还是打印22
void abcc(int x);函数原型,abcc(23)是怎么调用的,括号中的内容也被忽略了?它是怎么调用的呢
main函数中abcc的申明与外部函数中的abcc申明不一致,它是怎么调用的啊?


2011-08-21 00:10
jacoblion
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-8-20
收藏
得分:0 
tt.c文件:
#include<stdio.h>
int m=22;          //申明定义全局变量m,分配储存空间
void abcc(void);
int main(void)
{
        abcc();
        return 0;
}

abcc.c文件:
#include<stdio.h>
int m;            //申明变量m,不分配储存空间
void abcc(void)
{
        printf("%d\n",m);
}

编译运行:
[root@localhost tmp]# gcc -Wall -o test abcc.c tt.c
[root@localhost tmp]# ./test
22


2011-08-22 10:24
jacoblion
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-8-20
收藏
得分:0 
回复 6楼 饭桶
多谢你的回答,代码里变量m我都是隐式申明的auto类型的,是想弄清这段代码到底是怎么分本储存空间,怎么执行的。
代码是我随便编出来测试的,所以代码写得很别扭,很少有这么用的。
2011-08-22 10:30
jacoblion
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-8-20
收藏
得分:0 
回复 5楼 pauljames
多谢你的回答,你说在main函数中申明abcc(),要用extern void abcc(void)吗?这个是规范用法,但不加extern申明,gcc也不会报错,我也没搞明白。
在bacc函数中定义时可以不用加extern的,因为extern是默认的,不用加也可以,所有的函数默认都可以被其它函数引用的。
2011-08-22 10:44
快速回复:层层迷雾的外部函数调用问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012534 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved