如何判斷一段程序是由C 編譯程序還是由C++編譯程序編譯的


以下是在論壇中看到的兩種解釋:

(1)如果是要你的代碼在編譯時發現編譯器類型,就判斷_cplusplus或_STDC_宏,通常許多編譯器還有其他編譯標志宏,

#ifdef __cplusplus

       cout<<"c++";

#else

       cout<<"c";

#endif

        如果要判斷已經編譯的代碼的編譯類型,就用nm查一下輸出函數符號是否和函數名相同。(相同為c,不同為c++。詳解見下面)

  
(2)

 簡單是說,由於c語言是沒有重載函數的概念的,所以c編譯器編譯的程序里,所有函數只有函數名對應的入口。而由於c++語言有重載函數

的概念,如果只有函數名對應的入口,則會出現混淆,所以c++編譯器編譯的程序,應該是函數名+參數類型列表對應到入口。

 

注意,因為main函數是整個程序的入口,所以main是不能有重載的,所以,如果一個程序只有main函數,是無法確認是c還是c++編譯器

編譯的  
  可以通過nm來查看函數名入口   
 如一個函數   
 int foo(int i, float j)

c編譯的程序通過nm查看

foo                   0x567xxxxxx    (地址)

c++編譯程序,通過nm查看

foo(int, float)    0x567xxxxxx 
    

  另外,如果要在c++編譯器里使用通過c編譯的目標文件,必須通知c++編譯器,我使用的函數是c風格的,不需要列出參數列表的,這樣c++編譯才能正確的連接

extern   "c"  foo;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM