Come fa sapere il mio stecca funzione non viene utilizzata in un altro file?

StackOverflow https://stackoverflow.com/questions/741400

  •  09-09-2019
  •  | 
  •  

Domanda

stecca mi dà il seguente avviso:

encrypt.c:4:8: Function exported but not used outside encrypt: flip
  A declaration is exported, but not used outside this module. Declaration can
  use static qualifier. (Use -exportlocal to inhibit warning)
   encrypt.c:10:1: Definition of flip

Dal momento che ho chiamato stecca solo su questo file come fa a sapere che?

#include        <stdio.h>
#include        <stdlib.h>

int    flip( int a)
{
        int b;
        b = a;
        b ^= 0x000C;
        return b;
}

int     blah(int argc, char    *argv[]) {

        FILE    *fp = NULL, *fpOut=NULL;
        int             ch;
        ch = 20; flip(20); return (ERROR_SUCCESS);
}

Ho anche sono liberato di principale in modo che non si poteva capire che il file è completo in alcun modo. Sono completamente perplesso!

È stato utile?

Soluzione

Si potrebbe scoprire che se hai incluso un colpo di testa che ha dichiarato flip() - come si dovrebbe, ovviamente - allora sarebbe splint non si lamentano. Si dovrebbe anche dichiarare blah() nell'intestazione pure.

Non sono del tutto convinto che questa sia la spiegazione, perché blah() non viene utilizzato a tutti (anche se usa flip()) e non accennate splint lamentarsi di questo.

Tuttavia, si tratta di una buona pratica di fare ogni funzione (in C) static fino a quando si può dimostrare che è necessaria al di fuori il suo file di origine e quindi si garantire che vi sia un colpo di testa che dichiara la funzione, e che intestazione è utilizzato nel file che definisce la funzione e in ogni file che utilizza la funzione.

In C ++, il 'ogni funzione deve essere static' consiglio diventa 'ogni funzione dovrebbe essere definita nello spazio dei nomi anonimi'.

Altri suggerimenti

  

Dal momento che ho chiamato stecca solo su questo file come fa a sapere che?

Hai risposto alla tua domanda. Hai nutrito in un unico file per niente, quindi non lasci residui sa c'è un file solo per essere curato (a parte l'intestazione standard include, ovviamente).

int vibrazione () non è dichiarata come statica, in modo che possa essere potenzialmente utilizzato esternamente. Dal momento che è stato richiamato stecca con un solo file sorgente, si dice giustamente che la funzione, se non utilizzato esternamente, deve essere dichiarato static

Si può riferire solo su ciò che vede. Ignorare l'avviso o seguire le istruzioni per inibire, se lo sai meglio di quello che dice. Non date per scontato che uno strumento come questo conosce necessariamente il programma di meglio di te.

Se in realtà non è destinato a essere utilizzato al di fuori del file, si può dichiarare statica e dovrebbe risolvere il problema, ma sarà inaccessibile da altri file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top