![](/img/trans.png)
[英]why can't I use partial struct initialization for a malloced struct in C
[英]Why can't I use `BIGNUM` in this C struct declaration?
我正在試驗一些 ~2005 C 代碼(我認為使用 OpenSSL 0.9.8),我嘗試在 Ubuntu 22.04 上使用 OpenSSL 3.0.2 make
它。
最小示例:
#include <openssl/bn.h>
struct fraction
{
BIGNUM numerator;
BIGNUM denominator;
}
預期:一切都按預期構建。
實際:編譯器抱怨兩個字段的類型聲明不完整。
為什么會這樣? 這不是有效的聲明嗎? 或者是別的什么?
OpenSSL 的更高版本使幾種類型不透明,包括BIGNUM
,這意味着您不能在用戶代碼中直接實例化它們。 特別是BIGNUM
類型從 1.1.0 版開始成為不透明類型。
您需要使用指針:
struct fraction
{
BIGNUM *numerator;
BIGNUM *denominator;
};
並使用適當的函數來創建和銷毀它們,以及使用相關的訪問器函數來訪問成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.