首页 > Linux专区, 编程 > 你精通C语言吗?–由一次面试的亲身体会想到的…

你精通C语言吗?–由一次面试的亲身体会想到的…

2010年10月13日 小卢 发表评论 阅读评论

 

读研这两年,平时项目都在用C语言在Linux下做,两年下来,也写了不少的代码,再加上我平时的不懈努力,多看书,也算是C语言的基础知识比较扎实了,因此在自己的简历上,就写上了“精通C语言编程”;这个在面试华为、中兴以及华赛的时候,都还好,问的问题都没有被卡壳,但是就在前几天,我去成都面试某互联网公司的时候,就结结实实的被打击了一下:当时面试管GG 看到我简历上写的“精通C语言编程”,就说:你精通C语言编程啊?我当时就一个汗啊!GG又说:那好吧!我给你说个最简单的吧:

struct empty{ }a ; //sizeof(a)

我只记得 在C++里面 空class 是 1;但是 在C语言的标准下,就不太好说了4? 1? 0? ,我一时之间想不到为什么了,这样的东西和编译器有关系?

当时大脑飞速运转,思考很多知识,总结推理…

回答:C++的标准下是1,C语言里面不确定,但是我推测是0或者4,原因:….

面试官GG 笑而不语。

我晓得自己回答的,他肯定不太满意。

然后GG接着问:问什么在C++中是1呢?

汗!这次是真的回答不上来了,由此想到自己还是真的不能堪称“精通C”啊!

回来以后,在VC下试了一下 结果是1,GCC下试了一下是0;

看来这个问题和编译器有关系啊!

再想一下,不免可以有一个比较清楚的认识了:每个结构体,编译器在处理的时候,都要对他进行识别,空的结构体就不能用结构体内部来识别他,就要编译器帮忙,这样的话,VC就产生了一个字节的空间来存储结构体的标识。GCC在处理的过程中节省了空间,但是他是怎么识别的呢?呵呵,回头想一下,其实两个空的结构体是没有用的,识别与否关系不太大!

由这个题目,我还想起来一个知识点:

#define print( n ) printf( “data”#n” = %d\n “, data##n )
int main()
{
      int data5=100;
      print(5);
      return 0;
}

上面这个代码是多少呢?有没有思考过呢?平时做项目的时候有没有用到过呢?

呵呵,如果我告诉你 结果是 :data5=100;
你会不会有些惊讶?

为什么是这样的呢?我们要从#号的功能谈起了
# 本身为指令 没有其他意义,也没有其他效果
# 号必须是该行除了任何空白字符外的第一个字符。预处理指令就是以#号开头的代码行。
# 后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。
整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

下面举例说明下:
形式为: #define 标识符 字符串.
其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。 #x中的#是字符串化运算符,作为是把参数x字符串化,即用双引号包围,例如,在这个程序中:

print(4);

参数4经过宏替换并字符串化之后,就成了:

printf(“the no. ” “4″ “,is”);

由于相邻的字符串会自动被连接,所以,它最终相当于:

printf(“the no. 4 ,is”);

由此 我们可以在 gcc 下试一下:

[root@localhost ~]# gcc -E –o test test.c
[root@localhost ~]# cat test
# 1 “test1.c”
# 1 “<built-in>”
# 1 “<command line>”
# 1 “test1.c”

int main()
{
      int data5=100;
      printf( “data ” “5″” = %d\n “, data5 );
      return 0;
}

这下就比较清楚了吧!

呵呵,其实C语言几十年不衰,还是有原因的,他有很经典的地方。很值得我们深入的研究它!

分类: Linux专区, 编程 标签:
  1. 2010年10月15日14:14 | #1

    呵呵,宏是比较复杂。
    我都不敢写精通某种语言的。

    ps:
    一个宏的有趣问题,不用循环和递归,写出打印1,2,。。。1000的程序。

  2. 邯郸
    2010年10月20日09:41 | #2

    正在学,太深奥了

  3. 2010年10月20日11:57 | #3

    深奥 ,深奥

  4. 2010年10月21日15:55 | #4

    [1]
    # 号必须是该行除了任何空白字符外的第一个字符。
    ——
    前面也可以添加注释啊
    [2]
    一个宏的有趣问题,不用循环和递归,写出打印1,2,。。。1000的程序。
    ——
    用枚举变量?

  5. 小卢
    2010年10月21日21:18 | #5

    @wcdj
    呵呵,预编译过程,注释省略的吗
    不过你的思维 很严密哈,记得陈正冲讲到这个对吧?哈哈

    第二个问题,我还在想,你说的是个方法,不过枚举1000个,这写代码也太累了吧?哈哈

  6. 小卢
    2010年10月21日21:23 | #6

    @wcdj

    @moorekang

    我道是 想到一个 可以用递归解决的方法,哈哈,不过,刚刚看到说的不让用递归。。。 (┬_┬)

  7. 小卢
    2010年10月21日21:35 | #7

    哈哈,怪我啦!
    我去百度了下:

    看了以后,恍然大悟:

    #include
    #define A(x) x;x;x;x;x;x;x;x;x;x;
    int main (void)
    {
    int n = 1;
    //下面完成三次宏调用,每次宏调用,实现10个展开函数,正好出现1000次展开(1000个printf(…)),
    //感觉还是非常巧妙 –yqshare

    A(A(A(printf (“%d “, n++))));
    return 0;

  8. 2010年11月1日15:29 | #8

    博大精深的C啊

  9. phenix
    2010年11月15日14:04 | #9

    你好,能否知道你的联系方式? 我现在在linux下使用c语言, 一直碰壁,也没有一个 可以帮我的人
    谢谢~!

  10. 小卢
    2010年11月15日16:04 | #10

    @phenix
    我邮箱,咱们可以共同讨论下:

    $echo -n “Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGx1eXVxaW1haWxib3hAZ21haWwuY29tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=” | base64 -d

  11. 2010年12月4日21:53 | #11

    博主博客设计的真不错,精品游戏网我的网站,博主也给点建议吧?

  12. bear
    2011年1月13日11:57 | #12

    精辟!!!

  13. 2011年4月18日19:38 | #13

    研究一下。

  14. 匿名
    2011年5月9日19:05 | #14

    闲暇之余,恍惚之间,一不小心,在看其他东西的时候,发现了这个网中花园。博主是个细心之人,不管是做博客还是其它的。看来以后这是个久留之地了,希望博主能再接再厉。 师弟:fxp

  15. 小卢
    2011年5月10日09:47 | #15

    我勒个去,不带这样说的,哥会不好意思滴

  16. 匿名
    2011年5月24日23:16 | #16

    师兄v5!!!

  17. 2011年8月9日00:47 | #17

    欢迎缩小图片。作为一个大型论坛的管理员,我们有很多的用户几乎没有图形的技能或知识。创建了这个网站问问题,如怎样调整图片的用户感到沮丧?我如何使图像变小?我如何缩小头像图片。所以,我们创建了收缩的图片是没有更多的困难比在论坛中张贴和现在任何人都可以调整图像和数码照片的工具。
    resize image online

  18. 2011年8月9日11:46 | #18

    如果你是比较各类纯平电视,你可能会成为一些不同的选择轰炸。虽然有很多争论平板电视监控是最好的,液晶电视正迅速成为领跑者。 LCD使用微小的像素是由液态晶体生产技术。
    tv lcd 42

  19. Blibliainee
    2011年10月2日22:31 | #19

    奇妙的

  20. 2011年10月16日06:47 | #21

    虽然保持年轻是每个人的想法,现实的情况是年纪越来越大终有一天会发生,与它一起就可以得出不同的健康问题。为了确保你oрtimal以及即使在退休后,现在它是必不可少的氨基酸和降低胆固醇的维生素。为什么我应该得到氨基酸维生素,氨基酸,是对个人在每一个时代grouр至关重要。杨рeoрle一般需要helр他们的氨基酸,维生素剧烈活动,如跑步,骑自行车等,因为这些协助细胞的生长。这些活跃的细胞可能suррort个人有较强的免疫系统的建设也参与。一个更强的防御手段得病的机会较少。个人谁的密集的训练,健美严重,和阻力训练,此外需要氨基酸helр他们负载uр他们希望simрly suррort因为氨基酸能促进更快, suрerior建设肌肉的肌肉质量。这些也helр更好的肌肉和身体的恢复,这是至关重要的,参与这些活动。无需在训练和其他活动之间的aррroрriate肌肉质量恢复, рerson可以exрerience胸闷和疼痛,可能感觉完全疲惫的例行。氨基酸也是有价值的个人在炼油рrotein存储。你的身体看作是一个大的标准的银行,可以有一个低迷的运行时间,一旦你成熟。
    amino acid side chain chart

  21. 2011年10月17日17:08 | #22

    上述SelectChina.com ,并寻找中国五金工具制造商/中国五金工具产品的更多信息。 u003c! – INFOLINKS_OFF – u003e

    heavy equipment parts inc
    used truck trailers
    komatsu pc 35 mr
    safety heavy equipment
    heavy equipment training courses

    Demag cc 2400

    Heavy equipment training school

    Komatsu wa250-1

    Excavator sale

    Hitachi zw 310

    Heavy trucks for sale

    Nccco certification

    Salvage heavy trucks

    Sale machinery

    Caterpillar 299c for sale

  22. 2011年10月18日15:32 | #23

    这种困境不一定限于启动企业老板。成立的建筑企业都发现,他们的银行或财务公司正在下降,使所有重要的贷款。原因是什么呢?最近的住宅次级贷款的混乱影响已迁移到商界。银行收紧对小额贷款,他们用带有规律性的。

    moving heavy equipment
    heavy equipment driver
    bulldozer operator jobs
    heavy equipment operator jobs in
    rental equipment rates

    Mini excavator
    Heavy equipment backhoe
    Heavy equipment operator positions
    Heavy equipment operator certification
    Crane companies

    Construction equipment lease
    980h caterpillar
    Used heavy equipment values
    Jcb equipment
    Backhoe tractor

    Caterpillar d5g xl
    Loader for tractor
    Machinery trader
    D7r for sale
    Front end loader hydraulics

    Concrete equipment rental
    Heavy equipment towing
    Used asphalt pavers
    Crane manufacturers
    Heavy equipment operator jobs in illinois

    Heavy lift equipment
    Semi trucks
    Cheap heavy equipment
    Komatsu pc20-7
    Heavy equipment training schools

    Yellow cat heavy equipment
    Hitachi zx130w
    Truck crane
    Caterpillar 308c cr
    Caterpillar equipment

    Trailers in arizona
    Heavy equipment services
    Sure trac trailers for sale
    Heavy equipment colleges
    Jobs heavy equipment operator

    Equipment building
    Heavy equipment courses
    Caterpillar 247b
    Heavy equipment operating training
    Heavy machinery trader

    Construction auction
    Equipment trader canada
    Heavy equipment grants
    Heavy equipment accident pictures
    Employment heavy equipment

    Terramite for sale
    Rc construction equipment
    Used heavy equipments
    Kramer allrad 620
    Heavy duty equipment operator

  23. 2011年10月19日11:35 | #24

    三同号:三个28.5英尺( 8.7米)拖车最大重量可达129000磅。

    Tool rental

    Tire loader

    Selling heavy equipment

    Caterpillar 247b

    Equipment heavy

    Used heavy equipment attachments

    Road construction machinery

    Used trailers car

    Used equipment trailers

    Used truck

    heavy equipment used
    heavy truck for sale
    construction equipment parts
    cat equipment rental
    truck and heavy equipment

  24. 2011年10月19日23:20 | #25

    讲穿购买手机还款内最优秀的的建立,甚至时下消费者极为之中断言。有很多品牌,从喜欢一个整体模型套件。然后,你需要能力的考虑,也电池。在目的有义务一个最适合你的一种特殊的,也适合你自己的风格的个人品味。时尚卓越三个最热的聘用肘手机将黑莓珠,你的苹果iPhone ,幸运的是摩托罗拉九十年代刀片。所有三个或更多这样的奇特的候选人,每个人都有其敏锐自己的耐用性,高度的薄弱点。我们注定看看这些每个人分开,以便您可以自行决定还款等你假装将是最好的信念的勇气。
    Used cellphones for sale

  25. 2011年10月26日12:14 | #26

    在购买手机最好穿的会谈是建立要平衡再次狠狠的断言之中消费者。有很多品牌喜欢的车型的分组。然后,你需要能力,考虑到步行,也电池。你到底需要选择一个对您的生产,也期的自己的个人风格满足。时尚最好的三个最热的聘用可用手机将你的苹果iPhone ,黑莓珠,舒适的摩托罗拉九十年代刀片。所有三个或更多这样的奇特的候选人,每个人都有他们完全是自己的耐久性articulately unsubstantial点。我们注定看看在每一个这些分开,以便您可以决定自己的看法,如您信任是最好的,在处置。
    Used cellphones for sale

  26. 2011年11月20日20:30 | #27

    不懂啊

  1. 本文目前尚无任何 trackbacks 和 pingbacks.

JS and CSS Optimization by PHP Speedy JS and CSS Optimization by PHP Speedy