当前位置: 代码迷 >> C语言 >> 由朋友提问,想到的一个自定义函数的问题(未解决)
  详细解决方案

由朋友提问,想到的一个自定义函数的问题(未解决)

热度:98   发布时间:2007-04-10 17:11:38.0

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

#include<stdio.h>


void DimFunction()
{
void PrintWord();
}

void OutFunction()
{
PrintWord();
}

void main()
{
OutFunction();

}

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


----------------解决方案--------------------------------------------------------
以下是引用cdmalcl在2007-4-10 16:53:44的发言:

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

我说过了
----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------


看附件

----------------解决方案--------------------------------------------------------

我看错了


----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------

纯属偏激想法


----------------解决方案--------------------------------------------------------

#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;
}
此时编译是能成功的。


----------------解决方案--------------------------------------------------------
我在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标准是什么样的(语言层面),这是所有编译器都共同遵守的(大多数情况下),但是编译器如何去实现标准,如何生成可执行程序,这是因编译器而异,不同编译器实现是不一样的,就是相同源代码不同编译器生成的可执行程序也可能不一样,只有部分爱好者才关心程序运行时在内存中的模型。

----------------解决方案--------------------------------------------------------
  相关解决方案