【C语言冷知识】05_让人误解的嵌套

【C语言冷知识】05_让人误解的嵌套在 C 语言教科书里面 当遇到分支结构 循环 函数调用和结构体的时候 都会提及到一个概念 就是嵌套 笼统地说就是套娃 A 里面可以有和 A 同类的东西 当时学的时候挺费脑子的 书里面还有一堆习题让你

大家好,欢迎来到IT知识分享网。


1、教科书中的嵌套

1.1、分支结构的嵌套

  在if语句中又包含一个或者多个if语句称为if语句的嵌套。接着书本给出一个很容易让人判断错误的例子,第一个if其实是没有else的,但是刻意的对齐和糟糕的编程风格实在是误导别人。
在这里插入图片描述
  在这里,小白想给出自己对于if-else的理解:
  1、每一个if或者else后面,是一个新的独立空间,它可以操作所有符合作用域范围内的对象,以及定义新的变量类型,但是不能定义函数;
  2、为了正确理解,必须在ifelse后面添加花括号{}以代表独立空间的边界,并且以不同的缩进表达不同的空间;
  3、对于C语言标准,if后面可以没有else,也可以有else
  4、如果if后面有else,那么他们必然处于同层空间;





  现在我们抛开嵌套这个概念,重新回去看那个糟糕的例子,根据3和4整理如下:

if () { 
     if () { 
     } else { 
     if () { 
     } else { 
     } } } 

在这里插入图片描述

1.2、循环的嵌套

1.3、函数的嵌套

2、忘记嵌套,做回自己

  小白理解其实没有所谓的嵌套,它只在不同层的独立空间中出现了相同或者相似的内容而已,如果只关注当前空间,那么什么分支结构、函数调用和循环都永远只有1个,学会”忘记“,能更好帮助你专注在某一层空间内,铭记下面的2条共性:

  1、每一个X后面,是一个新的独立空间,它可以操作所有符合作用域范围内的对象,以及定义新的变量类型,但是不能定义函数;
  2、为了正确理解,必须在X后面添加花括号{}以代表独立空间的边界,并且以不同的缩进表达不同的空间;

  以新的视角看一下这段代码,正常人是不会这样写的,而Flag这个名字重复出现在不同层的独立空间中,但是没有任何语法和语义的问题,只是存在理解问题:

void Func(void) { 
     uint8_t Flag = 0; if (Flag) { 
     uint8_t Flag = 1; while (Flag) { 
     static uint8_t Flag = 0; Flag++; if (Flag >= 100) { 
     for(uint8_t Flag = 0; Flag <= 100; ++Flag) { 
     } break; } } } else { 
     for(uint8_t Flag = 0; Flag <= 100; ++Flag) { 
     while (1) { 
     static int8_t Flag = -100; Flag++; if (Flag >= 0) { 
     uint8_t Flag = 0; if (Flag) { 
     printf("Test 1\r\n"); } else { 
     printf("Test 0\r\n"); } break; } } } } } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137709.html

(0)
上一篇 2025-06-18 16:15
下一篇 2025-06-18 16:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信