我希望在職業生涯早期就開始做的事情和我希望以不同的方式做的事情。 大家好,我已經做了八年半的軟體工程師。這篇文章來源於我最近對自己在職業生涯中希望早點開始做的事情以及希望以不同方式做的事情的自我反思。 我在這裡分享的對任何希望提高和進步到高級甚至更高職位的初級至中級開發者都很有用。 0 大綱 我的職 ...
C語言【編譯器、變數、輸入輸出有關的】
一些想到的【從編譯器到變數到輸入輸出有關的】的問題,有些是按自己理解寫的答,有些待解決。
-
C語言可以跨平臺,彙編不可以,編譯時C語言會根據不同系統翻譯成不同形式的彙編語言。
-
C語言中算數運算會在寄存器中運行,變數保存在堆或棧中。
-
遺留問題: C語言變數名如何在彙編語言中表現的?
-
一些C標準:
C89 = C90 = ANSIC = 標準C
C99 引入了一些新特性(如 單行註釋)
C11 (2011年發行)
......
-
C語言、C語言標準、C編譯器 之間的聯繫?
C語言 是一個泛指。
C語言標準 是一些權威機構(也許也有個人)定義的一些語法規範。
C編譯器 是按照C語言標准將C語言代碼翻譯成機器可以識別的指令的程式。
C編譯器比如 gcc、clang等。
可以通過gcc或clang編譯C語言代碼時指定C標準,如下:
gcc -std=c89 main.c -o main # c89的"c"一定要小寫 clang -std=c99 main.c -o main
mingw和cygwin都是用於安裝C語言編譯器的跨平臺工具, cygwin是一個類Unix環境的模擬器 。
- 遺留問題:makefile的編寫規則?make為什麼可以運行makefile?在win上如何使用make?
-
遺留問題:標準輸入輸出等函數是編譯器提供的嗎?它們屬不屬於編譯器的一部分?嘗試下載gcc或clang編譯器,查看不同編譯器之間庫函數有什麼不同。
-
main函數返回值返回到了哪裡?-----操作系統。 有沒具體點的回答呢?
-
待附圖:C語言的執行過程?
-
預處理。 .c 文件 ----> .i 文件。 .i 文件為解決了#(預處理)後的文件。
gcc -E xxx.c -o xxx.i
-
編譯。 .i 文件 ----> .s 文件。 .s文件為彙編代碼文件。
gcc -S xxx.i -o xxx.s
-
彙編。 .s 文件 ----> .o 文件 / .obj 文件。 .obj 為二進位文件。
gcc -c xxx.s -o xxx.obj # 或 gcc -c xxx.s # 這樣預設輸出為 .o 文件 # .o文件是Linux下預設的二進位文件
-
鏈接。 多個 .o 文件 或 .obj 文件 ----> .exe文件(或其他格式可執行文件)
gcc xxx.o -o xxx.exe # 後面的-o xxx.exe可以不寫
-
-
使用 scanf(...) 輸入數據時,輸入數據的格式要與 scanf(...) 中第一個參數的格式相同。且使用 scanf(...) 時不能加提示語,想要提示輸入的話,可以前面加 printf(...)
// 格式之間是用逗號隔開,則輸入之間也用逗號隔開 scanf("%d,%d,%d", &num1, &num2, &num3); // 格式之間是用空格隔開,則輸入之間也用空格隔開 scanf("%d %d %d", &num1, &num2, &num3);
-
逗號表達式和同時多個聲明並賦值使用逗號的區別?
兩種根本不是一回事。
int a=10, b=20, c, d=30; // 這就是連續聲明或聲明並賦值 a = (10, 2*2, 5); // 這個是只執行最後一個值或表達式並賦值給a
-
遺留問題:可不可以用"%d"輸出字元類型的數據?反過來呢?其他的格式和變數混亂輸出形式呢? 像"%d"這樣的占位符還有哪些,分別有什麼作用?
%d 表示十進位整數。其他問題待查 。
- 遺留問題:有哪些變數預設初始值為0?全局變數是嗎?數組呢?局部變數?......
-
vscode + gcc 時,C語言文件的路徑不能有中文存在。
-
C語言中的標識符是什麼,有沒有長度限制,區不區分大小寫?
程式中各種變數名、函數名、數組名、結構體名、枚舉類型名等。
C語言標識符可以包含字母、數字、下劃線,但不能以數字開頭。
沒有長度限制(也許有些編譯器或平臺會限制),但不建議寫太長。
區分大小寫。
-
記四個有點眼生的存儲類型關鍵字: auto、extern、register、static 分別有什麼作用待查
-
記幾個C99增加的關鍵字:inline、restrict、_Bool、 _Complex、Imaginary 分別有什麼作用待查,似乎用處不是很廣泛
-
記幾個C11增加的關鍵字:_Alignas、 _Alignof、 _Atomic、 Static_assert、 _Noreturn、 _Thread_local、 _Generic
-
初步認識常量
-
字面量常量。如1、2、3......
-
標識符常量。
第一種表示: #define 常量名 常量值 //預處理方式 ,一種替換,後面跟表達式時記得加括弧,不加分號
第二種表示: const 類型 常量名 = 常量值;
枚舉常量 待學
-
-
遺留問題:main函數中的參數 int argc, char const * argv[] 有什麼含義?
-
C語言沒有乘方運算符,但可以使用math.h頭文件中的函數 pow(2, 3) 即表示2的3次方,返回double類型。
-
遺留問題:C標準庫中的頭文件只是函數聲明的功能嗎?比如stdio.h有沒有對應的體文件?
-
遺留問題:getchar()的具體細節?