Uso de palabra clave externa
Frecuentes
Visto 767 veces
2 Respuestas
5
Significa el __ImageBase
usos de variables globales Enlace C y que su nombre debe ser destrozado usando las reglas para C en lugar de C++.
EDIT: Da la casualidad de que Raymond Chen publicado recientemente un artículo eso demuestra que mi respuesta original estaba completamente equivocada: extern "C"
no inhabilitar nombre mutilado, solo cambia las reglas solía realizarlo. Los nombres C también se pueden alterar.
contestado el 23 de mayo de 17 a las 13:05
El enlace C implica más que simplemente destrozar; es posible que los argumentos se pasen de manera diferente, por ejemplo. Asimismo, la vinculación idiomática es parte del tipo; una función con extern "C"
el enlace no se puede asignar a un puntero a una función de C++. - james kanze
1
Significa no alterar el nombre del símbolo. __ImageBase
que sigue el extern "C"
. En resumen, garantiza que puede usar la variable en código C++.
extern "C"
especificar el vínculo que se aplicará. En resumen, una especificación de vinculación.
Le dice al compilador de C++ que aplique un enlace del tipo de C al símbolo que sigue.
Buena lectura:
Usando extern para especificar la vinculación
Cómo mezclar C y C ++
contestado el 22 de mayo de 12 a las 19:05
El comentario ahora eliminado era correcto, ya que extern "C"
es de hecho una construcción solo de C++, pero aún significa que el código C que se vincula al módulo C++ que define esta variable podrá hacer referencia a él... Entonces, en realidad funciona en ambos sentidos, C a C++ y C++ a C (sección 32.6 de las preguntas frecuentes parece estar de acuerdo :). - Frederic Hamidi
@FrédéricHamidi: el compilador AC no entenderá el extern "C"
construir, por lo que uno debe envolver el extern "C" {
y ` }` líneas en un #ifdef
por lo que no serán vistos por los compiladores de C. - Guardar
Sí, aceptamos que no se puede usar fuera de los módulos de C++. Pero permite usar el símbolo decorado si está definido en un módulo C, o permite que los módulos C usen el símbolo si el propio módulo C++ lo define. Eso es lo que quise decir con both ways
(pero no sé si en realidad fui más claro esta vez :) - Frederic Hamidi
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ extern or haz tu propia pregunta.
posible duplicado de En fuente C ++, ¿cuál es el efecto de extern "C"? - Bo Persson
¿Qué es?
IMAGE_DOS_HEADER
? La vinculación de idiomas normalmente solo se aplica a los tipos de funciones (incluidos los tipos de funciones anidadas, como el puntero a la función). - James Kanze@James, nombres de variables globales también están destrozados. Sin embargo, su punto acerca de que la vinculación tiene un efecto adicional en las funciones sigue en pie. - Frédéric Hamidi
@FrédéricHamidi Mangle está a la altura de la implementación; puede destrozar nada, todo o cualquier cosa en el medio. En la práctica, la mayoría de los compiladores, para la mayoría de los lenguajes, lo han destrozado todo; lo que tradicionalmente ha diferenciado a C++ es la complejidad del esquema de manipulación (incluida la información sobre los tipos de parámetros) para las funciones. Tradicionalmente, C y C++ han alterado los nombres de las variables de la misma manera. (Una verificación rápida con los compiladores que tengo a mano muestra que después
extern "C"
, ni siquiera puedo encontrar el nombre en el archivo de objeto. Lo cual definitivamente no entiendo.) - James Kanze