zoukankan      html  css  js  c++  java
  • "Hello,World" without main()

                                                  "Hello,World" without main()

                                                            周银辉 

    没有main函数??似乎有点夸张,那么开个小玩笑:编译并运行下面的 C 代码:

    #include <stdio.h>
    #include 
    <stdlib.h>

    #define yinhui(i,L,I,K,E,y,o,u) K##i##I##L
    #define zhou yinhui(a,n,i,m,a,i,k,e)

    int zhou()
    {
        printf(
    "hello, my CRAZY world\n");
        system(
    "PAUSE");
    }

     

    恩,运行得很好。

    哈哈,如果你现在很惊讶,那么你被骗咯。

    现在为你揭秘吧:问题在于#define 

    1,C语言中很多宏啊,如果搞忘了不妨回忆一下,比如下面的代码:

    #include <stdio.h>
    #include 
    <stdlib.h>

    #define F(a,b) (b)-(a)

    int main()
    {
        
    int i = F(2,3);

        printf(
    "%d\n", i);
        system(
    "PAUSE");

        
    return 0;
    } 

     在使用宏F(a,b) 时,F(2,3)中的2相当于宏中的a,被替换成(b)-(2), 同理3相当于b,最后被替换成(3)-(2),所以 i 的结果值为1. 

    那么相同的道理 int zhou() 将被#define zhou yinhui(a,n,i,m,a,i,k,e)这个宏替换成 int yinhui(a,n,i,m,a,i,k,e)()

    而yinhui(a,n,i,m,a,i,k,e) 则会被 #define yinhui(i,L,I,K,E,y,o,u) K##i##I##L 这个宏替换成 m##a##i##n

     然后,再有一个知识点就OK了:在宏中##(两个井号)表示符号连接,所以最后其被连接成main了, int zhou()也就成了 int main()  嗬嗬嗬,小花招 

  • 相关阅读:
    MVC身份验证及权限管理
    EasyPR--开发详解
    ASP.NET 安全认证
    将Excel导入到数据中
    ExtJS 4 树
    ExtJS 4 表单
    ExtJS 4 Grids 详解
    ExtJS 4 类系统
    第4章 类型基础 -- 4.1 所有类型都从System.Object派生
    随滚动条浮动的链接块层
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1696187.html
Copyright © 2011-2022 走看看