簡體   English   中英

C - 異常數組初始化

[英]C - Unusual array initialization

我正在研究一些具有這種不尋常的數組初始化的遺留C代碼:

uint32_t defsMB40000[REG40000_SIZE] = 
{
 #include "modbusDefs40000.h"
}; 

頭文件是逗號分隔的數字和注釋的列表。 我之前從未見過這個構造,但它似乎確實正常工作。 在標題內部是不是更好:

uint32_t defsMB40000[REG40000_SIZE] = 
{
   0,
   0xFF,
   ...
}; 

然后

 #include "modbusDefs40000.h"

在.c文件中?

我懷疑它甚至存在的原因是頭文件是由python腳本創建的。 我很感激你對這個成語的評論,如果你看過它的話。

謝謝,

JH

這不是一個成語,它只是一個使用C預處理器規則完成工作的技巧。 從本質上講,作者依賴於這樣一個事實:C預處理器的工作方式就好像文件的內容在字面上嵌入了包含點。 結果很混亂,但它完成了初始化數組的任務。

由於C頭應該具有某種結構,因此命名文件modbusDefs40000.h具有誤導性。 使用不同的擴展名,例如modbusDefs40000.data或具有相同效果的東西,可以讓讀者更清楚地了解文件的用途。

如果您正在尋找一種重構方法以獲得更好的清晰度,請考慮使用數組的前向聲明制作標題,即

// modbusDefs40000.h
extern uint32_t defsMB40000[REG40000_SIZE];

並更改Python腳本以生成初始化程序的數據部分周圍的完整聲明(即兩個固定行 - uint32_t defsMB40000[REG40000_SIZE] = {在頂部和};在底部。調用生成的文件modbusDefs40000.c ,並使用它與項目中的其他C文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM