¿Por qué C y C ++ siempre se mencionan como C / C ++ en lugar de C, C ++?

Es sobre todo un mal hábito de los departamentos de recursos humanos que parecen no ser conscientes de que C y C ++ divergieron hace más de 10 años, y de muchos desarrolladores de C que saben “algo” acerca de C ++ (principalmente su parte OOP) que les gusta reclamarlo.

Los hechos son que, aunque también puede encontrar el 90% de la gramática de C dentro de C ++, las expresiones idiomáticas de esos dos lenguajes son completamente diferentes.

El buen C es casi seguro el mal C ++ (en el sentido de que C ++ ofrece diferentes formas de afrontar el mismo problema, y ​​el preferible no es el que normalmente se usa para resolverlo en C), y el buen C ++ es casi seguramente imposible C (en el siente que C no tiene las construcciones requeridas, lo que te dificulta reproducirlas primero)

Eso no significa que no puedan existir programadores con conocimientos en ambos idiomas, pero, como dijiste, deberían ser tratados como dos cosas diferentes, no como uno como un “superconjunto” del otro.

Para citar a Stroustrup: Preguntas frecuentes

No existe un lenguaje llamado “C / C ++”. La frase generalmente es utilizada por personas que no tienen idea de la programación (por ejemplo, personal de recursos humanos y gerentes deficientes). Alternativamente, es utilizado por personas que simplemente no conocen C ++ (y a menudo tampoco C).

No diría que son “totalmente diferentes”, en el mismo sentido que no diría que C y Java son “totalmente diferentes”: comparten gran parte de la sintaxis y los conceptos heredados de su antepasado común, K&R C. I tampoco criticaría a una persona de recursos humanos que redacte un anuncio de trabajo por no saber que “C / C ++” no es una cosa.

Sin embargo, no es “siempre C / C ++”. Algunos anuncios en realidad escriben C ++. O realmente escriba C, dependiendo de lo que realmente necesitan.

Por ejemplo, un trabajo de Bloomberg, que menciona C ++ y no C: Desarrollador de aplicaciones financieras (C ++) | ¿Londres? o un trabajo QNX, mencionando C y no C ++: Desarrollador de software de sistemas

Oh, encontré un trabajo de Bloomberg que quiere algo que ellos llaman “C ++ / C”: Ingeniero de sistemas de C ++ / C | Nueva York: tal vez no quieren que se les aplique la cita de Bjarne.

Editar: aquí tienes, un anuncio de trabajo “C, C ++” https://www.dice.com/jobs/q-A244

Debido a que están tan estrechamente relacionados, es relativamente sencillo aprender uno cuando conoce al otro.

Tienen estilos y modismos completamente diferentes, y es importante saberlo y adaptarse a él.

Además, no hay bibliotecas C que no pueda usar desde C ++, que es una de las fortalezas de C ++; puede ser feo, pero si se puede llamar desde C, también se puede llamar desde C ++. La cuestión es que si realmente quieres tener éxito en eso, debes poder leer ambos idiomas con fluidez y conocer las bibliotecas, o no entenderás la API de C.

Durante muchos años, existieron programadores que sabían mucho C y estaban aprendiendo C ++. Las personas que contrataban desarrolladores de C ++ necesitaban revisar los desarrolladores de C y C ++. Estos días han terminado ahora. Hay un grupo de desarrolladores senior con 10 o 20 años de experiencia en C ++ a tiempo completo. Pero los departamentos de recursos humanos cambian más lentamente que los equipos de desarrollo.

Durante muchos años, los proveedores querían hablar sobre su compilador C ++ a medio terminar, por lo que lo ofrecieron como compilador C / C ++. Se intentó estandarizar una versión simple de las clases C plus como “Basic C ++”. Esto fue adecuado para los desarrolladores, ya que redujo la cantidad que tenían que aprender antes de poner C ++ en su currículum. Estos días han terminado ahora. Los compiladores gcc y clang C ++ apuntan a todas las arquitecturas importantes, con una implementación completa de C ++. Pero los departamentos de recursos humanos cambian más lentamente que los equipos de desarrollo.

Creo que es principalmente un artefacto histórico en este momento. Quizás hace 20 años, cuando C ++ era relativamente nuevo, cualquier programador de C ++ también era un programador de C, por lo que a menudo tenía sentido agruparlos con el término “C / C ++”.

Hoy en día, C ++ y C han divergido cada vez más en los últimos estándares y, lo que es más importante, los estilos de programación en ellos han divergido drásticamente. “Modern C ++” (que en realidad se remonta a 2001, pero tardó un tiempo en generalizarse) se parece muy poco al lenguaje C del que proviene. El programador de CA y el programador de C ++ no son intercambiables: cada idioma tiene sus mejores prácticas y expresiones idiomáticas separadas.

Son idiomas diferentes y aquellos que son pedantes, de hecho, compartirán su objeción. C ++ se imaginó inicialmente como un superconjunto estricto de C, que probablemente sea el origen del uso de “C / C ++” para referirse a C ++ (con algo de ese código de C ++ también escrito solo en C). Sin embargo, a medida que los lenguajes evolucionaron, los estándares separados introdujeron incompatibilidades que hacen que no sea del todo cierto que C ++ sea un superconjunto de C. Aquellos que se oponen a “C / C ++” generalmente lo hacen para resaltar estos casos. Sin embargo, las áreas de incompatibilidad son tan pocas que, en mi opinión, veo “C / C ++” y “C, C ++” como razonables.

