请各位高手进来帮小弟一下吧,谢谢啦,谢谢啦!!!!!!!!!!!!!!!!

longhaihai 2007-06-16 11:06:57

我对于extern关键字的用法,不能够理解,我的理解是:编译器为了区分同名的不同函数,采用生成内部函数名的方法来解决这个问题.(既"名字混成").但用了extern修饰函数定义之后,便不采用了"名字混成"的做法.既然这样那么在main函数中定义这两个函数也不会矛盾了,但编译器提示出错,如下:
void main(int argc, char* argv[])
{
int qq(int i)
{ return 100; }
extern int qq(int i)
{ retrun 200; }
}
...全文
220 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
expter 2007-06-17
  • 打赏
  • 举报
回复
en
nevergone 2007-06-17
  • 打赏
  • 举报
回复
不知道LZ写什么代码
longhaihai 2007-06-17
  • 打赏
  • 举报
回复
int qq(int i)
{ return 100; }
extern "C" int qq(int i)
{ retrun 200; }
void main(int argc, char* argv[])
{

}
对不起应当为上面的才对。
mfkdyq 2007-06-17
  • 打赏
  • 举报
回复
楼上说的对,那时函数里面定义函数。
huashizhixin 2007-06-17
  • 打赏
  • 举报
回复
void main(int argc, char* argv[])
{
int qq(int i)
{ return 100; }
extern int qq(int i)
{ retrun 200; }
}
这是什么用法?
函数里面定义函数?
Vitin 2007-06-17
  • 打赏
  • 举报
回复
LZ说不使用"名字混成",指的是 extern "C" ,因为C语言是不使用名字混成的。
如:
extern "C" int qq(int i)
{ retrun 200; }

在编译器内部仍然是qq之类的名字。


int qq(int i)
{ retrun 200; }
在编译器内部是类似qq_rint_pint的东东,要包含返回值类型和参数类型的信息。

但是,即使一个加extern "C",一个没有加,这样的代码也是无法编译的。
因为当函数原型一样时,如果被调用了,应该判定是哪一个被调用了呢?
所以它固然不造成链接冲突,但是造成了二义性,还是不行的。
newkt 2007-06-17
  • 打赏
  • 举报
回复
//这是一个函数的定义
int qq(int i)
{
return 100;
}
//由于给了函数体,所以即使加上extern ,这也是一个函数的定义
extern int qq(int i)
{
retrun 200;
}

//------------------------------------------------------------------------

在同一个作用域内,变量、函数可以声明多次,但只能定义一次。

extern 关键字是用来表示声明的。

例如:
//以下是定义一个变量a
int a;
int a=0;
extern int a=0; //如果声明的时候带上了初始值,那么这就不是声明,而变成定义了
//以下是声明一个变量a
extern int a;
//------------------------------------------------------------------------
cunsh 2007-06-17
  • 打赏
  • 举报
回复
楼主换个书啊.
longhaihai 2007-06-17
  • 打赏
  • 举报
回复
天啊,老大们,我说的是c++啊不是c 语言,
mymtom 2007-06-16
  • 打赏
  • 举报
回复
不知道楼主从哪本书看来的,
extern 表示一个变量的存储空间和初始值,或者一个函数的函数体是在其它地方定义的。
例如:
在main.c中:
/* 申明全局变量g_mode和函数add, sub */
extern g_mode;
extern int add(int x, int y);
extern int sub(int x, int y);

在tools.c中:
/* 定义两个函数add */
int add(int x, int y)
{
return (x + y);
}

/* 定义两个函数sub */
int sub(int x, int y)
{
return (x - y);
}

在 global.c 中
/* 申明全局变量g_mode */
int g_mode = 0;

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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