LINUX.ORG.RU

История изменений

Исправление Norong, (текущая версия) :

И снова я.

У меня тут есть небольшой код:

#include <stdio.h>

void strcat(char *s, char *t);

int main(void) {
    char string[20] = "pelmeni";
    char append[] = "append";

    printf("%s\n%s\n", string, append);
    strcat(string, append);
    printf("%s\n", string);

    return 0;
}

void strcat(char *s, char *t) {
    while (*s)
        ++s;
    
    while (*s++ = *t++)
        ;
}
При компиляции я столкнулся с
5.3.c:3:6: warning: conflicting types for built-in function ‘strcat’
 void strcat(char *s, char *t);
      ^
Видимо, это из-за того, что функция strcat существует в стандартных библиотеках (грепнул в /usr/include, нашёл эту функцию в string.h). Как я понимаю, ошибки не возникает, так как библиотечная функция у меня не объявлена, т.е. мне просто говорят, что такое имя лучше не использовать. Я попробовал добавить #include <string.h> в начало кода и действительно получил ошибку. После этого я попробовал добавить #undef strcat сразу после #include <string.h>, рассчитывая на то, что библиотечная функция разобъявится обратно и моя сможет полноценно работать, но ошибка никуда не делась. Пожалуйста, подскажи - я неправильно понял суть #undef, или что-то другое не так?

Исходная версия Norong, :

И снова я.

У меня тут есть небольшой код:

#include <stdio.h>

void strcat(char *s, char *t);

int main(void) {
    char string[20] = "pelmeni";
    char append[] = "append";

    printf("%s\n%s\n", string, append);
    strcat(string, append);
    printf("%s\n", string);

    return 0;
}

void strcat(char *s, char *t) {
    while (*s)
        ++s;
    
    while (*s++ = *t++)
        ;
}
При компиляции я столкнулся с
5.3.c:3:6: warning: conflicting types for built-in function ‘strcat’
 void strcat(char *s, char *t);
      ^
Видимо, это из-за того, что функция strcat существует в стандартных библиотеках (грепнул в /usr/include, нашёл эту функцию в string.h). Как я понимаю, ошибки не возникает, так как библиотечная функция у меня не объявлена, т.е. мне просто говорят, что такое имя лучше не использовать. Я попробовал добавить #include <string.h> в начало кода и действительно получил ошибку. После этого я попробовал добавить #undef strcat сразу после #include <string.h>, рассчитывая на то, что библиотечная функция разопределится и моя сможет полноценно работать, но ошибка никуда не делась. Пожалуйста, подскажи - я неправильно понял суть #undef, или что-то другое не так?