C sabiendo C++

Iniciado por Geremy, 7 Junio 2019, 13:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Geremy

   Hola, actualmente estoy programando en C++ , considero que tengo un nivel medio en el mismo y estoy interesado en aprender C que parece útil aprenderlo y mas sabiendo C++ ya que muchas de las cosas son iguales o parecidas, mi pregunta es ¿Que parte de C se diferencia notablemente de C++(porque ya he visto punteros, arreglos, etc y es completamente igual) y que cosas extras tiene C con respecto a C++ que necesite aprender?.

K-YreX

C++ es como una expansión de C por lo que todo lo que puedes hacer en C, lo puedes hacer en C++. Como es lógico, C++ es un "avance" por lo que tiene añadidos que facilitan algunas cosas. Por ejemplo en C olvídate de strings (debes usar <char*>), clases(debes usar <struct>), paso por referencia(tendrás que usar punteros), para usar <bool> tienes que incluir <stdbool.h> o usar <int> con valores de 0 y 1.
Al no estar orientado a objetos como C++ no tendrás cosas como:
Código (cpp) [Seleccionar]

ifstream fichero_entrada;
fichero_entrada.open("nombre_fichero.txt");

Sino que tendrás:

FILE *fichero_entrada;
fichero_entrada = fopen("nombre_fichero.txt", "r");


Y si quieres ver más diferencias puedes seguir mirando cómo se hace todo lo que haces en C++ en C. Pero asegúrate de compilar para C porque muchos comenten el error de decir que programan en C pero están compilando en C++ por lo que meten sentencias de C++ que no existen en C y no les da problemas.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Geremy

 Bien gracias, la verdad que lo de los string y bool creía que era igual jeje, gracias por tu respuesta y te hago otra pregunta :D ¿hay algo que sea exclusivo de C, tengo entendido que tiene mas utilidad en la programación de bajo nivel que C++, es cierto?.
Por ultimo he de decir que estoy programando C en visual studio desde el compilador de c++, ¿según entiendo eso estaría mal no?.

K-YreX

Hasta donde yo conozco exclusivo de C no ya que C++ es como una "expansión" de C, añade cosas pero no las quita. Lo que pasa es que hay cosas que en C se usan mucho y son muy típicas y en C++ existen otras formas de hacerlo.
Utilidad a bajo nivel es la misma lo que pasa es que con C te ves obligado a trabajar a más bajo nivel mientras que con C++ no tienes que hacerlo si no quieres. Al tener esta facilidad en C++ es un paso que normalmente la gente se ahorra cuando aprende. Pero si trabajas con C vas a profundizar mucho más en tus conocimientos a bajo nivel. Tampoco quiero asustar, hay muchas cosas que son como en C++ pero acabarás aprendiendo aspectos de más bajo nivel.

Si compilas como C++, al tener C++ incluido todo lo de C más lo suyo propio, si usas cosas de C++ te las dará por válidas y no sabrás que no puedes usar eso en C. A no ser claro que aprendas primero de forma teórica lo que se puede y lo que no.
A mí personalmente me ayudó mucho para diferenciar ambos lenguajes el compilar desde la Terminal de Linux, usando el comando g++ para compilar en C++ y gcc para compilar en C y te olvidas de IDEs, sólo necesitas un editor de textos y la propia Terminal.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Loretz

#4
El C++ (el primer estándar 98) desciende, es un derivado, del C95 (C90 más las correcciones de 1995). Luego, el C99 y el C++11 son los dos derivados de ese mismo ancestro común, el C95. Entonces, esto quiere decir que el C++11, C++14, C++17 y C++20 son primos, primos 2dos, etc. del C99, tienen al C95 como abuelito en común.

En esta página hay una lista con incompatibilidades entre C++98 y C99:
http://david.tribble.com/text/cdiffs.htm

Por ejemplo, palabras clave del C++98 que no va a reconocer un compilador C99:

  • bool
  • catch
  • class
  • const_cast
  • delete
  • dynamic_cast
  • explicit
  • export
  • false
  • friend
  • mutable
  • namespace
  • new
  • operator
  • private
  • protected
  • public
  • reinterpret_cast
  • static_cast
  • template
  • this
  • throw
  • true
  • try
  • typeid
  • typename
  • using
  • virtual
  • wchar_t

Una lista completa de lo que hace que un programa C++ no compile en C es bastante extensa, los temas serían:


  • Uniones anónimas
  • clases
  • constructores y destructores
  • excepciones y bloques try/catch
  • linkeo de funciones externas (extern "C")
  • sobrecarga de funciones
  • funciones miembro
  • namespaces
  • operadores y funciones new / delete
  • sobrecarga de operadores
  • referencias
  • STL (biblioteca estándar C++)
  • clases y funciones template