【C語(yǔ)言】概述-001

第一章 C語(yǔ)言概述

1.1 什么是C語(yǔ)言



一提到語(yǔ)言這個(gè)詞語(yǔ)机隙,自然會(huì)想到的是像英語(yǔ)盗誊、漢語(yǔ)等這樣的自然語(yǔ)言澄峰,因?yàn)樗侨撕腿私粨Q信息不可缺少的工具朱巨。

而今天計(jì)算機(jī)遍布了我們生活的每一個(gè)角落他嫡,除了人和人的相互交流之外,我們必須和計(jì)算機(jī)角落备籽。

用什么的什么樣的方式和計(jì)算機(jī)做最直接的交流呢?人們自然想到的是最古老也最方便的方式——語(yǔ)言分井,而C語(yǔ)言就是人和計(jì)算機(jī)交流的一種語(yǔ)言车猬。

語(yǔ)言是用來(lái)交流溝通的。有一方說(shuō)尺锚,有另一方聽(tīng)珠闰,必須有兩方參與,這是語(yǔ)言最重要的功能:

  • 說(shuō)的一方傳遞信息瘫辩,聽(tīng)的一方接收信息伏嗜;
  • 說(shuō)的一方下達(dá)指令,聽(tīng)的一方遵循命令做事情伐厌。

語(yǔ)言是人和人交流承绸,C語(yǔ)言是人和機(jī)器交流。只是挣轨,人可以不聽(tīng)另外一個(gè)人军熏,但是,計(jì)算機(jī)是無(wú)條件服從卷扮。

語(yǔ)言有獨(dú)特的語(yǔ)法規(guī)則和定義荡澎,雙方必須遵循這些規(guī)則和定義才能實(shí)現(xiàn)真正的交流。

1.2 計(jì)算機(jī)介紹


1.2.1 計(jì)算機(jī)結(jié)構(gòu)組成

在這里插入圖片描述

1.2.2 計(jì)算機(jī)系統(tǒng)組成

在這里插入圖片描述

1.2.3 程序和指令

  • 指令是對(duì)計(jì)算機(jī)進(jìn)行程序控制的最小單位晤锹。
  • 所有的指令的集合稱為計(jì)算機(jī)的指令系統(tǒng)摩幔。
  • 程序是為完成一項(xiàng)特定任務(wù)而用某種語(yǔ)言編寫的一組指令序列。


    在這里插入圖片描述

1.3 語(yǔ)言發(fā)展歷程


1.3.1 機(jī)器語(yǔ)言

計(jì)算機(jī)的大腦或者說(shuō)心臟就是CPU鞭铆,它控制著整個(gè)計(jì)算機(jī)的運(yùn)作或衡。每種CPU,都有自己的指令系統(tǒng)衔彻。這個(gè)指令系統(tǒng)薇宠,就是該CPU的機(jī)器語(yǔ)言。

機(jī)器語(yǔ)言是一組由0和1系列組成的指令碼艰额,這些指令碼澄港,是CPU制作廠商規(guī)定出來(lái)的,然后發(fā)布出來(lái)柄沮,請(qǐng)程序員遵守回梧。

要讓計(jì)算機(jī)干活废岂,就得用機(jī)器語(yǔ)言(二級(jí)制數(shù))去命令它。這樣的命令狱意,不是一條兩條湖苞,而是上百條。而且不同型號(hào)的計(jì)算機(jī)其機(jī)器語(yǔ)言是不相通的详囤,按著一種計(jì)算機(jī)的機(jī)器指令編制的程序财骨,不能在另一種計(jì)算機(jī)上執(zhí)行。

1.3.2 匯編語(yǔ)言和編譯器

機(jī)器語(yǔ)言編程是不是很令人煩惱呢藏姐,終于出現(xiàn)了匯編語(yǔ)言隆箩,就是一些標(biāo)識(shí)符取代0與1。一門人類可以比較輕松認(rèn)識(shí)的編程語(yǔ)言羔杨。

只是這門語(yǔ)言計(jì)算機(jī)并不認(rèn)識(shí)捌臊,所以人類還不能用這門語(yǔ)言命令計(jì)算機(jī)做事情。這正如如何才能讓中國(guó)人說(shuō)的話美國(guó)人明白呢兜材?——翻譯理澎!

