簡體   English   中英

我可以在VS2008的C代碼中使用C ++向量

[英]Can i use C++ vectors in C code in VS2008

我在vs2008中運行c代碼。 如果我可以將此代碼與c ++代碼混合,我很好奇

簡短的回答是肯定的。 但是,有一些細微差別。

C ++通常支持C的大部分子集。這意味着您幾乎可以從C ++代碼中獲得C語言中的任何可用內容(例如函數,庫等)。 從這一點來看,你有兩個選擇,一個簡單,一個更難。

選項#1 - 使用C ++編譯器。

只需將您的代碼視為C ++即可。 簡單地說 - 使用C ++編譯器。

選項#2 - 混合C和C ++。

您可以編寫C代碼並使用C ++編譯器進行編譯。 在需要使用C ++組件的地方使用類似C的C ++。 例如,您可能具有類似於以下內容的設置:

  • head1.h - C函數的聲明。 例如:

    void foo1();

  • header2.h - 打算使用C ++代碼的C函數的聲明。

     #ifdef __cplusplus extern "C" { #endif void foo2 (); #ifdef __cplusplus } #endif 

兩個源文件,一個C和一個C ++:

  • source1.c

     #include "header1.h" #include "header2.h" void foo1 () { foo2 (); /* Call a C function that uses C++ stuff */ } 
  • source2.cpp

     #include <vector> #include "header2.h" #ifdef __cplusplus extern "C" { #endif void foo2 () { std::vector<int> data; /// ... etc. } #ifdef __cplusplus } #endif 

當然,您必須使用C ++編譯器編譯“cpp”文件(但您仍然可以使用C編譯器編譯“c”文件)並將程序與標准C ++運行時鏈接。

例如,Apple使用類似(但稍微復雜一些)的方法。 他們混合使用C ++和Objective-C,調用混合的Objective-C ++。

更新:

如果您選擇將C代碼編譯為C ++,我建議您花些時間研究C和C ++之間的差異。 有些情況下,代碼既可以是合法的C和C ++,但會產生不同的結果。 例如:

extern int T;

int main()
{
    struct T { int a; int b; };
    return sizeof(T) + sizeof('T');
}

如果它是一個C程序,那么正確答案是8.如果是C ++,答案是9.我已經在我的博客文章中詳細解釋了這一點

希望能幫助到你。 祝好運!

如果您使用C ++編譯器編譯代碼作為C ++程序,那么您可以使用std::vector
如果您使用C編譯器編譯代碼作為C程序,那么您不能。

這是因為std::vector是由C ++標准定義的類型,C標准沒有將任何類型定義為std::vector

簡單來說,C編譯器無法理解std::vector是什么。

有一個開關將.c文件編譯為C ++(/ TP)。 如果啟用此功能,則可以將c用作C ++。 請注意,某些c代碼不會在沒有修改的情況下編譯為C ++(主要與類型轉換有關; c ++對此有更嚴格的規則)。

如果您正在與一些現有的C庫連接,那么您當然可以使用C ++。 如果您正在編譯為C,則無法使用任何C ++功能,例如std::vector

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM