Конфликт типов с символом * - PullRequest
1 голос
/ 20 мая 2009

У меня есть небольшая программа для проверки передачи указателей на символы * в функции и из них. Когда я компилирую с помощью cc, я получаю предупреждение и ошибки о том, что у меня конфликтующие типы, хотя все мои переменные имеют тип char *. Пожалуйста, просветите

#include <stdio.h>

main()
{
    char* p = NULL;

    foo1(p);
    foo2();
}

void foo1(char* p1)
{
}

char* foo2(void)
{
    char* p2 = NULL;

    return p2;
}

p.c:11: warning: conflicting types for ‘foo1’
p.c:7: warning: previous implicit declaration of ‘foo1’ was here
p.c:15: error: conflicting types for ‘foo2’
p.c:8: error: previous implicit declaration of ‘foo2’ was here

Ответы [ 2 ]

17 голосов
/ 20 мая 2009

Вам нужно создать прототип своих функций перед функцией main ().

пример:

void foo1(char *p1);
char* foo2(void);

int main(.......

Или просто поместите тела для этих функций над основной функцией.

4 голосов
/ 20 мая 2009

Как сказал Гиллс, чтобы исправить ошибку, переместите определения функций выше main() или поместите туда прототипы функций.

Причина ошибки в том, что когда компилятор видит:

foo1(p);
foo2();

прежде чем он увидит объявление или определение foo1() и foo2(), он предполагает, что тип возвращаемых данных функций - int. В первые дни C int считался приемлемым типом возврата по умолчанию (в ранних версиях C не было типа void). В настоящее время пропуск типа возврата считается плохой практикой, и компиляторы жалуются на это.

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