一行C語言關機程式碼進階之路,細節拉滿,輕鬆解讀複雜程式碼
c語言關機程式最終版
#include
你沒看錯,以上程式碼就可以實現程式關機。
知識刨析之宏操作
#define code(p,r,i,n,t,f) r##f##r##i##t##p#define xxoo code(m,s,t,o,e,y)
宏操作之##:
define NAME(i) name##iint main(){ int NMAE(1)=0; //等效 int name1=0;}
宏操作之宏替換
#define code(p,r,i,n,t,f) r##f##r##i##t##p#define xxoo code(m,s,t,o,e,y)/*code(m, s, t, o, e, y)code(p, r, i, n, t, f) //p=m ,r=s, t=i ,n=o, t=e,f=y;r##f##r##i##t##p*/
綜上程式碼: r##f##r##i##t##p 合併為 system,即 xxoo 可直接改為system
知識刨析之複合文字
//透過上述程式碼程式可以簡化為以下程式#include
複合文字 其實是C語言匿名陣列的定義,返回的是陣列首地址,如下程式:
int iArray[]={10,20}; //普通陣列 int *pArray=(int []){10,20}; //一個複合文字 返回一個數組指標
知識刨析之資料儲存
//根據複合文字,程式可簡化如下:#include
而稍微學過C語言的同學應該知道關機是指令是:system(“shutdown -a -t 60”); 故這串資料應該表示的shutdown -a -t 60,而資料儲存到計算機中都是數字,所以可以藉助vs開發工具 檢視指令儲存記憶體資料。先寫如下程式:
#include
將指令分為4個模組,進入斷點測試,開啟記憶體視窗,具體如下圖:
將滑鼠放在變數上,然後轉接到記憶體1的位址列中查詢即可:
關鍵的一步來了,點選記憶體中的資料,把資料調整為4個位元組,並且改為無符號顯示即可,如下圖:
這就是我們要的指令的整數表示法。其他指令相同操作即可,最終可得到1953851507, 1853321060, 7548192, 7613728, 3159584,當然你有興趣也可以用浮點數表示。
結束語
如果操作看不懂,可以看相關影片教程。
C語言入門到放棄之複雜程式碼解析篇,一個有趣的C語言關機程式碼
如果你基礎比較差,正好在學習C/C++,不妨關注下人人都可以學習的影片教程,通俗易懂,深入淺出,一個影片只講一個知識點。影片不深奧,不需要鑽研,在公交、在地鐵、在廁所都可以觀看,隨時隨地漲姿勢