编译纯C和C ++

时间:2014-02-04 09:45:07

标签: c++ c

我可以编译下一个代码吗?

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

1 个答案:

答案 0 :(得分:14)

不,不是写的。链接将无法找到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());并保持安全。