2013毕业,正准备找工作,看往年笔试面试题目的时候遇到几个小困惑。
C笔试一般不指定具体的标准,C不同标准下支持的特性不一样。就说inline函数吧,C99之前基本都不支持,但是现在的编译器基本都支持了。而且C99都已经出现20多年了,新标准C11都出来了,但是市面上的教材啊、笔试题目啊都还是考C90(C89)。
- // demo.c
- // gcc -std=c99 demo.c
- #include <stdio.h>
- #include <stdlib.h>
- int
- main (int argc, char **argv)
- {
- size_t size = 10;
- // scanf("%d", &size);
- char str1[size];
- printf ("sizeof(str1) == %d\n", sizeof (str1));
- char str2[10];
- printf ("sizeof(str1) == sizeof(str2):%s\n", (sizeof (str) == sizeof (str2)) ? "YES" : "NO");
- exit (EXIT_SUCCESS);
- }
而且现在C(C11)语言也支持泛型编程了,但是主流教材以及行业貌似没有跟进。为了保持兼容性,大家都尽量是用这些标准中特性的最小子集,以至于很多多年经验的程序员都不知道还可以这样用,只有我当场给他演示,他还半信半疑。郁闷的是我前天去华为南京上机考试,题目挺基础,但是他们竟然让我用VC6.0,对一个5年来一直使用gcc的人,在VC6.0里面写的代码各种不能行,郁闷死我了,最后紧紧张张把题目编译通过了,自己测试用例是通过了,不知道他们自动测试结果会如何。
问题1,面试遇到这种题目还好,可以直接跟面试官聊哪些标准下是可以的,哪些标准下是不行的。但是找工作第一关是笔试,笔试里面就是选择类型的,问该用法行还是不行?纠结了!!!
问题2,据我目前查到的资料都讲sizeof运算符,对操作数的sizeof运算结果在编译期间决定的。但是如上代码中,str1的大小是变量,sizeof还是运算符吗?还是编译期决定的吗?
关于sizeof,C语言的标准只是说sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long) = 8。但是通常的教材是这样的:sizeof(short) = 2,sizeof(int) = 4, sizeof(long) = 4。我想说的这并不一样总是对的吧?
还有关于结构题内存对齐的问题,并没有说是什么编译器,多少位的系统,同是32位系统下VC6.0和gcc的默认对齐方式都不一样的吧?从觉得这些问题,如果条件给的不充分的话,题目是是有问题的。不能想当然的把企业内工作环境当作共识!
其他的各种小问题,此处不一一细问。
望前辈们在方向上指点。
阅读(3185) | 评论(0) | 转发(0) |