2017-11-11 75 views
0

我正在寻找一种方法来创建一个常数的结构数组。 我想这一个(it'a在头文件):如何创建const数组的结构?

//#pragma once 
#ifndef __CANDY_DB_H__ 
#define __CANDY_DB_H__ 

#include <stdbool.h> 
#include <string.h> 

typedef struct Candy { 
    char Name[16]; 
    bool Vegan; 
}Candies; 

const Candies first = {"Apple",true}; 

const Candies second = ("Popcorn", true); 

const Candies CandiesArray[2] = { first, second }; 

#endif //__CANDY_DB_H__ 

但它似乎是错误的。

这样做的最好方法是什么?

+1

不要发明与双下划线或下划线和一个大写字母开头的名称。它们被保留用于“实施”。是的,系统标题使用符号;他们被要求这样做。你不应该因为你可能会干扰实现,或者被实现搞砸了,这是你的错。 –

回答

1

问题是CandiesArray在文件范围(任何函数之外)声明,这意味着它代表一个静态存储持续时间的对象,它必须通过常量表达式来初始化。与C++不同,C first不是一个常量表达式,尽管const限定符。

为了解决这个问题,你可以把元素直接intitializer内:

const Candies CandiesArray[2] = { 
    {"Apple", true}, 
    {"Popcorn", true} 
}; 
+0

太好了,谢谢!你知道我怎样才能在同一个项目中的不同C文件中使用这个常量? –

+0

@s_s:普通的方法是_declare_头部中的一个数组和_define_它在它的源文件中。例如,你可以将'extern const Candies CandiesArray [];'放入'candy_db.h'和'const CandiesArray [2] = {...};'进入'candy_db.c'(它必须包含它的头文件首先)。然后,您可以通过包含'candy_db.h'标头在其他文件中使用'CandiesArray'。 –

+0

它工作,谢谢! –