2016-06-16 3 views
2

У меня есть проект, который имеет под заголовком включает карту:Linux C: ошибка переопределения внутри включает заголовки

main.c <- main.h <- tcphelper.h <- tcptest.h <- util.h 
       <- udptest.h <------------- util.h 

В util.h, я определил функцию прототип STRUCT cpu_usage:

void get_cpu_usage(struct cpu_usage *cu); 

Теперь, когда я скомпилирую этот проект с помощью GCC, у меня есть эта ошибка переопределения. Как решить эту проблему?

спасибо!

In file included from udptest.h:15:0, 
       from main.h:10, 
       from main.c:7: 
util.h:27:8: error: redefinition of struct cpu_usage 
struct cpu_usage{ 
     ^
In file included from tcptest.h:14:0, 
       from tcphelper.h:10, 
       from main.h:9, 
       from main.c:7: 
util.h:27:8: note: originally defined here 
struct cpu_usage{ 
     ^

ответ

6

Вам необходимо добавить Include guards в свои файлы заголовков, чтобы предотвратить их содержимое несколько раз. Пример:

#ifndef UTIL_H_INCLUDED 
#define UTIL_H_INCLUDED 

/* header contents goes here */ 

#endif /* UTIL_H_INCLUDED */ 
+1

C 7.1.3 Зарезервированные идентификаторы: «Все идентификаторы, начинающиеся с символа подчеркивания и либо прописной буквы или другого символа подчеркивания всегда зарезервированы для любого использования.» подразумевает, что '_UTIL_H_' зарезервирован языком. Может быть, 'UTIL_H' – chux

+1

Вы правы, может быть конфликт со стандартным заголовком. Другой вариант - добавить суффикс типа «_INCLUDED». –

Смежные вопросы