file1.c中
if(xshippingpro.xshippingpro3==true)
{
$enabled=false;
}
else
{
$enabled=true;
}
file2.cpp
int add(int a, int b)
{
return (a+b);
}
h1.h
void main()
{
int c;
c = add(1,2);
}
案例1: 当我在 file1.c 文件中包含 h1.h 时,gcc编译器会抛出错误" expect'(' before string)恒定"
案例2: 当我在 file2.cpp 文件编译工作中成功包含 h1.h 时
问题:
1)这是否意味着我不能在带有extern" C"的C中包含头文件。功能呢?
2)我可以在extern中包含标题" C"如下所示
extern "C" {
#include "stdio.h"
int add(int a,int b);
}
3)我可以将c ++函数定义放在带有extern" C"的头文件中。所以我可以在C文件中调用它?
例如
a.cpp(cpp文件)
extern "C" {
#include "abc.h"
#include "...h"
}
a.h(头文件)
void test()
{
std::printf("this is a test function");
}
b_c.c(c档案)
extern "C" {
void test();
}
答案 0 :(得分:3)
像这样编写a.h:
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
int add(int a,int b);
#ifdef __cplusplus
}
#endif
通过这种方式,您可以声明多个函数 - 不需要为每个函数添加前缀。 正如其他人所提到的:extern C是一个C ++的东西,所以它需要"消失"当被C编译器看到时。
答案 1 :(得分:1)
自从extern" C" C编译器无法理解您需要创建一个既可以包含在C和C ++文件中的标头。
E.g。
#ifdef __cplusplus
extern "C" int foo(int,int);
#else
int foo(int,int);
#endif