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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

黑马程序员C语言基础(第三天)

發布時間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员C语言基础(第三天) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

黑馬程序員C語言基礎(一)第三天

https://www.bilibili.com/video/BV15W411K7k6?p=40

文章目錄

    • 低級語言與高級語言
    • c語言優缺點
    • c語言應用領域
    • 通過gcc編譯C代碼
        • gcc編譯器介紹
        • Linux平臺下編譯代碼
        • Windows平臺下gcc環境配置(略)
          • 注意事項
    • C語言代碼分析
      • include頭文件包含
      • main函數
      • {} 括號,程序體和代碼塊
      • 注釋
      • printf函數
      • return語句
    • system函數
      • system函數的使用
      • system返回值,不同系統結果不一樣(POSIX標準?保證結果一致?所以最好不要在不同系統間導來導去?)
      • Qt圖形界面調用system
      • MFC圖形界面調用system
    • C語言編譯過程
      • C程序編譯步驟
        • 1)預處理:宏定義展開、頭文件展開、條件編譯等,同時將代碼中的注釋刪除,這里并不會檢查語法
        • 2)編譯:檢查語法,將預處理后文件編譯生成匯編文件
        • 3)匯編:將匯編文件生成目標文件(二進制文件)
        • 4)鏈接:C語言寫的程序是需要依賴各種庫的,所以編譯之后還需要把庫鏈接到最終的可執行程序中去
      • gcc編譯過程
        • 1) 分步編譯
        • 一步編譯
      • 查找程序所依賴的動態庫(ldd)(depends.exe軟件)
    • CPU內部結構與寄存器(了解)(略)
      • 64位和32位系統區別
      • 寄存器、緩存、內存三者關系
    • 匯編語言(略)
    • visual studio寫c語言步驟(查看反匯編代碼)
    • Qt creator寫c語言步驟
      • 注意![在這里插入圖片描述](https://img-blog.csdnimg.cn/20210513165616519.png)
    • 集成開發環境IDE
      • Qt Creator
      • Microsoft Visual Studio
        • 1) VS常用快捷鍵
        • 2) VS2013的C4996錯誤

好多,挑重點

低級語言與高級語言


c語言優缺點

