Заголовочный файл C вызывает предупреждение «ISO C требует, чтобы модуль перевода содержал хотя бы одну декларацию» - PullRequest
1 голос
/ 03 июня 2019

Используя Qt-Creator, я создал эти простые C-файлы только для проверки моего понимания:

main.c

#include <stdio.h>
#include "linked.h"

int main()
{
    printf("Hello World!\n");
    printf("%d", linked());
    return 0;
}

connected.h

#ifndef LINKED_H_
#define LINKED_H_

int linked(void);

#endif // LINKED_H

connected.c

int linked()
{
    return 5;
}

В IDE отображается предупреждение в строке connected.h между ними#define LINKED_H_ и int linked(void);, которые читаются как

ISO C requires a translation unit to contain at least one declaration

Мое лучшее предположение о том, что это означает, что любой заголовок или другой файл C, если он находится в проекте, должен использоваться по крайней мере в основном файлеоднажды где-то.Я попытался найти предупреждение, но если на него уже был дан ответ, я не смог понять ответ.Мне кажется, я использовал функцию linked и поэтому не должен предупреждать об этом.Кто-нибудь может объяснить, что происходит?

Программа компилируется и работает точно так, как ожидалось.

1 Ответ

0 голосов
/ 03 июня 2019

Как вы написали код, вам нужно использовать:

extern int linked(void);

(обратите внимание на дополнительный «extern»). Это может помочь с проблемой.


Кроме того, код в connected.c должен быть:

int linked(void)
{
    return 5;
}

(обратите внимание на «параметр» - «void»).

...