為什麼C++選了Win32控制台應用程序之後頭文件必須用所給的那一個?

本人萌新,在用VS2017進行C++編程選擇了創建Win32控制台應用程序的選項,結果發現自帶了#include"stdafx.h";因為我按著教科書編程,故刪去它,寫了#include&這行。結果在生成時發生錯誤,提示缺少了上述我刪去的那行代碼。我重新加回去,看看是否可以存在兩者,結果不行,系統忽略了第二行的代碼。問題我其實已經解決,就是選擇空項目來重新創建,但是

我想知道背後的原因是什麼?頭文件的原理是什麼樣的呢?為什麼系統會忽略第二行? 已經查過相關資料,但不能很好理解,希望各位幫我解答,謝謝!


把嚮導中的「預編譯頭」取消掉


為什麼C++選了Win32控制台應用程序

------ 跟C++沒有絲毫關係,請說「為什麼VC++選了……」

有兩種方法

a. 新建工程時,將「Precompiled header」選項前面的勾去掉。(我更喜歡直接在「Empty project」選項前打勾,不要VC生成任何垃圾代碼)

b. 假如你新建工程時沒有按上面的步驟做,那麼可以在不想使用預編譯頭功能的文件上點右鍵,屬性:C/C++ Precompiled Headers Create/Use Precompiled Head 中選擇 Not Using Precompiled Headers


頭文件的意思就是把那個文件里的代碼複製粘貼過來放在你這個文件的頭部。而當你編譯一個文件的時候,你的所有頭文件當然也是要編譯的,如果這個引用鏈很長的話,編譯會特別久。Stdafx.h是一個預先編譯好的頭文件,裡面基本包括了你常用的一些頭文件,這樣你就不用每次運行的時候就總是編譯一堆頭文件了。由於工業標準的需求,微軟的cpp編譯器會檢測你是否包含了stdafx.h。如果沒有,編譯器會罷工,因為它不願意冒風險去意外地花很久的時間編譯那些從來沒見過的頭文件只因為你點了一下運行。

由於最開始你的例子里你沒有用stdafx.h,所以編譯器罷工了。別說跳過第二行,剩下的所有都跳過了。哪裡出錯了,編譯器就在那裡停住了。後面的都不會再執行。


真的很抱歉,沒有經過嚴密測試就發了這個問題。實際上顯示錯誤的原因是我忘記添加代碼行using namespace std;,因此,同時寫兩行#開頭的代碼是可以的,是有效的。非常感謝各位答主,讓我進一步明白了頭文件的含義與實質。


印象裡面2015版的vs在創建win32控制台的時候是可以勾選空項目的 但到了2017我就找不到了....@Patrick


因為你需要自己點擊生成空項目 才會生成空項目 畢竟vs並不懂得讀心術


推薦閱讀:

C++ new分配的內存不delete會泄漏嗎?
C++中類B需要訪問類A的私有成員變數,除了將B聲明為A的友元類外還有其它方法嗎?
為什麼同為系統級編程語言,Rust 能擁有現代構建/包管理工具,C++ 卻不能?
visual studio和gdb的調試機制到底是怎麼樣的?
如何提升 C++ Trie 樹的存取效率?

TAG:編程 | 程序 | 計算機科學 | C | MicrosoftVisualStudio |