求达人解释一个小问题

benbshmily 2009-12-03 04:39:17
//test.cpp

char main = 0x00;
int fun()
{
printf("%X\n",main);
return 0;
}

//main.cpp
extern int fun();

int main()
{
fun();
system("Pause");
return 0;
}



上面代码为什么运行后结果不是0,而是另外一个数呢?有点迷惑。
同时将char main = 0x00;改int main = 0x00;又是另外一种结果。我分析了一下结果,主要是因为test.cpp文件中的变量main占一个字节和4个字节的原因。因此,printf函数打印的时候还是是取的test.cpp文件中的变量main的值打印的。但是本来是0,为什么打印出来不是0呢?它的值在什么时候被谁改变了呢?谢谢
...全文
162 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
benbshmily 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 voidsky 的回复:]
大哥main不是能随便定义的,main可是关键字。。。。
[/Quote]
哎,再三强调,main不是关键字。刚刚在楼上都已经回复过的了。
真不知哪本书教的main是关键字。该撕了。
macrojj 2009-12-03
  • 打赏
  • 举报
回复
是可以运行的啊。
要放两个文件里面。
voidsky 2009-12-03
  • 打赏
  • 举报
回复
大哥main不是能随便定义的,main可是关键字。。。。
benbshmily 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 loaden 的回复:]
引用 4 楼 benbshmily 的回复:
VS2005.
嗯,我也觉得应该是编译器问题。感觉 本来应该报重定义错误的。

哦,可能是编译器的bug。打上SP1了吗?
或者换VS2008.吧。

用MinGW4.4,也报错:

D:\DengYC\Projects\hhuhu\main.cpp||In function 'int main()':|
D:\DengYC\Projects\hhuhu\main.cpp|15|error: 'int main()' redeclared as different kind of symbol|
D:\DengYC\Projects\hhuhu\main.cpp|5|error: previous declaration of 'char main'|
||=== Build finished: 2 errors, 0 warnings ===|

[/Quote]
晕,我刚才在用gcc试了,是可以运行的。老邓,你是不是没有用两个文件,把上面代码拷到一个文件里面了?fun函数在另外一个文件里面哦。
白头老汉 2009-12-03
  • 打赏
  • 举报
回复
不要把函数名和变量名取成一样,这样会导致很多奇怪的问题。
benbshmily 2009-12-03
  • 打赏
  • 举报
回复
哎,果然是编译器着怪。
害我纠结那么久。还是书上的作业题,
谢谢。
eyodo8 2009-12-03
  • 打赏
  • 举报
回复
main的问题,应该打印的是应用程序入口点函数的地址
老邓 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 benbshmily 的回复:]
VS2005.
嗯,我也觉得应该是编译器问题。感觉 本来应该报重定义错误的。
[/Quote]
哦,可能是编译器的bug。打上SP1了吗?
或者换VS2008.吧。

用MinGW4.4,也报错:

D:\DengYC\Projects\hhuhu\main.cpp||In function 'int main()':|
D:\DengYC\Projects\hhuhu\main.cpp|15|error: 'int main()' redeclared as different kind of symbol|
D:\DengYC\Projects\hhuhu\main.cpp|5|error: previous declaration of 'char main'|
||=== Build finished: 2 errors, 0 warnings ===|
benbshmily 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lovesi3344 的回复:]
main是关键字哦
[/Quote]
纠正一点,main不是关键字。
benbshmily 2009-12-03
  • 打赏
  • 举报
回复
这个是《深入理解计算机系统》的第七章的一个作业题,我看了有点纳闷,所以请教大家。
lovesi3344 2009-12-03
  • 打赏
  • 举报
回复
main是关键字哦
benbshmily 2009-12-03
  • 打赏
  • 举报
回复
VS2005.
嗯,我也觉得应该是编译器问题。感觉 本来应该报重定义错误的。
老邓 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 benbshmily 的回复:]
但是本来是0,为什么打印出来不是0呢?它的值在什么时候被谁改变了呢?谢谢
[/Quote]
我想,应该是你的编译器的问题。
没有判断出还有一个函数main。
应该打出出了main函数的地址了。

例如代码:
#include <iostream>

using namespace std;

int main()
{
fun();
system("Pause");
return 0;
}

int fun()
{
printf("%X\n",main);
return 0;
}

输出:40100A
老邓 2009-12-03
  • 打赏
  • 举报
回复
如果改成:
#include <iostream>

using namespace std;

char main2 = 0x00;
int fun()
{
printf("%X\n",main2);
return 0;
}

//main.cpp
extern int fun();

int main()
{
fun();
system("Pause");
return 0;
}

输出0
老邓 2009-12-03
  • 打赏
  • 举报
回复
你这是啥子编译器呢?
我用VC10,编译失败:
#include <iostream>

using namespace std;

char main = 0x00;
int fun()
{
printf("%X\n",main);
return 0;
}

//main.cpp
extern int fun();

int main()
{
fun();
system("Pause");
return 0;
}


Microsoft (R) Program Maintenance Utility Version 10.00.21003.01
Copyright (C) Microsoft Corporation. All rights reserved.

Main.cpp
Main.cpp(16) : error C2365: 'main' : redefinition; previous definition was 'data variable'
Main.cpp(5) : see declaration of 'main'
NMAKE : fatal error U1077: 'D:\DengYC\LoveDEV\bin\cl.EXE' : return code '0x2'
Stop.

64,654

社区成员

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

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