| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2852 人关注过本帖
标题:由朋友提问,想到的一个自定义函数的问题(未解决)
只看楼主 加入收藏
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

我刚才装了一下C-FREE,通不过

#include<stdio.h>


void DimFunction()
{
void PrintWord();
}

void OutFunction()
{
PrintWord();
}

void main()
{
OutFunction();

}

void PrintWord()
{
printf("Money!");
}


雁无留踪之意,水无取影之心
2007-04-10 17:11
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用cdmalcl在2007-4-10 16:53:44的发言:

我用C-FREE也是如此
也就是说微软C如你所说
宝蓝C如我所说

我说过了

2007-04-10 17:13
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

C-FREE好像用的是微软C的内核吧

2007-04-10 17:14
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 


看附件
SPEjbvkz.rar (483.27 KB) 由朋友提问,想到的一个自定义函数的问题(未解决)



雁无留踪之意,水无取影之心
2007-04-10 17:18
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

我看错了


雁无留踪之意,水无取影之心
2007-04-10 17:18
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

规范的编译器都和我的结果一样,不规范的都和你的结果一样


雁无留踪之意,水无取影之心
2007-04-10 17:20
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

纯属偏激想法

2007-04-10 18:36
tvkl
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-4-7
收藏
得分:0 

#include<stdio.h>


void DimFunction()
{
void PrintWord();
}

void OutFunction()
{
PrintWord();
}

void main()
{
OutFunction();

}

void PrintWord()
{
printf("Money!");
}
能通过。
但去掉void DimFunction()
{
void PrintWord();
}后不能通过。

是因为当编译器遇到第一条PrintWord()语句时,误认为是函数声明语句。
故发生重定义类型不匹配的错误。(一个返回值为默认整型 ,一个返回值为空。)
如改用如下函数。(我只改变了返回值类型)。
#include<stdio.h>


int OutFunction()
{
return PrintWord();
}

void main()
{
printf("%d", OutFunction());

}

int PrintWord()
{
return 5;
}
此时编译是能成功的。


没有解决不了的问题,时间而已!
2007-04-10 19:05
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
我在18楼的回复是针对lz在3楼的回复的,lz问的是几个程序在运行上有什么区别,所以我说的是编译器生成的可执行程序运行时的差别,在汇编层调试就可找到答案,而不是其他回复中谈到的语言层面的东西。说实话这问题在语言层面很简单,c水平不是太菜的都知道。下午没时间搞,忙了一下午晚上才回来,头有点晕,只是用TC编译了lz的头两个程序,生成了z1.obj,z1.exe和z2.obj,z2.exe(我想TC生成的16位程序可能比vc生成的32位简单些,所以用tc)。

用Windows下的DEBUG打开z1.exe和z2.exe发现两个文件是一样的,打开z1.obj和z2.obj发现两个文件某些地方有些差别,和我在18楼的猜想是一样的,即编译后有差别,连接后就是一样的。

这个问题在c中没有什么意义,因为一般人学c只是关心c标准是什么样的(语言层面),这是所有编译器都共同遵守的(大多数情况下),但是编译器如何去实现标准,如何生成可执行程序,这是因编译器而异,不同编译器实现是不一样的,就是相同源代码不同编译器生成的可执行程序也可能不一样,只有部分爱好者才关心程序运行时在内存中的模型。
2007-04-10 21:54
快速回复:由朋友提问,想到的一个自定义函数的问题(未解决)
数据加载中...
 
   



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

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