黑馬程式設計師 由小示例引出程式編譯與執行

2022-08-24 21:57:08 字數 1488 閱讀 3773

最近遇到的乙個問題:

看如下**:

static void main(string args)

while (true)

console.writeline("請輸入乙個數字,我們來判斷是不是整數!如果是則輸出它本身,不是則輸出0! ");

string input = console.readline();

int result = zhengshu (input);

console.writeline(result);

public static int zhengshu(string input)

bool flag = true;

int result = 0;

while (flag)

tryresult = convert.toint32(input);

flag = false;

catch

flag = false;

//return result;

return result;

這裡判斷輸入的是否是整數的方法zhengshu,是有乙個int型別的返回值的,這種寫法,我們只能在while迴圈外面返回乙個數result,而不能在while迴圈裡面返回,如果寫在裡面,編譯生成是不成功的,會提示我們:錯誤 「zhengshu.program.zhengshu(string)」: 並非所有的**路徑都返回值。

這是因為,只有當我們程式執行到 bool flag = true;的時候,程式才知道我們的flag = true。而如果我們的程式編譯不成功,程式就無法執行。但是在編譯的過程中,編譯器並不知道你宣告的bool型別變數flag到底是true還是false,如果是true,迴圈可以執行;如果是false迴圈是根本進不去的,如果進不去迴圈,在迴圈裡返回值就沒有意義了,所以,就會提示錯誤,有錯誤程式就沒法編譯成功,更沒法執行。

而如果我們想在while迴圈裡返回值,就應該直接把迴圈條件改為true,而不是用flag!

這就是執行與編譯生成的區別。我們不能想當然的以為什麼。

編譯就是把高階語言變成計算機可以識別的二進位制語言,計算機只認識1和0,編譯程式把人們熟悉的語言換成二進位制的。 編譯程式把乙個源程式翻譯成目標程式的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間**生成;**優化;目標**生成。主要是進行詞法分析和語法分析,又稱為源程式分析,分析過程中發現有語法錯誤,給出提示資訊。

需要注意的是,一般上編譯器只做語法檢查和最簡單的語義檢查,而不檢查程式的邏輯。像上例,編譯程式不知道flag是什麼;它只看語法語義,不看內容邏輯,不知道這裡flag到底是什麼。

在.net中計算機並不能直接執行咱們所寫的c#**,當咱們寫好了**,c#編譯器會把它編譯成msil中間語言,然後再經過clr(公共語言執行時的處理),把它們編譯成計算機所認識的語言,計算機clr編譯後的這些**,進行操作。當程式執行的時候,clr首先載入所有的類到記憶體中,然後找到其中的main函式,從上到下一行**一行**的執行。程式是編譯成功,生成可執行檔案以後,才可以執行。以後我們遇到這種情況還需要注意。

黑馬程式設計師

asp.net android ios開發 net培訓 期待與您交流!map hashtable 底層是雜湊表資料結構,不可以存入null鍵和null值。該執行緒是同步的,jdk1.0出現,效率低。hashmap 底層是雜湊表資料結構,允許使用null鍵和null值。該集合執行緒是不同步的,將has...

黑馬程式設計師

1.了解反射 反射 就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法。person p new person p.使用 要想這樣使用,首先你必須得到class檔案物件,其實也就是得到class類的物件。2.反射中的類 class類 成員變數 field類 構造方法 const...

黑馬程式設計師

黑馬程式設計師 j a基礎學習筆記2 一 筆記內容概述 關鍵字 識別符號 注釋 注釋的應用 常量 進製的由來 進製轉換 負數的進製 變數的介紹 變數的基本演示 型別提公升 強制轉換 字元型別運算過程 型別運算細節 算術運算子 賦值運算子。二 常用內容介紹 1.注釋內容不占用記憶體,即使新增再多的注釋...