Sto studiando la suddivisione di un programma in più programmi: main.c i vari moduli.c e le interfacce per i moduli .h
Mi sto avvicinando al concetto di stack adt e queste cose sono un po' alla base.
Un passo indietro viene il concetto di "information hilding" cioè il fatto di nascondere alcune informazioni, per non essere corrotte.
Chiedo scusa se sono inesatto, ma sono agli inizi.
ho scritto un semplice programma, il famoso cerca occorrenze con strstr(), ma l'ho diviso in 3 parti:
main.c:
Codice: Seleziona tutto
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "search_str.h"
int main(void)
{
char str [500]="oggi vado a casa mia dolce casa";
char word[500]="casa";
int n=0;
printf ("in main:trovati %d\n",search (str,n,word));
return 0;
}Codice: Seleziona tutto
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "search_str.h"
void static prova(int n)
{
printf ("in funzione static: trovate n %d occorrenze\n ",n);
}
int search(char copy_str[],int n,char copy_word[] )
{
char *found;
char *p=copy_str;
int len;
len=strlen(copy_word);
while (*p!='\0')
{
found=strstr(p, copy_word);
if (found==NULL)
return 0;
p=found+len;
n++;
printf ("trovato in pos %d\n", found-copy_str);
}
if (n==2)
prova(n);
return n;
}Codice: Seleziona tutto
#ifndef SEARCH_H
#define SEARCH_H
int search(char copy_str[],int n,char copy_word[] );
#endifOra da quello che ho capito per nascondere informazioni si usa la keyword static.
Per esempio potrei implementare una funzione in search .c che deve essere svolta solo in quel modulo e non essere corrotta.
Quello che non mi è chiaro è che anche senza static non mi cambia nulla, tanto se nel file header non la dichiaro il main non la potrà chiamare giusto?
Guardate qua:
search.c
Codice: Seleziona tutto
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "search_str.h"
void static prova(int n)
{
printf ("in funzione static: trovate n %d occorrenze\n ",n);
}
int search(char copy_str[],int n,char copy_word[] )
{
char *found;
char *p=copy_str;
int len;
len=strlen(copy_word);
while (*p!='\0')
{
found=strstr(p, copy_word);
if (found==NULL)
return 0;
p=found+len;
n++;
printf ("trovato in pos %d\n", found-copy_str);
}
if (n==2)
prova(n);
return n;
}Codice: Seleziona tutto
void static prova(int n)
{
printf ("in funzione static: trovate n %d occorrenze\n ",n);
}Ok, quella è solo una banalissima stampa. Ma non capisco.
Riassumo:
Se non dichiaro la funzione nel file.h, il main non la potrà chiamare, di conseguenza come posso correre il rischio di corromperla?


