IAR ERROR --- [Li006]

  今天移植代码时遇到一个比较奇葩的问题,记录如下:  

   Error[Li006]: duplicate definitions for "Uart3"; in "E:\IAR_1768Pro_PCB799\Debug\Obj\Uart3_init.o", and "E:\IAR_1768Pro_PCB799\Debug\Obj\uModemG600.o" 

    重复定义 变量 Uart3 

    可是,uModemG600.c 文件中没有 Uart3 这个变量 ,只有 uart3.h 这个头文件,问题就出现在在这头文件中。

   Uart3 这个变量的定义就放在 uart3.h 中,而且 uart3.h 在uart3.c 和 uModemG600.c 中都有#include , uart3.h 也未做条件编译,导致uart3.h 重复编译, 变量重复定义。

   //===================问题描述完毕,一下是个人观点======================

   我个人的做法是,变量/函数 定义在 *.c 文件中,变量/函数声明在 *.h 文件中, 并且 *.h 文件加编译条件,放置重复包含,格式如下:

    user.c 

 1 //user.c file
 2 
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include "user.h"
 6 
 7 signed char g_a = 0;
 8 unsigned char g_b = 0;
 9 signed int g_c = 0;
10  
11 void fun1(void)
12 {
13     //do something
14 }
15 
16 void fun2(void)
17 {
18     //do something
19 }

    user.h

#ifndef _USER_H_
#define _USER_H_

extern signed char g_a;
extern unsigned char g_b;
extern signed int g_c;

void fun1(void);
void fun2(void);

#endif

 

posted @ 2016-05-13 18:30  Waming  阅读(2135)  评论(0编辑  收藏  举报