У меня возникли проблемы с пониманием файлов заголовков c и исходных файлов. У меня есть:создание библиотеки: конфликтующие типы в заголовке и исходном файле
something.c
#include <stdio.h>
#include "something.h"
typedef struct {
int row, col;
} point;
point
whereispoint(point **matrix, int rows, int cols)
{
..... Does something ....
printf("something...");
}
something.h
typedef struct point * p;
p whereispoint(p **matrix, int rows, int cols);
main.c
#include <stdio.h>
#include "something.h"
int
main(void)
{
int row, col;
p **matrix=malloc(bla, bla);
.....Something.....
p=whereispoint(matrix, row, col);
return 0;
}
Теперь, когда я на самом деле не знать ho ж компилировать ... Я попытался gcc -c main.c something.c
, но это не работает, я попытался собрать отдельно gcc -c main.c
и gcc -c something.c
затем main.c работает, но something.c не делает.
Я на самом деле пытаюсь создать библиотеку из something.c, но поскольку я не могу даже скомпилировать ее в объектный код, я не знаю, что делать. Я предполагаю, что есть что-то не так с типом структуры и ЬурейеЕ его в something.h, но я не могу понять, что ...
Нет ничего плохого в непрозрачном типе. Если вызывающим абонентам функции не нужно знать, что внутри структуры, зачем делать ее общедоступной? C нужно только знать реализацию внутри функций, которые управляют экземплярами структуры. Решение от @hmhd лучше. –
@WilliamMorris - Нет, нет ничего плохого в непрозрачных типах. В стандартной библиотеке C имеется довольно мало непрозрачных типов.Но если вы не хотите писать подходящие аксессуры и приходить в боль, чтобы удостовериться, что user никогда не должен ПОТРЕБИТЬСЯ о вашем непрозрачном типе, лучше просто не делать этого. – Vatine