C 學習筆記一 C 初步

2021-09-03 00:07:10 字數 3099 閱讀 5135

在函式內部使用namespace:

#include

#include

intmain()

在 main() 函式中宣告命名空間 std,它的作用範圍就位於 main() 函式內部,如果在其他函式中又用到了 std,就需要重新宣告:

#include

void

func()

intmain()

如果希望在所有函式中都使用命名空間 std,可以將它宣告在全域性範圍中:

#include

//宣告命名空間std

using

namespace std;

void

func()

intmain()

const

int m =10;

int n = m;

在c語言中,編譯器會先到 m 所在的記憶體取出乙份資料,再將這份資料賦給 n;而在c++中,編譯器會直接將 10 賦給 n,沒有讀取記憶體的過程,和int n = 10;的效果一樣。c++ 中的常量更類似於#define命令,是乙個值替換的過程,只不過#define是在預處理階段替換,而常量是在編譯階段替換。看乙個例子:

int

main()

將上述**編譯成彙編檔案:

g++ -s -o test.s test.cpp

cat test.cpp

.file	"test1.cpp"

.text

.globl main

.type main, @function

main:

.lfb0:

.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq %rsp, %rbp

.cfi_def_cfa_register 6

movl $10, -8(%rbp)

movl $10, -4(%rbp)

movl $0, %eax

popq %rbp

.cfi_def_cfa 7, 8

ret.cfi_endproc

.lfe0:

.size main, .-main

.ident "gcc: (ubuntu/linaro 4.6.4-6ubuntu2) 4.6.4"

.section .note.gnu-stack,"",@progbits

從上面的彙編檔案可以看出,a和b在棧上面分配記憶體,給b賦值時如下:

movl    $10, -4(%rbp)
直接賦值為10,並沒有從a中(-8(%rbp))中取出來。修改一下:

int

main()

編譯為彙編之後檢視:

.file	"test1.cpp"

.text

.globl main

.type main, @function

main:

.lfb0:

.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq %rsp, %rbp

.cfi_def_cfa_register 6

movl $10, -8(%rbp)

movl -8(%rbp), %eax

movl %eax, -4(%rbp)

movl $0, %eax

popq %rbp

.cfi_def_cfa 7, 8

ret.cfi_endproc

.lfe0:

.size main, .-main

.ident "gcc: (ubuntu/linaro 4.6.4-6ubuntu2) 4.6.4"

.section .note.gnu-stack,"",@progbits

從上面可以看出,先將a賦值為10:

movl	$10, -8(%rbp)
然後將a傳給eax暫存器(為什麼不直接賦值而要經過eax暫存器呢,這是由cpu內部結構所決定的):

movl	-8(%rbp), %eax
最後將eax賦值給b(-4(%rbp)):

movl	%eax, -4(%rbp)
從這一系列的賦值可以看出沒有const時,b = a這句**會將a從記憶體中取出來,然後再賦值給b。

我們知道,普通全域性變數的作用域是當前檔案,但是在其他檔案中也是可見的,使用extern宣告後就可以使用,但是在c++中,全域性const變數的作用域只是當前檔案,例如:

main.c

#include

extern

int test;

intmain()

test.c

const

int test =

10;

編譯執行:

gcc main.c test.c

./a.out

test=

10

將main.c改為main.cpp,test.c改為test.cpp,然後用g++編譯:

g++ main.cpp test.cpp

/tmp/ccmxko6d.o:在函式『main』中:

main.cpp:

(.text+

0x6):對『test』未定義的引用

collect2: ld returned 1 exit status

由上可見,c++中全域性const變數只在當前檔案可見,這樣就可以將它放在標頭檔案中,即使多次包含也不會出錯。

初步C 類模板學習筆記

實現 在上課時間的定義給它的乙個或多個引數,這些引數代表了不同的資料型別。抽象的類。在呼叫類模板時,指定引數,由編譯系統依據引數提供的資料型別自己主動產生對應的模板類 詳細的類。c 的類模板的寫法例如以下 template 型別參數列 型別參數列的寫法就是 class 型別引數1,class 型別引...

c 初步學習

其實.net就是乙個開發平台,c 是在這個平台之上進行開發的,下圖是.net的框架 clr 公共語言執行時 cls 公共語言規範 cts 通用型別系統 我們可以從以下幾方面來展開學習 變數的命名規則 1 必須以字母或 符號開頭,不能以數字開頭 2 後面可以跟任意字母 數字 下劃線 3 不能用關鍵字 ...

C 初步學習

這學期有了c 開發這門課.先做了計算器,還有進製轉換,別人看來似乎很強,其實在acm中算是兩個簡單的水題了.參加競賽一年下來,發現學到的演算法和資料結構都是十分有用的東西。計算器最核心的其實就是中綴表示式轉字尾表示式,這就是hdu上的那題 簡單計算器 再加上開發工具做一下介面,套上之前的ac 就直接...