¿Cómo sabe mi férula función no se utiliza en otro archivo?
Pregunta
Férula me da la siguiente advertencia:
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
Desde que llamé férula sólo en este archivo ¿cómo sabe eso?
#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);
}
Incluso me deshice de principal, por lo que no podía darse cuenta de que el archivo está completa de ninguna manera. Estoy totalmente perplejo!
Solución
Usted puede encontrar que si añade una cabecera que declaró flip()
- como usted debe, por supuesto - a continuación, splint
¿no se quejan. También debe declarar blah()
en la cabecera también.
No estoy totalmente convencido de que esta es la explicación porque blah()
no se utiliza en absoluto (aunque utiliza flip()
) y que no menciono splint
quejarse de eso.
Sin embargo, es una buena práctica para hacer todas las funciones (en C) static
hasta que se pueda demostrar que se necesita fuera de su archivo de origen, y luego asegurarse de que hay un encabezado que declara la función, y que la cabecera es utilizado en el archivo que define la función y en todos los archivos que utiliza la función.
En C ++, el 'cada función debe static
' se convierte en 'cada función debe ser definida en el espacio de nombres en el anonimato'.
Otros consejos
Desde que llamé férula sólo en este archivo ¿cómo sabe eso?
Ha respondido a su pregunta. Usted ha alimentado en un archivo de pelusa, para que la pelusa sabe sólo existe el archivo a ser atendidos (aparte de la cabecera estándar incluye, por supuesto).
int flip () no se declara como estática, por lo que puede ser potencialmente utilizado externamente. Dado que se invocó férula con un único archivo de origen, se dice correctamente que su función, si no se usa externamente, debe ser declarado estática
Sólo puede informar sobre lo que ve. Ignorar la advertencia o siga las instrucciones para inhibirla si usted sabe mejor que lo que dice. No asuma que una herramienta como esta tiene que conocer su programa mejor que tú.
Si realmente no está destinado a ser utilizado fuera del archivo, puede declarar que estática y debe corregir el problema, pero será inaccesible desde otros archivos.