2016-08-10 3 views
1

Я использую Visual Studio 2015 для создания проекта на 32-битной платформе и на 64-битной платформе.Спецификатор формата 32 бит - 64 бит

Sizeof возвращает неподписанный int в 32-битной платформе и без знака __int64 в 64-битной платформе.

У меня есть следующий код:

printf ("limit is %u. \n",sizeof(var)); 

Мне нужно собрать тот же код на обеих платформах. Использование спецификатора формата% u дает предупреждение в 64 бит, используя% I64u дает предупреждение в 32 бит. Есть ли способ использовать formatpecifier на обеих платформах без записи printf 2 раза (с ifdef _WIN32). У меня есть много этих предупреждений в моем проекте. Это было бы большой работой и не выглядело бы «чистым».

ответ

3

типsizeof является size_t.

Использовать %zu в качестве спецификатора формата для этого типа. Он гарантированно будет хорошо определен для всех платформ.