乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C語言核心技術(shù)-C語言概述與開發(fā)環(huán)境搭建

       山峰云繞 2019-10-28

      C語言概述

      C語言發(fā)展簡史

      • 起源

      https://m./group/6752677559860724227/?app=news_article&timestamp=1572252620&req_id=201910281650200100260760263304B4D7&group_id=6752677559860724227

      1972年,貝爾實(shí)驗(yàn)室的Dennis Ritchie和Ken Thompson在開發(fā)Unix操作系統(tǒng)時設(shè)計了C語言,該操作系統(tǒng)的90%以上的代碼都是由C語言實(shí)現(xiàn),后期的Linux,macOS,Android,IOS都是基于Unix發(fā)展而來的。

      • 標(biāo)準(zhǔn)

      1987年Dennis Ritchie和Brian Kernighan編寫了The C Programming Language第一版是公認(rèn)的C標(biāo)準(zhǔn)實(shí)現(xiàn),而沒有定義C庫。

      而后期ANSI/ISO先后于1990年、1999年和2011年發(fā)布了C90標(biāo)準(zhǔn)、C99標(biāo)準(zhǔn)和C11標(biāo)準(zhǔn),該標(biāo)準(zhǔn)定義了C語言和C標(biāo)準(zhǔn)庫。

      C語言特性

      C語言作為面向過程的高級程序設(shè)計語言,能夠輕松的實(shí)現(xiàn)自頂向下的規(guī)劃、結(jié)構(gòu)化編程和模塊化設(shè)計,這樣使得程序結(jié)構(gòu)更加簡潔,可擴(kuò)展性強(qiáng)以及更加容易維護(hù)。

      而且C語言有著高效(執(zhí)行速度快)、功能強(qiáng)大(嵌套匯編)以及可移植性(標(biāo)準(zhǔn)庫可移植)、功能強(qiáng)大等優(yōu)點(diǎn),而且也存在著對系統(tǒng)平臺庫依賴嚴(yán)重,由于編程風(fēng)格自由,經(jīng)驗(yàn)不足也會容易導(dǎo)致出錯,編寫代碼實(shí)現(xiàn)周期長,同樣的代碼在不同的操作系統(tǒng)(或者編譯器)下可能會有不同的表現(xiàn)等缺點(diǎn)。

      C語言應(yīng)用場景

      C語言偏向硬件驅(qū)動、操作系統(tǒng)、底層應(yīng)用(數(shù)據(jù)庫、編譯器)、嵌入式應(yīng)用開發(fā)、游戲引擎等應(yīng)用場景。

      硬件驅(qū)動的絕大部分實(shí)現(xiàn)是由C語言和匯編語言實(shí)現(xiàn)的。

      主流操作系統(tǒng)(Unix,Linux,macOS,Windows,Android,iOS)的底層實(shí)現(xiàn)都是由C語言和部分匯編實(shí)現(xiàn)的。

      C++,Java,Python,Swift的編譯器或者解釋器都是由C語言實(shí)現(xiàn)的。

      Git,Nginx,Redis,MySQL,Apache,Linux Kernel都是使用C語言實(shí)現(xiàn)的,而且都是開放源代碼的,大部分代碼可以在GitHub中獲取到,可以通過閱讀源碼提升自己的設(shè)計和編碼能力。

      使用Visual Studio Code+gcc 開發(fā)C程序

      Visual Studio Code下載與安裝

      HelloWorld是學(xué)習(xí)一門編程語言的入門程序,如果你能獨(dú)立編寫并運(yùn)行HelloWorld,那么就意味著邁入了編程的大門了。

      Visual Studio Code是微軟推出的一款開源、跨平臺(Windows,Ubuntu,macOS)的編輯器,這里使用它來編寫C語言的源代碼,當(dāng)然除了編寫C代碼之外,還可以用來編寫C++,Java,Python,Go,JavaScript,PHP程序等等。

      為什么首先要使用Visual Studio Code來編寫第一個C程序呢,因?yàn)閂isual Studio Code只是一個編輯器,用于編寫源碼,并不提供編譯或者解釋運(yùn)行程序的功能。

      通過它來對比之前介紹的IDE,體驗(yàn)下使用IDE開發(fā)程序帶來的好處,也有利于理解IDE背后的相關(guān)機(jī)制。

      在使用Visual Studio Code之前首先去官網(wǎng)下載

      然后傻瓜一鍵式安裝,安裝完成以后啟動Visual Studio Code會看到啟動界面。

      關(guān)于Visual Studio Code的詳細(xì)使用可以參考官方提供的文檔。

      使用Visual Studio編輯源文件

      1.在系統(tǒng)的D盤下創(chuàng)建目錄vs_code\c用于存放C語言的源程序(即C代碼)

      2.在Visual Studio Code中將D:\vs_code\c目錄添加到工作區(qū)的文件夾

      選擇D:\vs_code\c文件夾作為Visual Studio開發(fā)C程序的工作區(qū)

      3.在工作區(qū)D:\vs_code\c目錄下創(chuàng)建源文件helloworld.c,C語言的源文件都是以.c結(jié)尾的,并編寫以下內(nèi)容

      #include <stdio.h>int main(int argc, char *argv[]){ printf('Windows10 1903 & Visual Studio Code Hello World With C \n'); return 0;}

      helloworld.c

      gcc安裝與配置

      當(dāng)源文件編輯好完成以后,需要安裝和配置gcc,因?yàn)閂isual Studio Code并沒有提供編譯C程序的功能。

      如果你之前已經(jīng)下載安裝過Qt,那么恭喜不用額外安裝gcc,因?yàn)镼t已經(jīng)集成了編譯器。

      只需要將gcc在Qt的bin目錄: C:\Qt\Qt5.13.0\Tools\mingw730_64\bin 添加至PATH環(huán)境變量即可。

      當(dāng)在終端上執(zhí)行g(shù)cc命令時系統(tǒng)會從該目錄尋找gcc對應(yīng)的可執(zhí)行程序gcc.exe。

      當(dāng)gcc的PATH環(huán)境變量配置成功之后,便可以打開命令提示符(即終端),輸入gcc -v便可查看gcc版本信息

      1. 編譯源文件

      2. 在源文件helloworld.c所在的目錄地址欄(例如D:\vs_code\c)輸入cmd并回車即可打開終端,此時終端的路徑正好是在D:\vs_code\c,然后使用gcc helloworld.c 編譯源文件,Windows上gcc默認(rèn)會編譯生成可執(zhí)行文件a.exe,Linux下gcc默認(rèn)會編譯生成a.out。

      然后在終端上運(yùn)行a.exe,程序會將字符串Windows10 1903 & Visual Studio Code Hello World With C輸出到終端上。

      如果想要改變編譯生成的可執(zhí)行文件名稱,使用gcc時可以使用-o選項(xiàng)實(shí)現(xiàn)

      理解gcc編譯過程

      剛才在使用gcc編譯helloworld時一次性編譯鏈接生成了可執(zhí)行文件(例如helloworld.exe),而實(shí)際上gcc在編譯程序時要經(jīng)歷預(yù)處理、編譯、匯編、鏈接四個步驟,每個步驟gcc都提供了對應(yīng)的選項(xiàng)(鏈接除外),并且每個步驟生成的文件后綴名也是不一樣的。

      這里編寫源文件gcc_compile_option.c,用于測試gcc的各個編譯選項(xiàng),如果想要查看gcc命令的所有選項(xiàng),可以使用gcc --help查看所有選項(xiàng)及其說明

      #include <stdio.h> #define PI 3.141592 //宏定義int main(int argc, char *argv[]){ printf('PI = %f \n',PI); return 0;}
      • 預(yù)處理

      預(yù)處理主要是頭文件包含、宏替換以及條件編譯,預(yù)處理階段不會做語法檢查。

      預(yù)處理生成的文件后綴名通常是.i,而對應(yīng)的gcc選項(xiàng)是-E。

      gcc預(yù)處理命令案例

      gcc -E gcc_compile_option.c -o gcc_compile_option.i

      這里預(yù)編譯會將頭文件stdio.h的內(nèi)容復(fù)制到gcc_compile_option.i頭文件中,并且將使用#define PI 3.141592的宏進(jìn)行替換,因此最后運(yùn)行程序時會看到終端上輸出PI =3.141592

      • 編譯

      編譯是將預(yù)處理完成的文件編譯成匯編文件。

      編譯生成的文件后綴名通常是.s,而對應(yīng)的gcc選項(xiàng)是-S。

      gcc編譯案例

      gcc -S gcc_compile_option.i -o gcc_compile_option.s
      • 匯編

      匯編是將匯編文件生成對應(yīng)的二進(jìn)制文件。

      匯編生成的文件后綴名通常是.o,而對應(yīng)的gcc選項(xiàng)是-c。

      gcc匯編案例

      gcc -c gcc_compile_option.c -o gcc_compile_option.o
      • 鏈接

      將各個二進(jìn)制文件加上庫函數(shù)、啟動代碼鏈接生成可執(zhí)行文件。

      鏈接沒有特定的gcc選項(xiàng),windows上的可執(zhí)行文件名為.exe,linux上可執(zhí)行文件后綴名為.out。

      gcc 鏈接案例

       gcc gcc_compile_option.o -o gcc_compile_option.exe

      gcc 預(yù)處理、編譯、匯編、鏈接、運(yùn)行

      C語言集成開發(fā)環(huán)境搭建

      目前主流的操作系統(tǒng)(Windows,Linux,macOS)都有完善的C語言集成開發(fā)環(huán)境,用于編輯、編譯、調(diào)試、打包部署C程序。

      C語言集成開發(fā)環(huán)境

      Windows作為世界上最流行的桌面操作系統(tǒng),當(dāng)前最新版本為Windows10 1903,VisualStudio作為Windows上最強(qiáng)大的集成開發(fā)環(huán)境,可以開發(fā)Windows軟件,游戲,Web應(yīng)用等等,最新版本為VisualStudio2019 16.2.2。

      Visual Studio 2019啟動界面

      Ubuntu作為最受歡迎的桌面版Linux系統(tǒng)之一,推薦采用跨平臺的集成開發(fā)環(huán)境Qt來編寫C/C程序。

      QT Creator

      macOS平臺推薦使用XCode來編寫C/C程序,而且XCode在macOS系統(tǒng)上是自帶的,無需額外安裝。

      XCode

      除此以外還有些跨平臺的C/C++ 開發(fā)工具,例如來自Jetbrains公司的CLion也可以用來編寫C/C++程序。

      CLion

      關(guān)于IDE的安裝以及使用,它們的官網(wǎng)都提供了詳細(xì)的教程,同學(xué)們可以自行去查閱。

      C語言學(xué)習(xí)過程中會使用Windows10 1903+Visual Studio 2019作為主力開發(fā)環(huán)境,如果沒有特別的說明,默認(rèn)的環(huán)境就是Windows10 1903和Visual Studio 2019。

      使用Visual Studio 2019開發(fā)C程序

      1. 創(chuàng)建新項(xiàng)目

      2.選擇基于C++的空項(xiàng)目

      3.配置新項(xiàng)目

      設(shè)置項(xiàng)目名稱為c-core-foundational,

      項(xiàng)目路徑位于d:workspace\c\visualstudio2019,

      解決方案名稱為c-core。

      Visual Studio 2019中一個解決方案會有多個項(xiàng)目。

      配置新項(xiàng)目

      項(xiàng)目概覽

      4. 創(chuàng)建篩選器

      篩選器用于存放不同階段的代碼,在項(xiàng)目的源文件下創(chuàng)建篩選器net/ittimeline/c/foundational/object

      5.編寫helloworld

      首先選中篩選器net/ittimline/c/foundational/object

      然后選擇基于C++文件,創(chuàng)建源文件helloworld.c

      然后編輯源文件

      #include <stdio.h>int main(int argc, char *argv[]) { printf('Windows10 1903 & Visual Studio 2019 Hello World With C \n'); return 0;}

      6.gcc編譯運(yùn)行helloworld.c

      首先選擇項(xiàng)目c-core-foundational,然后鼠標(biāo)右鍵選中在文件資源管理器打開。

      此時會打開文件資源管理器,并且路徑是D:\workspace\c\visualstuido2019\c-core\c-core-foundational

      在文件資源管理器的地址欄輸入cmd,然后使用gcc編譯、運(yùn)行程序

      helloworld詳解

      hello world說明

      #include <stdio.h> #include <stdlib.h>int main(int argc, char *argv[]) { printf('Windows10 1903 & Visual Studio 2019 Hello World With C \n');  system('pause'); return 0;}

      此段程序是調(diào)用了跨平臺的輸入輸出函數(shù)實(shí)現(xiàn)在控制臺輸出Windows10 1903 & Visual Studio 2019 Hello World With C 并換行,然后等待用戶輸入任意鍵(通常習(xí)慣按回車鍵)后程序退出。

      雖然該程序十分簡單,但是是C語言中能夠運(yùn)行的最小程序。后面編寫的程序都是在該基礎(chǔ)之上擴(kuò)展的。

      #include <stdio.h>詳解

      C語言中以#開頭的表示編譯時預(yù)處理階段需要處理的。

      因?yàn)樵趍ain函數(shù)中使用了printf函數(shù),但是該函數(shù)的聲明是在標(biāo)準(zhǔn)輸入輸出文件stdio.h頭文件中。因此需要使用#include <stdio.h>將其包含在源文件helloworld.c中,該文件位于系統(tǒng)目錄 C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h

      而該函數(shù)的實(shí)現(xiàn)在系統(tǒng)庫文件中。

      如果想要查看程序依賴了哪些庫文件,Ubuntu下可以使用ldd命令查看

      std表示跨平臺的,所有以std開頭的頭文件中聲明的函數(shù)都是可以跨平臺(windows,linux,macOS)使用。

      stdio表示標(biāo)準(zhǔn)輸入輸出,printf函數(shù)就是用于輸出,可以將''包含的內(nèi)容數(shù)據(jù)輸出到控制臺,文件甚至是網(wǎng)頁。而輸入函數(shù)有scanf,用于讀取鍵盤的輸入,實(shí)現(xiàn)程序的交互。該函數(shù)后期再介紹詳細(xì)使用。

      如果想要在Visual Studio中查看系統(tǒng)提供的函數(shù)的定義,可以選中函數(shù),然后按快捷鍵F12便可查看,而返回可以使用Ctrl+-實(shí)現(xiàn)。

      為了深入理解#include的作用,這里編寫一段程序。

      首先在c-core-foundational的頭文件創(chuàng)建和源文件一樣目錄的篩選器net\ittimeline\c\core\foundational\object

      然后定義頭文件include.h

      然后將之前編寫的源文件helloworld.c的內(nèi)容復(fù)制到include.h頭文件中

      并在源文件的net\ittimeline\c\core\foundational\object\目錄下創(chuàng)建源文件include.c,該源文件中只需要使用#include <include.h>包含之前編寫的頭文件即可。

      然后運(yùn)行程序,如果發(fā)現(xiàn)如下錯誤

      1>include.obj : error LNK2005: _main 已經(jīng)在 helloworld.obj 中定義

      是因?yàn)樵赩isual Studio 中,解決方案的一個項(xiàng)目只能有一個main函數(shù),如果包含了多個源文件,把其他源文件的main函數(shù)重命名成其他函數(shù)即可。

      然后再次運(yùn)行程序,程序結(jié)果和之前的helloworld運(yùn)行結(jié)果是一樣的。

      main函數(shù)

      main函數(shù)是c/c++/java程序的入口函數(shù),有且只能有一個,當(dāng)程序執(zhí)行時系統(tǒng)會自動調(diào)用唯一的main函數(shù),程序從main函數(shù)開始執(zhí)行。如果程序中編寫了其他的函數(shù),其他的函數(shù)應(yīng)該被main函數(shù)調(diào)用才會得到執(zhí)行。

      例如定義一個返回兩個整數(shù)相加的函數(shù)add,然后想要執(zhí)行該函數(shù),則必須在main函數(shù)調(diào)用。

      #include <stdio.h>#include <stdlib.h>//自定義函數(shù),返回兩個整數(shù)相加的結(jié)果int add(int left,int right) { return left + right;}int main(int argc, char* argv[]){ int left = 10; int right = 20; //調(diào)用add函數(shù),并定義變量保存結(jié)果 int result =add(left,right); printf('%d + %d = %d',left,right,result); system('pause'); return 0;}

      main函數(shù)左邊的的int表示函數(shù)的返回類型為整數(shù)

      main函數(shù)右邊的()表示函數(shù)的參數(shù),通過傳遞參數(shù),將外部數(shù)據(jù)傳入函數(shù)內(nèi)部處理。

      {}表示函數(shù)的函數(shù)體,函數(shù)具體做什么事情,都寫在{}內(nèi),{}是成對出現(xiàn)的。

      main函數(shù)中的 printf('Windows10 1903 & Visual Studio 2019 Hello World With C \n');表示將Windows10 1903 & Visual Studio 2019 Hello World With C輸出到控制臺,\n表示換行。而;表示語句結(jié)束,C語言中的每條語句都要使用;表示結(jié)束,否則程序會編譯錯誤。

      return 0 表示返回給系統(tǒng)0,并結(jié)束main函數(shù),0表示main函數(shù)正常退出。

      return之后的代碼都不會執(zhí)行。

      #include <stdio.h>#include <stdlib.h>int main(int argc, char* argv[]){ printf('Windows10 1903 & Visual Studio 2019 Hello World With C \n'); system('pause'); return 0; printf('Windows10 1903 & Visual Studio 2019 Hello World With C again \n');}

      運(yùn)行上面的程序,Windows10 1903 & Visual Studio 2019 Hello World With C again不會得到輸出。

      注釋

      注釋是用于描述程序的功能,為了便于程序后期的維護(hù),在開發(fā)過程中應(yīng)該添加適量的注釋,編譯器在預(yù)編譯時會刪除注釋,所以注釋的內(nèi)容不會影響程序的結(jié)果。

      C語言中支持的注釋包含單行注釋(//)和多行注釋(/**/)兩種,單行注釋顧名思義就是注釋一行,多行注釋可以注釋多行,需要注意的是多行注釋不能夠嵌套使用,否則會發(fā)生編譯錯誤。

      增加單行注釋和多行注釋后的helloworld程序

      #include <stdio.h> #include <stdlib.h>/* main函數(shù)左邊的int是函數(shù)的返回值,右邊()的內(nèi)容表示函數(shù)的參數(shù),外部數(shù)據(jù)通過函數(shù)的參數(shù)傳遞到函數(shù)的內(nèi)部處理。 {}表示函數(shù)的函數(shù)體,也就是函數(shù)執(zhí)行的所有內(nèi)容都包含在{}中,它是成對出現(xiàn)的。 @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version 2019/10/17*/int main(int argc, char* argv[]) { //	printf函數(shù)是系統(tǒng)自帶的函數(shù),用于將''包含的字符串按照指定的格式輸出到終端,終端可以是控制臺、網(wǎng)頁或者是文件,目前是輸出到控制臺。 printf('Windows10 1903 & Visual Studio 2019 Hello World With C \n'); //等待輸入任意內(nèi)容退出程序 system('pause'); return 0;}

      Windows常用命令

      Windows命令概述

      主流的操作系統(tǒng)(Windows,Linux(Ubuntu),MacOS)及大多數(shù)應(yīng)用程序都提供了基于命令行和圖形化界面兩種交互方式,而移動端是采用手勢觸控、語音等進(jìn)行交互。作為普通用戶來講,圖形化界面容易上手,而且交互效果更加直觀。

      但是作為一個程序員來講,應(yīng)該去熟悉各個操作系統(tǒng)的命令行的使用,因?yàn)槊钚邢鄬D形化界面而言,絕大多數(shù)場景下使用更加高效。而且圖形化界面本質(zhì)是對命令行的封裝,能用圖形化界面實(shí)現(xiàn)的基本都可以采用命令行實(shí)現(xiàn)。而且在服務(wù)器端(CentOS,RedHat)基本上是不會安裝圖形界面。

      Windows下想要使用命令,必須首先啟動控制臺。

      Windows系統(tǒng)可以使用快捷鍵Windows+r調(diào)出運(yùn)行

      后輸入cmd,便可以進(jìn)入Windows下的命令行終端

      Windows常用命令

      在啟動Windows的終端(也稱為控制臺)之后,便可以運(yùn)行命令了。如果你使用Windows作為開發(fā)平臺,如下的命令你也許會經(jīng)常使用到。

      命令名稱 功能描述dir 列出當(dāng)前目錄列表cd 切換目錄(只能在根盤符(例如C盤)內(nèi)切換),cd /切換到磁盤的根目錄md 創(chuàng)建目錄rd 刪除空目錄del 刪除文件type 顯示文本文件內(nèi)容echo 輸出文本內(nèi)容 例如echo %path% 查看系統(tǒng)環(huán)境變量ping 檢測網(wǎng)絡(luò),例如ping baidu.comnotepad 記事本calc 計算器mspaint 畫圖explore 文件資源管理器cleanmgr 磁盤清理desk.cpl 分辨率設(shè)置powercfg.cpl 電源設(shè)置regedit 注冊表編輯器msconfig 系統(tǒng)配置mstsc 遠(yuǎn)程連接firewall.cpl 防火墻appwiz.cpl 添加或修改程序tasklist 查看進(jìn)程列表taskkill /f /im process-name.exe 關(guān)閉指定進(jìn)程netstat -ano|findstr 'port' 查看端口占用msinfo 系統(tǒng)信息sticky notes 便簽ipconfig 查看ipwinver 查看windows版本cls 清除屏幕內(nèi)容exit 退出終端

      在終端上使用命令時還有些快捷鍵,例如Tab可以補(bǔ)全路徑,上下鍵可以切換之前輸入的命令。*實(shí)現(xiàn)模糊匹配操作,例如 del *.txt就可以刪除 指定目錄的所有文本文件。

      如果想要獲取更多的windows命令信息,可以在終端上輸入help回車后會顯示每個命令的名稱以及功能說明。

      system函數(shù)的使用

      system函數(shù)用于C程序中調(diào)用各大操作系統(tǒng)的命令和應(yīng)用程序,被調(diào)用的命令和應(yīng)用程序以字符串的方式作為system函數(shù)的參數(shù)傳入,實(shí)現(xiàn)讀取用戶輸入的命令,并執(zhí)行該命令。

      在windows上運(yùn)行該程序時可以傳入notepad,calc等等實(shí)現(xiàn)程序調(diào)用。

      而Linux和macOS上也有自己的命令可以提供給system函數(shù)來調(diào)用。

      這里編寫一個交互式程序:通過借助C語言的scanf函數(shù)讀取用戶在終端的命令,然后調(diào)用system函數(shù)來執(zhí)行對應(yīng)的命令。

      如果你的開發(fā)環(huán)境不是Windows10 1903和Visual Studio 2019,可以刪除#define _CRT_SECURE_NO_WARNINGS。

      #define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>/* 使用system函數(shù)調(diào)用各大操作系統(tǒng)的命令		 @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version 2019/10/17*/int main(int argc, char* argv[]){ // 提示用戶輸入執(zhí)行的命令 printf('請輸入需要執(zhí)行的命令\n'); //定義字符串保存用戶輸入命令 char command[100] = {0}; //讀取用戶從鍵盤輸入的命令字符串,并保存到command中 scanf('%s',command); //執(zhí)行命令 system(command); system('pause'); return 0;}

      因?yàn)閟ystem函數(shù)位于stdlib.h頭文件中,意味著它是一個可以跨平臺使用的函數(shù)。

      例如在Ubuntu下使用gedit命令調(diào)用文本編輯器

      但是各大操作系統(tǒng)的命令和應(yīng)用程序是不相同的,例如在Windows上使用system函數(shù)傳遞字符串參數(shù)'notepad'時可以打開記事本,而移植到了類Unix上則無法調(diào)用記事本。

      system函數(shù)阻止vs閃退

      在Visual Studio 2019中運(yùn)行程序可以通過快捷鍵F5直接運(yùn)行,也可以通過點(diǎn)擊本地Windows調(diào)試器運(yùn)行。

      但是發(fā)現(xiàn)在運(yùn)行helloworld后程序有閃退現(xiàn)象,即程序運(yùn)行時打開了終端后立即退出,其原因是程序運(yùn)行是printf函數(shù)默認(rèn)輸出數(shù)據(jù)到終端,因此Visual Studio 2019開啟了終端,printf輸出數(shù)據(jù)完成以后,程序遇到return語句并退出,因此終端也會隨之退出,因?yàn)閺棾鼋K端和退終端的時間非常短,所有感覺有閃退現(xiàn)象。

      為了解決這一問題,首先需要在源文件使用#include <stdlib.h>包含標(biāo)準(zhǔn)庫頭文件,然后在main函數(shù)的最后一行加上system('pause'),這樣程序運(yùn)行時不會立即退出,而是等到用戶輸入任意鍵(一般習(xí)慣按回車鍵)才會退出。

      解決 helloworld在Visual Studio 2019運(yùn)行的閃退問題

      #include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]) { printf('Windows10 1903 & Visual Studio 2019 Hello World With C \n'); system('pause'); return 0;}

      再次運(yùn)行程序時,在程序的末尾會輸出一句請按任意鍵繼續(xù)...

      Visual Studio 2019常用快捷鍵

      在日常使用Visual Studio 開發(fā)中會使用到如下常用的快捷鍵

      快捷鍵名稱	功能Ctrl+k,f	自動格式化代碼Ctrl+k,c	注釋代碼Ctrl+k,u	取消注釋代碼Ctrl+F5	不調(diào)試運(yùn)行Ctrl+shift+b	編譯,不運(yùn)行F12	查看函數(shù)定義ctrl+-	退出函數(shù)定義F5	調(diào)試運(yùn)行F11	逐語句(遇到函數(shù)跳到函數(shù)內(nèi)部逐語句執(zhí)行)F10	逐過程 (不會進(jìn)入函數(shù)內(nèi)部,但是函數(shù)會被調(diào)用)Shift+F11	跳出

      Visual Studio 2019 調(diào)試程序

      在后期編寫程序時,經(jīng)驗(yàn)不足的開發(fā)人員通常會遇到兩種錯誤:編譯錯誤和運(yùn)行時錯誤,編譯錯誤通常是編寫的程序不滿足編譯器的語法規(guī)范,而運(yùn)行時錯誤則是程序運(yùn)行時發(fā)生的錯誤,想要排查程序運(yùn)行時的錯誤,就需要使用IDE提供的調(diào)試功能。

      在源文件debug.c中定義一個返回兩個整數(shù)相乘的方法mul,然后在main函數(shù)中定義兩個變量作為參數(shù)傳入mul方法中,并調(diào)用兩個整數(shù)相乘的方法,輸出計算結(jié)果

      #include <stdlib.h>/* 定義兩個整數(shù)相乘并返回*/int mul(int source, int target) { //打印輸出傳入mul方法的兩個整數(shù)參數(shù)的值 printf('source = %d\n',source); printf('target = %d\n', target); return source * target;}/* Visual Studio 2019的調(diào)試 @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version 2019/10/17*/int main(int argc, char* argv[]){ //定義兩個變量 int source = 12; int target = 12; //調(diào)用兩個整數(shù)相乘的方法,并將計算的結(jié)果保存到整數(shù)變量result中 int result = mul(source, target); printf('result = %d \n',result); system('pause'); return 0;}

      在調(diào)試程序前首先需要下斷點(diǎn),可以使用快捷鍵F9下斷點(diǎn)或者取消斷點(diǎn)

      下斷點(diǎn)

      然后使用F5調(diào)試運(yùn)行程序,程序會在之前下過斷點(diǎn)的地方暫停(無論是逐語句還是逐過程),此時可以在Visual Studio提供的自動窗口中觀察變量的值

      如果想要一行一行調(diào)試代碼,可以使用快捷鍵F11,當(dāng)遇到函數(shù)時(例如這里的mul函數(shù)),會進(jìn)入函數(shù)的內(nèi)部一行一行執(zhí)行,直到該函數(shù)結(jié)束為止。

      如果調(diào)試時不想進(jìn)入函數(shù)的內(nèi)部,可以使用快捷鍵F10,當(dāng)程序中調(diào)用了其他函數(shù)時不會進(jìn)入其他函數(shù)內(nèi)部,但是函數(shù)會被調(diào)用。

      如果調(diào)試時想要從一個斷點(diǎn)跳到另外一個斷點(diǎn),可以使用shift+F11實(shí)現(xiàn)。

      Visual Studio 2019的C4996錯誤

      C4996是Visual Studio 2019提供的錯誤編號

      首先明確下C4996錯誤出現(xiàn)錯誤的原因:

      Visual Studio 希望用戶使用Visual Studio提供的非標(biāo)準(zhǔn)庫函數(shù),但是程序員希望使用標(biāo)準(zhǔn)庫函數(shù),因?yàn)闃?biāo)準(zhǔn)庫是可以移植的。

      如果在Visual Studio中使用標(biāo)準(zhǔn)的庫函數(shù),就會引發(fā)C4996錯誤類似于這種提示:error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.這里的strcpy是標(biāo)準(zhǔn)的庫函數(shù),而在Visual Studio中使用這個函數(shù)引發(fā)了C4996錯誤。

      #include <stdio.h>#include <stdlib.h>#include <string.h>/* 解決visual studio 2019 的C4996錯誤 @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version*/int main(int argc, char* argv[]){ //定義一個字符串 char str[32] = ''; //將hi string 復(fù)制到str中 strcpy(str, 'hi string'); printf('str = %s \n',str); system('pause'); return 0;}

      那么如何解決問題呢?

      方案1:在源文件的第一行定義宏#define _CRT_SECURE_NO_WARNINGS

      方案2:在源文件的第一行定義#pragma warning(disable:4996)

      解決Visual Studio 2019的C4996錯誤的兩種方式

      #define _CRT_SECURE_NO_WARNINGS#pragma warning(disable:4996)#include <stdio.h>#include <stdlib.h>#include <string.h>/* 解決visual studio 2019 的C4996錯誤 error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version*/int main(int argc, char* argv[]){ //定義一個字符串 char str[32] = ''; //將hi string 復(fù)制到str中 strcpy(str, 'hi string'); printf('str = %s \n',str); system('pause'); return 0;}

      Visual Studio 2019的代碼片段

      Visual Studio 2019提供了代碼片段的功能,其作用就是配置代碼片段后,可以通過輸入指定的快捷鍵生成模板代碼,這樣可以大大提高開發(fā)效率。

      在后期編寫C程序中,需要反復(fù)使用到如下的代碼片段

      #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>/* @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version*/int main(int argc, char* argv[]) { return 0;}

      首先自定義代碼片段文件MyCCode.snippet

      <?xml version='1.0' encoding='utf-8'?><CodeSnippets xmlns='http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet'> <CodeSnippet Format='1.0.0'> <Header> <Title>MyCCodeTemplate</Title> <Shortcut>mcct</Shortcut> <Description>c的標(biāo)準(zhǔn)模板代碼</Description> <Author>Microsoft Corporation</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> <SnippetType>SurroundsWith</SnippetType> </SnippetTypes> </Header> <Snippet> <Code Language='cpp'> <![CDATA[#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> /* @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version */ int main(int argc, char *argv[]) { system('pause'); return 0; }]]> </Code> </Snippet> </CodeSnippet></CodeSnippets>

      然后選擇Visual Studio 2019 菜單 工具->代碼片段管理器

      工具->代碼片段管理器

      選擇代碼片段管理器的語言為C++,然后選中My Code Snippets

      然后為導(dǎo)入的代碼片段選擇一個位置

      導(dǎo)入成功

      導(dǎo)入成功之后新建任意的C程序源文件,在源文件中輸入快捷鍵mcct就可以生成如下的代碼片段

      #define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>/* @author liuguanglei ittimelinedotnet@gmail.com @website ittimeline.net @version*/int main(int argc, char* argv[]){ system('pause'); return 0;}

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多