2019/7/19
在前兩天,我終於遇到了人生中第一次關於makefile的問題.
遇到這個問題,對於編譯器的理解和認知也會提公升很多,會有種恍然大悟的感覺.
眾所周知我們在編譯器除錯的時候是分為兩步驟:預編譯和鏈結
其中我們會把檔案分開來寫
通過include來包含其他檔案,但通常會出現重複包含從而報錯,
這是預編譯階段的錯誤,為了防止這樣的錯誤.
我們會用乙個關鍵字#pragma once這樣的關鍵字來確保只包含了一次.
或者#ifndef ... #define ... #endif ... 來解決
但是,我們在用別人的編譯器時,常常感受不到鏈結這個步驟到底是如何進行的.甚至我有乙個誤區,認為鏈結這個步驟是通過#include來完成的.其實這樣說也沾點邊.在書中也只是簡單提一下,說大部分作業系統和編譯器都幫我們做好了,頂多也需要乙個第三方的外掛程式,實際上確實如此,這些東西很多都已經被實現過了,甚至內嵌在了編譯器裡.我們無需關心,只需保證**邏輯即可.
我也一直,抱著這樣的心態來學習的.也推薦這樣的心態,我的老師們也是說只需要知道有鏈結就行了,那麼為什麼,我們要學習鏈結呢?那就是因為:為了讓自己更深層的了解計算機,和編譯器都為我們做了什麼,更接近的明白底層等...這樣的話,你以為我會一本正經得說出來麼?!
真正的原因:並不是所有的編譯器都為你做這些事,而這個知識也理所應當是你必須知道的.就比如vscode!!!這個讓人又愛又恨的編譯器,如果你要用它寫**,那就要注意了,它是乙個神器!根據使用者的個人能力而定的.我在使用它時遇到的問題問群裡的一些大佬,並且吐槽過...但是卻被很認真的嘲諷過,不過嘲諷的話句句在理並且反映了個人能力的不足:是你不會用呢
這句話應該能表達我所有的感受了
用vscode的話你會很難受,會絕望,會讓你的書真的變成入門到放棄.但是如果你克服了,你會很享受剩下的摧殘...我會專門寫一章來介紹vscode的一些坑,也是我的經歷:
下面,就讓我們來了解鏈結階段
在vscode中如果你#include標頭檔案,並不會像vs那樣很順利.如果你在相關聯的cpp檔案寫了函式或者類,結構體的實現.僅僅包含.h是不行的.他們會很實在的在你使用的時候給你報乙個未實現的錯誤,我以前的解決方法是include".cpp"作為練習時的緊急處理.這是很蠢的,為了像vs一樣,我終於研究了下,vs似乎是有聯結器幫助鏈結,vscode則需要自己來寫鏈結階段的具體步驟
具體來看這篇文章:
看完之後你就會寫:鏈結階段的具體措施了
但是你可能會遇到乙個坑:makefile:16: *** missing separator. stop.
沒錯,我們都知道makefile是以tab鍵開始的,但是我們確實加上了tab鍵,然而...
mysql第六章 第六章 mysql日誌
第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...
第六章 指標
1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...
第六章總結
6.1 使用滑鼠 6.1.1 滑鼠時間和滑鼠訊息 根據使用者操作滑鼠時滑鼠的位置,滑鼠訊息分為兩類 客戶區滑鼠訊息和非客戶區滑鼠訊息。1.客戶去滑鼠訊息 2.當滑鼠游標位於視窗的使用者區時,將生成客戶滑鼠訊息。滑鼠訊息和鍵盤訊息有所不同,windows 只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠...