2017-11-11 100 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

它工作,謝謝! –