Use #define preprocessor directive in a weird way
Today I just finish reading and experimenting on C about how to use `#define` to create a manifest constant , after that something came into my mind , and below is the code.

    #include <stdio.h>
    #define dummy main
    #define yam {
    #define apple }

    int dummy(void)        //constant substitution main with dummy
    yam                          // constant substitution { with yam
      printf("It works!!\n");
      return 0;
    apple                           //constant substitution } with apple

<b>As expected , it works like charm , I just wonder why something like that didn't cause any error , maybe i could understand why the `main()` could be substituted because `main` is an identifier(**name given to a function , variable and constant) , but why the `{}` can be substituted with a symbolic name too??The second thing is , what data type C use to store this symbolic constant which is not a character enclosed in single quote `""` nor an integer or floating-point number.</b>


<i>Thanks for spending time reading my post , your help is much appreciated.</i>

 
Use #define preprocessor directive in a weird way
===

Today I just finish reading and experimenting on C about how to use `#define` to create a manifest constant , after that something came into my mind , and below is the code.

    #include <stdio.h>
    #define dummy main
    #define yam {
    #define apple }

    int dummy(void)        //constant substitution main with dummy
    yam                          // constant substitution { with yam
      printf("It works!!\n");
      return 0;
    apple                           //constant substitution } with apple

<b>As expected , it works like charm , I just wonder why something like that didn't cause any error , maybe i could understand why the `main()` could be substituted because `main` is an identifier(**name given to a function , variable and constant) , but why the `{}` can be substituted with a symbolic name too??The second thing is , what data type C use to store this symbolic constant which is not a character enclosed in single quote `""` nor an integer or floating-point number.</b>


<i>Thanks for spending time reading my post , your help is much appreciated.</i>

 