所以,有一類專門的程序曙寡,既認(rèn)識(shí)機(jī)器語(yǔ)言糠爬,又認(rèn)識(shí)匯編語(yǔ)言,也就是編譯器卵皂,將標(biāo)識(shí)符換成0與1秩铆,知道怎么把匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言。

1.3.3 高級(jí)語(yǔ)言

匯編語(yǔ)言和機(jī)器語(yǔ)言都是面向機(jī)器的灯变,機(jī)器不同殴玛,語(yǔ)言也不同。既然有辦法讓匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言添祸,難道就不能把其他更人性化的語(yǔ)言翻譯成機(jī)器語(yǔ)言滚粟?

1954年,F(xiàn)ortran語(yǔ)言出現(xiàn)了刃泌,其后相繼出現(xiàn)了其他的類似語(yǔ)言凡壤。這批語(yǔ)言,使程序員擺脫了計(jì)算機(jī)硬件的限制耙替,把主要精力放在了程序設(shè)計(jì)上亚侠,不在關(guān)注低層的計(jì)算機(jī)硬件。這類語(yǔ)言俗扇,稱為高級(jí)語(yǔ)言硝烂。

同樣的,高級(jí)語(yǔ)言要被計(jì)算機(jī)執(zhí)行铜幽,也需要一個(gè)翻譯程序?qū)⑵浞g成機(jī)器語(yǔ)言滞谢,這就是編譯程序串稀,簡(jiǎn)稱編譯器。
這類高級(jí)語(yǔ)言解決問(wèn)題的方法是分析出解決問(wèn)題所需要的步驟狮杨,把程序看作是數(shù)據(jù)被加工的過(guò)程母截。基于這類方法的程序設(shè)計(jì)語(yǔ)言成為面向過(guò)程的語(yǔ)言橄教。C語(yǔ)言就是這種面向過(guò)程的程序設(shè)計(jì)語(yǔ)言清寇。

1.3.4 語(yǔ)言的層次

在這里插入圖片描述

1.3.5 語(yǔ)言進(jìn)化史

在這里插入圖片描述

在這里插入圖片描述

1.4 為什么要學(xué)習(xí)C語(yǔ)言


1.4.1 C語(yǔ)言特點(diǎn)

  1. 優(yōu)點(diǎn)
  • 代碼量小
  • 執(zhí)行速度快
  • 功能強(qiáng)大
  • 編程自由
  1. 缺點(diǎn)
  • 寫代碼實(shí)現(xiàn)周期長(zhǎng)
  • 可移植性較差
  • 過(guò)于自由,經(jīng)驗(yàn)不足易出錯(cuò)
  • 對(duì)平臺(tái)庫(kù)依賴較多

1.4.2 學(xué)習(xí)C語(yǔ)言理由

在這里插入圖片描述

1.4.3 C語(yǔ)言應(yīng)用領(lǐng)域

C語(yǔ)言的應(yīng)用極其廣泛颤陶,從網(wǎng)站后臺(tái)颗管,到底層操作系統(tǒng),從多媒體應(yīng)用到大型網(wǎng)絡(luò)游戲滓走,均可使用C語(yǔ)言來(lái)開(kāi)發(fā):

  • C語(yǔ)言可以寫網(wǎng)站后臺(tái)程序
  • C語(yǔ)言可以專門針對(duì)某個(gè)主題寫出功能強(qiáng)大的程序庫(kù)
  • C語(yǔ)言可以寫出大型游戲的引擎
  • C語(yǔ)言可以寫出另一個(gè)語(yǔ)言來(lái)
  • C語(yǔ)言可以寫操作系統(tǒng)和驅(qū)動(dòng)程序,并且只能用C語(yǔ)言編寫
  • 任何設(shè)備只要配置了微處理器帽馋,就都支持C語(yǔ)言搅方。從微波爐到手機(jī),都是由C語(yǔ)言技術(shù)來(lái)推動(dòng)的


    在這里插入圖片描述

1.4.4 C語(yǔ)言的簡(jiǎn)潔

C語(yǔ)言僅有32個(gè)關(guān)鍵字绽族,9種控制語(yǔ)句姨涡,34種運(yùn)算符,卻能完成無(wú)數(shù)的功能:


在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

1.4.5 學(xué)習(xí)C語(yǔ)言的常見(jiàn)困惑

在這里插入圖片描述

