У меня есть код, который печатает объем памяти, используемый программой. Линия похожа на следующую:
printf("The about of RAM used is %u", anIntVariable*sizeof(double) );
где anIntVariable является переменной int для числа элементов двойного массива. Во всяком случае, на 32-битных системах у меня никогда не было никаких проблем, но в 64-битных системах я получаю предупреждение о компиляторе об использовании "% u" для целых чисел без знака. Использование "% lu" в качестве кода формата устраняет проблему на 64-битной, но заставляет компилятор жаловаться на 32-битный, потому что тип возвращается к unsigned int. Я обнаружил, что, действительно, sizeof (double) возвращает другое значение в 32-битных 64-битных системах. Я нашел несколько руководств для веб-страниц, чтобы преобразовать код с 32-бит на 64 бит. Но я бы предпочел иметь код, который работает на обоих, вместо того, чтобы просто конвертировать назад и вперед.
Как написать эту строку независимым от платформы способом? Я знаю много способов сделать это с помощью препроцессорных директив, но это похоже на взломать. Конечно, там элегантный способ, который я не понимаю.