我知道全局变量不应该在头文件中定义,而我们应该extern
只在头文件中声明它们。
但是我仍然尝试在以下标头中定义一个全局变量lib.h
:
//lib.h
int i;
void add();
尝试在 C 和 C++ 中使用此标头时,我得到了一些有趣的结果
在 C 中,我在main.c
和 in 中包含了头文件lib.c
,它编译和运行得很好:
//main.c
#include <stdio.h>
#include <stdlib.h>
#include "lib.h"
int main()
{
printf("%d\n", i);
add();
printf("%d\n", i);
return 0;
}
----
//lib.c
#include "lib.h"
void add(){
i++;
}
但是当我在 C++ 中使用类似的代码(lib.h
并且lib.cpp
与上面相同)运行它时,它会给出关于i
具有多个定义的变量的错误消息:
//main.cpp
#include <iostream>
#include "lib.h"
using namespace std;
int main()
{
cout<<i<<endl;
add();
cout<<i<<endl;
return 0;
}
为什么它用 C 而不是 C++ 编译?