[英]C initialize const struct member with existing const variable
我在gcc下使用默認的C語言。
我的代碼:
typedef struct _OpcodeEntry OpcodeEntry;
//
struct _OpcodeEntry
{
unsigned char uOpcode;
OpcodeMetadata pMetadata;
};
//
const OpcodeMetadata omCopyBytes1 = { 1, 1, 0, 0, 0, 0, &CopyBytes };
const OpcodeEntry pOpcodeTable[] =
{
{ 0x0, omCopyBytes1 },
};
錯誤:
error: initializer element is not constant
error: (near initialization for 'pOpcodeTable[0].pMetadata')
如果我將omCopyBytes1
更改為它在上面的行中實際設置的內容,則代碼編譯正常。 我究竟做錯了什么?
您不能使用omCopyBytes1
初始化pOpcodeTable[]
數組的成員,因為omCopyBytes1
是一個運行omCopyBytes1
量的變量,而不是編譯時常量。 C中的聚合初始值設定項必須是編譯時常量,這就是你的帖子中的代碼無法編譯的原因。
作為變量, omCopyBytes1
在內存中有自己的位置,它被初始化為一個項目數組。 您可以通過指針使用此類變量,如下所示:
struct _OpcodeEntry {
unsigned char uOpcode;
const OpcodeMetadata *pMetadata;
};
...
const OpcodeEntry pOpcodeTable[] = {
{ 0x0, &omCopyBytes1 }, // This should work
};
或者,您可以使其成為預處理器常量:
#define omCopyBytes1 { 1, 1, 0, 0, 0, 0, &CopyBytes }
如果以這種方式定義, omCopyBytes1
將不再是變量:它將是在編譯器完成之前消失的預處理器定義。 我建議不要使用預處理器方法,但是如果你必須這樣做的話。
在C中,靜態存儲持續時間對象的初始化程序必須是常量表達式 。 const
-qualified變量不是常量表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.