好玩的代码c语言(你见过最美的C语言代码是什么)
好玩的代码c语言(你见过最美的C语言代码是什么)想学习编程的小伙伴们可以转发 关注 私信回复:“资料”就可以拿到一份我为大家准备的C 编程学习资料(C/C 高级开发/Linux 服务器架构/ 大型互联网应用/分布式/高并发/大数据等资料)#defineoffsetof(TYPE MEMBER)((size_t)&((TYPE*)0)->MEMBER) #definecontainer_of(ptr type member)({\ consttypeof(((type*)0)->member)*__mptr=(ptr);\ (type*)((char*)__mptr-offsetof(type member));}) #definelist_entry(ptr type member)\ container_of(ptr type member) linux里面对链表的操作见到过DO_SOMETHING 只是我做例子取的一
我们都知道雷军雷布斯说过当时他写的代码像诗一样优美,那已经是三十年前的汇编时代了,那么现在你有见到过最美的c语言代码吗?
我在网上收集了一些代码,供大家赏诗,其中我本人最喜欢最后一个。
- 这是我找到最多的答案,估计是程序员想自黑还是说这个带大家步入了代码的世界。
#include<stdio.h>
intmain(void)
{
printf("Hello World");
return0;
}
- 代码的运行结果是代码本身
char*f="char*f=%c%s%c;main(){printf(f 34 f 34 10);}%c";
main()
{
printf(f 34 f 34 10);
}
编译结果如下:
- 汇编留下来的小技巧
#defineSTATE_TABLE\
ENTRY(STATE0 func0)\
ENTRY(STATE1 func1)\
ENTRY(STATE2 func2)\
...
ENTRY(STATEX funcX)\
enum
{
#defineENTRY(a b)a
STATE_TABLE
#undefENTRY
NUM_STATES
};
p_func_tjumptable[NUM_STATES]=
{
#defineENTRY(a b)b
STATE_TABLE
#undefENTRY
};
#defineENTRY(a b)staticvoidb(void);
STATE_TABLE
#undefENTRY
- 用来获取函数中的可变参数,具体用法可参加printf的源码实现
typedefchar*va_list;
#define_INTsizeof(x)((sizeof(x) sizeof(int)-1)&~(sizeof(int)-1))
#defineva_start(ap v)(ap=(va_list)&v _INTSIZEOF(v))
#defineva_arg(ap t)(*(t*)((ap =_INTSIZEOF(t))-_INTSIZEOF(t)))
#defineva_end(ap)(ap=(va_list)0)
- 这是算64位里有多少个bit是1的
constuint64_tm1=0x5555555555555555;//binary:0101...
constuint64_tm2=0x3333333333333333;//binary:00110011..
constuint64_tm4=0x0f0f0f0f0f0f0f0f;//binary:4zeros 4ones...
constuint64_tm8=0x00ff00ff00ff00ff;//binary:8zeros 8ones...
constuint64_tm16=0x0000ffff0000ffff;//binary:16zeros 16ones...
constuint64_tm32=0x00000000ffffffff;//binary:32zeros 32ones
intpopcount64a(uint64_tx)
{
x=(x&m1) ((x>>1)&m1);//putcountofeach2bitsintothose2bits
x=(x&m2) ((x>>2)&m2);//putcountofeach4bitsintothose4bits
x=(x&m4) ((x>>4)&m4);//putcountofeach8bitsintothose8bits
x=(x&m8) ((x>>8)&m8);//putcountofeach16bitsintothose16bits
x=(x&m16) ((x>>16)&m16);//putcountofeach32bitsintothose32bits
x=(x&m32) ((x>>32)&m32);//putcountofeach64bitsintothose64bits
returnx;
}
- kernel 链表 list 操作代码的一部分
linux kernel中最重要的迭代方法,很巧妙,通过一个结构体的成员指针获取结构体本身的指针,一个计算偏移,一个计算首地址,Linux内核或驱动开发常遇见。
#defineoffsetof(TYPE MEMBER)((size_t)&((TYPE*)0)->MEMBER)
#definecontainer_of(ptr type member)({\
consttypeof(((type*)0)->member)*__mptr=(ptr);\
(type*)((char*)__mptr-offsetof(type member));})
#definelist_entry(ptr type member)\
container_of(ptr type member)
- linux里面对链表的操作见到过DO_SOMETHING 只是我做例子取的一个macro名字;do_something() 并不是一行,可能是很多行,很多处理逻辑。
#defineDO_SOMETHING()do\
{\
do_something();\
}while(0)
DO_SOMETHING();
- 首届IOCCC比赛中的一个代码
由于年代久远,看不到这段代码到底有什么效果,于是写了个可以在windows下编译运行的代码。
shortmain[]={
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'
};
不用加头文件就可以编译的,这段代码主要是弹出一个消息框做演示如下
doublemain[]={
-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
};
- 也有说到菲波那契
intfibonacci(intn)
{
returnfib_iter(0 1 n);
}
intfib_iter(inta intb intn)
{
returnn?fib_iter(b a b n-1):b;
}
- 最后这个
如果感兴趣的可以继续深入编译了解一下,抛砖引玉,意在引起大家的兴趣。
如果感兴趣的可以继续深入编译了解一下,抛砖引玉,意在引起大家的兴趣。
都看到这里了,有爱好C 编程的小伙伴看过来啦:
想学习编程的小伙伴们可以转发 关注 私信回复:“资料”就可以拿到一份我为大家准备的C 编程学习资料(C/C 高级开发/Linux 服务器架构/ 大型互联网应用/分布式/高并发/大数据等资料)