当前位置:首页 > > strongerHuang
[导读]我觉得这是一个送分题,奈何知乎人才太多了,给出了各种古怪的写法,如果是做项目的话,我比骄建议一些正常的写法,就是大家都能看得懂的,不要搞什么花里胡哨,不过你要是交流的话,既然是交流,我不觉得要多正规,即使你的观点有问题,我觉得也可以拿出来说说,毕竟是交流,各抒己见,发表自己的观点是最重要的。


转自:嵌入式Linux

我觉得这是一个送分题,奈何知乎人才太多了,给出了各种古怪的写法,如果是做项目的话,我比骄建议一些正常的写法,就是大家都能看得懂的,不要搞什么花里胡哨,不过你要是交流的话,既然是交流,我不觉得要多正规,即使你的观点有问题,我觉得也可以拿出来说说,毕竟是交流,各抒己见,发表自己的观点是最重要的。


---- 为什么不建议大家花里胡哨

我觉得花里胡哨之前首先是你基础非常好了再去花里胡哨,不要自己很多基础的东西还搞不清楚就去花里胡哨。


---- 看这个代码,题外话

看看基础搞不明白的杀伤有多大。

void start_f(int first_start)
{
 char time_buf[512];
 char buf[512]; if(!first_start)
 {
  sprintf(time_buf,"%s",get_time());
  int len = strlen(time_buf);
  time_buf[len -1 ] = 0; printf("time_buf:%s\n",time_buf);
 }
}

这个是在网上看到的一个代码,比较典型的基础不牢靠,对strlen理解不够。

常规解题代码

我觉得对于这个题目,使用for是非常常规的思考方式,所以我看了所有的回答之后,写了一个常规的代码。

---- 代码如下

#include "stdio.h" void main(void)
{
 int i=0; for(i=1;i<=100;i++) { printf("%d ",i);
 } for(i=99;i>=1;i--)
 { printf("%d ",i);
 }
}

---- 代码输出

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
--------------------------------
Process exited after 0.04664 seconds with return value 2
请按任意键继续. . .

---- 为什么是 void main ,而不是int main ,题外话

这个是一个知乎留言提到的,很多人也对这个有疑惑,main的写法有几种,有的被认为是正规的,有的被认为是不正规的。

main是一个函数,既然是一个函数,就遵从函数的规则就好。

所以,这样写输出并没有什么问题

#include  char * main()
{ printf("hhh\n"); return (char * )NULL;
}

我们还要知道比较常见的几种

int main(int argc,char **argv){}
int main(int argc,char *argv[]){}
int main(void){}

---对于返回值的认知

main 函数是被操作系统调用的,既然是被操作系统调用的,操作系统会判断函数的返回值,通过返回值来判断程序是否正确运行,所以main函数的返回值是有意义的,我示例中的写法并不规范。

对main的解读

比较玄乎的写法

#include "stdio.h" void fun(int n)
{ if(n<100) { printf("%d ",n); 
  fun(n+1);
 } printf("%d ",n);
}

int main(void)
{
 fun(1); return 0;
}

---- 程序输出

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
--------------------------------
Process exited after 0.05336 seconds with return value 0
请按任意键继续. . .

这里涉及到递归,如果没有这个概念的人,脑子可能弯不过来

大概是这样执行顺序的

fun(1)
->fun(2)
--->fun(3)
........
---->fun(99)

---- 把上面的代码修改下

#include "stdio.h" void fun(int n)
{ if(n<100) { printf("fun(%d) ",n); 
  fun(n+1);
 } printf("fun(%d) ",n);
}

int main(void)
{
 fun(1); return 0;
}

---- 代码输出

