假設我有一個包含許多預處理指令的源文件。在預處理器完成之後可以看到它的外觀嗎?如何在Visual Studio中預處理後看到C/C++源文件?
回答
cl.exe
,命令行界面到Microsoft Visual C++,具有輸出預處理後的文件中的三個不同的選項(因此不一致有關的Visual C以往的迴應++):
/E
:preprocess to stdout(類似於GCC的-E選項)/P
:preprocess to file/EP
:preprocess to stdout without #line directives
如果要對不帶#line指令的文件進行預處理,請合併/P
和/EP
選項。
大多數編譯器都有一個選項來運行預處理器。 例如,GCC提供-E:
-E Stop after the preprocessing stage; do not run the compiler proper.
The output is in the form of preprocessed source code, which is sent
to the standard output.
所以,你可以運行:
gcc -E foo.c
如果你不能找到這樣的選項,你也可以隨便找你的機器上的C預處理。它通常稱爲cpp,可能已經在您的路徑中。調用它是這樣的:
cpp foo.c
如果有用戶需要從其它目錄,包括標題,您可以通過-I /路徑/到/包括/目錄到其中任意一個,就像你有定期編譯。
對於Windows,我將其留給其他海報來提供答案,因爲我不是那裏的專家。
gcc問題:http:// stackoverflow。在VS2010中的「預處理到文件」是如何運行的 - gcc-pre-processor-to-see-how-the-source-look-after-defined-are-e – 2016-01-17 11:44:45
在Visual Studio中,您可以使用/ P編譯文件(或項目)。
如果您使用的是Microsoft的C++編譯器,請嘗試cl /EP
。
右鍵單擊解決方案資源管理器上的文件,轉到屬性。在配置屬性 - > C/C++ - >預處理器中,「生成預處理文件」就是您要查找的內容。然後右鍵單擊解決方案資源管理器中的文件並選擇「編譯」。預處理文件在輸出目錄(例如Release,Debug)中創建,擴展名爲.i(感謝Steed的評論)。
。 – 2013-11-01 09:31:41
您通常需要對預處理器的輸出執行一些後處理,否則所有宏都會擴展爲一行,這很難讀取和調試。對於C代碼,類似以下內容就足夠了:
gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c
對於C++代碼來說,它實際上要困難得多。對於GCC/g ++,我發現this Perl script有用。
正如bk1e和Andreas M.回答的那樣,編譯器的/ P選項將導致它對文件進行預處理。但是,在使用VS2005和Platform Builder(對於嵌入式ARM處理器)的項目中,該項目沒有在對話框中顯示一個選項(如Jim B所述)來啓用該選項。
我可以手動運行CL並添加/ P,但它失敗了,因爲我不知道在完整構建過程中無法被平臺生成器激活的所有適當的命令行選項。所以我需要知道所有這些選項。
我的解決辦法是去看看在build.log文件,發現執行
CL blah-blah-blah myfile.c
我複製這條線到剪貼板上線。 「blah-blah-blah」部分包含構建選項,並且非常龐大。
回到IDE中,我右鍵單擊myfile.c,選擇「打開構建窗口」,然後在該窗口中粘貼構建命令行並添加「/ P」。
CL /P blah-blah-blah myfile.c
完成。生成了myfile.i文件,其中包含預處理器輸出。
我不知道微軟編譯器的東西,但在GCC您可以使用此:
gcc -E -P -o result.c my_file.h
如果你想看到的評論使用:
gcc -E -C -P -o result.c my_file.h
更多選項上this page avaliable 。
CPIP是一個用Python編寫的新的C/C++預處理程序。如果你想要一個預處理文件的詳細視覺表示,請給它一個鏡頭。
CPIP是一個用Python實現的C/C++預處理器。大多數預處理器將預處理視爲一項骯髒的工作,只需儘快完成即可。這可能會使得很難在預處理階段追蹤細微的缺陷,因爲預處理器會丟棄大量有用的信息,以便儘可能便宜地獲得結果。
很少有開發人員真正理解預處理,對很多人來說這是一個晦澀難懂的黑魔法。 CPIP旨在改進這一點,並記錄預處理的每個細節,以便CPIP可以生成一些關於文件依賴性,宏使用情況等的可視化信息。
CPIP的設計不是取代cpp(或任何其他已建立的預處理器),而是CPIP將清晰度和理解視爲比處理速度更重要。
在Windows操作系統,簡單的一行回答這個問題是用在DOS下面的命令提示符下看到處理後的文件:
CL /P /C myprogram.c
這將生成一個名爲myprogram.i。打開它並查找擴展的預處理器。
- 1. 查看預處理後的Linux模塊源文件
- 2. 如何讓Visual Studio在BeforeBuild處理後重新讀取源文件?
- 3. 如何在預處理後查看文件的外觀?
- 4. 在Visual Studio中看不到Default.aspx文件
- 5. 如何預覽Visual Studio 2015中的資源文件內容?
- 6. 如何在Visual Studio中指定預處理器選項
- 7. 「預處理當前文件」插件的Visual Studio? (C++)
- 8. Visual Studio中沒有看到頭文件
- 9. 不能看到「源」文件夾中的Visual Studio
- 10. C語言:預處理後的源文件
- 11. 如何使Visual Studio中處理HTML 5個標籤無預警
- 12. Visual Studio 2008的預處理器wierdness
- 13. 在安裝visual studio後運行批處理文件
- 14. 如何在Visual Studio中自動插入預處理器和註釋塊到新的C++頭文件中?
- 15. DotNet如何處理visual studio中的文件夾
- 16. Clang Tooling預處理源文件
- 17. 在Visual Studio中查看多個文件
- 18. 處理Visual Studio 2010事件
- 19. 事件處理 - Visual Studio
- 20. 源文件不在Microsoft Visual Studio中
- 21. Vim插件clang_complete看不到* .cc文件
- 22. Android studio ::無法看到源文件夾
- 23. 在C#中使用Visual Studio 2010中的預處理器指令
- 24. Visual Studio代碼:如何導航到資源管理器中的文件?
- 25. 如何查看Visual C++預處理器的輸出?
- 26. 如何從命令行調用Visual Studio預處理器?
- 27. 如何輸出預處理的代碼並編譯它(Visual Studio)
- 28. 如何跳轉到Visual Studio中源代碼管理資源管理器中的文件
- 29. 如何關閉PDF文件在Visual Studio 2012中的預覽?
- 30. 在Visual Studio中創建源文件的物理副本
如果您提供了更多信息,例如您正在使用哪種編譯器,這將有所幫助。 – JaredPar 2008-11-10 07:14:15
我目前使用Visual Studio 2005作爲我的IDE。 – Geo 2008-11-10 07:16:01
然後默認情況下你正在使用cl.exe編譯器。 – 2008-11-10 15:37:40