Эта функция существует в OS X и позволяет передавать в функцию настраиваемый локальный файл. setlocale не является потокобезопасным, а передача locale в качестве параметра является.
Если эквивалента нет, подойдет любой способ printf, не зависящий от локали, или printf только для удвоений (% g).





Вы можете попробовать uselocale, который устанавливает языковой стандарт потока (а не языковой стандарт процесса) перед вызовом printf.
@Sunlight: Я думаю, тебе стоит немного уточнить свой ответ, но я думаю, что ты, наверное, прав. @phjr: решение BSD / MacOS X с printf_l () возможно более аккуратно, но uselocale () должна работать.
Обратите внимание, что это решение подходит, если вы управляете всем приложением, но если вы пишете библиотечную процедуру, вероятно, нецелесообразно изменять локаль для всего процесса. Отсюда желание сделать форматирование в конкретном явном локальном (или независимо от локали, используя локаль "C").
В http://www.netlib.org/fp/ есть независимые от локали процедуры преобразования двойных строк в строки. Также доступно преобразование строки в двойное. API не очень хороший, но код работает.
Существует целое семейство независимых от локали семейств процедур sprintf как stb_sprintf: https://github.com/nothings/stb Это двойная лицензия: общественное достояние (где возможно) и лицензия MIT.
Не идеально, но работает. Если у кого-то еще есть ответ лучше, продолжайте.