启用C代码作为C ++代码运行

时间:2017-11-06 18:43:52

标签: c++ c file-io duplicates

我有一个C程序,可以在目录中找到重复的文件。程序在命令行上执行并传递2个参数。一个是父目录,参数二是文件名。它是用c编写的代码,但我有一个GUI和其他用c ++编写的“微服务”文件。

如何从c ++文件中调用此C代码?

int(...)

我的错误包括:(来自compareFiles函数)

未找到2x'open'标识符

未找到2x'读'标识符

那些好奇的工作代码。 谢谢@MarcusMüller& @JesperJuhl

public String concat = "";
private String txt = "Hello ";

protected void print() {
   txt = txt.concat(concat);
   System.out.println("Output: " + txt);
}

public static void main(String[] args) {
   StringTest tb = new StringTest();
   tb.concat = "World";
   tb.print();
 }

2 个答案:

答案 0 :(得分:3)

你通常不会这样做。您将它包装在C函数中,并将其编译为目标文件。

然后你将C标头包含在extern "C" {…}中,然后从C ++中调用该函数。

构建可执行文件时,您将链接到包含C函数的目标文件中。完成!

注意:C不是C ++,虽然你的代码在C ++中不是非法的(据我可以立即告诉),它做的很“丑陋”(比如#define ing truefalse - 呃,老实说,这在C中已经是一个坏主意了。因此,像处理Fortran,Java中的代码或任何其他具有调用约定的语言一样处理它,您可以使用C ++(通常, C调用约定) :只需将它用作外部对象。

答案 1 :(得分:1)

使用::open::read会导致找到这些功能。

您可能还希望将C标头(例如" string.h")替换为其C ++等效版本(例如" cstring")。

您对truefalse的定义也应该如此。在C ++中,那些是适当的bool,而不是整数。这意味着CompareFiles的返回类型应更改为bool

你应该将duplicateCount包装在一个匿名命名空间中 - 或者从更新它的函数中返回它(通过返回一个带有两个整数的小结构,或者使用std::pair或{{1全局变量是邪恶的。