Нужно ли менять тип параметра при переносе моей библиотеки в 64-битную версию? - PullRequest
1 голос
/ 25 февраля 2020

Я перевожу свою библиотеку с 32 на 64 бита. Библиотека написана в C. Скажем, для следующего API:

void foo(uint32 var)

Нужно ли мне менять тип переменной на uint64 при любых обстоятельствах? Что если max of var не больше 0xffffffff?

1 Ответ

2 голосов
/ 25 февраля 2020

Нужно ли мне менять тип переменной на uint64 при любых обстоятельствах? Что делать, если max of var не превышает 0xffffffff?

Ничто не говорит о том, что вы должны изменить типы данных при компиляции для 64-битной системы. Параметр uint32 будет вести себя так же, как и раньше. (Однако вам, вероятно, следует использовать uint32_t из <stdint.h>, если вы хотите гарантировать, что ваши типы данных работают правильно.)

Есть несколько других мест, где вы хотите Размер ваших переменных можно изменить, но поведение будет автоматически корректным, если вы используете правильные типы данных:

  • uintptr_t Это целое число размером с указатель. Таким образом, вы можете разыграть от void* до uintptr_t и обратно, не теряя никакой информации. Если вместо этого вы преобразуете от void* до uint32_t, вы повредите ваши указатели.
  • off_t Размер смещений файлов может измениться (в зависимости от вашей цепочки инструментов), поэтому вам следует использовать этот соответствующий typedef.
...