Почему использование «long long» в C или C ++ может быть плохим? - PullRequest
4 голосов
/ 31 октября 2009

Почему использование "long long" в C или C ++ может быть плохим?

На днях я собирал библиотеку времени выполнения, и в коде она проверяет, являются ли long 64-битными, а если нет, то использует long long. Но наряду с этим он отправляет #warning «используя long long». Я не могу придумать причину, по которой «long long» является предупреждением, если только это не было отладкой, оставшейся от разработчика.

Спасибо Chenz

Ответы [ 4 ]

10 голосов
/ 31 октября 2009

Насколько я знаю, long long в настоящее время стандартно только в C99. Это также будет тип в C ++ 0x, но большинство современных компиляторов уже должны его поддерживать.

Однако для целых чисел фиксированного размера можно использовать заголовок C99 <stdint.h> или C ++ <boost/cstdint.hpp>

9 голосов
/ 31 октября 2009

Две причины:

Вы не знаете, как долго (ха-ха!) Long long, поэтому, если код предполагает, что он ровно 64 бита, может возникнуть проблема.

Если вы используете старый компилятор C, он может не поддерживать long long.

7 голосов
/ 31 октября 2009

Я согласен с Томасом Падроном-МакКартом. Гораздо лучше проверить наличие int64_t (подписанный) или uint64_t (неподписанный) соответственно и использовать их, если они существуют. Это тот же здравый смысл, который привел к size_t.

5 голосов
/ 31 октября 2009

Это не портативно. В частности, компилятор Windows не использовал для поддержки long long, и вместо этого вам пришлось использовать __int64 и unsigned __int64 (но не обязательно использовать на платформах, отличных от Windows).

Это было некоторое время назад, поэтому, возможно, теперь у вас больше шансов всегда быть доступными uint64_t и int64_t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...