¿C es un superconjunto de C de todos modos, como Objective-C o C++? ¿Hay alguna manera de compilar C en línea con construcciones tales como indicadores de compilación?¿C es un superconjunto de C?
Respuesta
En una palabra, No.
Eso es lo que pensé, Demasiado malo –
No diría que es tan malo.Se ha demostrado que es una buena manera de romper con muchos de los problemas de C que se remontan a los años 80. –
Es sorprendente que esta respuesta tenga un +18 ... mientras que otras que requieren tiempo, investigación y pensamiento no llegan a ninguna parte. Es una pena. – bobwienholt
No de ninguna manera significativa. Está inspirado en C (entre otros), pero son idiomas fundamentalmente diferentes.
C# proviene de la familia "c-como" la medida de lo sintaxis se refiere, pero por lo que la arquitectura se siente más como Java (no hay punteros [Aceptar, como se señala más adelante, puede usarlos, pero la mayoría de la gente no lo sabe o no le importa], las matrices están marcadas, la memoria recolectada, etc.
Puede obtener mucho de eso en C++, pero no en el núcleo.
hay punteros si quieres usarlos – xyz
Vamos a ponerlo de esta manera:
C
yC#
son similares comorm -rf . /
y# rm -rf . /
son similares
En resumen, no C no es un subconjunto de C#. El aspecto de muchas estructuras de control se basa en C. Me gusta, for-loops, interruptores, mientras y así sucesivamente. Al mismo tiempo, C# prohíbe construcciones potencialmente peligrosas, como caerse de un caso en un interruptor al olvidar un salto, o poner un entero como una condición if donde se espera un valor booleano. La cita anterior significa que C# y C pueden parecer muy similares, pero se traducen en resultados muy diferentes. Donde C no le impedirá eliminar todo de su partición, C# lo protegerá por error, figurativamente hablado.
En otro nivel, C le permite convertir punteros en enteros, empujarlos alrededor, devolverlos y luego acceder a las ubicaciones de memoria que se almacenan en ese puntero. C no lo protegerá de tener acceso a la memoria que usted no asignó. Tendrá un accidente, en el mejor de los casos. C# - en el otro lado - tendrá excepciones que lo notarán cuando haga cosas como acceder al objeto a través de una referencia nula.
o Java y Javascript al parecer :) –
Robert, jaja sí lo arranqué de esa analogía: p –
Mi analogía favorita es "Java y JavaScript son similares a un coche y la alfombra son similares. " –
C# y C no están realmente relacionados (aparte de la sintaxis similar). C# se ajusta al código de máquina de IL cuando se inicia el programa. C# no tiene punteros a excepción de los tipos de valores en esa pila. C# es completamente seguro, C no. C requiere administración de memoria explícita donde C# es basura recolectada. La lista de diferencias sigue y sigue ...
C no requiere administración de memoria explícita; hay muchas bibliotecas de GC Boehm es uno. – jrockway
Pero ... nativamente C todavía necesita administración de memoria explícita, ya sea que la oculte en una biblioteca no oculta el hecho de que no se administra de forma nativa. Con C# se quema en la infraestructura desde el principio. – Kev
Podría hacer punteros con código inseguro en C# – SQLMenace
C++ no es un verdadero superconjunto de C o bien (ver link text)
Técnicamente sí ... Pero prácticamente está bastante cerca. Pero C# no está cerca de C mucho más que la sintaxis. –
Es si estás dispuesto a aceptar que C sigue siendo su propio idioma y continuó creciendo por derecho propio y después si nació (Bjarne lo llama un descendiente directo) C++, se separaron. Bjarne lo llama "una C mejor", pero es su propio lenguaje con un paradigma diferente. – ChiefTwoPencils
C# es muy diferente de C (y también en C++ es muy diferente de C). Esto no se debe a la semántica, que al final no es demasiado diferente, sino a causa de los conceptos, las ideas que están detrás de C#.
Cuando programa en C# tiene que pensar de una manera diferente de lo que está acostumbrado a hacer si usa C: esta es la diferencia principal.
Ok, voy a morder: Supongamos que quisiera implementar una multiplicación de matrices o un bubblesort en C#. Supongamos también que pienso como un programador en C. ¿Voy a fallar? –
Puedo compilar código C dentro de Obj-C o C++ usando las directivas de compilación apropiadas. Ese es mi punto –
C es imprescindible. C# está orientado a objetos.
Los dos no son mutuamente excluyentes, y de hecho diría que tanto C como C# son imperativos "y" orientados a objetos. (Consulte http://stackoverflow.com/questions/351733/can-you-write-object-oriented-code-in-c). ¡Y aunque uno de ellos no lo fuera, eso realmente no responde a la pregunta de si es un superconjunto! –
- 1. ¿La CLI de C++ es un superconjunto de C++?
- 2. ¿Qué impide que C++ sea un superconjunto estricto de C?
- 3. ¿Qué dialecto de C es Objective-C un "superconjunto estricto" de?
- 4. Conjunto de caracteres que no es un superconjunto de ASCII
- 5. C vs C++ (Objective-C vs Objective-C++) para iPhone
- 6. Relación entre C y C++
- 7. ¿Qué es un buen analizador de CSS C/C++?
- 8. ¿La administración de activos es un superconjunto del control de origen?
- 9. ¿Qué es un SDK? (C++)
- 10. ¿Se puede crear un objetivo "superconjunto" en Xcode?
- 11. ¿Qué es un analizador matemático rápido C o Objective-C?
- 12. ¿C# es un lenguaje de alto nivel?
- 13. ¿Este es un buen estilo de C#?
- 14. ¿Qué es un delegado de C++?
- 15. ¿Qué es un buen compilador de c
- 16. ¿Qué es un buen decompilador de C?
- 17. Explicar C++ SFINAE a un programador que no es C++
- 18. C y C++ diferencia en sizeof ('x')
- 19. ¿C++/CLI es más rápido que C#
- 20. ¿Es esto un control? (C# Winforms)
- 21. ¿Qué es un "encabezado privado" en C?
- 22. ¿Qué es un puntero Singleton en C?
- 23. ¿Qué es un operador sobrecargado en C++?
- 24. ¿Qué es un miembro variante en C++?
- 25. ¿Es posible anular un constructor en C#?
- 26. ¿Qué es un identificador en C++?
- 27. ¿Es privado un campo C# por defecto?
- 28. ¿Es posible recorrer un objeto Clase C#?
- 29. ¿Es este un comando/instrucción C válido?
- 30. ¿C++ es un lenguaje orientado a objetos?
Relacionados: http://stackoverflow.com/questions/8586218/is-c-sharp-a-super-set-of-c-just-like-objective-c-and-c –