矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: stalk12

请教有没有什么资料专门汇集整理C语言或C++编程代码中的各种奇技淫巧?

[复制链接]
     
 楼主| 发表于 2023-12-25 06:48:18 | 显示全部楼层
t3486784401 发表于 2023-12-24 14:42
我先来一段,计算 y=1/sqrt(x) :

0x5f375a86
0x5f3759df
0x5f37642f
魔法数字
回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 11:26:15 | 显示全部楼层
我只看看,我不说话。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 14:56:50 | 显示全部楼层
stalk12 发表于 2023-12-25 06:39
大开眼界了。看了好半天才勉强看懂三四成。

what the fuck 那一行是精髓。

相当于大师一弹指,对面千军万马全灭那种
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-25 16:12:18 | 显示全部楼层
t3486784401 发表于 2023-12-25 14:56
what the fuck 那一行是精髓。

相当于大师一弹指,对面千军万马全灭那种

妹子能否再举一个例子,一个就行。免得我做一辈子的井底之蛙。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 17:31:43 | 显示全部楼层
本帖最后由 t3486784401 于 2023-12-25 17:33 编辑
stalk12 发表于 2023-12-25 16:12
妹子能否再举一个例子,一个就行。免得我做一辈子的井底之蛙。


那我举个 C++ 的吧,默认 LZ 知道类、运算符重载、模板类这些概念。
这段代码摘自 Arduino 官方 EEPROM 库: Arduino_EEPROM.rar (1.85 KB, 下载次数: 2)

对于 AVR 单片机,片上集成有 EEPROM 供用户存储数据。
默认在 C 代码下,需要使用 eeprom_read_byte( )、eeprom_write_byte( ) 这两个接口进行数据读写。

然 Arduino 进行了类封装的骚操作,仅靠一个头文件就重载了一堆运算符,并实现全局的 EEPROM 实例。
于是在用户代码中,甚至可以出现诸如:

   if( EEPROM[0] != EEPROM[1] )                // 判断0字节是否与1字节不同

   EEPROM[2]++;                // 第2字节数值加一

这种的高可读性代码,和 C 里边那些 eeprom_read 啥的不在一个层次。后者需要类似

   byte e0= eeprom_read_byte(0);
   byte e1= eeprom_read_byte(1);
   if( e0 != e1 )...
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-25 18:23:03 | 显示全部楼层
t3486784401 发表于 2023-12-25 17:31
那我举个 C++ 的吧,默认 LZ 知道类、运算符重载、模板类这些概念。
这段代码摘自 Arduino 官方 EEPRO ...

妹子真是见多识广、博闻强识啊。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 18:33:43 | 显示全部楼层
stalk12 发表于 2023-12-25 18:23
妹子真是见多识广、博闻强识啊。

代码多写,少抄少粘贴,就能提升很快。

刚学编程的时候,老师给的练习目标是手写(不含大段复制粘贴) 1MB 源码,大约 4万行。
后来发现差不多就是这个坎,过了以后 C/C++ 会像母语一样顺畅。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 18:44:38 | 显示全部楼层
尽可能不要用什么技巧,代码越简单明了越好。

特殊情况下不可避免地用到一些技巧的话,一定要做好注释,否则日后别说其他人,就算是自己写的都不容易懂!
回复 支持 反对

使用道具 举报

发表于 2023-12-25 19:54:11 来自手机 | 显示全部楼层
girlexplorer 发表于 2023-12-24 22:27
毛子在软件上面谈不上落后,落后不落后不知道,但至少默默无名。没听说过什么优秀的软件是毛子编的。烂大街 ...

写程序这种事美帝最牛,其余国度加起来也干不过老美。其实写程序最考验的是恒心,随便叫个软件代码量都得用万行来算。英语不能差,否则水平很难提上去。

俄罗斯人写的常规软件我只知道ABBYY Finereader,6个俄罗斯人合作了30年,主要做OCR的,全球大约7K个企业在用。再者开源的7z,一个人写的,也有20-30年历史了。游戏应该不少,但国内少见。

小强的书多年前我看过,考试用还行,真论编程只能算屎的水平,树上的例子几乎全是反面教材。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 21:43:49 | 显示全部楼层
t3486784401 发表于 2023-12-25 17:31
那我举个 C++ 的吧,默认 LZ 知道类、运算符重载、模板类这些概念。
这段代码摘自 Arduino 官方 EEPRO ...

具体要看编译后的代码是否高效,C语言写法高效,不等于二进制代码高效,有可能一条语句,编译出一堆代码
回复 支持 反对

使用道具 举报

发表于 2023-12-25 22:02:24 | 显示全部楼层
本帖最后由 girlexplorer 于 2023-12-25 22:06 编辑

一直不喜欢c语言,需要很大的学习成本,而这种学习成本是不应该需要的。据说很多学生学完c语言,仍是一知半解,特别是指针。
(basic就不需要学习成本)

原因也可以理解,那个年代,一个字节内存1美元,c语言为了节省内存、硬盘,用了很多很不直观的简写啥的,还有什么尽是缺点、毫无必要的指针。

c#取消指针,是个巨大优点。但是,语法也不得不相似c语言,c语言习惯已经形成。






回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 22:39:58 | 显示全部楼层
iffi123 发表于 2023-12-25 21:43
具体要看编译后的代码是否高效,C语言写法高效,不等于二进制代码高效,有可能一条语句,编译出一堆代码

都在单片机上用 C++ 了,还会在乎那么点代码效率么。
底层函数指针一级一级的,访问个 IO 绕多少圈才能回来。

但开发这边的确省事了,至少迭代速度感人。
一个例子就是 8266/esp32,那堆 lwip 的玩意如果纯用 C,能把新手干蒙圈。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-25 23:01:37 | 显示全部楼层
本帖最后由 iffi123 于 2023-12-25 23:43 编辑
t3486784401 发表于 2023-12-25 22:39
都在单片机上用 C++ 了,还会在乎那么点代码效率么。
底层函数指针一级一级的,访问个 IO 绕多少圈才能 ...


单片机实时控制的还是几乎是C,C++满足不了代码和效率

esp32使用的处理器Xtensa® 32-bit LX6, 官方文档称它为DPU,更擅长高层的数据处理,和我们平时接触的底层IO控制的MCU不是一个类型

开发的方式也不同,前者基本是以模块形式发售,厂家提供开发包,完成某个复杂功能,虽然有少许IO功能但数量也少,几乎没有单买cpu自己开发,而后者可以用cpu完全自由设计硬件和软件,有丰富的IO功能。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-26 00:23:28 | 显示全部楼层
iffi123 发表于 2023-12-25 23:01
单片机实时控制的还是几乎是C,C++满足不了代码和效率

esp32使用的处理器Xtensa® 32-bit LX6,  ...


比起这些资料,这位朋友用过 Arduino 下的 C++ 吗?
照这么说下去,Arduino 平台都算不上是单片机了吧?

我在 Arduino-AVR 配置下跑 C++ 就做过不少带解码+控制+显示的玩意,
需要兼顾效率的地方,打开口用 C 加速即可。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-26 08:09:35 | 显示全部楼层
t3486784401 发表于 2023-12-26 00:23
比起这些资料,这位朋友用过 Arduino 下的 C++ 吗?
照这么说下去,Arduino 平台都算不上是单片机了吧 ...


支持Arduino不一定是传统意义上的单片机,这一点都不奇怪,我是没玩过,但从隔壁论坛网友反映,基于Arduino的lcd彩屏刷图像很慢,我自己完全写过lcd彩屏的驱动,刷新帧率几乎和理论计算值一样,这点Arduino能做到吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-3 02:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表