Toda una pregunta para principiantes como es.¿Es cierto que todas las bibliotecas c se pueden usar en C++?
Respuesta
La respuesta es sí. Echar un vistazo a esto:
Sí. No hay ninguna razón por la que no pueda usar bibliotecas C en C++. Las cosas cambian si desea compilar C en un compilador de C++. El C ABI es totalmente compatible con C++, sin embargo, las cosas no son necesariamente tan ordenadas desde una perspectiva API. Ciertas adiciones de C como restrict
no están en el estándar de C++, y deben tratarse con cuidado.
Bate por 30 segundos con la misma respuesta :) –
@Merlyn Morgan-Graham: Las escaleras son largas en tu torre :) –
Un caso más extremo podría ser una función que toma un argumento tipo vla, por ejemplo 'int foo (int n, char x [] [n]); '- espero haber acertado. –
Si los encabezados están protegidos adecuadamente con extern "C" { ... }
, entonces sí.
Si no lo son, puedes hacer tus propios encabezados o puedes envolver los existentes. –
No llamaría poner 'extern" C "{...}' en un encabezado para el código C-language "propiamente dicho", pero la respuesta de Stephen podría interpretarse como la colocación del 'extern" C "{...}' alrededor de las líneas '# include'. –
@R ..: Por supuesto, uno protege el 'extern" C "' con '# si se define __cplusplus', o envuelve el include en lugar del propio encabezado. Pensé que era un hecho. –
Sí y no.
Los questionables son ...
literales del compund
número complejo nativo tipos de datos
"restringir" palabra clave
macros variadic
"long long int" tipo de datos
Algunas de esas características de C están incluidos en C++ 0x y algunos están disponibles como extensiones de la biblioteca en muchos compiladores más recientes para C "normal" ++.
Así que depende del nivel de C del que se está hablando, qué nivel de C++ estándar y qué plataforma de qué compilador, ya que las implementaciones del compilador siempre tienen soporte variado para los estándares y errores, por supuesto.
Y luego hay palabras clave usadas en C++ que no estaban definidas en C, y por lo tanto están disponibles para ser usadas como nombres de variables en C pero hacen que un compilador de C++ vomite. En C es perfectamente legal el uso de la frase siguiente, variables o nombres de funciones, pero, obviamente, hará C++ lanzar un berrinche ...
- plantilla
- nueva
- clase
Oh y "goto" se comporta de manera diferente en C++ y C. En C++ "goto" no se puede utilizar para saltar sobre la inicialización de una variable, pero eso está bien para C. Lo mismo ocurre con las instrucciones de cambio. En C puede escribir una declaración de cambio o un conjunto de goto que no se compilará en C++.
¿Qué más? "strchr" funciona de manera diferente en C vs C++. En C devuelve un puntero char. En C++ devuelve un const puntero de char. Si usa esa salida de strchr de cierta manera en C, podría explotar en C++ debido a la const corrección de C++.
Las funciones en línea se manejan de manera diferente.En C tienen el alcance del archivo, pero en C++ tienen un enlace externo por defecto.
El código de C++ necesita prototipos de función definidos con extern "C" para llamar a una función C.
C++ mangles símbolos de nombres de funciones pero C no.
"En teoría no hay diferencia entre la teoría y la práctica En la práctica no es.." - Yogi Berra
¿Por qué hay algunas de downvoting? ¿He cometido un error? – Allbite
Creo que mi ejemplo contribuido le mostrará por qué no siempre es posible:
#ifndef HEADER_H
#define HEADER_H
int class(int a, int b);
int private(int a);
#endif
C perfectamente válida pero no se compilará en C++, incluso con un bloque "C" externo. Por lo que yo sé, la única manera de usar una biblioteca C así es crear otra biblioteca C que llame a esas funciones y luego usar esa biblioteca contenedora en su código C++.
Dicho esto, creo que tropezar con algo así en el "mundo real" es bastante raro.
Para ser justos, nadie debería nombrar sus funciones de esa manera, pero esto demuestra que no todas las bibliotecas C son compatibles. – dreamlax
Pero si lo compiló en una lib con un compilador c, podría usar la biblioteca en C++ - el nombre se encarga de resolverlo –
@Martin - ¿cómo haría para usar esas funciones en C++? –
- 1. ¿Se pueden usar formularios genéricos en C#?
- 2. ¿Usar bibliotecas de impulso C++?
- 3. Obtener todas las propiedades que marcaron cierto atributo
- 4. ¿Conseguir que todas las filas consecutivas difieran en cierto valor?
- 5. Ayuda para compilar y usar las bibliotecas boost C++
- 6. Valgrind errores en las bibliotecas c?
- 7. No se pueden agregar cadenas en C++
- 8. bibliotecas quaternion en C/C++
- 9. C++ ¿Bibliotecas similares a C#?
- 10. ¿Se pueden acortar las referencias matemáticas en C#?
- 11. ¿Es una mala práctica usar las características C en C++?
- 12. Concurrent C++ 11 - ¿Qué cadenas de herramientas se pueden usar?
- 13. ¿Qué bibliotecas de Java se pueden usar para generar KML?
- 14. C# Kill todas las discusiones
- 15. ¿Se pueden usar las bibliotecas con licencia GPLv2 en aplicaciones propietarias?
- 16. Llamando punteros a funciones C++ de las bibliotecas C
- 17. C, C++: Bibliotecas compartidas: ¿Se cargan en la memoria funciones individuales o bibliotecas completas?
- 18. ¿Las clases abstractas pueden implementarse en C#?
- 19. Obtener todas las variables env en C \ C++ en Windows
- 20. Descompilación de las bibliotecas de Objective-C
- 21. ¿Cuáles son las bibliotecas comunes para C?
- 22. ¿Se pueden exportar las funciones genéricas de Ada a C++?
- 23. Imprimir todas las variables de entorno en C/C++
- 24. ¿Se pueden usar TestContext.Properties?
- 25. Boost como bibliotecas en C
- 26. Alternativa a winforms que se pueden usar fácilmente con C# y .NET
- 27. TeamCity no copia todas las bibliotecas a las que se hace referencia
- 28. minimizar todas las ventanas abiertas en C#
- 29. ¿Qué bibliotecas C o C++ de código abierto pueden convertir arbitrariamente UTF-32 en NFC?
- 30. ¿cómo uso las bibliotecas de Python en C++?
¿Te refieres a los encabezados de biblioteca de C estándar o a cualquier biblioteca personalizada escrita en C? ¿Y de qué revisión de C estamos hablando? ¿También tienes una plataforma en mente? – Allbite
@Allbite: Todo es irrelevante para la pregunta. –
Siendo que las implementaciones varían en su soporte exacto para el estándar C++, y hay diferentes versiones de C y C++ (como en C99, ANSI, C++ 0x, etc.), algunas aclaraciones están en orden. Específicamente, ¿está preguntando sobre las funciones estándar de la biblioteca C, p. "strcpy", ¿o significa absolutamente cualquier C lib personalizado escrito por alguien? – Allbite