У меня есть программа на языке C с несколькими файлами c и h. Я решил сделать одну часть программы «только для заголовка», поэтому переместил код с c на h. Теперь у меня проблемы с определением кратных, и я понятия не имею, почему. например: [
main.c includes utils.h
vector.c includes utils.h
] Я переместил все, что есть в utils.c, в utils.h (и, конечно же, удалил utils.c из проекта). utils.h начинается с
#ifndef UTILS_H_
#define UTILS_H_
// and end with:
#endif
Чтобы убедиться, что моя защита уникальна, я попытался изменить ее (например: UTILS718171_H_), но это не сработало.
Тем не менее, компилятор жалуется:
/tmp/ccOE6i1l.o: In function `compare_int':
ivector.c:(.text+0x0): multiple definition of `compare_int'
/tmp/ccwjCVGi.o:main.c:(.text+0x660): first defined here
/tmp/ccOE6i1l.o: In function `compare_int2':
ivector.c:(.text+0x20): multiple definition of `compare_int2'
/tmp/ccwjCVGi.o:main.c:(.text+0x6e0): first defined here
/tmp/ccOE6i1l.o: In function `matrix_alloc':
ivector.c:(.text+0x40): multiple definition of `matrix_alloc'
/tmp/ccwjCVGi.o:main.c:(.text+0x0): first defined here
...
Проблема может быть примерно такой: все файлы c компилируются и получают свою собственную версию кода, а затем при компоновке это вызывает проблему, но я, честно говоря, не знаю, как решить эту проблему. проблема.