fun(1) fun(2) fun(3) fun(4) fun(5) fun(6) fun(7) fun(8) fun(9) fun(10) fun(11) fun(12) fun(13) fun(14) fun(15) fun(16) fun(17) fun(18) fun(19) fun(20) fun(21) fun(22) fun(23) fun(24) fun(25) fun(26) fun(27) fun(28) fun(29) fun(30) fun(31) fun(32) fun(33) fun(34) fun(35) fun(36) fun(37) fun(38) fun(39) fun(40) fun(41) fun(42) fun(43) fun(44) fun(45) fun(46) fun(47) fun(48) fun(49) fun(50) fun(51) fun(52) fun(53) fun(54) fun(55) fun(56) fun(57) fun(58) fun(59) fun(60) fun(61) fun(62) fun(63) fun(64) fun(65) fun(66) fun(67) fun(68) fun(69) fun(70) fun(71) fun(72) fun(73) fun(74) fun(75) fun(76) fun(77) fun(78) fun(79) fun(80) fun(81) fun(82) fun(83) fun(84) fun(85) fun(86) fun(87) fun(88) fun(89) fun(90) fun(91) fun(92) fun(93) fun(94) fun(95) fun(96) fun(97) fun(98) fun(99) fun(100) fun(99) fun(98) fun(97) fun(96) fun(95) fun(94) fun(93) fun(92) fun(91) fun(90) fun(89) fun(88) fun(87) fun(86) fun(85) fun(84) fun(83) fun(82) fun(81) fun(80) fun(79) fun(78) fun(77) fun(76) fun(75) fun(74) fun(73) fun(72) fun(71) fun(70) fun(69) fun(68) fun(67) fun(66) fun(65) fun(64) fun(63) fun(62) fun(61) fun(60) fun(59) fun(58) fun(57) fun(56) fun(55) fun(54) fun(53) fun(52) fun(51) fun(50) fun(49) fun(48) fun(47) fun(46) fun(45) fun(44) fun(43) fun(42) fun(41) fun(40) fun(39) fun(38) fun(37) fun(36) fun(35) fun(34) fun(33) fun(32) fun(31) fun(30) fun(29) fun(28) fun(27) fun(26) fun(25) fun(24) fun(23) fun(22) fun(21) fun(20) fun(19) fun(18) fun(17) fun(16) fun(15) fun(14) fun(13) fun(12) fun(11) fun(10) fun(9) fun(8) fun(7) fun(6) fun(5) fun(4) fun(3) fun(2) fun(1)

重点在于只有if 判断为假后,才结束递归,但是递归不能无限大,太大了会撑爆栈空间的哦

递归的文章

C 语言,你真的懂递归了吗?

比如这样

再看看一个高赞的奇葩写法

