我的包括警卫有什么问题?

问题描述 投票:0回答:1

C noob在这里。我有一个全局标题,opennec.h,它有一堆包括<math.h>等等。它还有几个基本定义:

#define NUM_COMNTS  5
char *comment_codes[NUM_COMNTS] =
{
  "CM", "CE", "!", "'", "#"
};

由于多个定义(当然),这些引起了投诉,所以我做了我第一次忘记做的事情并添加了警卫:

#ifndef COMNT_CODES_DEF
#define COMNT_CODES_DEF
#define NUM_COMNTS  5
char *comment_codes[NUM_COMNTS] =
{
  "CM", "CE", "!", "'", "#"
};
#endif

但是...

duplicate symbol _comment_codes in:
    calculations.o
    somnec.o

好吧,我做错了什么?

c
1个回答
4
投票

你的comment_codes符号需要在头文件中声明,

#ifndef COMNT_CODES_DEF
#define COMNT_CODES_DEF
#define NUM_COMNTS  5
extern char *comment_codes[NUM_COMNTS];
#endif

和一个(只有一个)c文件中的定义。

#include "comnt_codes.h"

char *comment_codes[NUM_COMNTS] = {
  "CM", "CE", "!", "'", "#"
};

否则,包含您的注释代码标头的每个c文件都将提供comment_codes的冲突定义。

© www.soinside.com 2019 - 2024. All rights reserved.