[英]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.