作者:已注销了
链接:https://www.zhihu.com/question/420856018/answer/1474402510
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 #include  int main() { printf("1"); printf(" "); printf("2"); printf(" "); printf("3"); printf(" "); printf("4"); printf(" "); printf("5"); printf(" "); printf("6"); printf(" "); printf("7"); printf(" "); printf("8"); printf(" "); printf("9"); printf(" "); printf("10"); printf(" "); printf("11"); printf(" "); printf("12"); printf(" "); printf("13"); printf(" "); printf("14"); printf(" "); printf("15"); printf(" "); printf("16"); printf(" "); printf("17"); printf(" "); printf("18"); printf(" "); printf("19"); printf(" "); printf("20"); printf(" "); printf("21"); printf(" "); printf("22"); printf(" "); printf("23"); printf(" "); printf("24"); printf(" "); printf("25"); printf(" "); printf("26"); printf(" "); printf("27"); printf(" "); printf("28"); printf(" "); printf("29"); printf(" "); printf("30"); printf(" "); printf("31"); printf(" "); printf("32"); printf(" "); printf("33"); printf(" "); printf("34"); printf(" "); printf("35"); printf(" "); printf("36"); printf(" "); printf("37"); printf(" "); printf("38"); printf(" "); printf("39"); printf(" "); printf("40"); printf(" "); printf("41"); printf(" "); printf("42"); printf(" "); printf("43"); printf(" "); printf("44"); printf(" "); printf("45"); printf(" "); printf("46"); printf(" "); printf("47"); printf(" "); printf("48"); printf(" "); printf("49"); printf(" "); printf("50"); printf(" "); printf("51"); printf(" "); printf("52"); printf(" "); printf("53"); printf(" "); printf("54"); printf(" "); printf("55"); printf(" "); printf("56"); printf(" "); printf("57"); printf(" "); printf("58"); printf(" "); printf("59"); printf(" "); printf("60"); printf(" "); printf("61"); printf(" "); printf("62"); printf(" "); printf("63"); printf(" "); printf("64"); printf(" "); printf("65"); printf(" "); printf("66"); printf(" "); printf("67"); printf(" "); printf("68"); printf(" "); printf("69"); printf(" "); printf("70"); printf(" "); printf("71"); printf(" "); printf("72"); printf(" "); printf("73"); printf(" "); printf("74"); printf(" "); printf("75"); printf(" "); printf("76"); printf(" "); printf("77"); printf(" "); printf("78"); printf(" "); printf("79"); printf(" "); printf("80"); printf(" "); printf("81"); printf(" "); printf("82"); printf(" "); printf("83"); printf(" "); printf("84"); printf(" "); printf("85"); printf(" "); printf("86"); printf(" "); printf("87"); printf(" "); printf("88"); printf(" "); printf("89"); printf(" "); printf("90"); printf(" "); printf("91"); printf(" "); printf("92"); printf(" "); printf("93"); printf(" "); printf("94"); printf(" "); printf("95"); printf(" "); printf("96"); printf(" "); printf("97"); printf(" "); printf("98"); printf(" "); printf("99"); printf(" "); printf("100"); printf(" "); printf("99"); printf(" "); printf("98"); printf(" "); printf("97"); printf(" "); printf("96"); printf(" "); printf("95"); printf(" "); printf("94"); printf(" "); printf("93"); printf(" "); printf("92"); printf(" "); printf("91"); printf(" "); printf("90"); printf(" "); printf("89"); printf(" "); printf("88"); printf(" "); printf("87"); printf(" "); printf("86"); printf(" "); printf("85"); printf(" "); printf("84"); printf(" "); printf("83"); printf(" "); printf("82"); printf(" "); printf("81"); printf(" "); printf("80"); printf(" "); printf("79"); printf(" "); printf("78"); printf(" "); printf("77"); printf(" "); printf("76"); printf(" "); printf("75"); printf(" "); printf("74"); printf(" "); printf("73"); printf(" "); printf("72"); printf(" "); printf("71"); printf(" "); printf("70"); printf(" "); printf("69"); printf(" "); printf("68"); printf(" "); printf("67"); printf(" "); printf("66"); printf(" "); printf("65"); printf(" "); printf("64"); printf(" "); printf("63"); printf(" "); printf("62"); printf(" "); printf("61"); printf(" "); printf("60"); printf(" "); printf("59"); printf(" "); printf("58"); printf(" "); printf("57"); printf(" "); printf("56"); printf(" "); printf("55"); printf(" "); printf("54"); printf(" "); printf("53"); printf(" "); printf("52"); printf(" "); printf("51"); printf(" "); printf("50"); printf(" "); printf("49"); printf(" "); printf("48"); printf(" "); printf("47"); printf(" "); printf("46"); printf(" "); printf("45"); printf(" "); printf("44"); printf(" "); printf("43"); printf(" "); printf("42"); printf(" "); printf("41"); printf(" "); printf("40"); printf(" "); printf("39"); printf(" "); printf("38"); printf(" "); printf("37"); printf(" "); printf("36"); printf(" "); printf("35"); printf(" "); printf("34"); printf(" "); printf("33"); printf(" "); printf("32"); printf(" "); printf("31"); printf(" "); printf("30"); printf(" "); printf("29"); printf(" "); printf("28"); printf(" "); printf("27"); printf(" "); printf("26"); printf(" "); printf("25"); printf(" "); printf("24"); printf(" "); printf("23"); printf(" "); printf("22"); printf(" "); printf("21"); printf(" "); printf("20"); printf(" "); printf("19"); printf(" "); printf("18"); printf(" "); printf("17"); printf(" "); printf("16"); printf(" "); printf("15"); printf(" "); printf("14"); printf(" "); printf("13"); printf(" "); printf("12"); printf(" "); printf("11"); printf(" "); printf("10"); printf(" "); printf("9"); printf(" "); printf("8"); printf(" "); printf("7"); printf(" "); printf("6"); printf(" "); printf("5"); printf(" "); printf("4"); printf(" "); printf("3"); printf(" "); printf("2"); printf(" "); printf("1"); printf(" "); return 0;
}


