标签:bsp ... dex 范围 roc linking 嘻嘻 ora 编译器
(1)在C语言的头文件中定义变量出现的问题
最好不要傻嘻嘻的在头文件里定义什么东西。比如全局变量:
/*xx头文件*/
#ifndef
_XX_头文件.H
#define
_XX_头文件.H
int A;
#endif
那么,很糟糕的是,这里的int A
是个全局变量的定义,所以如果这个头文件被多次引用的话,你的A会被重复定义,显然语法上错了。只不过有了这个#ifndef的条件编译,所以能保证你的头文件只被引用一次,不过也许还是不会出岔子,但若多个c文件包含这个头文件时还是会出错的,因为宏名有效范围仅限于本c源文件,所以在这多个c文件编译时是不会出错的,但在链接时就会报错,说你多处定义了同一个变量
错误警告:Linking...
incl2.obj : error LNK2005: "int glb" (?glb@@3HA)
already defined in incl1.obj
Debug/incl.exe : fatal error LNK1169: one
or more multiply defined symbols found
正确的作法是在c源文件中定义一个全局变量。在头文件中加入全局变量的声明
//var.c 一个主要用于定义全局变量的c源文件
int
g_a;
char
g_x;
//var.h 用于声明定义的全局变量
extern
int
g_a;//使用extern在头文件中声明全局变量
extern
char
g_x;
//test.c 一个用于测试的头文件
#include <var.h>
void
f(){
g_a = 1;
g_x =
‘x‘
;
}
标签:bsp ... dex 范围 roc linking 嘻嘻 ora 编译器
原文地址:http://www.cnblogs.com/hai5111/p/6227365.html