我可以编译下一段代码吗?
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";
}
文件.H
#ifndef FILE_H
#define FILE_H
char* func();
#endif // FILE_H
不,不是写的那样。链接将无法找到 func()
功能,通常会被“破坏”,这将是您的线索。
您需要告诉 C++ 编译器 file.h
文件声明一个 C 函数,使用:
extern "C" {
#include "file.h"
}
这是因为 C++ 进行了 C 中未使用的名称修改。参见 this Wikipedia article .
作为次要点:
- C 函数应该是
const char * func(void);
.空括号在 C 和 C++ 中的含义不同。
- C++ 应该使用
cout <<
, 不是 printf()
.
- 即使使用
printf()
, 不要使用外部来源的文本作为第一个参数,这可能很危险。当然,当“外部”仍然是您自己的源文件时,就更少了,但是最好写成 printf("%s\n", func());
并注意安全。