Помогите понять, что за неявное объявление функции в Си при компиляции с ключом -std=c99. Пишу функцию split

Пишу библиотеку стандартных функций. Вот какую ошибку выдаёт. Примечательно, что без ключа std-c99, но с ключами -Wall -Wextra -Werror -pedantic этой ошибки нет. Первый раз оформляю код и вопрос тут, прошу пинать не сильно. Прототипы проверены. И все функции работают кооректно. Просто морозит эта ошибка, которая не мешает работе!! Поступила новая инфа, данный файл компилируется без ошибок на чужой либе. Дело либо в заголовочном либо в других вызываемых функциях.

ft_split.c: In function ‘ft_split’:
ft_split.c:73:14: error: implicit declaration of function ‘ft_substr’ [-Werror=implicit-function-declaration]
   73 |   array[i] = ft_substr(s, total, slice_len(&s[total], c));
      |              ^~~~~~~~~
ft_split.c:73:12: error: assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Werror=int-conversion]
   73 |   array[i] = ft_substr(s, total, slice_len(&s[total], c));
      |            ^
cc1: all warnings being treated as errors

    #include "libft.h"

char            **ft_split(char const *s, char c)
{
    char    **array;
    int i;
    int total;

    if (!s || !c)
        return (NULL);
    i = 0;
    total = 0;
    if (!(array = (char**)malloc(sizeof(char*) * ((h_many_slices(s, c)) + 1))))
        return (NULL);
    while (i < (h_many_slices(s, c)) || s[total] != '\0')
    {
        while (s[total] && s[total] == c)
            total++;
        array[i] = ft_substr(s, total, slice_len(&s[total], c));
        if (array[i] == NULL)
            return (ft_purge(array, i));
        while (s[total] && s[total] != c)
            total++;
        i++;
    }
    array[i - 1] = NULL;
    return (array);
}

Выдержка из заголовочного файла.

char                *ft_substr(char const *s, unsigned int start, size_t len);
char                *ft_strdup(const char *s1);
char                **ft_split(char const *s, char c);

Прошу подсказать куда копать? Спасибо. З.Ы. Все вызываемые функции уже прошли проверку и работают аналогично библиотечным.


Ответы (1 шт):

Автор решения: cmyrtle

Спустя три дня мучений я додумался запустить gcc ft_split.c ft_substr.c -Wall -Wextra -Werror -std=c99 -c и он скомплилился без ошибок. Был делан вывод, что проблема с прототипами. Посимвольное сравнение визуально не помогло, но копипаст исправил проблему. Ошибка уводила в сторону, намекая что надо что-то кастануть что-нить типа (char *). Но всему виной грёбаная опечатка или кривая копипаста.

→ Ссылка