日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于 $ Super $ $ 和 $ Sub $ $ 的用法

發布時間:2024/1/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于 $ Super $ $ 和 $ Sub $ $ 的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個符號想必不少人也是在RT-Thread的KEIL MDK工程源碼中接觸到的,我也一樣。
文章中我給$這個符號間加了很多空格為了防止跟文字的語法沖突了,需留意一下,實際使用沒有空格

官方note:

Keil幫助手冊:

隨便找了塊STM32板子在MDK工程模板上測試這個符號的用法:

void $Sub$$main(void) { // extern int main(void);extern int $Super$$main(void);//初始化HALHAL_Init();//初始化系統時鐘SystemClock_Config();delay_init(80); //初始化延時函數 80M系統時鐘uart_init(115200); //初始化串口,波特率為115200printf("初始化已完成\n");//回到真正的main函數里$Super$$main(); }int main(void) {u8 len;u16 times = 0;// HAL_Init(); // SystemClock_Config(); //初始化系統時鐘為80M // delay_init(80); //初始化延時函數 80M系統時鐘 // uart_init(115200); //初始化串口,波特率為115200printf("main()\r\n");while(1){}

運行效果:

通俗一點講,實際上就相當于在main函數之前先運行了$ Sub $ $ main這個函數,并且在$ Sub $ $ main這個函數里最后一句$ Super $ $ main();又用真正的main函數整體替換這個$ Super $ $main(), $ Sub $ $ main最后成為了真的main函數(類似宏定義)。這種方法就是用于表面上看簡化了main函數的程序復雜度,但本質上沒有啥區別。

以上使用注意點:

  • void $ Sub$$main(void)和int main(void)可以不放在同一個C文件中,就算放在同一文件中也沒有先后順序之分;
  • extern int $ Super $ $ main(void);必須要有,且放在 $ Super $ $ main();調用之前,可以放在$ Sub $ $main函數里也可以放在外面。
  • $ Super $ 和和 Sub $ $基本是要成對使用
  • 需要特定編譯器才支持該符號,比如MDK
  • $ Super $ 和和 Sub $ $不只用于main函數,也可以用于其他任意函數。舉例如下:
  • extern int $Super$$Fun(void); void $Sub$$Fun(void) {printf("在Fun函數之前調用$Sub$$Fun\n");$Super$$Fun();printf("fun2\r\n"); }void Fun(void) {printf("執行Fun\r\n"); }void $Sub$$main(void) { // extern int main(void);extern int $Super$$main(void);//初始化HALHAL_Init();//初始化系統時鐘SystemClock_Config();delay_init(80); //初始化延時函數 80M系統時鐘uart_init(115200); //初始化串口,波特率為115200printf("初始化已完成\n");//回到真正的main函數里$Super$$main(); }int main(void) {u8 len;u16 times = 0;// HAL_Init(); // SystemClock_Config(); //初始化系統時鐘為80M // delay_init(80); //初始化延時函數 80M系統時鐘 // uart_init(115200); //初始化串口,波特率為115200printf("main()\r\n");Fun();while(1){}

    執行結果;

    接上:
    6. $ Super$$Fun();之后還可以寫代碼且能夠執行,因為這里相當于整體把Fun函數替換進來,執行完Fun()后接著往下執行,相當于 $ Sub $ $Fun()變成了真正的Fun()。
    7. extern int main(void);這句好像沒有什么必要。
    8. 可以用于給某個函數打補丁而不破壞原來的程序結構
    9. 暫時就這么多了

    總結

    以上是生活随笔為你收集整理的关于 $ Super $ $ 和 $ Sub $ $ 的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。