我可以编译下一个代码吗?
main.CPP c ++语言文件
#include <stdio.h>
#include "file.h"
int main()
{
printf("Hello");
printf(func());
return 0;
}
file.C c语言文件
#include "file.h"
char* func()
{
return "This is a C string";
}
file.H
#ifndef FILE_H
#define FILE_H
char* func();
#endif // FILE_H
答案 0 :(得分:14)
不,不是写的。链接将无法找到func()
函数,该函数通常会被“修改”,这将是您的线索。
你需要告诉C ++编译器file.h
文件声明一个C函数,使用:
extern "C" {
#include "file.h"
}
这是因为C ++没有在C中使用的名称修改。请参阅this Wikipedia article。
作为小问题:
const char * func(void);
。空括号在C中与C ++中的含义不同。cout <<
,而不是printf()
。printf()
,也不要使用外部源文本作为第一个参数,它可能很危险。当“外部”仍然是您自己的源文件时,情况会更少,但最好是编写printf("%s\n", func());
并保持安全。