首先,這是個歷史遺留問題,說起來比較復雜。其次,這個問題在微軟的MSDN博客上已經專門被說起過了,英文好的請直接移步到原文:《VC++ Directories》。另外,stack overflow上面也有人問到過,但是首選回答的人回答是錯的,因為他沒看 《VC++ Directories》,主要看后面的這段:
VC++ Directories: Include Directories
- this value is inherited from the
INCLUDEWindows environment variable which is defined outside of Visual Studio
- environment variables can be: global to the computer or have user level scope
- The
INCLUDEandLIBenvironment variables are created when the Microsoft Windows SDK is installed with Visual Studio.C/C++: Additional Include Directories
- is a project level setting... you will have to define this value for every project in your solution
- this value can be persisted to source control
好了,如果你英文不好,那么還是聽我的這個二手貨吧。
VC++ Directories本來是對應於SDK的,他的變量是一個Windows環境變量,就和你在操作系統的控制面板里面添加的環境變量是一樣的,比如這也有PATH,這個PATH和你在控制面板里面的PATH是一樣的。但是,畢竟這個是用於搞開發的一些環境變量,所以呢,就把它搞到繼承開發環境里面來設置了,這樣你就可以不用在操作系統的控制面板里設置他們,而且這些環境只在VS中有效。
而C/C++中的設置呢,它不是設置環境變量,它是設置命令行參數的,所以你可以很清晰的看到,它還有一個Command Line設置項,這個項分兩塊,上面是根據你前面填寫項的指生成的,比如你的Additional Include Directories設置,就會對應到 /I [path]上面來,下面有個叫Adittion Option的框框,是供你填一些上面沒有的或者其他需要補充的命令行參數的。既然是命令行參數,那肯定是針對當前這個工程的了。

本來一切已經很明確了:“VC++目錄”影響全局,只要是電腦上的這個VS創建的工程,都會被這個設置影像到; 而C/C++只影響到單個的工程,一個工程一個C/C++。
但是怪就怪在,微軟覺得這種全局的方式太粗暴了,所以在VS2010之后,“VC++目錄”變得也只影響單個工程了,而且還只能在工程上右鍵“屬性”才能大概,以表示它是屬於這個工程的。在VS2008中,這個設置還可以從Tools菜單中打開。所以,在VS2010之后,這二者就變成沒區別了。
但是真的沒區別了嗎?呵呵,區別大了(奔潰。。。)
前面已經說過了,VC++ Directories是一個Windows環境變量,C/C++是命令行參數,這是本質區別;但是相同的項,也就是VC++ Directories中的include directories 對應到C/C++中的addition include directories 是一樣的效果,也就是說效果一樣。同樣是命令行參數的還有Link設置,Link設置中的 addition library directories對應到VC++ Directories 中的library directories,也就是說,效果是相同的。
總之,很坑爹。。。
