Как написать программу на C без 'main'? - PullRequest
0 голосов
/ 02 июня 2011

Как написать программу на C без использования Main ...! Когда я учусь писать файл ASM для простого файла C [длиной 3 строки], у меня возникает такое сомнение. В сборочном файле я использовал преамбулу и пост-амбл, в функции.

Ответы [ 3 ]

3 голосов
/ 03 октября 2012

Это логический трюк.Те, кто не знают об этом, могут освоить этот трюк.

#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

3 голосов
/ 02 июня 2011

Есть отличная статья и создание самого маленького эльфийского двоичного файла здесь В нем много информации о том, что требуется для запуска ОС.

0 голосов
/ 30 марта 2017

Вот ваш ответ: ->

#include <stdio.h>

extern void _exit(register int);

int _start(){

printf(“Hello World\n”);

_exit(0);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...