Ваш первый вопрос зависит от того, какие заголовки вы пытаетесь включить. Большинство заголовков C доступны в форме c(lib)
в существующей версии C ++. Некоторые нет, и могут быть добавлены в C ++ 0x. Поэтому, если вы попытались включить какой-либо из них, возможно, вы получили эту ошибку.
Во-вторых, все заголовки этой формы гарантируют , что функции будут доступны в пространстве имен std
. Но они не обещают оставить глобальное пространство имен в покое. Часто они помещают символы в оба пространства имен.
Я не уверен, почему ::snprintf
беспокоит вас больше, чем std::snprintf
. Вы должны указать префикс в обоих случаях.
Что касается realloc
, эквивалента в C ++ не существует, возможно, потому, что это больше проблем, чем стоит, особенно с более сложной семантикой C ++ для копирования объектов. (В частности, если вы попытаетесь использовать его, не храните в буфере объекты, не относящиеся к POD, поскольку realloc
просто memcpy
переместит их во вновь выделенный буфер, если необходимо, что приведет к поломке объектов, не являющихся POD. )
Конечно, вы все еще можете использовать старый realloc
из C, включив его заголовок. Но я бы сказал, что вам, вероятно, лучше использовать new / delete и просто выяснить разумную стратегию распределения буферов.