成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

一鍵編譯+執(zhí)行c語言小Demo-創(chuàng)新互聯(lián)

文章目錄
      • 方法一
      • 方法二
      • 方法三
      • 方法四

站在用戶的角度思考問題,與客戶深入溝通,找到連云港網(wǎng)站設(shè)計與連云港網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋連云港地區(qū)。方法一

因為會經(jīng)常寫c的小demo所以也就用不上項目工程編譯工具make那么導(dǎo)致我每次修改為代碼就需要gcc demo.c -g -o demo操作,然后就想著用shell進行自動化執(zhí)行,然后雛型就出來了

c

#!/bin/bash

path=`pwd`
source_file=`ls ${path}/*.c`
gcc $source_file -o ${source_file%.*} -g
${source_file%.*}

編寫如上內(nèi)容,然后命名為c再放入到/usr/local/bin目錄下并給它可執(zhí)行權(quán)限chmod +x c,就可以在任意目錄執(zhí)行了

這里就是簡單的獲取需要執(zhí)行編譯腳本的路徑,然后進行一個編譯+運行操作

$ ls;cat demo.c                                                 [~/tmp]
demo.c
#includeint main(){printf("hi\n");
   return 0;
}

然后執(zhí)行c那么就可以直接看到結(jié)果了

$ c                                                             [~/tmp]
hi
$ ls                                                            [~/tmp]
demo*      demo.c     demo.dSYM/

很顯然這只是一個簡單的功能實現(xiàn)雛型,為了將它工具化就需要對不同的使用場景和使用功能考慮,上述的問題有:

  1. 當(dāng)源代碼的路徑時存在一個目錄和源代碼同名字時
  2. 當(dāng)源代碼的路徑存在多個.c文件時
  3. 當(dāng)源代碼是c++
  4. 當(dāng)編譯需要多個參數(shù)時

然后完善上面的問題后的腳本為

#!/bin/bash
path=`pwd`
build_type="$1"

if [ "$build_type" == "++" ];then
	c="g++";	file=`ls ${path}/*.cpp`;	shift
else
	c="gcc";	file=`ls ${path}/*.c` ;fi

main(){find_source_file
	build $*
}

find_source_file(){source_file=$(echo $file | awk '{print $1}')
	multi_file=$(echo $file | awk '{print $2}')
	if [ -z "$source_file" ];then	echo -e "\033[31mCouldn't find format $c source file\033[0m";exit ;fi
	if [ ! -z "$multi_file" ];then	echo -e "\033[31mMultiple files checked~\033[0m";	echo -e "\033[31mThe $source_file file will be used\033[0m" ;fi
}

build(){$c $source_file -o ${source_file%.*} -g $*
	${source_file%.*}
}

main $*

那么就來玩玩。c\cpp源代碼如下:

$ cat demo.c demo.cpp                                                                                                               [/t/d/demo]
#includeint main(){printf("c\n");
   return 0;
}
#includeint main(){printf("cpp!\n");
   return 0;
}

測試

$ ls                                                                                                                                [/t/d/demo]
demo.c     demo.cpp   demo.dSYM/
$ c                                                                                                                                 [/t/d/demo]
c
$ c ++                                                                                                                              [/t/d/demo]
cpp!

當(dāng)前目錄存在多個源代碼時

$ ls                                                                                                                                [/t/d/demo]
demo*       demo.c      demo.cpp    demo.dSYM/  democc.c    democc.cpp
$ c                                                                                                                                 [/t/d/demo]
Multiple files checked~
The /tmp/demo/demo/demo.c file will be used
c
$ c ++                                                                                                                              [/t/d/demo]
Multiple files checked~
The /tmp/demo/demo/demo.cpp file will be used
cpp!

為了方便大家搭建使用,可以執(zhí)行下面代碼一鍵搭建完成

