Когда ваша библиотека предоставляется в качестве источника, одним из вариантов является предоставление «портирующего» заголовка, в котором ваши пользователи несут ответственность за предоставление 64-битного типа (вы должны указать имя).Тогда, естественно, они также обязаны иметь дело с любыми предупреждениями компилятора о том, что их выбор типа провоцирует, либо избегает их, либо подавляет их, либо игнорирует их.
Я думаю, это то, что вы называете "возиться с #defines", но я не думаю, что с этим слишком много проблем.Вы можете предоставить версию по умолчанию, которая будет просто использовать long long
напрямую и будет работать на вашем 10-летнем ящике Solaris, а также на Windows, так что большинству пользователей никогда не придется приближаться к настраиваемой пользователем части вашей библиотеки.
Затем для педантичных пользователей вы можете предоставить версию для GCC, которая включает <sys/types.h>
и использует int64_t
вместо long long
.Это не вызывает у меня никакого предупреждения с g++ -pedantic
.Вы могли бы даже сделать это в версии по умолчанию, распознав GCC, который, безусловно, работает с #defines, но опять же не совсем так, как это обычно бывает в мультиплатформенном продукте.
Если ваша библиотека такжеЕсли для определенных платформ предусмотрены бинарные файлы, то, конечно, вы должны решить, какой будет 64-битный тип.Если он также появляется в интерфейсе библиотеки (и, следовательно, в заголовочном файле), вам просто нужно выбрать тот, который не будет вызывать никаких предупреждений с разумными опциями компилятора.Я думаю, что -pedantic
- это разумный вариант компилятора, как, впрочем, и ваши пользователи, так что опять же это int64_t
в GCC.