g ++: предупреждение: целочисленная константа является слишком большой для 'длинного' типа

Что я могу сделать (программно) для избавлений от предупреждения?

 ...
 unsigned long long v=(unsigned long long)0xffffeeeeddddcccc;
 ...

g++ main.cpp -o main
main.cpp:6: warning: integer constant is too large for ‘long’ type

но когда я запускаю программу, все прекрасно как ожидалось:

./main
  sizeof(unsigned long long)==8
  value of v==0xffffeeeeddddcccc

используемая среда:

  • Кармические Ubuntu 32 бита
  • g ++ версия: v4.4.1

Править: вот полный и компилируемый main.cpp

#include <iostream>
#include <iomanip>
using namespace std;

int main(void) {
  unsigned long long v=(unsigned long long)0xffffeeeeddddcccc;
  const unsigned v_size = sizeof(unsigned long long);
  cout << "sizeof(unsigned long long)==" << v_size << endl;
  cout << "value of v==0x" << setw(v_size) << setfill('0') << hex << v << endl;
  return 0;
}
7
задан 23 December 2009 в 08:59
поделиться

1 ответ

В соответствии со стандартом C++ 2. 13.1/2:

Тип целочисленного литерала зависит от его формы, значения и суффикса. Если он десятичный и не имеет суффикса, то имеет первый из этих типов, в котором может быть представлено его значение: int, long int; если значение не может быть представлено в виде long int, то поведение является неопределенным.

Новый стандарт языка Си++ позволяет использовать ull суффикс. g++ 4.4.1 поддерживает этот суффикс, так же как и Visual C++ 2008. Его можно использовать следующим образом:

unsigned long long v=0xffffeeeeddddccccULL;
12
ответ дан 6 December 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: