'C语言中不带{}的代码块'

本文约 500 字,阅读需 1 分钟。

‘C语言中不带{}的代码块’

本文讨论了C99中的一个新特性:不带{}的代码块。以及阅读编程语言教程的一种新思路。

问题

在阅读C Primer Plus325页时遇到以下一句话:

先前曾提到C99有一个特性,语句若为循环或者if语句的一部分,即使没有使用{},也被认为是一个代码块。更完整的说,整个循环是该循环所在代码块的子代码块,而循环体是整个循环代码块的子代码块。

觉得有点拗口,于是设计了以下代码进行验证:

/* 2017-3-16
* zhaoyu
* test scope of for
*/
#include <stdio.h>
int main(void) {
    int i = 0;
    printf("i = %d\n", i);
    for (int i = 1; i < 5; i++) {
       printf("i = %d\n", i);
       int i = 10;
       printf("i =  %d\n", i);
    }
    printf("i = %d\n", i);
    return 0;
}

输出可以自己猜测,然后编译(-std=c99)验证。

总结

以上代码和自己最近读的The C Puzzle Book中的代码很像。此外,我发现这是一种非常好的学习语言的办法,设计这些诡异的代码既可以验证自己的猜想又可以加深对概念的理解,这种效果是走马观花的浏览所不能比的。 想起高中时候,一个后来考上清华的同学,虽然不怎么喜欢做作业,但经常能对着教材自己设计一些有挑战性的问题。现在想想自己一直以来,看书都是浮光掠影,希望以后能通过这个过程有所长进!

总阅读量次。