代碼怎么保存成文件?
代碼保存成文件 需要經過預處理,編譯,匯編,鏈接一:預處理
預處理主要是處理源代碼中以#開始的預編譯指令,比如#include,#define
將所有的#define刪除,展開宏定義
處理所有的條件編譯指令#if,#ifdef,#elif,#else,#endif
處理#include預編譯指令,將被包含的頭文件插入該預編譯指令的位置,是個遞歸的過程
刪除所有的注釋 //與/**/
添加行號與文件名表示,用于調試符號與編譯錯誤或警告報錯
保留#pragma編譯指令,改指令 編譯器需要使用
二:編譯
編譯過程就是把預編譯生成的文件進行一系列詞法分析(也叫掃描),語法分析,語義分析,源代碼優化,匯編代碼生成,目標代碼優化
詞法分析:根據分隔符,將代碼分割成一系列的記號
比如: int a = (a+3)*(2+5);
將會 變成以下記號: int,a,=,(,a,+,3,),(,2,+,5,)
詞法分析產生的記號可以分為:關鍵字,標識符,字面量(數字,字符串,即常量),特殊符號(加號,等號等),在識別記號時,會將標識符放入符號表,字面量放入文字表
語法分析:根據記號進行語法分析,產生語法樹,整個分析過程采用上下文無關語法(語法樹就是以表達式為節點的樹),僅僅是完成對表達式的語法層面進行分析
語義分析:語義分析對語法樹中的表達式標識類型,對于類型不匹配,編譯器將會報錯,如果有些類型需要做隱式轉換,將會在語法樹中插入對應的節點
源代碼優化生成匯編代碼:int a = (a+3)*(2+5); 將會被優化為int a = (a+3)*(7)
三:匯編
匯編即根據匯編指令翻譯為機器指令
四:鏈接
鏈接主要包含 地址和空間分配,符號決議,重定位