LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: zywwzy

我今天为招聘新员工出的C语言考题

[复制链接]
发表于 2004-11-29 15:23:22 | 显示全部楼层
最初由 zlly20 发表
compile result I got for this program is
24,32,48 under win xp using VC++ 6.0

why???

把地址打印出来看看,估计编译器作了优化。
发表于 2004-11-29 17:08:26 | 显示全部楼层
考一个函数出什么结果,有点意思。
我觉得和考历史上什么事件是哪年哪月发生差不多吧。
连找工作的考试题都走不出这个怪圈,呵呵:)
发表于 2005-9-5 16:44:43 | 显示全部楼层
呵呵,我是做不出这到题目的
回复 支持 反对

使用道具 举报

发表于 2005-9-5 19:57:58 | 显示全部楼层
有深度!

刚开始没有看到char和%c等
不过好的程序员不该写出这种代码
就好比if和else的匹配问题一样
我一般是只看代码的缩进的
回复 支持 反对

使用道具 举报

发表于 2005-9-5 22:41:15 | 显示全部楼层
movl    $0, -4(%ebp)
    movb    $0, -5(%ebp)
    movl    $0, -12(%ebp)
对不对齐的就看编译器emit出什么样的assembly code,movl or movb

如果有人还不明白,可以看一本书
Programming from ground up

you can find it on my msn space
回复 支持 反对

使用道具 举报

发表于 2005-9-5 22:45:02 | 显示全部楼层
这么多库函数记起来真麻烦,还是自己定义的函数用得顺手
回复 支持 反对

使用道具 举报

发表于 2005-9-11 09:48:55 | 显示全部楼层
我经常用 sscanf,有可能一些老版本的编译器不给出警告信息,现在的主流编译器都能给出警告信息,这样做肯定是错的,楼主出这样的题,只能说是一个反面的教材,否则就有误导之嫌。这样的程序是不鼓励大家去试验的。
回复 支持 反对

使用道具 举报

发表于 2005-11-14 08:25:11 | 显示全部楼层
我在CentOS 4.2 上

icc -o aaa aaa.c
用非商业版的icc编译后,运行结果是
var1=24,var2=32,var3=48

gcc -o aaa aaa.c
用gcc编译后,运行结果是:
var1=0,var2=32,var3=48

gcc -O2 -o aaa aaa.c
用gcc优化编译后,运行结果是:
var1=24,var2=32,var3=48
回复 支持 反对

使用道具 举报

发表于 2005-11-14 22:06:23 | 显示全部楼层
晕,楼主给的这个程序也太丑陋了点,
如果真的写出这样程序的人是绝对不能招的
咋就不能给点好的例子呢 :beat
回复 支持 反对

使用道具 举报

发表于 2005-11-15 16:47:30 | 显示全部楼层
Post by zywwzy
填空题目:
以下一段C程序,在基于IA32的操作系统上编译运行,将在屏幕上打印:var1=[   ],var2=[   ],var3=[   ]。
int main(void)
{
        int  var1=0;
        char var2=0;
        int  var3=0;
        char str_val1[]="24\n";
        char str_val2[]="32\n";
        char str_val3[]="48\n";
        sscanf(str_val1,"%d",&var1);
        sscanf(str_val2,"%d",&var2);
        sscanf(str_val3,"%d",&var3);
        printf("var1=%d,var2=%d,var3=%d\n",var1,var2,var3);
}
注:sscanf函数的功能类似scanf,用于从一个字符串输入中获取数据。

竟然没有人答对。不禁感慨万千。

1. 在win2k的操作系统下,使用Visual Studio2003带的编译器,输出结果是
24,32,48。如果是Debug版本,程序运行时会出错。
2. 在TurboC2.0下,char是1个字节,int是2个字节。输出结果是24,32,48
如果先定义var2(char),输出结果是0,32,48
3. 在GCC下,char是1个字节, int是4个字节。输出结果是0,32,48。

从2和3看来,编译器不同,变量在内存中的分布也是不同的,结果也就不同拉。

ps:楼主出题应该慎重和谨慎,这种有不确定答案的题还是少出。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表