flo c и RETSIGTYPE в исходном коде make - PullRequest
1 голос
/ 09 мая 2020

Откуда берутся ключевые слова floc и RETSIGTYPE в следующем фрагменте этого C кода ?

struct commands
{
    floc fileinfo;              /* Where commands were defined.  */
    char *commands;             /* Commands text.  */
    char **command_lines;       /* Commands chopped up into lines.  */
    unsigned char *lines_flags; /* One set of flag bits for each line.  */
    unsigned short ncommand_lines;/* Number of command lines.  */
    char recipe_prefix;         /* Recipe prefix for this command set.  */
    unsigned int any_recurse:1; /* Nonzero if any 'lines_flags' elt has */
                                /* the COMMANDS_RECURSE bit set.  */
};

/* ... */

RETSIGTYPE fatal_error_signal (int sig);

Это один из файлов в make репозиторий. Мне интересно: поскольку этот файл .h не содержит других файлов заголовков, как их можно здесь использовать?

1 Ответ

1 голос
/ 09 мая 2020

Запрашиваемые символы определяются следующим образом:

#ifndef RETSIGTYPE
# define RETSIGTYPE     void
#endif

/* Specify the location of elements read from makefiles.  */
typedef struct
{
    const char *filenm;
    unsigned long lineno;
    unsigned long offset;
} floc;

Оба определения содержатся в файле makeint.h.

Причина, по которой в commands.h эти символы являются "видимыми", даже если он не включает ни одного файла заголовка, просто потому, что каждый *.c файл, включающий его (например, commands.c), включает также makeint.h, а также перед it.


Как найти ответ в подобных ситуациях

Я не эксперт в связанном вами проекте. Я просто

  1. Клонировал проект с помощью git clone git://git.savannah.gnu.org/make.git
  2. Создал проект с хорошим браузером исходного кода (я использовал SourceInsight )
  3. Поискал символы, которые вы просили, и перешел к их определениям
...