1.5 第一個(gè)C語(yǔ)言程序:HelloWorld


1.5.1 編寫C語(yǔ)言代碼:hello.c

#include <stdio.h>

int main()
{
    //這是第一個(gè)C語(yǔ)言代碼
    printf("hello world\n");

    return 0;
}

C語(yǔ)言的源代碼文件是一個(gè)普通的文本文件吧慢,但擴(kuò)展名必須是.c涛漂。

1.5.2 通過(guò)gcc編譯C代碼

1.gcc編譯器介紹
編輯器(如vi、記事本)是指我用它來(lái)寫程序的(編輯代碼)检诗,而我們寫的代碼語(yǔ)句匈仗,電腦是不懂的,我們需要把它轉(zhuǎn)成電腦能懂的語(yǔ)句逢慌,編譯器就是這樣的轉(zhuǎn)化工具悠轩。就是說(shuō),我們用編輯器編寫程序攻泼,由編譯器編譯后才可以運(yùn)行火架!
編譯器是將易于編寫、閱讀和維護(hù)的高級(jí)計(jì)算機(jī)語(yǔ)言翻譯為計(jì)算機(jī)能解讀忙菠、運(yùn)行的低級(jí)機(jī)器語(yǔ)言的程序何鸡。
gcc(GNU Compiler Collection,GNU 編譯器套件)牛欢,是由 GNU 開(kāi)發(fā)的編程語(yǔ)言編譯器骡男。gcc原本作為GNU操作系統(tǒng)的官方編譯器,現(xiàn)已被大多數(shù)類Unix操作系統(tǒng)(如Linux氢惋、BSD洞翩、Mac OS X等)采納為標(biāo)準(zhǔn)的編譯器稽犁,gcc同樣適用于微軟的Windows。

gcc最初用于編譯C語(yǔ)言骚亿,隨著項(xiàng)目的發(fā)展gcc已經(jīng)成為了能夠編譯C已亥、C++、Java来屠、Ada虑椎、fortran、Object C俱笛、Object C++捆姜、Go語(yǔ)言的編譯器大家族。

編譯命令格式:

gcc [-option1] ... <filename>
g++ [-option1] ... <filename>
  • 命令迎膜、選項(xiàng)和源文件之間使用空格分隔
  • 一行命令中可以有零個(gè)泥技、一個(gè)或多個(gè)選項(xiàng)
  • 文件名可以包含文件的絕對(duì)路徑,也可以使用相對(duì)路徑
  • 如果命令中不包含輸出可執(zhí)行文件的文件名磕仅,可執(zhí)行文件的文件名會(huì)自動(dòng)生成一個(gè)默認(rèn)名珊豹,Linux平臺(tái)為a.out,Windows平臺(tái)為a.exe

gcc榕订、g++編譯常用選項(xiàng)說(shuō)明:

選項(xiàng) 含義
-o file 指定生成的輸出文件名為file
-E 只進(jìn)行預(yù)處理
-S(大寫) 只進(jìn)行預(yù)處理和編譯
-c(小寫) 只進(jìn)行預(yù)處理店茶、編譯和匯編

2.Linux平臺(tái)下編譯代碼

在這里插入圖片描述

  • gcc warning的意思是警告,是有問(wèn)題劫恒,但不影響編譯
  • error是錯(cuò)誤贩幻,如果遇到error,那么就不能編譯了

3.Windows平臺(tái)下gcc環(huán)境配置
windows命令行界面下两嘴,默認(rèn)是沒(méi)有g(shù)cc編譯器丛楚,我們需要配置一下環(huán)境。由于我們安裝了Qt溶诞,Qt是一個(gè)集成開(kāi)發(fā)環(huán)境鸯檬,內(nèi)部集成gcc編譯器,配置一下環(huán)境變量即可使用gcc螺垢。

a)進(jìn)入Qt安裝目錄:

在這里插入圖片描述

b)拷貝gcc所在的路徑(不同安裝目錄有所差異)

C:\Qt\Qt5.5.0\Tools\mingw492_32\bin
在這里插入圖片描述

c) 設(shè)置windows環(huán)境變量
計(jì)算機(jī)(右擊)-> 屬性:

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

如果是win7喧务,雙擊Path后,把拷貝的路徑追加到后面枉圃,路徑之間需要英文” ; ”分隔:
在這里插入圖片描述

