原来就是你——"extern"
2007-08-13 16:02
169 查看
上次写MyUI代码的时候本来想用几个全局函数和全局变量来着,可是分到几个cpp里死活编译不过,老说变量重复定义;这两天看ogre的代码老是看到extern "C",不知道是啥意思,恩,看来过几天还要把C++再系统地看一遍。
其实问题很简单,原来就是你——"extern"。都是从人家的网站上学回来的,没啥好炫耀的,放在这个给自己当记录啦。
1、声明外部变量
// A.cpp
extern int i;
void main()
...{
i=100;
}
// B.cpp
int i;
上面的是一个正确的例子,A.cpp中的"extern int i;"告诉编译器"i"是在别的文件里声明的全局整型变量。下面看一个稍微有点不同的例子。
// A.cpp
#include "test.h"
int main()
...{
return 0;
}
// test.h
#pragma once
extern char *a;
// test.cpp
char a[9];
请问,这样可以吗?编译器会告诉你不可以,error C2372: 'a' : redefinition; different types of indirection。所以在编程的时候一定要注意类型要一致。
2、在C++文件中调用以C语言方式编译的函数
由于C++面向对象的特性如重载等,它的编译方式不同于C的方式。为了能在C++文件中调用一个C语言方式编译的库中的函数,你必须通知编译器这个“大傻瓜”这是用C方式编译的函数,例子如下:
// A.cpp
extern "C"
...{
void func();
}
void main()
...{
func();
}
// B.c
void func()
...{
}
3、1+2==3
把1和2结合起来就是3的内容。
// A.cpp
extern "C"
...{
// extern int i;
int i;
}
void main()
...{
i=100;
}
// B.c
int i;
注意,extern "C"中的"C"必须是大写的
在用VC6.0编译这个cpp和c共存的文件时还遇到了关于"预编译的头文件"的问题,在工程选项里设置成不使用"预编译头文件"就好了,具体的信息还没学习,以后有空再看啦。
其实问题很简单,原来就是你——"extern"。都是从人家的网站上学回来的,没啥好炫耀的,放在这个给自己当记录啦。
1、声明外部变量
// A.cpp
extern int i;
void main()
...{
i=100;
}
// B.cpp
int i;
上面的是一个正确的例子,A.cpp中的"extern int i;"告诉编译器"i"是在别的文件里声明的全局整型变量。下面看一个稍微有点不同的例子。
// A.cpp
#include "test.h"
int main()
...{
return 0;
}
// test.h
#pragma once
extern char *a;
// test.cpp
char a[9];
请问,这样可以吗?编译器会告诉你不可以,error C2372: 'a' : redefinition; different types of indirection。所以在编程的时候一定要注意类型要一致。
2、在C++文件中调用以C语言方式编译的函数
由于C++面向对象的特性如重载等,它的编译方式不同于C的方式。为了能在C++文件中调用一个C语言方式编译的库中的函数,你必须通知编译器这个“大傻瓜”这是用C方式编译的函数,例子如下:
// A.cpp
extern "C"
...{
void func();
}
void main()
...{
func();
}
// B.c
void func()
...{
}
3、1+2==3
把1和2结合起来就是3的内容。
// A.cpp
extern "C"
...{
// extern int i;
int i;
}
void main()
...{
i=100;
}
// B.c
int i;
注意,extern "C"中的"C"必须是大写的
在用VC6.0编译这个cpp和c共存的文件时还遇到了关于"预编译的头文件"的问题,在工程选项里设置成不使用"预编译头文件"就好了,具体的信息还没学习,以后有空再看啦。
相关文章推荐
- 今天遇到一个问题,原来在html的form中如果只有一个type="text"的控件,如果在text中点击回车键,就是自动提交表单!
- #ifdef __cplusplus extern "C" { #endif 的解释
- 对extern "C"的一点小认识
- extern "C"
- 原来数据库也有"云"计算
- extern "C"的用法
- extern "C"的理解
- 【转载】extern "C"的用法解析
- extern "C" :
- c++中的 extern "C"
- extern "C" c++如何实现函数的重载
- 为什么在头文件中有extern "C" ? .
- extern “C"的作用
- C++中的extern "C" {}
- "事务"原来是这么回事
- extern "C"
- C++ 中 extern "C" 用法小结
- extern "C"的理解
- some special cases of "extern" in C
- C/C++面试(1)——extern "C"