任何人都可以想到头文件包含自身的任何场景吗?
我在其中一个程序中看到它并且这个包含在条件编译块下,至少我找不到任何真实的条件。但是,我在想这样的场景是否有任何技术要求?
是的,如果你想赢得国际混淆C代码竞赛 。 这是一个很好的例子(源文件名为isaak.c
):
main(){} #define P define #PU ifdef #P main Si #U y #undef y #include "isaak.c" Pb #else char*K="4499999;8 9+jW*':'TZhD m:*h.4-j'9(z7Q>r*:G#FS]mATIdMZY^HaKFZZ JyJw:X49@eJj1,Z'\c^jGU@IXTF@9P2i:gAZx0pD*W3\5F4::M6A69@6I{g[Za__]NPV``aV177E4C5CG;4C
“;*++H;)*(FO=(*H+5&129)+1)= *H;F #PW sprintf( O= -132;}I/**/r(){if((N= *IO/**/O%(21 O -5)+81 O 16)==107)N+= #undef I *K++&15;*F++=N;return*K;} #undef O #PIK #PO + #UN exit(N){F=WH=S,”%5060d”)+385;while(Br(),++B,Kr())F+=(N= *B++/26-1)?(“)21[“[N]-46)*N*4-22:-3194;while(*–K!=9){while(!(*++H+5&64)); F=(40-“(206/”[((HS)%130+45)/57]<<3)+H;*F++=*H++;*F= *H==106?32:*H;Y();W WF-131,"%-3d",++Bk)+260,"%3d",V+= *C?*C:"hijpqv"[*--C]-106);Pb();}for(H=S;*H||(int)_exit(0);H+=130)write(1,1+W F+3,"%c%-73.73sn",0,H),74);} #endif #undef U #PU ifndef #include
严肃地说,头文件通常不应该尝试直接包含它自己,因为这通常只是一个坏主意(你必须使用条件编译来控制递归,并且快速变得毛茸茸)。 如果头文件间接地(通过中间头文件)包含自身,则可能是错误,因为中间头文件将无法使用原始头文件中的定义。
也就是说,在熟练的从业者手中,以及非常具体的需求,可以在预处理器中进行计算。 这种计算可能是生成编译时构造,执行手动循环展开或执行各种其他“预处理器技巧”所必需的。 在所有这些情况下,精心设计使用自包含或多包含。
需要了解更多c/c++开发分享为什么头文件可以包含自己?,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享为什么头文件可以包含自己?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979261.html