echo "IyEvYmluL2Jhc2gKcGF0aD1gcHdkYApidWlsZF90eXBlPSIkMSIKCmlmIFsgIiRidWlsZF90eXBlIiA9PSAiKysiIF07dGhlbgoJYz0iZysrIjsJZmlsZT1gbHMgJHtwYXRofS8qLmNwcGA7CXNoaWZ0CmVsc2UKCWM9ImdjYyI7CWZpbGU9YGxzICR7cGF0aH0vKi5jYCA7ZmkKCm1haW4oKXsKCWZpbmRfc291cmNlX2ZpbGUKCWJ1aWxkICQqCn0KCmZpbmRfc291cmNlX2ZpbGUoKXsKCXNvdXJjZV9maWxlPSQoZWNobyAkZmlsZSB8IGF3ayAne3ByaW50ICQxfScpCgltdWx0aV9maWxlPSQoZWNobyAkZmlsZSB8IGF3ayAne3ByaW50ICQyfScpCglpZiBbIC16ICIkc291cmNlX2ZpbGUiIF07dGhlbgllY2hvIC1lICJcMDMzWzMxbUNvdWxkbid0IGZpbmQgZm9ybWF0ICRjIHNvdXJjZSBmaWxlXDAzM1swbSI7ZXhpdCA7ZmkKCWlmIFsgISAteiAiJG11bHRpX2ZpbGUiIF07dGhlbgllY2hvIC1lICJcMDMzWzMxbU11bHRpcGxlIGZpbGVzIGNoZWNrZWR+XDAzM1swbSI7CWVjaG8gLWUgIlwwMzNbMzFtVGhlICRzb3VyY2VfZmlsZSBmaWxlIHdpbGwgYmUgdXNlZFwwMzNbMG0iIDtmaQp9CgpidWlsZCgpewoJJGMgJHNvdXJjZV9maWxlIC1vICR7c291cmNlX2ZpbGUlLip9IC1nICQqCgkke3NvdXJjZV9maWxlJS4qfQp9CgptYWluICQqCg==" | base64 -d >/usr/local/bin/c && chmod a+x /usr/local/bin/c
方法二

后來我看到了這篇文章https://zhuanlan.zhihu.com/p/143231248 這種設(shè)計就是運用了我上面所說的沒有指定Shebang字符頭那么就會默認交給sh解釋器執(zhí)行,作者說了其實就是在c源代碼里面執(zhí)行shell語法進行編譯自身,但同時不能被c編譯器給發(fā)現(xiàn)錯誤

這里發(fā)現(xiàn)作者的代碼有點小錯誤,只需要把"./$proName" 改成->“$proName就可以了”

簡單改寫如下:demo.c

#if 0
pro=${0%.*} && gcc $0 -o $pro $@ && $pro && exit
#endif

#includeint main(){printf("c\n");
   return 0;
}

首先你必須給demo.c執(zhí)行權(quán)限然后直接執(zhí)行./demo.c,因為沒有指定Shebang字符頭所以會默認將demp.c交給sh解釋器執(zhí)行語句,當(dāng)sh解釋器遇到#時會將它視為單行注釋,然后會正常的執(zhí)行編碼命令。直到exit后退出執(zhí)行

而因為#if #endif在c編譯器里面也是一個合法的注視命令,所以c編譯器會過濾掉文件頭部一塊,從而編譯成功

這種方法也不錯,但是需要每次都添加上述的一個頭部shell代碼,如果你是一個vim用戶那么你可以直接在init.vim中添加上述的頭部shell代碼到你的c\c++模版中

 if &filetype == 'cpp'
          call setline(1, "#if 0")
          call setline(2, "pro=${0%.*} && gcc $0 -o $pro $@ && $pro && exit")
          call setline(3, "#endif")
          call setline(4, "")
          call setline(5, "#include")
          call setline(6, "")
          call setline(7, "int main(){")
          call setline(8, "")
          call setline(9, "   printf(\"\\n\");")
          call setline(10, "   return 0;")
          call setline(11, "}")
      endif
      if &filetype == 'c'
    	...
      endif
方法三

可以在vim里面添加一個函數(shù),也就是一鍵執(zhí)行編譯,這里網(wǎng)上一把大就不說了

方法四

還有一種就是使用tcc,我不想額外的搭建環(huán)境,所以大家自行探索

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文名稱:一鍵編譯+執(zhí)行c語言小Demo-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://jinyejixie.com/article48/dphihp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序標簽優(yōu)化、網(wǎng)頁設(shè)計公司、建站公司網(wǎng)站導(dǎo)航、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
天津市| 嵊泗县| 连南| 霍邱县| 江达县| 天长市| 水城县| 德令哈市| 郓城县| 信宜市| 仁寿县| 庆云县| 龙游县| 永和县| 静海县| 柏乡县| 石城县| 岱山县| 台中县| 松江区| 石阡县| 承德县| 昌都县| 青冈县| 茂名市| 康定县| 定边县| 伊金霍洛旗| 平远县| 桓仁| 宝清县| 杨浦区| 尉氏县| 佳木斯市| 武汉市| 沅江市| 遂川县| 荆州市| 兴安盟| 华蓥市| 朝阳市|