C ошибка конфликтующих типов - PullRequest
1 голос
/ 24 марта 2010

у меня следующая ошибка

error : conflicting types for 'sprintf'
error : conflicting types for 'vsprintf'
error : conflicting types for 'vprintf'
error : conflicting types for 'select'

в моем заголовочном файле, код

extern char *sprintf(char*,const char*,... )

На самом деле я включаю #include <stdio.h>

но для солариусов мы пишем

# ifndef HPUX
extern char *sprintf(char*,const char*,... )

Ответы [ 4 ]

5 голосов
/ 24 марта 2010

Вместо того, чтобы объявлять функции самостоятельно, вы должны просто включить <stdio.h>. (Если вы не пытаетесь объявить известную функцию sprintf из стандартной библиотеки, но какую-то пользовательскую функцию, вам следует выбрать другое имя для вашей функции).

Ваше объявление приводит к конфликту типов, поскольку стандартная библиотечная функция с тем же именем возвращает ìnt, а не char*.

3 голосов
/ 24 марта 2010

Не объявляйте вручную стандартные функции, просто включите <stdio.h>.

(И, если вы настаиваете на том, чтобы объявить их самостоятельно, по крайней мере, правильно напишите тип ...)

1 голос
/ 24 марта 2010

Если вы не говорите компилятору игнорировать стандартные включения (и библиотеку системы C), вы, вероятно, просто хотите включить стандартные заголовки, то есть, как сказал Дэвид Гелхар (первый, кто ответит).

Если вы используете какую-то другую библиотеку C, вы по-прежнему включаете стандартные заголовки, но передавая компилятору другой путь включения.

Возможно, вам понравится читать о том, что extern предназначено для выполнения.

0 голосов
/ 24 марта 2010

Согласно этой справочной странице Solaris (для Solaris DDI) , <sys/ddi.h> определяет sprintf как возвращающее char *. Похоже, что это определение функции предназначено для использования только для разработки драйвера устройства. Если вы не реализуете драйвер устройства, придерживайтесь стандартной версии C (которая возвращает int), включая <stdio.h>, и не объявляйте ее снова нигде в ваших заголовках или исходном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...