2011-06-02 32 views
7

Al exterminar una función en el archivo cpp, ¿el compilador las trata de forma diferente?Funciones externas en C++

extern void foo(char * dataPtr); 
void foo(char *); 
extern void foo(char *); 

Me pregunto porque tengo ver todo esto en el código y no está seguro de cuál es la diferencia.

+1

esto podría ayudar http://msdn.microsoft.com/en-us/library/0603949d(v=vs.80). aspx – Terrance

Respuesta

9

Caso por caso:

extern void foo(char * dataPtr); 

funciones tienen enlazado externo por defecto, por lo que el externo no es necesario - esto es equivalente a:

void foo(char * dataPtr); 

nombres de los parámetros no son significativos en las declaraciones de funciones, por lo que lo anterior es equivalente a:

void foo(char *); 

Use lo que sienta feliz est con.

1

extern es el enlace predeterminado para las funciones de C++. No hay diferencia entre esas tres declaraciones.

2

No. Todas son las mismas funciones. Sólo hay una función, es decir, con esta firma:

void foo(char *); 

presencia de otros dos no hace ninguna diferencia, con o sin la palabra clave extern, como nombres de función tienen vinculación externo por defecto.

1

No, son lo mismo. Todas las declaraciones de funciones son externas. La palabra clave extern dice "Quiero que sepas que esto existe, pero no lo estoy definiendo aquí". Con un int, esto sería necesario, porque una declaración también es una definición. Con una función, el punto y coma al final lo marca explícitamente como no definido aquí.

Mi mejor conjetura sobre por qué lo marcaron extern es posiblemente porque la declaración de función está en el archivo de encabezado pero la definición no está en el archivo c correspondiente, como uno esperaría normalmente. Esto es similar a cómo se usa generalmente extern en un tipo int (donde desea declararlo, pero planea vincularlo desde otra fuente). Por lo tanto, es una forma de documentación.

Esta es la mejor explicación de la vinculación a mí:

http://publications.gbdirect.co.uk/c_book/chapter4/linkage.html

Cuestiones relacionadas