[英]Clarification sought on validity and reason for “empty” C struct definition in Python CFFI definition file
我正在閱讀一些代碼,並遇到了這個相當奇怪的 C 結構定義:
任何人都可以解釋(如果可能的話,請提供參考資料):
如果這是一個有效的結構定義
這種定義的目的是什么(沒有定義字段/成員)?
typedef 結構數據對象 {...; } 數據對象;
[[ 編輯 ]]
上面的代碼在 這里可用
如果這是一個有效的結構定義
不。
這種定義的目的是什么(沒有定義字段/成員)?
該文件的目的是為 python CFFI 解析器提供類型和 function 聲明以供使用。
該文件的目的是由python CFFI ffibuilder.cdef()預處理。 從讓 C 編譯器填補空白:
此外,您可以在 cdef() 的各個地方使用“...”(字面意思是點-點-點),以便讓 C 編譯器填寫詳細信息。 這些地方是:
- 結構聲明:任何以“...;”結尾的 struct { } 或 union { } 因為最后一個“字段”是部分的:它可能缺少字段,讓它們亂序聲明,使用非標准 alignment 等。確切地說,通過查看 cdef 推導出的字段偏移量、總結構大小和總結構 alignment不依賴,而是由編譯器更正。 (但請注意,您只能訪問您聲明的字段,而不能訪問其他字段。)任何不使用“...”的結構聲明都被認為是准確的,但要檢查:如果不正確,則會出現錯誤.
- [...]
- 未知類型:[....] 在某些情況下,您需要說 foo_t 不是不透明的,而只是一個您不知道任何字段的結構; 那么你會使用
typedef struct {...; } foo_t;
typedef struct {...; } foo_t;
.
我懷疑這對 CFFI 意味着struct dataObject
和DATA_OBJECT
是不透明類型,只能用作指針,並且 CFFI 解析器不支持結構聲明。
據我了解,該文件在 clips_build.py中用於構建與 C 的clipspy
python 接口。
- 如果這是一個有效的結構定義
不,不是。 要獲取 C17 6.7.2.1 形式語法的一部分:
結構聲明:
說明符限定符列表結構聲明符列表選擇;
靜態斷言聲明
因此,首先,該結構需要包含一個“說明符限定符列表”,用簡單的英語來說就是變量名之前的const int
等內容。 由於這不存在,例如 gcc 抱怨語法錯誤:
錯誤:“...”標記之前的預期說明符限定符列表
2.這樣定義的目的是什么(沒有定義字段/成員)?
我猜它要么是偽代碼,要么是一個開發“TODO”,他們提交了無法編譯的代碼,因為它還沒有被編寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.