0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你有见到过最美的c语言代码吗?

FPGA之家 来源:技术让梦想更伟大 作者:李肖遥 2021-04-04 11:56 次阅读

我们都知道雷军雷布斯说过当时他写的代码像诗一样优美,那已经是三十年前的汇编时代了,那么现在你有见到过最美的c语言代码吗?

我在网上收集了一些代码,供大家赏诗,其中我本人最喜欢最后一个。

这是我找到最多的答案,估计是程序员想自黑还是说这个带大家步入了代码的世界。

#include《stdio.h》

int main(void)

{

printf(“Hello,World”);

return 0;

}

代码的运行结果是代码本身

char* f = “char * f = %c%s%c;main(){printf(f,34,f,34,10);}%c”;

main()

{

printf(f,34,f,34,10);

}

编译结果如下:

485e8712-8ecb-11eb-8b86-12bb97331649.png

汇编留下来的小技巧

#define STATE_TABLE

ENTRY(STATE0, func0)

ENTRY(STATE1, func1)

ENTRY(STATE2, func2)

。..

ENTRY(STATEX, funcX)

enum

{

#define ENTRY(a,b) a,

STATE_TABLE

#undef ENTRY

NUM_STATES

};

p_func_t jumptable[NUM_STATES] =

{

#define ENTRY(a,b) b,

STATE_TABLE

#undef ENTRY

};

#define ENTRY(a,b) static void b(void);

STATE_TABLE

#undef ENTRY

用来获取函数中的可变参数,具体用法可参加printf的源码实现

typedef char * va_list;

#define _INTSIZEOF(x) ((sizeof(x)+ sizeof(int)- 1) & ~(sizeof(int) - 1))

#define va_start(ap,v) ( ap= (va_list)&v+ _INTSIZEOF(v) )

#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

#define va_end(ap) ( ap = (va_list)0 )

这是算64位里有多少个bit是1的

const uint64_t m1 = 0x5555555555555555; //binary: 0101.。.

const uint64_t m2 = 0x3333333333333333; //binary: 00110011.。

const uint64_t m4 = 0x0f0f0f0f0f0f0f0f; //binary: 4 zeros, 4 ones 。..

const uint64_t m8 = 0x00ff00ff00ff00ff; //binary: 8 zeros, 8 ones 。..

const uint64_t m16 = 0x0000ffff0000ffff; //binary: 16 zeros, 16 ones 。..

const uint64_t m32 = 0x00000000ffffffff; //binary: 32 zeros, 32 ones

int popcount64a(uint64_t x)

{

x = (x & m1 ) + ((x 》》 1) & m1 ); //put count of each 2 bits into those 2 bits

x = (x & m2 ) + ((x 》》 2) & m2 ); //put count of each 4 bits into those 4 bits

x = (x & m4 ) + ((x 》》 4) & m4 ); //put count of each 8 bits into those 8 bits

x = (x & m8 ) + ((x 》》 8) & m8 ); //put count of each 16 bits into those 16 bits

x = (x & m16) + ((x 》》 16) & m16); //put count of each 32 bits into those 32 bits

x = (x & m32) + ((x 》》 32) & m32); //put count of each 64 bits into those 64 bits

return x;

}

以上代码来自www.wikipedia.org

链接:

https://en.wikipedia.org/wiki/Hamming_weight#Efficient_implementation

kernel 链表 list 操作代码的一部分

linux kernel中最重要的迭代方法,很巧妙,通过一个结构体的成员指针获取结构体本身的指针,一个计算偏移,一个计算首地址,Linux内核或驱动开发常遇见。

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)-》MEMBER)

#define container_of(ptr, type, member) ({

const typeof(((type *)0)-》member)*__mptr = (ptr);

(type *)((char *)__mptr - offsetof(type, member));})

#define list_entry(ptr, type, member)

container_of(ptr, type, member)

linux里面对链表的操作见到过DO_SOMETHING 只是我做例子取的一个macro名字;do_something() 并不是一行,可能是很多行,很多处理逻辑。

#define DO_SOMETHING() do

{

do_something();

}while(0)

DO_SOMETHING();

首届IOCCC比赛中的一个代码

由于年代久远,看不到这段代码到底有什么效果,于是写了个可以在windows下编译运行的代码。

short main[] = {

277, 04735, -4129, 25, 0, 477, 1019, 0xbef, 0, 12800,

-113, 21119, 0x52d7, -1006, -7151, 0, 0x4bc, 020004,

14880, 10541, 2056, 04010, 4548, 3044, -6716, 0x9,

4407, 6, 5568, 1, -30460, 0, 0x9, 5570, 512, -30419,

0x7e82, 0760, 6, 0, 4, 02400, 15, 0, 4, 1280, 4, 0,

4, 0, 0, 0, 0x8, 0, 4, 0, ‘,’, 0, 12, 0, 4, 0, ‘#’,

0, 020, 0, 4, 0, 30, 0, 026, 0, 0x6176, 120, 25712,

‘p’, 072163, ‘r’, 29303, 29801, ‘e’

};

不用加头文件就可以编译的,这段代码主要是弹出一个消息框做演示如下

double main[] = {

-2.4701240043063294e-255,7.0200995176637059e-269,

1.7039916353015322e-248,

2.0829486981857065e-017,3.1678173412277654e-152,

1.4561366983095816e-300,

2.8652426426650795e+161,1.1610765287701034e+200,

-1.1126115309662626e+034,

2.5955200557858144e-303,5.3745432333120549e+196,

3.2709387181673304e+228,

-7.1518888970417846e+161,-1.7905983542158763e+305,

1.0622411385586801e-321

};

