在.H头文件中对变量定义、赋初值的问题

平成十八年五月七日 午前十時十三分 曇り

相关环境如下:
> 共包含有三个文件,其中一个.PC的,一个.C的,一个.H的文件.
> .H文件中定义了一个16*4的字符数组URL_DECODE,并为他赋了初值.
> .PC文件与.C的文件都对.H的头文件进行了引用
----------navigate.pc-------------

#include "navigate.h"

/* メイン処理 */
main( int argc , char *argv[] )
{
}

----------------------------------

----------tmp_common.c----------

#include "navigate.h"

int osc_user_div_chk( char *user_id )
{
return 0;
}

----------------------------------

-----------navigate.h-------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char URL_DECODE[16 * 4] = {
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0xA , 0xB , 0xC , 0xD , 0xE , 0xF , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0xA , 0xB , 0xC , 0xD , 0xE , 0xF , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
};

----------------------------------


出现的问题:
在使用MAKEFILE文件对这三个文件进行编译时,出现了对URL_DECODE重复定义的错误.具体的错误信息如下:

ld: 重大なエラー: シンボル `URL_DECODE' は複数定義されています:
(ファイル /Project/MANAGE/QA0605/OSCPROB/src/tmp/navigate.o とファイル /var/tmp//cc2c6n90.o);
ld: 重大なエラー: ファイル処理エラー。/Project/MANAGE/QA0605/OSCPROB/src/tmp/navigate へ書き込まれる出力がありません。



造成出现此问题的原因:
在头文件中对URL_DECODE变量初过初值,并且在两个文件中都引用了URL_DECODE定义所在的头文件,这样就造成了每一次引用头文件时都对这个变量进行了定义并赋初值.
解决方法:
第一种方法:将URL_DECODE的定义部分更改为静态变量,这样就避免了在多次引用头文件时对该变量的多次定义赋初值.
static char URL_DECODE[16 * 4] = {
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0xA , 0xB , 0xC , 0xD , 0xE , 0xF , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0xA , 0xB , 0xC , 0xD , 0xE , 0xF , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
};


第二种方法:不要在头文件中对变量赋初值.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值