源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

头文件不宜定义变量的原因全面解析

  • 时间:2022-11-04 09:43 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:头文件不宜定义变量的原因全面解析
test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问题),但是无法防止变量被重复定义。
[u]复制代码[/u] 代码如下:
# vi test.c ------------------------------- #include <stdio.h> #include "test.h" extern i; extern void test1(); extern void test2(); int main() {    test1();    printf("ok\n");    test2();    printf("%d\n",i);    return 0; } # vi test.h ------------------------------- #ifndef _TEST_H_ #define _TEST_H_ char add1[] = "www.shellbox.cn\n"; char add2[] = "www.scriptbox.cn\n"; int i = 10; void test1(); void test2(); #endif # vi test1.c ------------------------------- #include <stdio.h> #include "test.h" extern char add1[]; void test1() {    printf(add1); } # vi test2.c ------------------------------- #include <stdio.h> #include "test.h" extern char add2[]; extern i; void test2() {    printf(add2);    for (; i > 0; i--)        printf("%d-", i); }
[u]复制代码[/u] 代码如下:
# Makefile ------------------------------- test:    test.o test1.o test2.o test1.o: test1.c test2.o: test2.c clean:    rm test test.o test1.o test2.o
[b]错误:[/b] test-1.0编译后会出现"multiple definition of"错误。 [b]错误分析:[/b] 由于工程中的每个.c文件都是独立的解释的,即使头文件有 #ifndef _TEST_H_ #define _TEST_H_ .... #enfif 在其他文件中只要包含了global.h就会独立的解释,然后每个.c文件生成独立的标示符。在编译器链接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。 [b]解决方法 [/b]在.c文件中声明变量,然后建一个头文件(.h文件)在所有的变量声明前加上extern,注意这里不要对变量进行的初始化。然后在其他需要使用全局变量的.c文件中包含.h文件。编译器会为.c生成目标文件,然后链接时,如果该.c文件使用了全局变量,链接器就会链接到此.c文件 。 [b]test-2.0 [/b]
[u]复制代码[/u] 代码如下:
# vi test.c ------------------------------- #include <stdio.h> #include "test.h" int i = 10; char add1[] = "www.shellbox.cn\n"; char add2[] = "www.scriptbox.cn\n"; extern void test1(); extern void test2(); int main() {    test1();    printf("ok\n");    test2();    printf("%d\n",i);    return 0; } # vi test.h ------------------------------- #ifndef _TEST_H_ #define _TEST_H_ extern i; extern char add1[]; extern char add2[]; void test1(); void test2(); #endif # vi test1.c ------------------------------- #include <stdio.h> #include "test.h" void test1() {    printf(add1); } # vi test2.c ------------------------------- #include <stdio.h> #include "test.h" void test2() {    printf(add2);    for (; i > 0; i--)        printf("%d-", i); }
[b]个人认为解决此类问题有几种办法: [/b]1.在.cpp里定义变量,在其他调用处使用extern 2.在头文件里使用宏定义
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部