如果是win10功茴,界面做得友好一下,新建添加路徑即可:
在這里插入圖片描述

d)測(cè)試gcc命令:

在這里插入圖片描述

在這里插入圖片描述

4.Windows平臺(tái)下編譯代碼

在這里插入圖片描述

在這里插入圖片描述

5.注意事項(xiàng)

  • Linux編譯后的可執(zhí)行程序只能在Linux運(yùn)行孽亲,Windows編譯后的程序只能在Windows下運(yùn)行坎穿。

  • 64位的Linux編譯后的程序只能在64位Linux下運(yùn)行,32位Linux編譯后的程序只能在32位的Linux運(yùn)行。

  • 64位的Windows編譯后的程序只能在64位Windows下運(yùn)行玲昧,32位Windows編譯后的程序可以在64位的Windows運(yùn)行栖茉。

1.5.3 代碼分析

1.include頭文件包含

  • #include的意思是頭文件包含,#include <stdio.h>代表包含stdio.h這個(gè)頭文件
  • 使用C語(yǔ)言庫(kù)函數(shù)需要提前包含庫(kù)函數(shù)對(duì)應(yīng)的頭文件孵延,如這里使用了printf()函數(shù)吕漂,需要包含stdio.h頭文件
  • 可以通過(guò)man 3 printf查看printf所需的頭文件

#include< >#include ""的區(qū)別:

  • < > 表示系統(tǒng)直接按系統(tǒng)指定的目錄檢索
  • "" 表示系統(tǒng)先在 "" 指定的路徑(沒(méi)寫路徑代表當(dāng)前路徑)查找頭文件,如果找不到尘应,再按系統(tǒng)指定的目錄檢索

stdio.h是在操作系統(tǒng)的系統(tǒng)目錄下:

在這里插入圖片描述

2.main函數(shù)

  • 一個(gè)完整的C語(yǔ)言程序惶凝,是由一個(gè)、且只能有一個(gè)main()函數(shù)(又稱主函數(shù)犬钢,必須有)和若干個(gè)其他函數(shù)結(jié)合而成(可選)苍鲜。
  • main函數(shù)是C語(yǔ)言程序的入口,程序是從main函數(shù)開(kāi)始執(zhí)行玷犹。

3.{} 括號(hào)混滔,程序體和代碼塊

  • {}叫代碼塊,一個(gè)代碼塊內(nèi)部可以有一條或者多條語(yǔ)句
  • C語(yǔ)言每句可執(zhí)行代碼都是";"分號(hào)結(jié)尾
  • 所有的#開(kāi)頭的行歹颓,都代表預(yù)編譯指令遍坟,預(yù)編譯指令行結(jié)尾是沒(méi)有分號(hào)的
  • 所有的可執(zhí)行語(yǔ)句必須是在代碼塊里面

4.注釋

  • //叫行注釋,注釋的內(nèi)容編譯器是忽略的晴股,注釋主要的作用是在代碼中加一些說(shuō)明和解釋,這樣有利于代碼的閱讀
  • /**/叫塊注釋
  • 塊注釋是C語(yǔ)言標(biāo)準(zhǔn)的注釋方法
  • 行注釋是從C++語(yǔ)言借鑒過(guò)來(lái)的

5.printf函數(shù)

  • printf是C語(yǔ)言庫(kù)函數(shù)肺魁,功能是向標(biāo)準(zhǔn)輸出設(shè)備輸出一個(gè)字符串
  • printf(“hello world\n”);//\n的意思是回車換行

6.return語(yǔ)句

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

1.6 system函數(shù)


1.6.1 system函數(shù)的使用

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

功能:在已經(jīng)運(yùn)行的程序中執(zhí)行另外一個(gè)外部程序
參數(shù):外部可執(zhí)行程序名字
返回值:
成功:不同系統(tǒng)返回值不一樣
失敶尽:通常是 - 1

示例代碼:

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

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

    return 0;
}

1.6.2 system返回值不同系統(tǒng)結(jié)果不一樣

C語(yǔ)言所有的庫(kù)函數(shù)調(diào)用,只能保證語(yǔ)法是一致的蹦误,但不能保證執(zhí)行結(jié)果是一致的劫拢,同樣的庫(kù)函數(shù)在不同的操作系統(tǒng)下執(zhí)行結(jié)果可能是一樣的,也可能是不一樣的强胰。

