principales lista librerias lenguaje ejemplos dev descargar crear clases c++ c language-interoperability

lista - ¿Se pueden usar las funciones de la biblioteca estándar de C en C++?



lista de librerias en lenguaje c (3)

En este momento me estoy familiarizando con C y la biblioteca estándar de C y me pregunto si mi conocimiento en esta área será útil cuando vuelva a trabajar con C ++ en un momento posterior.

Por lo tanto, me gustaría saber si puedo usar las funciones proporcionadas por la biblioteca estándar C en una configuración C ++, y también si y por qué tendría sentido hacerlo realmente.


Sí. Puede usar las funciones estándar de la biblioteca c en los ejemplos de C ++.

stdio.h => cstdio (printf/scanf) math.h => cmath (sqrt)


Solo citaré un párrafo de la norma ISO / IEC N3690 (estándar c ++).

17.2 La biblioteca estándar de C

1 La biblioteca estándar de C ++ también pone a disposición las instalaciones de la biblioteca estándar C, ajustadas adecuadamente para garantizar la seguridad del tipo estático.

Así que simplemente sí!


Sí, C ++ se diseñó originalmente para que cualquier biblioteca C se pueda usar fácilmente en C ++. Por supuesto, esto es un poco menos cierto (en particular, si una biblioteca de C usa alguna palabra clave de C ++ como try o dynamic_cast , no funcionará; también, si una callback codificada en C ++ que se pasa a una biblioteca de C es una excepción, es probable que tengas un gran lío).

La práctica estándar para usar un archivo de encabezado de C en C ++ es

extern "C" { #include <some_c_header_file.h> };

y la mayoría de los archivos de encabezado C existentes están diseñados para cooperar con C ++ al contener cosas como

#ifdef __cplusplus extern "C" { #endif //// most of the header material goes here, C style #ifdef __cplusplus }; // end extern "C" #endif

En la práctica, muchos encabezados estándar C tienen encabezados C ++ equivalentes que envuelven cosas como las anteriores (y también en el namespace std de namespace std ). Por ejemplo, C <stdio.h> es C ++ <cstdio> -pero a menudo usted prefiere las transmisiones C ++ genuinas ( <iostream> ), sin embargo, las rutinas similares a printf suelen ser más amigables con la localization combinadas con gettext(3) .

Sin embargo, C y C ++ son lenguajes muy diferentes. Debe codificar en C ++ 11 idiomático (utilizando containers estándar de C ++, auto , closures , RAII , punteros inteligentes , regla de cinco , SFINAE , exceptions , funciones anónimas , ...)

Algunas funciones estándar de C no son muy útiles en C ++ idiomático. Por ejemplo, es poco probable que use directamente malloc en C ++ genuino (al menos prefiera el new que todavía es de muy bajo nivel y no más en el espíritu de C ++), es más probable que use mucho los contenedores y los punteros inteligentes sin tener que tratar manualmente con el montón. asignación). Pero POSIX funciones POSIX (especialmente syscalls(2) ....) son bastante útiles en C ++. Es probable que longjmp sea ​​incompatible con las excepciones de C ++.

Por cierto, C ++ ha evolucionado mucho en este siglo. No aprenda C ++ 98 pero al menos C++11 (hay enormes diferencias entre ellos) y tal vez C++14 . Utilice un compilador reciente ( GCC o Clang/LLVM ); en diciembre de 2015, eso significa GCC 5 al menos o Clang / LLVM 3.7 al menos. No olvide habilitar todas las advertencias y la información de depuración en el compilador (por ejemplo, g++ -Wall -Wextra -g -std=c++11 )

C ++ (que significa al menos C ++ 11) es un lenguaje de programación difícil , considerablemente más complejo de lo que C es. Necesitará semanas de lectura para aprender un poco, y un buen estilo y disciplina de codificación es esencial (puede escribir fácilmente código muy malo en C ++). Comience con la programación: Principios y práctica utilizando C ++

Creo que si solo conoces C, leer SICP (y estudiar un poco de Scheme) antes de aprender C ++ vale la pena.

La noción de comportamiento indefinido es muy importante, tanto en C como probablemente en C ++. Es absolutamente necesario que lo entiendas (mira el blog de C.Lattner) y lo avoid .

También aprenderá mucho estudiando (y quizás contribuyendo a) algún software libre existente y su código fuente. Por lo tanto, recomiendo usar Linux.