2012-08-02 121 views
0

我有一個小小的懷疑。類函數[C++]不屬於任何類的調用函數

我在C++代碼中加入一些額外的功能,而這些功能也越來越受一類函數調用。

是否有必要讓這些額外的功能類的一部分,也可以一個C++類函數調用C函數?

如果是,應如何修改makefile?

謝謝!

+0

當然,類函數可以調用獨立函數。沒有問題。 – 2012-08-02 15:00:07

+0

在C++中可以有免費的功能,而且它與makefile無關。 – juanchopanza 2012-08-02 15:01:14

+0

這取決於。如果添加新功能需要訪問類成員,那麼它應該是類的一部分。是的,一個C++類的成員函數可以調用一個C函數。 – Mahesh 2012-08-02 15:02:09

回答

1

只要你已經包括了一些聲明和C函數在它與在編譯某些時候,你可以調用C函數中的任何C++函數。例如:

mycfunc.h:

void test(int x); 

myfunc.c:

void test(int x) { 
    printf("%d\n", x); 
} 

現在,只需包括要使用該函數的頭文件。在Makefile中,只要確保在最終編譯中包含「myfunc.c」(或者如果您正在編譯對象,則爲.o)。

+0

好的......謝謝還有一件事,爲了編譯C++文件,我們使用「g ++ filename.c -o filename」,而爲了編譯C文件,我們使用「gcc」而不是「g ++」。在make文件中包含「.c」文件是否會引起「g ++」編譯語法的問題? – sam32 2012-08-02 15:06:19

+0

@ sam32:可能。你需要知道'extern「C」'說明符,它允許C++代碼具有(創建或調用)具有C兼容名稱的函數。通常C++名稱不是C兼容的,因爲C++允許重載。 – 2012-08-02 15:07:51

+0

這意味着我無法簡單地通過在makefile中包含「.c」文件名來編譯帶有「.cpp」文件的「.c」文件? – sam32 2012-08-02 15:13:21

1

你不需要把它們放在課堂上。 C++中存在函數,就像在C中一樣,所以你可以使用它們。試試看,如果你有麻煩再問一次。 正如您聲明您將函數添加到C++項目中,只需將所有代碼視爲C++即可(並將其視爲)。使用與項目其他部分相同的文件擴展名將新東西放在文件中。

編輯響應從OP評論:

是的,沒必要去想在這種情況下,C和C++之間的區別。只需編寫.cpp文件。在makefile中,只需添加這些文件,就像其他文件在那裏列出一樣。

C和C之間的區別++,如果您有現有的C++代碼,並需要的,如果你有現成的C庫來使用,如果從C,或例如,需要從C++調用是非常重要的。在你的情況下,很可能沒有理由不堅持C++。與Java不同,擁有獨立功能是完全自然的。在C++標準庫中甚至有很多。現在

,如果在你的情況下,它是很好的設計有獨立的功能,而不是增加類(修改或使用繼承)是很難說給您發佈的信息。但是,如果你需要做的事情可以以自然的方式完成而不需要訪問現有類的私有部分,那麼答案很可能是肯定的。

+0

你的意思是說,我將添加的獨立文件(包含我添加的C函數)應該用「.cpp」擴展名而不是「.c」擴展名來命名?我對嗎?然後在makefile中,我繼續添加我創建的新文件? – sam32 2012-08-02 15:20:39

+0

是的。我更新了答案。 – 2012-08-02 16:23:06

1

C++不是純粹的面向對象的語言。

所以,你可以使用命令式的形式,因爲它是在C(即使它的模塊化與否)。

未封裝在對象中的一些C函數可以使用c * includes(例如ctime)訪問。