编译纯 C 和 C++

3

我能编译下面的代码吗?

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

6
可以的吗?你真正遇到了什么困难? - RedX
4
可以尝试一下,为什么要问我们。 - surya singh
2
我认为“纯粹”的C++需要使用#include <cstdio> - Lundin
什么是“纯 C++”?其中是否包括 printf 函数?正如 @Ludin 指出的那样……在“纯 C++”代码中使用 #include <stdio.h>#include<cstdio> 可以被认为是相当矛盾的。 - luk32
1个回答

15

不行,按照现有的写法是无法找到func()函数的链接的,这个函数通常会被"缠绕",这就是你的提示。

你需要告诉C++编译器,file.h文件声明了一个C函数,需要使用:

extern "C" {
#include "file.h"
}

这是因为C++会进行名称重整,而C语言不会。请查看此维基百科文章了解详情。

此外:

  • C语言函数应该是const char * func(void);。在C和C++中,空括号的含义是不同的。
  • C++应该使用cout <<而不是printf()
  • 即使使用printf(),也不要将外部文本作为第一个参数,这可能是危险的。当然,如果“外部”仍然是您自己的源文件,则风险较小,但最好编写printf(“%s \ n”,func()); 以确保安全。

编译器会抛出什么错误? - Subhajit
非常感谢))) 编译器在没有extern的情况下抛出对`func()'的未定义引用 - Mouse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接