Nachos 4 1學習 C 疑問記錄

2021-09-28 21:51:53 字數 1476 閱讀 8107

我太難/菜了!!!

extern

extern表示是外部函式或外部變數,比如:

1、extern void add(int x,inty);表示該函式主體不在當前模組中,在另乙個模組中(檔案)

2、extern int total;表示該變數在另乙個模組總定義過。

一般都把一些經常用到的列舉和變數之類的寫在.h標頭檔案中。這樣要引用時直接include "頭檔名"就可以了呼叫裡面所有的列舉和變數了。在大型專案中,引用別的.c檔案中的函式則只能用extern,因為.c檔案是不能 include的。所以想引用別的.c檔案中的函式和全域性變數、列舉等等的就只能用extern。

extern在這裡起的作用是告訴編譯器,你這個print()已經在某個.cpp中已經定義了,這裡只不過是宣告一下有這個東西,然後拿來用一下。定義只能出現一次,宣告卻可出現多次,也就是說extern宣告可在多個檔案中用(包括.h)

#ifndef

#ifndef是"if not defined"的簡寫,是巨集定義的一種,它是可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等。實際上確切的說這應該是預處理功能中三種(巨集定義,檔案包含和條件編譯)中的第三種——條件編譯。

#ifndef x 

//先測試x是否被巨集定義過

#define x

程式段1

//如果x沒有被巨集定義過,定義x,並編譯程式段 1

#else

程式段2

//如果x已經定義過了則編譯程式段2的語句,「忽視」程式段 1

#endif

//終止if

#undef

#define定義預處理器識別符號,將保持已定義狀態且在作用域內,直到程式結束或者使用#undef 指令取消定義

#ifdef和#endif

#ifdef是一句電腦程式語句。可以用它區隔一些與特定標頭檔案、程式庫和其他檔案版本有關的**。可翻譯為:如果巨集定義了語句1則執行程式2。用#endif結尾。

cerr

cerr 乙個ostream物件,關聯到標準錯誤,通常寫入到與標準輸出相同的裝置。預設情況下,寫到cerr的資料是不緩衝的。cerr通常用於輸出錯誤資訊與其他不屬於正常邏輯的輸出內容。

assert

assert的作用是先計算表示式 expression ,如果其值為假(即為0),那麼它先向stderr列印一條出錯資訊,然後通過呼叫 abort 來終止程式執行。請看下面的程式清單badptr.c:

指標作為函式引數傳遞

參考:函式引數傳遞的只能是數值,所以當指標作為函式引數傳遞時,傳遞的是指標的值,而不是位址。如果要改變指標的值,用雙重指標。

異常處理

參考://不是很會//好的,不會

4 1學習記錄

記錄下今天看的兩篇 d patch gan 提到,雖然在影象生成方面,使用l1或者l2 loss會導致生成的影象產生模糊 fail to encourage high frequency crispness 但是可以大多數情況下它們可以準確地捕捉低頻資訊。因此,d限制為僅對影象的高頻結構建模,即僅關...

JAVA API 學習疑問記錄

string類 為什麼要設計contentequals?明明有equals這個方法 網上資料 string的這2個方法都是自己實現的,contentequals就是用來比較內容相同就行了,charsequence,stringbuffer 都可以進行比較,只要內部char 相同排序相同就算一樣。eq...

4 1c 學習記錄之傳遞物件

傳遞物件 按值來傳遞物件 預設呼叫複製建構函式 class a a func a one int main a func a one int main a func a one 假如我們將函式宣告為a func a one 那麼由於它返回的是物件而不是該物件的記憶體位址,因此在返回該物件時仍然需要呼...