Chinaunix首页 | 论坛 | 博客
  • 博客访问: 144943
  • 博文数量: 8
  • 博客积分: 342
  • 博客等级: 一等列兵
  • 技术积分: 109
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-02 09:31
文章分类

全部博文(8)

文章存档

2012年(8)

分类: C/C++

2012-09-14 15:55:22

    2013毕业,正准备找工作,看往年笔试面试题目的时候遇到几个小困惑。
   C笔试一般不指定具体的标准,C不同标准下支持的特性不一样。就说inline函数吧,C99之前基本都不支持,但是现在的编译器基本都支持了。而且C99都已经出现20多年了,新标准C11都出来了,但是市面上的教材啊、笔试题目啊都还是考C90(C89)。

  1. // demo.c
  2. // gcc -std=c99 demo.c

  3. #include <stdio.h>
  4. #include <stdlib.h>

  5. int
  6. main (int argc, char **argv)
  7. {
  8.   size_t size = 10;

  9.   // scanf("%d", &size);
  10.   char str1[size];
  11.   printf ("sizeof(str1) == %d\n", sizeof (str1));

  12.   char str2[10];
  13.   printf ("sizeof(str1) == sizeof(str2):%s\n", (sizeof (str) == sizeof (str2)) ? "YES" : "NO");

  14.   exit (EXIT_SUCCESS);
  15. }

    而且现在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的默认对齐方式都不一样的吧?从觉得这些问题,如果条件给的不充分的话,题目是是有问题的。不能想当然的把企业内工作环境当作共识!

其他的各种小问题,此处不一一细问。
望前辈们在方向上指点。

阅读(3141) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~