推荐阅读:

FreeRTOS V10.4.0更新了哪些功能?

su、sudo、sudo su、sudo -i使用和区别

百度网盘国际版 Dubox 干净好用,却与国内用户无缘


关注 微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术交流群。


长按前往图中包含的公众号关注

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

当我们谈起C语言,很多人第一印象是面向底层、面向系统的编译型语言,写出来的程序一般都是从头到尾跑一遍就结束,很少和用户交互。但实际上,C语言从诞生开始就支持交互式的程序设计,通过标准输入输出和用户实时交互,接收用户输入、...

关键字: C语言 编程

在STM32嵌入式开发中,精确延时是非常基础但又极其关键的功能。无论是驱动单总线传感器(比如DS18B20)、控制LCD屏幕时序、还是生成精确的脉冲信号,都需要用到微秒级甚至纳秒级精度的延时。很多新手刚开始使用STM32...

关键字: STM32 嵌入式

在C语言开发中,位操作符是最容易被新手忽略,却能在嵌入式开发、底层驱动、算法优化中发挥巨大作用的工具。和常规的算术操作、逻辑操作相比,位操作直接操作二进制位,执行效率更高,占用代码空间更小,能轻松实现很多用常规方法很难实...

关键字: C语言 位操作符

在C语言开发中,原生字符串的使用一直存在诸多不便。传统C语言中,字符串本质是以'\0'结尾的固定字符数组,开发人员必须提前预估字符串的最大长度:如果预估过小,拼接或插入字符时会出现缓冲区溢出,引发内存越界错误;如果预估过...

关键字: C语言 字符串

随着半导体测试向更高复杂性与并行度演进,多工位自动测试设备(ATE)和SiC/GaN测试对电感、电容和电阻(LCR)测量的需求不断提升。然而,传统的外接台式LCR仪表和基于线缆的设置难以扩展,而且会降低可重复性。本文介绍...

关键字: 半导体 电阻 嵌入式

智能高尔夫球追踪系统是一项创新的嵌入式电子项目,旨在展示如何将紧凑型物联网硬件集成到体育科技应用中。在体育领域,高尔夫球扮演着主要角色,但在现代时代,所有设备都变得更加智能化,高尔夫球也由此演变为智能高尔夫球。本项目结合...

关键字: 嵌入式 物联网 NRF无线技术

在工业自动化、智能传感、嵌入式组网等分布式总线系统中,设备自动地址分配是实现节点互联互通、即插即用的核心技术。传统人工配置地址方式存在操作繁琐、扩展性差、地址冲突风险高、维护成本高等诸多问题,已无法适配大规模、动态化的总...

关键字: 总线 嵌入式 组网

2026年6月8日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 正式宣布,首次荣获全球嵌入式应用安全连接解决方案知名供应商NXP® Semiconduc...

关键字: 物联网 移动设备 嵌入式

城市灯火通明、生活井然运转的背后,总有人在不被注意的地方,日复一日地坚持着。他们或许没有惊天动地的故事,却在漫长岁月里,用自己的方式守护着他人的生活。近日,乡村教师班爱花、爱心厨房运营者丫丫妈,以及“扛楼女工”云姐的故事...

关键字: 西门子家电 洗碗机 嵌入式

2026年5月15日,正值“世界无幽日”,一组数据再次引发公众关注:据《中国幽门螺杆菌感染防控》白皮书显示,我国幽门螺杆菌人群感染率已接近50%,涉及超过7亿人口,且家庭内传播特征极为显著——父母若感染,子女感染风险升高...

关键字: 洗碗机 AI 嵌入式
关闭