我最近已經意識到,我不知道,通常來說,如何一個C/C++編譯器的工作原理。我承認這個最初來自試圖理解頭球衛隊,但卻意識到我缺乏編輯工作。瞭解C++編譯
以Visual C++爲例; Theres「頭文件」文件夾,「資源文件」文件夾和「源文件」文件夾。對這些文件夾的分離以及你放入的內容有什麼意義?對我來說,他們都是源文件。就拿代碼片段:
片段1
//a1.h
int r=4;
和
//a1.cpp
int b //<--semicolon left out on purpose
和
//main.cpp
#include <iostream>
#include "a1.h"
void main()
{
cout << r;
}
的編譯器錯誤出來說:「a1.cpp(3):致命錯誤C1004 :發現意外的文件結束「我期望它不會因爲a1.cpp文件不包含主要方法存在其中在下一代碼段
片段2
//a1.h
int r=4 //<--semicolon left out on purpose
和
//a1.cpp
int b = 4;
和
//main.cpp
#include <iostream>
void main()
{
cout << b;
}
錯誤了,因爲「main.cpp中(6):錯誤C2065: 'b':未聲明的標識符「。如果你有像這樣
片段的a1.cpp 3
//a1.h
int r=4 //<--semicolon left out on purpose
和
//a1.cpp
int b = 4;
和
//main.cpp
#include <iostream>
#include "a1.cpp"
void main()
{
cout << b;
}
編譯器會抱怨 「a1.obj:錯誤LNK2005:」 int b「(?b @@ 3HA)已在main.obj中定義」。片段2和3都忽略了int r = 4
沒有缺少分號的事實,因爲我懷疑它與它的xxxx.h文件有關。如果我從片段1上的項目中刪除a1.cpp文件,那麼它編譯得很好。顯然,我所期望的並不是我所得到的。 Theres提供了大量有關如何在cpp中編寫代碼的書籍和教程,但cpp處理complition過程中的文件和源代碼的方式並不多。這到底是怎麼回事?
您需要對頭文件和源文件之間的區別以及「項目」(或Makefile)的含義有一個非常基本的理解。你可以從閱讀K&R書開始?它不是C++,但你的代碼也不是 - 它是純C(除了「stuff」)。 – Arkadiy 2011-03-17 17:19:34
我總是建議新手到C/C++的人在移入IDE之前使用命令行編譯器並手動鏈接代碼。瞭解編譯/鏈接/執行過程在C/C++中非常重要。坐下來,放鬆一下,GCC一會兒。 – Brandon 2011-03-17 17:26:05
@Brandon你的意思是在linux/unix環境中?或者會有一個Windows端口?另外,我想看什麼樣的文學作品? – 2011-03-17 21:46:07