Kode saya adalah

// ./header/abc.h
#ifndef ABC_H
# define ABC_H

typedef struct      s_conv
{
    int             test;
}                   t_conv;

#endif
// ./srcs/test.c

#include "abc.h"

static int  function(t_conv *conv)
{
    //something
} 

Saya ingin membuat file library, jadi saya mencoba membuat file objek dari test.c.

gcc -Wall -Werror -Wextra -c -I./header/ srcs/test.c

Tetapi kompiler tidak dapat mendeteksi struct saya dan memberi saya pesan kesalahan:

error: unknown type name ‘t_conv’; did you mean ‘u_long’? static int function(t_conv *conv)

Juga, saya sudah mendeklarasikan beberapa fungsi di file header. Tetapi ketika saya mencoba menggunakan fungsi di file lain, itu juga memberi saya pesan seperti ini:

error: implicit declaration of function ‘function’

Sebenarnya, vscode intelliSense saya mendeteksinya dengan baik. Tetapi ketika saya menggunakan perintah di terminal, masalah terjadi.

Apa yang harus saya lakukan?

Keterangan lebih lanjut.

// in libft.h

...

int         ft_atoi(const char *nptr); // detected.
int         ft_isnum(char c); // cannot detected.

...

// in ft_chk_precision.c

#include "libft.h"
#include "ft_printf.h"

int         ft_chk_precision(const char *str, t_conv *conv, va_list args)
{
    int     i;
    char    *temp;
    int     ret;

    i = 0;
    ret = i;
    if (*str == '.')
    {
        i++;
        if (*(str + i) == '*')
        {
            conv->precision = va_arg(args, int);
            return (2);
        }
        while (ft_isnum(*(str + i)))
            i++;
        temp = malloc(sizeof(char) * (i + 1));
        ret = i;
        temp[i] = '\0';
        while (i-- > 1)
            temp[i - 1] = *(str + i);
        conv->precision = ft_atoi(temp);
        free(temp);
    }
    return (ret);
}

Kesalahan


srcs/ft_chk_precision.c: In function ‘ft_chk_precision’:
srcs/ft_chk_precision.c:32:10: error: implicit declaration of function ‘ft_isnum’; did you mean ‘ft_isalnum’? [-Werror=implicit-function-declaration]
   while (ft_isnum(*(str + i)))
          ^~~~~~~~
          ft_isalnum

Itu mendeteksi fungsi ft_atoi(), tetapi tidak dapat mendeteksi ft_isnum(). Apa masalahnya?

c
0
Kyung Kyu Lee 7 Maret 2020, 19:45

1 menjawab

Jawaban Terbaik

Menulis #error "Unique string which also does some explaining" ke dalam semua file yang terlibat adalah teknik debugging yang berguna untuk melacak masalah yang disertakan.

Dalam kasus Anda, saya mengusulkan dalam komentar apa yang saya pahami ternyata membantu Anda menemukan detail masalah Anda:

  1. Apa yang terjadi jika Anda menyisipkan baris ini sebelum pelindung penyertaan Anda ke dalam header?
    #error This file does get included!

  2. Apa yang terjadi jika Anda memasukkan baris ini ke dalam file kode Anda (sebelum baris yang disertakan)?
    / #error This file does get compiled!

  3. Apa yang terjadi jika Anda memasukkan baris ini ke dalam file kode Anda (setelah baris sertakan)?
    #error This file does get compiled!
    Hapus baris dari percobaan 2. sebelum mencoba yang ini.

Mereka tentu saja memperkenalkan kesalahan. Tetapi mereka melakukannya dengan sengaja dan dengan cara yang akan memberi tahu Anda sesuatu tentang file mana yang Anda lihat yang sebenarnya digunakan selama kompilasi. Itulah jalan menuju pemahaman.

0
Yunnosch 7 Maret 2020, 17:54