你會用C語言寫一個沒有main函數的程序嗎!
你有沒有想過如何寫一個C程序沒有main函數嗎?沒有main函數C程序可以執行嗎?是可能做到的嗎?
好了,答案是YES!沒有main函數的C程序,這個可以有。這裡是沒有main函數的程序的源代碼:
#include
#define decode(s,t,u,m,p,e,d)m ## s
#define begin decode(a,n,i,m,a,t,e)
int begin()
想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙
上面的程序運行完全正常,即使沒有main函數。但是怎麼樣?它背後的邏輯是什麼?我們如何可以有一個C程序工作沒有主要功能。繼續閱讀,找出答案...
這裡,我們使用一個名為#define的預處理器指令,帶有參數,給人的印象是程序運行時沒有main函數。
注意:預處理器是在編譯之前處理源代碼的程序。
'##'運算符稱為token粘貼或token合併運算符。也就是說,我們可以合併兩個或多個字元。
#define decode(s,t,u,m,p,e,d)m ## s
什麼是預處理器在這裡?宏解碼(s,t,u,m,p,e,d)被擴展為「must」(##運算符將m,s,u和t合併為musy)。邏輯是,當你通過(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)替換宏「begin」。根據上一行中的宏定義,必須擴展參數,以便必須合併第4,第1,第3和第2個字元。在參數(a,n,i,m,a,t,e)中,第四,第一,第三和第二字元是'm','a','i'和'n'。
因此,在將程序傳遞給編譯器之前,第三行「int begin」由預處理器替換為「int main」。而已。
實際上,不可能存在沒有主函數的C程序。在這裡,我們只是玩一個障眼法,使我們相信程序運行沒有main函數,但實際上是在程序里隱藏了一個main函數。
想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙
※帶你走進C語言程序的世界
※C語言模擬ATM自動櫃員機界面
※編寫xx管理系統,內有指導教程!
※C語言編程簡單加密示例
TAG:C加加 |
※沒有一個Mini bag,怎麼好意思說自己時髦?
※Angelababy竟然又雙叒「整容」了,沒有一個不說丑!
※感謝信只會寫 Thank you,沒有回復你怪誰?
※iphone X沒有Home鍵不習慣?教你一招手動找回!
※什麼?lamer還沒有這個好用!
※小夥伴們,有沒有吃過「biangbiang面」的!
※沒有這雙鞋,也就沒有了 Jordan Brand
※看了angelababy精緻的臉,才知道什麼叫做美的沒有靈魂
※G?活? 沒有這2件護膚品,超模Bella Hadid大概就不會再出國了吧!
※用iPhoneX,為什麼現在,完全沒有iPhone4那時候的風光?
※說真的,很難想像一個男孩子沒有自己的Air force 1
※沒有一雙 Dad Shoes,你還好意思出去浪?
※G?活 沒有這2件護膚品,超模Bella Hadid大概就不會再出國了吧!
※iPhone莫名其妙被扣費?一定是你沒有關掉這個開關
※iPhone X被千元國產欺負?有沒有搞錯?
※衣櫃里沒有這條連體褲,你還敢叫自己是Cool Girl嗎?
※如何讓你的代碼沒有Bug?GitHub排名第一的項目提出了一勞永逸的方法
※G活 沒有這2件護膚品,超模Bella Hadid大概就不會再出國了吧!
※為什麼Chinglish總是聽起來沒有禮貌?
※三星S9想要抄襲iPhone X的面容ID?可能性幾乎沒有,簡直痴人說夢