No, C y C ++ no son totalmente diferentes. C ++ es casi un superconjunto completo de C. Cualquiera que conozca C ++ sabe C. Muchas personas que trabajan en sistemas integrados usan un subconjunto de C ++ que es “C con clases” y algunas mejoras sintácticas útiles.

Mientras escribe en su pregunta: C #, Python, JavaScript, Go o Swift, vea, hay muchas diferencias entre ellos, son diferentes idiomas. Entonces, usa ” , ” para separarlos. Pero para C ++ / C son como padre e hijo, son una familia, C ++ es casi compatible con todo lo de C. Pero aún así son un lenguaje diferente, pero como tú y tu padre son diferentes. Entonces usamos C ++ / C

Odio la declaración C / C ++, ya que crea mucha confusión. C es un lenguaje muy agradable para el clan, pero si se sentó un desarrollador de C ++ en el proyecto C, obtiene algún tipo de código feo como resultado de pensar en términos de clases. Sin embargo, solo en C ++ obtienes personas que codifican en “C con clases” y aquellos que realizan intrincadas metaprogramaciones. Si se sentó desarrollador C en código C ++, obtendrá principalmente C como grandes clases no relacionadas.

Por lo tanto, C / C ++ puede significar C, Embedded C ++, desarrollo de bibliotecas modernas de C ++ o C ++ (como boost, etc.) o una base de código fea que evolucionó de C a C ++ pero nunca se refacturó correctamente para que pueda encontrar algo en ella.

Pendientemente debería ser C ++ / C. ¿Por qué? Porque ANSI C ++ vino primero, mientras que el grupo ANSI C vino después y básicamente adoptó todo en el estándar C ++, lo que convierte a ANSI C en un subconjunto de C ++ y puede ser compilado por el mismo compilador.

Un objetivo de diseño de C ++ era poder compilar C bien escrito . No muchos programadores escriben en K&R C (pre-ANSI).

C ++ es la “objetivación” de Bjarne Stroustrup de C. C no tiene clases, Bjarne lo modificó para incluir clases, de ahí el nombre, “C incrementada”.

También hago eso a menudo. Mi enfoque es ciertamente C ++, pero en mi experiencia es muy, muy raro que trates con una base de código que no tenga mucha C allí también. No pretendo dar a entender que son del mismo idioma, pero están tan entrelazados que tiene sentido para mí. Así como a menudo puedes ver HTML / CSS / JS

“¿No es C y C ++ totalmente diferente?”

Lo que … sus nombres son casi idénticos, ¿no te dio una pista?

C ++ es solo C con clases. Y algunas mejoras, que personalmente llamo “salvaguardas”.

Por cierto, quien sabe C sabe C ++ e incluso C # (al menos pragmáticamente hablando), por eso dice ‘C / C ++’

Solía ​​pensar que era solo una forma abreviada de cubrir todas las bases. Pero después de hablar con algunos investigadores académicos en física, donde la mayoría parece usar C ++ para escribir sus rutinas más rápidas, descubrí que en realidad tenía un significado. muy a menudo cuando dicen C / C ++, en realidad significan usar el “subconjunto C” de C ++. Por lo tanto, esencialmente eliminan C ++ a algo similar al código C puro. El resto del sistema puede estar escrito en idiomático C ++ usando muchas de las características integradas de tales clases (y en ocasiones no). Pero a este respecto, en realidad tiene sentido, ya que informa al lector sobre el diseño y la implementación.

C ++ es, aún, un superconjunto de C. Puede escribir C ++ que para todos los efectos es C válido y se compilaría con el compilador C-only. Comparten no solo la historia, sino más a menudo las cadenas de herramientas. Su tiempo de ejecución, modelo de gestión de memoria y otras cosas siguen siendo casi iguales o C ++ es una extensión de la de C. Y así sucesivamente.

Además de las otras respuestas, ambos idiomas fueron inventados / diseñados en Bell Labs, el Google de su época.

C ++ es un superconjunto de C, a excepción de las extrañas extensiones de C99 que no están en C ++ y no funcionan en MSVC, como las matrices de pila de tamaño variable.

More Interesting

¿Qué programas de software debe conocer un ingeniero químico?

¿Es posible construir software que no pueda ser pirateado?

¿Podría el desarrollo de software como se practica comúnmente beneficiarse de una mayor división del trabajo?

¿Cuál es la estructura de cualquier proyecto de software independientemente del idioma?

¿La codificación en C pura usando punteros en lugar de usar contenedores C ++ como vectores ayuda a hacer un mejor programador a largo plazo?

¿Cómo se realizan las evaluaciones de desempeño en su lugar de trabajo?

Dejé de codificar durante 6 meses y ha sido realmente difícil recuperarlo. ¿Cómo puedo evitar que esto vuelva a ocurrir y mantener mis habilidades?

¿Las estimaciones del esfuerzo de prueba también incluyen la reevaluación?

¿Cómo puede un estudiante universitario de ingeniería informática prepararse para convertirse en un ingeniero de software integrado?

¿Qué importancia tienen los proyectos paralelos y las contribuciones de código abierto en el proceso de contratación de ingenieros de software?

¿Es más difícil para un ingeniero de software convertirse en científico de datos o viceversa?

¿Con qué frecuencia los programadores de tiempo completo se encuentran con un error que tarda un tiempo en solucionarse?

¿Un verano sin una pasantía tecnológica afectaría en gran medida mis posibilidades de entrevistas a partir de entonces?

¿Puede / cómo puede Hack Reactor ayudar a un estudiante a establecer una empresa / negocio de software?

¿Qué es un componente de software?