我有一个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();
}
答案 0 :(得分:3)
你通常不会这样做。您将它包装在C函数中,并将其编译为目标文件。
然后你将C标头包含在extern "C" {…}
中,然后从C ++中调用该函数。
构建可执行文件时,您将链接到包含C函数的目标文件中。完成!
注意:C不是C ++,虽然你的代码在C ++中不是非法的(据我可以立即告诉),它做的很“丑陋”(比如#define
ing true
和false
- 呃,老实说,这在C中已经是一个坏主意了。因此,像处理Fortran,Java中的代码或任何其他具有调用约定的语言一样处理它,您可以使用C ++(通常, C调用约定) :只需将它用作外部对象。
答案 1 :(得分:1)
使用::open
和::read
会导致找到这些功能。
您可能还希望将C标头(例如" string.h")替换为其C ++等效版本(例如" cstring")。
您对true
和false
的定义也应该如此。在C ++中,那些是适当的bool,而不是整数。这意味着CompareFiles
的返回类型应更改为bool
。
你应该将duplicateCount
包装在一个匿名命名空间中 - 或者从更新它的函数中返回它(通过返回一个带有两个整数的小结构,或者使用std::pair
或{{1全局变量是邪恶的。