在學(xué)習(xí)Linux發(fā)展史時(shí)舱沧,我們得知Linux的發(fā)展離不開(kāi)POSIX標(biāo)準(zhǔn)偶洋,只要符合這個(gè)標(biāo)準(zhǔn)的函數(shù)熟吏,在不同的系統(tǒng)下執(zhí)行的結(jié)果就可以一致。

Unix和linux很多庫(kù)函數(shù)都是支持POSIX的,但Windows支持的比較差牵寺。
如果將Unix代碼移植到Linux一般代價(jià)很小悍引,如果把Windows代碼移植到Unix或者Linux就比較麻煩。

1.6.3 Qt圖形界面調(diào)用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");
}

1.6.4 MFC圖形界面調(diào)用system

在這里插入圖片描述
void CvssystemDlg::OnBnClickedButton1()
{
    // TODO:  在此添加控件通知處理程序代碼
    //WinExec("calc", SW_NORMAL); 需要頭文件:#include <windows.h>
    system("calc"); //需要頭文件:#include <stdlib.h>
}

void CvssystemDlg::OnBnClickedButton2()
{
    // TODO:  在此添加控件通知處理程序代碼
    //WinExec("notepad", SW_NORMAL);
    system("notepad");
}

1.7 C語(yǔ)言編譯過(guò)程


1.7.1 C程序編譯步驟

C代碼編譯成可執(zhí)行程序經(jīng)過(guò)4步:

  1. 預(yù)處理:宏定義展開(kāi)帽氓、頭文件展開(kāi)趣斤、條件編譯等,同時(shí)將代碼中的注釋刪除杏节,這里并不會(huì)檢查語(yǔ)法
  2. 編譯:檢查語(yǔ)法唬渗,將預(yù)處理后文件編譯生成匯編文件
  3. 匯編:將匯編文件生成目標(biāo)文件(二進(jìn)制文件)
  4. 鏈接:C語(yǔ)言寫的程序是需要依賴各種庫(kù)的,所以編譯之后還需要把庫(kù)鏈接到最終的可執(zhí)行程序中去
在這里插入圖片描述

1.7.2 gcc編譯過(guò)程

  1. 分步編譯

    預(yù)處理: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

選項(xiàng) 含義
-E 只進(jìn)行預(yù)處理
-S(大寫) 只進(jìn)行預(yù)處理和編譯
-c(小寫) 只進(jìn)行預(yù)處理奋渔、編譯和匯編
-o file 指定生成的輸出文件名為 file
文件后綴 含義
.c C 語(yǔ)言文件
.i 預(yù)處理后的 C 語(yǔ)言文件
.s 編譯后的匯編文件
.o 編譯后的目標(biāo)文件
在這里插入圖片描述
  1. 一步編譯

gcc hello.c -o demo(還是經(jīng)過(guò):預(yù)處理镊逝、編譯、匯編嫉鲸、鏈接的過(guò)程):

在這里插入圖片描述

1.7.3 查找程序所依賴的動(dòng)態(tài)庫(kù)

1)Linux平臺(tái)下撑蒜,ldd(“l(fā)”為字母) 可執(zhí)行程序:

在這里插入圖片描述

2)Windows平臺(tái)下,需要相應(yīng)軟件(Depends.exe):
在這里插入圖片描述

在這里插入圖片描述

1.8 CPU內(nèi)部結(jié)構(gòu)與寄存器(了解)


1.8.1 64位和32位系統(tǒng)區(qū)別

  • 寄存器是CPU內(nèi)部最基本的存儲(chǔ)單元
  • CPU對(duì)外是通過(guò)總線(地址玄渗、控制座菠、數(shù)據(jù))來(lái)和外部設(shè)備交互的,總線的寬度是8位藤树,同時(shí)CPU的寄存器也是8位浴滴,那么這個(gè)CPU就叫8位CPU
  • 如果總線是32位,寄存器也是32位的岁钓,那么這個(gè)CPU就是32位CPU
  • 有一種CPU內(nèi)部的寄存器是32位的升略,但總線是16位,準(zhǔn)32位CPU
  • 所有的64位CPU兼容32位的指令屡限,32位要兼容16位的指令品嚣,所以在64位的CPU上是可以識(shí)別32位的指令
  • 在64位的CPU構(gòu)架上運(yùn)行了64位的軟件操作系統(tǒng),那么這個(gè)系統(tǒng)是64位
  • 在64位的CPU構(gòu)架上钧大,運(yùn)行了32位的軟件操作系統(tǒng)翰撑,那么這個(gè)系統(tǒng)就是32位
  • 64位的軟件不能運(yùn)行在32位的CPU之上

