Chinaunix
标题:
一个网友问我的一道面试题.晕
[打印本页]
作者:
www.netbor.net
时间:
2007-10-29 12:05
标题:
一个网友问我的一道面试题.晕
问题描述.
请回答如下关于精典的HELLO WORLD的问题.
代码如下:
A)
#include <stdio.h>
main()
{
printf("hello world!\n");
}
B)
#include <stdio.h>
int main()
{
printf("hello world!\n");
}
C)
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
D)
#include <stdio.h>
main(void)
{
printf("hello world!\n");
return 0;
}
1.分别指出如上代码是否有误,为什么?
2.请根据代码,介绍一下C语言的标准和规范.
3.为什么入口函数可以有这么多种写法?目的是什么?在什么时候可以用这种写法?为什么?哪一种写法最为规范,为什么?
......
后面还有我就不说了,看了会吐血的,谁来回答看看.
作者:
xB1ue
时间:
2007-10-29 12:10
说个题外话
一个朋友当年读书的时候,中国的英语老师出的期末考试卷,单选题,是对一个常用语选择一个“正确”的表达方法,大部分学生们很快就做完了,我那个朋友没做出来,很郁闷,于是带着题目去问外教,外教在向他反复确认了几遍“这个的确是单选题吗?”后,无奈地说,这 4 种表达方法都是我们的常用说法。
作者:
flw2
时间:
2007-10-29 12:14
函数的返回值老的函数声明可以没有,那么表示函数返回int
参数如果没有,那么表示参数是不一定的,不进行参数的类型检查
一个函数如果没有return返回值,返回值就是个随机的值,比如
int fun()
{
...
printf...
}
返回很大可能就是printf的返回值,因为printf返回值就在eax中,然后eax作为fun的返回值
作者:
cugb_cat
时间:
2007-10-29 12:21
以前的帖子讨论过很多这些情况
作者:
cjaizss
时间:
2007-10-29 12:22
C语言标准中,main函数必须要是int main(void),或者int main(int,char**);
func(....)=int func(....)
作者:
www.netbor.net
时间:
2007-10-29 12:41
说实在的,这个问题当时我想了半天,最后我说,我不知道如何向你解释,也许二楼的说得比较贴切一点吧,但如果换成你的中的一个去面试如何解释呢,总不能空在那里不做吧.
作者:
dinghwy
时间:
2007-10-29 12:45
细节问题很多啊。
作者:
xB1ue
时间:
2007-10-29 12:50
1.分别指出如上代码是否有误,为什么?
是否有误:无误。不同的编译器会有不同的表现。
为什么:给我个有误的理由
2.请根据代码,介绍一下C语言的标准和规范.
这些个代码没有体现出C89 和 C99 的区别与不同,无法根据其来总结C语言的标准与规范。
3.为什么入口函数可以有这么多种写法?目的是什么?在什么时候可以用这种写法?为什么?哪一种写法最为规范,为什么?
为什么入口函数可以有这么多种写法:C语言的最大魅力之一就是自由
目的是什么:做为入口函数
在什么时候可以用这种写法:写入口函数的时候
为什么:因为要编译通过
哪一种写法最为规范:没有通读过各编译器的具体实现,无法回答。
为什么:见上
作者:
accelerator
时间:
2007-10-29 12:52
实际编译一下就知道了.
1. main的prototype, int main(void), int main(int argc, char *argv[])
2. 没有给出返回类型的函数返回值默认为int
3. 函数如果没有明确的return语句, 返回值为最后一条语句的值
作者:
flw2
时间:
2007-10-29 12:53
#include <stdio.h>
//check return val in shell
int fun()
{
extern int fun2(/*int*/);
fun2(1,2,3,4);
return 9;
}
int fun2(int i)
{
return i;
}
int main(void)
{
printf("%s","aaaaa");
//fun();
}
作者:
flw2
时间:
2007-10-29 12:56
1.分别指出如上代码是否有误,为什么?
是否有误:无误。不同的编译器会有不同的表现。
为什么:给我个有误的理由
是无错误,因为符合c标准,表现也就是警告而已
2.请根据代码,介绍一下C语言的标准和规范.
这些个代码没有体现出C89 和 C99 的区别与不同,无法根据其来总结C语言的标准与规范。
这个我也这么想,
3.为什么入口函数可以有这么多种写法?目的是什么?在什么时候可以用这种写法?为什么?哪一种写法最为规范,为什么?
为什么入口函数可以有这么多种写法:C语言的最大魅力之一就是自由//兼容性!公认的c++某些方面的改进是好的
目的是什么:做为入口函数
在什么时候可以用这种写法:写入口函数的时候
为什么:因为要编译通过
哪一种写法最为规范:没有通读过各编译器的具体实现,无法回答。
为什么:见上
作者:
www.netbor.net
时间:
2007-10-29 14:50
楼上的回答真有意思,哈哈哈,难怪我不知道如何回答呢,回答不回答没什么意义。
作者:
dxcnjupt
时间:
2007-10-29 15:29
在试卷上批评公司,不注重创新与实践,考这种没有意义的问题
如果公司能接受你的回答,就去面试;
如果公司不接受,就把公司炒了。这种公司不去也罢。
话说我们公司也考过类似的题目,要我写出8259A的寄存器格式....直接在试卷上开骂。
作者:
www.netbor.net
时间:
2007-10-29 16:05
作者:
flw2
时间:
2007-10-29 16:48
原帖由
www.netbor.net
于 2007-10-29 14:50 发表
楼上的回答真有意思,哈哈哈,难怪我不知道如何回答呢,回答不回答没什么意义。
你看我的帖子了没有?
作者:
sesame0816
时间:
2007-10-29 18:00
不愧为大大,c89和c99的区别是什么都知道,我要去google下
作者:
uindex
时间:
2007-10-29 18:42
C项是标准的
作者:
JeffreyPei
时间:
2007-10-29 22:23
提示:
作者被禁止或删除 内容自动屏蔽
作者:
budognai
时间:
2007-10-30 17:21
提示:
作者被禁止或删除 内容自动屏蔽
作者:
tjpuj044
时间:
2007-10-30 22:32
何必呢 自己知道自己的那种写法能编出正确的程序出来就行了 反正用的时候只用一种
作者:
ttvast
时间:
2007-10-30 23:28
很简单,为什么都不出错,
因为编译器其实不认识main这个函数的
除了早期的解释型c语言,现在我们看到的c语言编译器,都不会把main作为一个特殊的函数来处理。
main这个函数 只有在link 到 c runtime lib的时候才有意义。
所以这道题目靠的是连接器而不是编译器。
不过连接器对于题目上的那些情况都是管用的, 因为在连接器中本身不认识函数声明,也就是说c 的linker是不知道函数返回类型和参数情况的。
这就是为什么windows下的cdecl,stdcall,fastcall的函数l要有不同修饰名字来保证函数类型正确的匹配。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2