Я новичок в языке программирования c и из другого поста увидел, что средства защиты заголовков не сохраняются, если файл заголовка включен в другой заголовок.Я думаю, это означает, что у меня возникли бы проблемы с переопределением символов, если бы я включил этот второй файл заголовка в третий заголовок.Я решил попробовать это, используя пример кода из другого поста, и да, я получаю ошибку.Я приложил код ниже.Возникает ли эта ошибка, потому что foo.h содержит определения, а не только объявления?Должно ли определение структур, определенных в foo.h, быть в foo.c?Если да, то какой подход я должен использовать, чтобы несколько модулей компиляции основывались на функциональности предыдущего?В стековой архитектуре, как слои получают доступ к функциональности предыдущего уровня (включают ли они заголовочные файлы или используют какой-то другой подход)?
/*
* foo.h
*
*/
#ifndef FOO_H_
#define FOO_H_
#include "stdint.h"
uint8_t test();
typedef struct regVal{
uint16_t add;
uint8_t val;
}reg;
const struct regVal regArr[] =
{
{0x3103,0x03},
{0x3008,0x82},
{0xFFFF,0xFF}
};
#endif /* FOO_H_ */
/*
* foo.c
*/
#include "foo.h"
#include "stdint.h"
uint8_t test();
uint8_t test(){
return 0x01;
}
/*
* foo2.h
*
*/
#ifndef FOO2_H_
#define FOO2_H_
#include "foo.h"
#include "stdint.h"
#endif /* FOO2_H_ */
/*
* foo3.h
*
*/
#ifndef FOO3_H_
#define FOO3_H_
#include "foo2.h"
#include "stdint.h"
#endif /* FOO3_H_ */
/*
* foo3.c
*/
#include "foo3.h"
#include "stdint.h"
А вот ошибка компоновщика
>symbol "regArr" redefined: first defined in "./foo.obj"; redefined in "./foo3.obj" null: symbol "regArr" redefined: first defined in "./foo.obj"; redefined in "./foo3.obj"