也有说到菲波那契

int fibonacci( int n )

{

return fib_iter( 0, 1, n );

}

int fib_iter( int a, int b, int n )

{

return n ? fib_iter( b, a+b, n-1 ) : b;

}

最后这个

#include 《stdio.h》

int main(void)

{

//for ( ; ; );

printf(“I Love You!”);

return 0;

}

如果感兴趣的可以继续深入编译了解一下,抛砖引玉,意在引起大家的兴趣。

原文标题:你见过“最美”的C语言代码是什么?

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7599

    浏览量

    136219
  • 源代码
    +关注

    关注

    96

    文章

    2944

    浏览量

    66670

原文标题:你见过“最美”的C语言代码是什么?

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PLLATINUMSIM-SW是否相关C语言代码进行参考?

    PLLATINUMSIM-SW是否相关C语言代码进行参考,以达到对器件指标的准确评估直观显示。
    发表于 11-11 06:20

    TMS320LF240x DSP的C语言和汇编代码快速入门

    电子发烧友网站提供《TMS320LF240x DSP的C语言和汇编代码快速入门.pdf》资料免费下载
    发表于 10-18 10:14 0次下载
    TMS320LF240x DSP的<b class='flag-5'>C</b><b class='flag-5'>语言</b>和汇编<b class='flag-5'>代码</b>快速入门

    hex文件怎么能转回去c语言

    的差异。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程序进行分析,可以采取以下步骤来尽可能接近原始的C语言逻辑: 反汇编 : 使用反汇编工具(如IDA Pro、Ghidra等)将 .hex 文件中的机器码转换
    的头像 发表于 09-02 10:46 1611次阅读

    hex文件如何查看原c语言代码

    是处理器可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程
    的头像 发表于 09-02 10:37 1577次阅读

    技术干货驿站 ▏深入理解C语言:掌握常量,让代码更加稳固高效!

    C语言的世界中,常量是一种不可忽视的元素。无论是在编写简单的代码,还是构建复杂的系统,常量都能为的程序带来更高的稳定性和可靠性。在这篇
    的头像 发表于 08-29 13:59 2743次阅读
    技术干货驿站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>语言</b>:掌握常量,让<b class='flag-5'>你</b>的<b class='flag-5'>代码</b>更加稳固高效!

    按照这样学习C语言,成为卷王不是梦!

    在计算机编程领域,C语言被誉为一种强大而灵活的编程语言,掌握好C语言不仅可以让轻松驾驭各种编程
    的头像 发表于 07-06 08:04 290次阅读
    按照这样学习<b class='flag-5'>C</b><b class='flag-5'>语言</b>,成为卷王不是梦!

    如何成为一名嵌入式C语言高手?

    嵌入式C语言领域获得突出的技能和能力。 一、打下坚实的基础要成为一名嵌入式C语言高手,首先需要打下坚实的基础。掌握C
    发表于 04-07 16:03

    帮你避雷 C语言所谓的短路现象~

    C语言短路现象算是C语言的基础吧,不过有时候代码写得不规范也容易引入一些bug,所以这些操作在工程师实践中尽量少用。虽然下面找的例子比较简单
    的头像 发表于 03-27 08:09 393次阅读
    帮你避雷 <b class='flag-5'>C</b><b class='flag-5'>语言</b>所谓的短路现象~

    C语言内存泄漏问题原理

    内存泄漏问题只有在使用堆内存的时候才会出现,栈内存不存在内存泄漏问题,因为栈内存会自动分配和释放。C语言代码中堆内存的申请函数是malloc。
    发表于 03-19 11:38 488次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>内存泄漏问题原理

    plc编程语言c语言的联系 c语言和PLC什么区别

    语言,主要用于开发各种应用程序。尽管PLC编程语言C语言一些相似之处,但它们之间也存在一些明显的区别。 首先,PLC编程
    的头像 发表于 02-05 14:21 3885次阅读

    c语言,c++,java,python区别

    C语言C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言
    的头像 发表于 02-05 14:11 2244次阅读

    见到一台国外的设备,直接在labview界面里执行C文件,哪位大侠知道怎么实现的,或者什么工具包

    见到一台国外的设备,上位机用labview,在控制下位机的时候直接在计算机中加载一个TXT文件到一个文本框,文件里用的是C代码,点击运行按钮,上位机开始执行C
    发表于 01-29 10:53

    C语言哪些预处理操作?

    C语言的预处理是在编译之前对源代码进行处理的阶段,它主要由预处理器完成。预处理器是一个独立的程序,它负责对源代码进行一些文本替换和处理,生成经过预处理的
    的头像 发表于 12-08 15:40 586次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>有</b>哪些预处理操作?

    C语言代码的常用技巧

    #和##对于大部分C语言玩得还算比较溜的朋友并不是很陌生,不过能把这两个知识点游刃有余的应用到所在代码中的每个角落,似乎并没有几个人能够做到,学的时候朗朗上口,而编码的时候却抛之脑后。
    的头像 发表于 12-05 09:25 527次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>代码</b>的常用技巧

    c语言int超出范围怎么办

    当在C语言中使用int类型时,有时候会遇到超出范围的情况。int类型通常表示的是符号32位整数,范围是-2147483648到2147483647。当超出这个范围时,需要采取一些措
    的头像 发表于 11-30 11:32 3901次阅读