1.8.2 寄存器名字(了解)

8位 16位 32位 64位
A AX EAX RAX
B BX EBX RBX
C CX ECX RCX
D DX EDX RDX

1.8.3 寄存器、緩存啊央、內(nèi)存三者關(guān)系

按與CPU遠(yuǎn)近來(lái)分眶诈,離得最近的是寄存器,然后緩存(CPU緩存)劣挫,最后內(nèi)存册养。

CPU計(jì)算時(shí),先預(yù)先把要用的數(shù)據(jù)從硬盤讀到內(nèi)存压固,然后再把即將要用的數(shù)據(jù)讀到寄存器球拦。于是 CPU<--->寄存器<--->內(nèi)存,這就是它們之間的信息交換。

那為什么有緩存呢坎炼?因?yàn)槿绻鲜遣僮鲀?nèi)存中的同一址地的數(shù)據(jù)愧膀,就會(huì)影響速度。于是就在寄存器與內(nèi)存之間設(shè)置一個(gè)緩存谣光。

因?yàn)閺木彺嫣崛〉乃俣冗h(yuǎn)高于內(nèi)存檩淋。當(dāng)然緩存的價(jià)格肯定遠(yuǎn)遠(yuǎn)高于內(nèi)存,不然的話萄金,機(jī)器里就沒(méi)有內(nèi)存的存在蟀悦。

由此可以看出,從遠(yuǎn)近來(lái)看:CPU〈---〉寄存器〈---> 緩存 <---> 內(nèi)存氧敢。

1.9 匯編語(yǔ)言


1.9.1 VS中C語(yǔ)言嵌套匯編代碼(了解)

#include <stdio.h>

int main()
{
    //定義整型變量a, b, c
    int a;
    int b;
    int c;

    __asm
    {
        mov a, 3    //3的值放在a對(duì)應(yīng)內(nèi)存的位置
        mov b, 4    //4的值放在a對(duì)應(yīng)內(nèi)存的位置
        mov eax, a  //把a(bǔ)內(nèi)存的值放在eax寄存器
        add eax, b  //eax和b相加日戈,結(jié)果放在eax
        mov c, eax  //eax的值放在c中
    }
    
    printf("%d\n",  c);//把c的值輸出

    return 0;//成功完成
}

1.9.2 VS反匯編

#include <stdio.h>

int main()
{
    //定義整型變量a, b, c
    int a;
    int b;
    int c;

    a = 3;
    b = 4;
    c = a + b;
    
    printf("%d\n",  c);//把c的值輸出

    return 0;//成功完成
}

1.設(shè)置斷點(diǎn)F9

在這里插入圖片描述

2.選擇反匯編按鈕
在這里插入圖片描述

3.根據(jù)匯編代碼分析程序
在這里插入圖片描述

1.10 集成開(kāi)發(fā)環(huán)境IDE


集成開(kāi)發(fā)環(huán)境(IDE,Integrated Development Environment )是用于提供程序開(kāi)發(fā)環(huán)境的應(yīng)用程序孙乖,一般包括代碼編輯器浙炼、編譯器、調(diào)試器和圖形用戶界面工具唯袄。集成了代碼編寫功能弯屈、分析功能、編譯功能恋拷、調(diào)試功能等一體化的開(kāi)發(fā)軟件服務(wù)套资厉。所有具備這一特性的軟件或者軟件套(組)都可以叫集成開(kāi)發(fā)環(huán)境。

1.10.1 Qt Creator

Qt Creator是跨平臺(tái)的 Qt IDE蔬顾, Qt Creator 是 Qt 被 Nokia 收購(gòu)后推出的一款新的輕量級(jí)集成開(kāi)發(fā)環(huán)境(IDE)酌住。此 IDE 能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括 Linux(32 位及 64 位)阎抒、Mac OS X 以及 Windows。根據(jù)官方描述消痛,Qt Creator 的設(shè)計(jì)目標(biāo)是使開(kāi)發(fā)人員能夠利用 Qt 這個(gè)應(yīng)用程序框架更加快速及輕易的完成開(kāi)發(fā)任務(wù)且叁。

