2011-06-02 16 views
-5

如何編寫C程序而不使用Main ...! 當我正在學習如何通過一個簡單的C文件[長度爲3行]編寫ASM文件時,我有這個疑問。 我的彙編文件我使用序言和帖子amble,在功能。如何編寫沒有'main'的C程序?

+1

看一看:[http://stackoverflow.com/questions/4113731/is-a-main-required - 用於-AC-程序](HTTP://計算器。com/questions/4113731/is-a-main-required-for-ac-program),在stackoverflow中搜索類似的主題,其中有很多 – phoxis 2011-06-02 17:42:17

回答

3

有一篇很棒的文章,並創造了可能的精靈二進制here。它有很多關於什麼是需要有可運行的操作系統的信息。

+0

另一篇類似的文章可以在[ksplice博客] //blog.ksplice.com/2010/03/libc-free-world/) – 2011-06-03 07:36:10

2

這是合乎邏輯的把戲。那些不知情的人可以學習這個技巧。

#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()來運行 。

‘ ## ‘ 運算符稱爲令牌粘貼或令牌合併運算符。那是 怎麼樣,我可以合併兩個或更多的人物。

#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 &噸到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個字符以及第2個字符。在參數(A,N,I,M,A,T,E) 第四,第一,第三&所述第二字符是‘米’,’一個’,’我’ & ‘Ñ’。

所以第三行「空隙開始」被傳遞給編譯器該程序之前被替換由「無效的主要通過」預處理器。

來源: http://ctechnotips.blogspot.in/2012/04/writing-c-c-program-without-main.html

0

這裏是你的答案: - >

#include <stdio.h> 

extern void _exit(register int); 

int _start(){ 

printf(「Hello World\n」); 

_exit(0); 

}