centhron69
Grünschnabel
Hihi,
ich suche vergeblich nach einer Antwort wie man "richtig" mehrere Headerdateien in C einbindet ohne zu doppeln.
Hier ein Beispiel:
Im unteren Programm fehlt #include<stdio.h>. Aber in welche Datei füg ich sie ein (main.c, io.c oder io.h)? Muss ich in io.c _und_ main.c den include machen? Ist es falsch wenn ich stdio.h mehrmahls include?
Bis heute hab ich Gedacht, dass Include die komplette Datei sozusagen in die main schreibt beim compilieren.
main.c
io.h
io.c
ich suche vergeblich nach einer Antwort wie man "richtig" mehrere Headerdateien in C einbindet ohne zu doppeln.
Hier ein Beispiel:
Im unteren Programm fehlt #include<stdio.h>. Aber in welche Datei füg ich sie ein (main.c, io.c oder io.h)? Muss ich in io.c _und_ main.c den include machen? Ist es falsch wenn ich stdio.h mehrmahls include?
Bis heute hab ich Gedacht, dass Include die komplette Datei sozusagen in die main schreibt beim compilieren.
main.c
Code:
#include"io.h" //Input Output
int main(void)
{
const char *COM_IN_NAME = "/dev/cua00"; //input COM name
const char *COM_OUT_NAME = "/dev/cua01"; //output COM name
char str[100]; //Read-Write String
readCom(COM_IN_NAME, str);
writeCom(COM_OUT_NAME, str);
return 0;
}
io.h
Code:
#ifndef IO_H
#define IO_H
#ifndef STDIO_H
#error STDIO_H fehlt
#endif
int readCom(const char *COM_IN_NAME, char* str);
int writeCom(const char *COM_OUT_NAME, char* str);
#endif
io.c
Code:
int readCom(const char *COM_IN_NAME, char *str)
{
//input filestream oeffnen
FILE *com_in;
com_in = fopen(COM_IN_NAME, "rb");
if(com_in == NULL)
{
printf("%s konnte nicht geoeffnet werden\n", COM_IN_NAME);
return 1;
}
//lesen bis <ENTER> oder max-groeße erreicht
fgets(str, 100, com_in);
fclose(com_in);
return 0;
}
int writeCom(const char *COM_OUT_NAME, char *str)
{
//output filestream oeffnen
FILE* com_out;
com_out = fopen(COM_OUT_NAME, "wb");
if(com_out == NULL)
{
printf("%s konnte nicht geoffnet werden\n", COM_OUT_NAME);
return 1;
}
fputs(str, com_out);
return 0;
}