2012-08-02 125 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)访问。