Это логический трюк.Те, кто не знают об этом, могут освоить этот трюк.
#include<stdio.h>
#include<conio.h>
#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)
void begin()
{
clrscr();
printf("\nHello !!! Kaushal Patel.");
getch();
}
Объяснение:
Директива препроцессора #define с аргументами используется для создания впечатления, что программа работает без main ().Но на самом деле он работает со скрытой функцией main ().Оператор ## называется операцией вставки токена или объединения токена.Таким образом, я могу объединить два или более символов с ним.
#define decode(s,t,u,m,p,e,d) m##s##u##t
Макрос decode(s,t,u,m,p,e,d)
расширяется как «msut» (оператор ## объединяет m, s, u & t в msut).Логика заключается в том, что когда я передаю (s, t, u, m, p, e, d) в качестве аргумента, он объединяет 4-й, 1-й, 3-й и 2-й символы.
#define begin decode(a,n,i,m,a,t,e)
Здесь препроцессор заменяет макрос «начинаются» с декодирования расширения (a, n, i, m, a, t, e).В соответствии с определением макроса в предыдущей строке аргумент должен быть расширен таким образом, чтобы 4-й, 1-й, 3-й и 2-й символы были объединены.В аргументе (a, n, i, m, a, t, e) 4-й, 1-й, 3-й и 2-й символы - «m», «a», «i» и «n».Таким образом, третья строка «void begin» заменяется на «void main» препроцессором перед передачей программы компилятору.
Источник: http://ctechnotips.blogspot.in/2012/04/writing-c-c-program-without-main.html