語言特點

  • 優點
    • 代碼量小
    • 執行速度快
    • 功能強大
    • 編程自由
  • 缺點
    • 寫代碼實現周期長
    • 可移植性較差
    • 過于自由,經驗不足易出錯
    • 對平臺庫依賴較多

    c語言應用領域

    • C語言可以寫網站后臺程序
    • C語言可以專門針對某個主題寫出功能強大的程序庫
    • C語言可以寫出大型游戲的引擎
    • C語言可以寫出另一個語言來
    • C語言可以寫操作系統和驅動程序,并且只能用C語言編寫
    • 任何設備只要配置了微處理器,就都支持C語言。從微波爐到手機,都是由C語言技術來推動的



    通過gcc編譯C代碼

    gcc編譯器介紹

    編輯器(如vi、記事本)是指我用它來寫程序的(編輯代碼),而我們寫的代碼語句,電腦是不懂的,我們需要把它轉成電腦能懂的語句,編譯器就是這樣的轉化工具。就是說,我們用編輯器編寫程序,由編譯器編譯后才可以運行!
    編譯器是將易于編寫、閱讀和維護的高級計算機語言翻譯為計算機能解讀、運行的低級機器語言的程序。
    gcc(GNU Compiler Collection,GNU 編譯器套件),是由 GNU 開發的編程語言編譯器。gcc原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如Linux、BSD、Mac OS X等)采納為標準的編譯器,gcc同樣適用于微軟的Windows。

    gcc最初用于編譯C語言,隨著項目的發展gcc已經成為了能夠編譯C、C++、Java、Ada、fortran、Object C、Object C++、Go語言的編譯器大家族。

    編譯命令格式:

    gcc [-option1] ... <filename> g++ [-option1] ... <filename>
    • 命令、選項和源文件之間使用空格分隔
    • 一行命令中可以有零個、一個或多個選項
    • 文件名可以包含文件的絕對路徑,也可以使用相對路徑
    • 如果命令中不包含輸出可執行文件的文件名,可執行文件的文件名會自動生成一個默認名,Linux平臺為a.out,Windows平臺為a.exe

    gcc、g++編譯常用選項說明:

    示例:

    Linux平臺下編譯代碼

    • gcc warning的意思是警告,是有問題,但不影響編譯
    • error是錯誤,如果遇到error,那么就不能編譯了

    Windows平臺下gcc環境配置(略)

    windows怎么用qt MinGW gcc編譯c代碼

    注意事項

    Linux編譯后的可執行程序只能在Linux運行,Windows編譯后的程序只能在Windows下運行。

    64位的Linux編譯后的程序只能在64位Linux下運行,32位Linux編譯后的程序只能在32位的Linux運行。

    64位的Windows編譯后的程序只能在64位Windows下運行,32位Windows編譯后的程序可以在64位的Windows運行。

    C語言代碼分析

    include頭文件包含

    • #include的意思是頭文件包含,#include <stdio.h>代表包含stdio.h這個頭文件
    • 使用C語言庫函數需要提前包含庫函數對應的頭文件,如這里使用了printf()函數,需要包含stdio.h頭文件
    • 可以通過man 3 printf查看printf所需的頭文件

    #include< > 與 #include ""的區別:

    • < > 表示系統直接按系統指定的目錄檢索
    • "" 表示系統先在 “” 指定的路徑(沒寫路徑代表當前路徑)查找頭文件,如果找不到,再按系統指定的目錄檢索

    stdio.h是在操作系統的系統目錄下:

    main函數

    • 一個完整的C語言程序,是由一個、且只能有一個main()函數(又稱主函數,必須有)和若干個其他函數結合而成(可選)。
    • main函數是C語言程序的入口,程序是從main函數開始執行。

    {} 括號,程序體和代碼塊

    • {}叫代碼塊,一個代碼塊內部可以有一條或者多條語句
    • C語言每句可執行代碼都是";"分號結尾
    • 所有的#開頭的行,都代表預編譯指令,預編譯指令行結尾是沒有分號的
    • 所有的可執行語句必須是在代碼塊里面

    注釋

    • //叫行注釋,注釋的內容編譯器是忽略的,注釋主要的作用是在代碼中加一些說明和解釋,這樣有利于代碼的閱讀
    • /**/叫塊注釋
    • 塊注釋是C語言標準的注釋方法
    • 行注釋是從C++語言借鑒過來的

    printf函數

    • printf是C語言庫函數,功能是向標準輸出設備輸出一個字符串
    • printf(“hello world\n”); ,\n的意思是回車換行

    return語句

    • return代表函數執行完畢,返回return代表函數的終止
    • 如果main定義的時候前面是int,那么return后面就需要寫一個整數;如果main定義的時候前面是void,那么return后面什么也不需要寫
    • 在main函數中return 0代表程序執行成功,return -1代表程序執行失敗
    • int main()和void main()在C語言中是一樣的,但C++只接受int main這種定義方式

    system函數

    system函數的使用

    #include <stdlib.h> int system(const char *command);

    功能:在已經運行的程序中執行另外一個外部程序
    參數:外部可執行程序名字
    返回值:
    成功:不同系統返回值不一樣
    失敗:通常是 - 1

    示例代碼:

    #include <stdio.h> #include <stdlib.h>int main() {//system("calc"); //windows平臺system("ls"); //Linux平臺, 需要頭文件#include <stdlib.h>return 0; }

    示例:

    02_system.c

    #include <stdio.h> #include <stdlib.h> int main() {system("ls");printf("下雨了!\n");return 0; }

    system返回值,不同系統結果不一樣(POSIX標準?保證結果一致?所以最好不要在不同系統間導來導去?)

    C語言所有的庫函數調用,只能保證語法是一致的,但不能保證執行結果是一致的,同樣的庫函數在不同的操作系統下執行結果可能是一樣的,也可能是不一樣的。

    在學習Linux發展史時,我們得知Linux的發展離不開POSIX標準,只要符合這個標準的函數,在不同的系統下執行的結果就可以一致。

    Unix和linux很多庫函數都是支持POSIX的,但Windows支持的比較差。
    如果將Unix代碼移植到Linux一般代價很小,如果把Windows代碼移植到Unix或者Linux就比較麻煩。

    Qt圖形界面調用system

    void Widget::on_pushButton_clicked() {//system("calc"); //需要頭文件:#include <stdlib.h>WinExec("calc", SW_NORMAL); //需要頭文件:#include <windows.h> }void Widget::on_pushButton_2_clicked() {system("notepad"); }void Widget::on_pushButton_3_clicked() {system("mmc"); }

    示例:

    #include "mainwindow.h" #include "./ui_mainwindow.h" #include "stdio.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow() {delete ui; }void MainWindow::on_pushButton_clicked() {system("calc"); }void MainWindow::on_pushButton_2_clicked() {system("notepad"); }

    MFC圖形界面調用system

    #include "mainwindow.h" #include "./ui_mainwindow.h" #include "stdio.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow() {delete ui; }void MainWindow::on_pushButton_clicked() {//打開計算器system("calc"); }void MainWindow::on_pushButton_2_clicked() { //打開記事本system("notepad"); }

    C語言編譯過程

    C程序編譯步驟

    C代碼編譯成可執行程序經過4步:

    1)預處理:宏定義展開、頭文件展開、條件編譯等,同時將代碼中的注釋刪除,這里并不會檢查語法

    2)編譯:檢查語法,將預處理后文件編譯生成匯編文件

    3)匯編:將匯編文件生成目標文件(二進制文件)

    4)鏈接:C語言寫的程序是需要依賴各種庫的,所以編譯之后還需要把庫鏈接到最終的可執行程序中去

    gcc編譯過程

    1) 分步編譯

    預處理:gcc -E hello.c -o hello.i 編 譯:gcc -S hello.i -o hello.s 匯 編:gcc -c hello.s -o hello.o 鏈 接:gcc hello.o -o hello_elf



    一步編譯

    gcc hello.c -o demo(還是經過:預處理、編譯、匯編、鏈接的過程):

    查找程序所依賴的動態庫(ldd)(depends.exe軟件)

    1)Linux平臺下,ldd(“l”為字母) 可執行程序:

    2)Windows平臺下,需要相應軟件(Depends.exe):

    CPU內部結構與寄存器(了解)(略)

    64位和32位系統區別

    • 寄存器是CPU內部最基本的存儲單元
    • CPU對外是通過總線(地址、控制、數據)來和外部設備交互的,總線的寬度是8位,同時CPU的寄存器也是8位,那么這個CPU就叫8位CPU
    • 如果總線是32位,寄存器也是32位的,那么這個CPU就是32位CPU
    • 有一種CPU內部的寄存器是32位的,但總線是16位,準32位CPU
    • 所有的64位CPU兼容32位的指令,32位要兼容16位的指令,所以在64位的CPU上是可以識別32位的指令
    • 在64位的CPU構架上運行了64位的軟件操作系統,那么這個系統是64位
    • 在64位的CPU構架上,運行了32位的軟件操作系統,那么這個系統就是32位
    • 64位的軟件不能運行在32位的CPU之上

    寄存器、緩存、內存三者關系

    按與CPU遠近來分,離得最近的是寄存器,然后緩存(CPU緩存),最后內存。

    CPU計算時,先預先把要用的數據從硬盤讀到內存,然后再把即將要用的數據讀到寄存器。于是 CPU<—>寄存器<—>內存,這就是它們之間的信息交換。

    那為什么有緩存呢?因為如果老是操作內存中的同一址地的數據,就會影響速度。于是就在寄存器與內存之間設置一個緩存。

    因為從緩存提取的速度遠高于內存。當然緩存的價格肯定遠遠高于內存,不然的話,機器里就沒有內存的存在。

    由此可以看出,從遠近來看:CPU〈—〉寄存器〈—> 緩存 <—> 內存。

    匯編語言(略)

    visual studio寫c語言步驟(查看反匯編代碼)

    創建新項目–> c++空項目–>

    源文件(右鍵)–> 添加 --> 新建項

    然后在新建的文件中將代碼粘貼進去

    #include <stdio.h>int main() {//定義整型變量a, b, cint a;int b;int c;__asm{mov a, 3 //3的值放在a對應內存的位置mov b, 4 //4的值放在a對應內存的位置mov eax, a //把a內存的值放在eax寄存器add eax, b //eax和b相加,結果放在eaxmov c, eax //eax的值放在c中}printf("%d\n", c);//把c的值輸出return 0;//成功完成 }

    調試 --> 開始執行(不調試)

    查看反匯編代碼,在這個地方打一個斷點(光標移到那行按F9)

    按F5開始調試,然后點開調試 --> 窗口 --> 反匯編

    然后可以看到將匯編代碼反匯編成C的代碼(我怎么看到的是這個,跟老師不一樣啊?)臥槽,是我搞錯了,反匯編是看最終生成的機器語言逆反生成的匯編代碼的0-0


    上面修改下代碼就可以了


    反匯編(Disassembly):把目標代碼轉為匯編代碼的過程,也可以說是把機器語言轉換為匯編語言代碼、低級轉高級的意思

    Qt creator寫c語言步驟

    歡迎界面點New新建
    點擊非Qt項目(Non qt project)點擊純c語言應用(plain c application)
    與visual studio不同,qt項目路徑和名稱不能有中文字符
    將main.c remove發現按鈕是灰色的
    發現文件被鎖上了

    解鎖了還是刪不了,算了不刪了,可能是cmake的問題

    點擊新增文件

    選擇c/c++源文件





    然后在這把文件加到后面就好了


    同樣要想刪除main.c只需在cmakelists文件里去掉main.c就好了

    然后在里面寫入代碼,
    運行報錯No executable specified.:

    找到項目路徑,把這個刪除CMakeLists.txt.user

    然后發現還是沒什么用,后來發現點擊不同地方的run結果是不同的 ,點擊下面那個就能運行


    但是這個地方還是只有main.c,沒有hello.c,重啟下qt試試?

    重啟之后果然就有了,重啟是個好東西

    注意

    集成開發環境IDE

    集成開發環境(IDE,Integrated Development Environment )是用于提供程序開發環境的應用程序,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面工具。集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟件服務套。所有具備這一特性的軟件或者軟件套(組)都可以叫集成開發環境。

    Qt Creator

    Qt Creator是跨平臺的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收購后推出的一款新的輕量級集成開發環境(IDE)。此 IDE 能夠跨平臺運行,支持的系統包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根據官方描述,Qt Creator 的設計目標是使開發人員能夠利用 Qt 這個應用程序框架更加快速及輕易的完成開發任務。

    快捷鍵 含義 Ctrl + i 自動格式化代碼 Ctrl + / 注釋/取消注釋 Alt + Enter 自動完成類函數定義 F4 .h 文件和對應.cpp 文件切換 F9 設置斷點 F5 調試運行 Ctrl + r 編譯,但不調試運行 Ctrl + b 編譯,不運行 F10 next調試 F11 step調試

    Microsoft Visual Studio

    Microsoft Visual Studio(簡稱VS)是美國微軟公司的開發工具包系列產品。VS是一個基本完整的開發工具集,它包括了整個軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等,所寫的目標代碼適用于微軟支持的所有平臺。Visual Studio是目前最流行的Windows平臺應用程序的集成開發環境。

    1) VS常用快捷鍵

    快捷鍵 含義 Ctrl + k,Ctrl + f 自動格式化代碼 Ctrl + k,Ctrl + c 注釋代碼 Ctrl + k,Ctrl + u 取消注釋代碼 F9 設置斷點 F5 調試運行 Ctrl + F5 不調試運行 Ctrl + Shift + b 編譯,不運行 F10 next調試 F11 step調試

    2) VS2013的C4996錯誤

    由于微軟在VS2013中不建議再使用C的傳統庫函數scanf,strcpy,sprintf等,所以直接使用這些庫函數會提示C4996錯誤:


    VS建議采用帶_s的函數,如scanf_s、strcpy_s,但這些并不是標準C函數。

    要想繼續使用此函數,需要在源文件中添加以下指令就可以避免這個錯誤提示:

    #define _CRT_SECURE_NO_WARNINGS //這個宏定義最好要放到.c文件的第一行 #pragma warning(disable:4996) //或者使用這個

    https://www.bilibili.com/video/BV15W411K7k6?p=65&spm_id_from=pageDriver

    總結

    以上是生活随笔為你收集整理的黑马程序员C语言基础(第三天)的全部內容,希望文章能夠幫你解決所遇到的問題。

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