為什麼C 中自定義函式與Linux系統呼叫同簽名,卻仍然可以編譯

時間 2021-05-31 12:59:42

1樓:H-0214

可以自定義strlen啊。

當你include cstring標頭檔案,預處理之後有了有了strlen的宣告…因為你又寫了strlen的定義,所以strlen是本模組定義的符號,在編譯的時候就已經生成了機器碼。鏈結器不會再鏈結庫裡的那個版本。

2樓:

gcc 在編譯的時候,是有一些"潛規則的",我這邊只了解一些關於靜態庫重名的問題;

如果是read,write 這類函式,看下是不是在gcc 靜態庫中有定義,記不太清了,應該是libg.a裡面

如果是這種情況,是可以在自己的檔案裡面重新定義的;

gcc鏈結動態庫時,兩個動態庫中符號重名的問題_山中歲月-CSDN部落格_linux依賴的兩個動態庫有同名類

3樓:

read什麼時候變成「系統呼叫」了,和strlen一樣都是庫函式,按理說你在自己的module裡定義了,linker就不會去外面的lib裡找了,會首先使用你自己的版本。strlen按理說也可以覆蓋掉,建議題主提供build log看為啥不行。

至於什麼才算是「系統呼叫」,int 0x80在看你(逃

4樓:土地測量員

可以自定義strlen啊。

當你include cstring標頭檔案,預處理之後有了有了strlen的宣告…因為你又寫了strlen的定義,所以strlen是本模組定義的符號,在編譯的時候就已經生成了機器碼。鏈結器不會再鏈結庫裡的那個版本。

5樓:neal ho

手邊沒電腦,沒法驗證題主的場景。通常會是鏈結順序的問題。

也有可能是gcc/g++ buildin strlen的問題,通常情況下呼叫strlen會直接使用gcc buildin的函式而不是去鏈結庫。

C 自定義函式出現在main之前好還是之後好?

我們都知道,吃雞蛋的時候,原來的方法是打破雞蛋較大的一端,可是那時的皇帝的祖父由於小時侯吃雞蛋,按這種方法把手指弄破了,因此他的父親,就下令,命令所有的子民吃雞蛋的時候,必須先打破雞蛋較小的一端,違令者重罰。一一格列佛遊記 放最後面更好。實際專案中絕大多數都是放最後邊。main.c的最後乙個函式是m...

c 如何自定義乙個返回二維陣列的函式而不是首位址?

如果你說的是內建陣列,那是不可以的。但是,如果你願意可以使用C 11標準模板庫裡面的array,封裝成了模板類,提供了拷貝建構函式,可以直接返回乙個array。 旺旺 C 語言標準裡面倒是真寫了函式不能返回陣列,在 版標準裡沒看到相關論述,在 版標準裡面看到了,函式不能返回陣列,但可以返回對陣列的引...

C 自定義類通過操作符過載後 為什麼和內建型別的後 略微不同?

pansz 你的理解和實現沒問題。自定義類只能實現到這個程度。原因你自己也說了。不過,同一條語句中多次引用同乙個變數同時存在自增自減的情況是未定義行為 UB 因此具體編譯器實現為賦值之前加還是賦值之後加都是對的。你也不應該依賴未定義行為來程式設計。換句話說根本不應該寫出x x 這樣的語句。 采薇東籬...