快捷鍵 含義
Ctrl + i 自動(dòng)格式化代碼
Ctrl + / 注釋/取消注釋
Alt + Enter 自動(dòng)完成類函數(shù)定義
F4 .h 文件和對(duì)應(yīng).cpp 文件切換
F9 設(shè)置斷點(diǎn)
F5 調(diào)試運(yùn)行
Ctrl + r 編譯,但不調(diào)試運(yùn)行
Ctrl + b 編譯秩伞,不運(yùn)行
F10 next調(diào)試
F11 step調(diào)試

1.10.2 Microsoft Visual Studio

Microsoft Visual Studio(簡(jiǎn)稱VS)是美國(guó)微軟公司的開(kāi)發(fā)工具包系列產(chǎn)品逞带。VS是一個(gè)基本完整的開(kāi)發(fā)工具集,它包括了整個(gè)軟件生命周期中所需要的大部分工具纱新,如UML工具展氓、代碼管控工具、集成開(kāi)發(fā)環(huán)境(IDE)等等,所寫的目標(biāo)代碼適用于微軟支持的所有平臺(tái)脸爱。Visual Studio是目前最流行的Windows平臺(tái)應(yīng)用程序的集成開(kāi)發(fā)環(huán)境遇汞。

1.VS常用快捷鍵

快捷鍵 含義
Ctrl + k,Ctrl + f 自動(dòng)格式化代碼
Ctrl + k,Ctrl + c 注釋代碼
Ctrl + k,Ctrl + u 取消注釋代碼
F9 設(shè)置斷點(diǎn)
F5 調(diào)試運(yùn)行
Ctrl + F5 不調(diào)試運(yùn)行
Ctrl + Shift + b 編譯,不運(yùn)行
F10 next調(diào)試
F11 step調(diào)試

2.VS2013的C4996錯(cuò)誤
由于微軟在VS2013中不建議再使用C的傳統(tǒng)庫(kù)函數(shù)scanf,strcpy,sprintf等,所以直接使用這些庫(kù)函數(shù)會(huì)提示C4996錯(cuò)誤:

在這里插入圖片描述

VS建議采用帶_s的函數(shù)空入,如scanf_s络它、strcpy_s,但這些并不是標(biāo)準(zhǔn)C函數(shù)歪赢。

要想繼續(xù)使用此函數(shù)化戳,需要在源文件中添加以下指令就可以避免這個(gè)錯(cuò)誤提示:

#define _CRT_SECURE_NO_WARNINGS     //這個(gè)宏定義最好要放到.c文件的第一行
#pragma warning(disable:4996)   //或者使用這個(gè)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市埋凯,隨后出現(xiàn)的幾起案子点楼,更是在濱河造成了極大的恐慌,老刑警劉巖白对,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掠廓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡躏结,警方通過(guò)查閱死者的電腦和手機(jī)却盘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)媳拴,“玉大人黄橘,你說(shuō)我怎么就攤上這事∏龋” “怎么了塞关?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)子巾。 經(jīng)常有香客問(wèn)我帆赢,道長(zhǎng),這世上最難降的妖魔是什么线梗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任椰于,我火速辦了婚禮,結(jié)果婚禮上仪搔,老公的妹妹穿的比我還像新娘瘾婿。我一直安慰自己,他們只是感情好烤咧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布偏陪。 她就那樣靜靜地躺著,像睡著了一般煮嫌。 火紅的嫁衣襯著肌膚如雪笛谦。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天昌阿,我揣著相機(jī)與錄音饥脑,去河邊找鬼恳邀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛好啰,可吹牛的內(nèi)容都是我干的轩娶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼框往,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鳄抒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起椰弊,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤许溅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秉版,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贤重,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年清焕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了并蝗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秸妥,死狀恐怖滚停,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粥惧,我是刑警寧澤键畴,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站突雪,受9級(jí)特大地震影響起惕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咏删,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一惹想、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧督函,春花似錦勺馆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灌灾。三九已至搓译,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锋喜,已是汗流浹背些己。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工豌鸡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人段标。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓涯冠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逼庞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛇更,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容