Я работаю с libdecnumber в проекте, и в библиотеке есть небольшая странная функция, чья документация меня немного смущает.Это функция decNumberCopy()
decNumber * decNumberCopy(decNumber *, const decNumber *);
Вот определение decNumber
/* The size (integer data type) of each unit is determined by the */
/* number of digits it will hold. */
#if DECDPUN<=2
#define decNumberUnit uint8_t
#elif DECDPUN<=4
#define decNumberUnit uint16_t
#else
#define decNumberUnit uint32_t
#endif
/* The number of units needed is ceil(DECNUMDIGITS/DECDPUN) */
#define DECNUMUNITS ((DECNUMDIGITS+DECDPUN-1)/DECDPUN)
/* The data structure... */
typedef struct {
int32_t digits; /* Count of digits in the coefficient; >0 */
int32_t exponent; /* Unadjusted exponent, unbiased, in */
/* range: -1999999997 through 999999999 */
uint8_t bits; /* Indicator bits (see above) */
/* Coefficient, from least significant unit */
decNumberUnit lsu[DECNUMUNITS];
} decNumber;
Вот что документация libdecnumber должна сказать о decNumberCopy()
decNumberCopy (число, источник)
Эта функция используется для копирования содержимого одной структуры decNumber в другую.Он используется, когда структуры могут иметь разные размеры, и, следовательно, прямое копирование структуры с помощью присваивания С неуместно.Он также может иметь преимущества в производительности, когда число короткое относительно размера структуры, поскольку копируются только единицы, содержащие цифры, используемые в исходной структуре.
Таким образом, оставляя в стороне тот факт, чтопростого копирования структуры было бы достаточно для копирования decNumber
, может кто-нибудь с большим пониманием того, как работает libdecnumber, скажет мне, когда две структуры decNumber
будут иметь разный размер?Даже если предположить, что вы собрали два разных модуля компиляции, которые имели разные значения для DECNUMUNITS
(что на самом деле ужасно), в decNumber
отсутствует член размера, поэтому функция не сможет обнаружить разныеразмер в любом случае имеет значение.
Или, возможно, decNumberCopy()
обобщено для будущей версии библиотеки, в которой отдельным decNumber
s будет разрешено различаться по размеру?