2011-02-04 25 views

Respuesta

11

Sí, supongo que es correcto. Está declarando la existencia de la función abc(), por lo que se puede hacer referencia dentro de xyz(). Tenga en cuenta que el extern es innecesario, ya que las funciones son extern de manera predeterminada.

+3

No llamaría a extern innecesario. Se podría decir que escribir extern antes de un prototipo es más correcto en cuanto a la gramática, en lugar de tenerlo allí implícitamente. Personalmente siempre escribo extern antes de prototipos, porque eso me da el hábito de escribir siempre * algo * delante de ellos. De esa manera, no me olvidaré de escribir estática antes de las funciones que deben ser encapsuladas en privado. – Lundin

+4

@Lundin: ¿Escribes 'auto' antes de todas las variables locales? –

+0

pero por qué declarar la existencia dentro de una función y no en el archivo directamente (por ejemplo, antes de la definición de cada función). ¿O es para activar la referencia a un momento definido y no durante la compilación? – binaryguy

2

La declaración "extern" en C indica la existencia y el tipo de una variable o función global.

Un extern es algo que se define externamente al módulo actual.

Tampoco es raro encontrar prototipos de funciones declarados como externos.

Lo necesita solo cuando no es el predeterminado, y/o donde desea especificar la vinculación "C".

0

Sí, su afirmación es correcta ..... cuando usamos extern nombre_func w se declaran el nombre_func.

0

Me limitaría a agregar que esta construcción, en mi experiencia, es poco común en el código moderno, pero a menudo se ve en el código anterior, especialmente "K & R" código C.

El código más moderno normalmente obtendría el prototipo de función de un archivo de encabezado.

2

Esta forma de declaración tiene una gran ventaja:

Si sólo uno o menos funciones están llamando a una función externa, esta declaración tiene sentido sobre todo dentro de un archivo de fuente grande. Si se tiene que realizar una reestructuración posterior del código (mover la función en otro archivo), es mucho más fácil ver las dependencias que agregar externalidades en el ámbito global (archivo). En este último caso, la probabilidad de "olvidar" tales externalidades en un archivo es mayor. Por el contrario, al declararlo en el alcance de la función, la declaración se moverá junto con la función ...

También tiendo a hacerlo para las variables globales externas: el beneficio viene más adelante cuando se mantienen y eventualmente se restructuran/minimizan las dependencias.

Una última nota al tema "escritura externa/no externa": Si es solo una declaración directa (-> la función se define al final del mismo archivo), no recomendaría usar externa - porque simplemente no es el caso. De lo contrario, tiene sentido absoluto indicar que la definición debe encontrarse en otro lugar (o para libaries: puede ser necesario que los usuarios de esa biblioteca lo implementen).

Espero que esto ayude (como un paso hacia un estilo de programación orientado más objetivo ... :))

Cuestiones relacionadas