簡體   English   中英

尋求澄清 Python CFFI 定義文件中“空”C 結構定義的有效性和原因

[英]Clarification sought on validity and reason for “empty” C struct definition in Python CFFI definition file

我正在閱讀一些代碼,並遇到了這個相當奇怪的 C 結構定義:

任何人都可以解釋(如果可能的話,請提供參考資料):

  1. 如果這是一個有效的結構定義

  2. 這種定義的目的是什么(沒有定義字段/成員)?

    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 dataObjectDATA_OBJECT是不透明類型,只能用作指針,並且 CFFI 解析器不支持結構聲明。

據我了解,該文件在 clips_build.py中用於構建與 C 的clipspy python 接口。

  1. 如果這是一個有效的結構定義

不,不是。 要獲取 C17 6.7.2.1 形式語法的一部分:

結構聲明:
說明符限定符列表結構聲明符列表選擇;
靜態斷言聲明

因此,首先,該結構需要包含一個“說明符限定符列表”,用簡單的英語來說就是變量名之前的const int等內容。 由於這不存在,例如 gcc 抱怨語法錯誤:

錯誤:“...”標記之前的預期說明符限定符列表


2.這樣定義的目的是什么(沒有定義字段/成員)?

我猜它要么是偽代碼,要么是一個開發“TODO”,他們提交了無法編譯的代碼,因為它還沒有被編寫。

暫無
暫無

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

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