首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言與 Shell 腳本混合編譯技巧:單一檔案雙重身分

     編輯:關於C語言

利用 C 前置處理器的 #if 0 區塊,可以將 Shell 腳本隱藏在 C 原始碼中,使同一檔案既能直接用 sh 執行,又能經 gcc 編譯執行。這是一種有趣的「多語言共存」技巧,雖不建議用於正式專案,但能加深對編譯流程與腳本解析的理解。

基本範例

#if 0
echo "Hello from bash!"
exit
#endif

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
    puts("Hello from C!");
    return EXIT_SUCCESS;
}

執行方式

$ sh test.sh.c
Hello from bash!

$ gcc test.sh.c -o test
$ ./test
Hello from C!

進階:自我編譯並執行

#if 0
file=$(mktemp)
gcc -o "$file" "$0"
"$file"
rm "$file"
exit
#endif

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello from C!");
    return EXIT_SUCCESS;
}

直接 sh test.sh.c 即可完成編譯、執行、清理暫存檔。

原理解析

  • Shell 視角:#if 0 只是註解,依序執行 echo/exit 或編譯指令。
  • C 編譯器視角:#if 0 ... #endif 區塊被預處理器移除,僅見合法 C 碼。

注意事項

  1. 僅供教學/娛樂,生產環境請分離建構腳本與原始碼。
  2. 依賴 #if 0 行為,跨編譯器/平台可能有差異。
  3. 複雜專案請使用 Make、CMake、Meson 等建構系統。

延伸思考

同理可構思「Python + C」、「JavaScript + C」等混合檔,核心在於利用各語言的註解/預處理機制互相隱藏對方的程式碼區塊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved