c++ - 编译纯 C 和 C++

标签 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";
}

文件.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());并注意安全。

关于c++ - 编译纯 C 和 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548835/

相关文章:

c - 在C中有效地对二维数组的列进行排序

c - 如何反转字符串中每个单词中的字母

c - 如何通过 graphviz 编辑图形?

c++ - 我现在如何知道哪些 DLL 是 C++ 的一部分?

c++ - 填充 vector 时的效率

C++使用单个函数对具有多种值类型的数组进行排序

c++ - 利用 BST 的优先级队列 - 有趣的输出

c - 具有递归调用 f(n/2) 和 f(n - 2) 的函数的时间复杂度?

c - 搜索包含转义字符的字符串

c++ - 选择哪种设计来进行复杂的对象初始化?