2009-01-26 10 views
12

¿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?

+0

Relacionados: http://stackoverflow.com/questions/8586218/is-c-sharp-a-super-set-of-c-just-like-objective-c-and-c –

Respuesta

37

En una palabra, No.

+0

Eso es lo que pensé, Demasiado malo –

+1

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. –

+0

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

12

No de ninguna manera significativa. Está inspirado en C (entre otros), pero son idiomas fundamentalmente diferentes.

10

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.

+0

hay punteros si quieres usarlos – xyz

7

Vamos a ponerlo de esta manera:

C y C# son similares como rm -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.

+0

o Java y Javascript al parecer :) –

+0

Robert, jaja sí lo arranqué de esa analogía: p –

+0

Mi analogía favorita es "Java y JavaScript son similares a un coche y la alfombra son similares. " –

3

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 ...

+0

C no requiere administración de memoria explícita; hay muchas bibliotecas de GC Boehm es uno. – jrockway

+0

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

+0

Podría hacer punteros con código inseguro en C# – SQLMenace

4

C++ no es un verdadero superconjunto de C o bien (ver link text)

+1

Técnicamente sí ... Pero prácticamente está bastante cerca. Pero C# no está cerca de C mucho más que la sintaxis. –

+0

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

2

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.

+1

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? –

+0

Puedo compilar código C dentro de Obj-C o C++ usando las directivas de compilación apropiadas. Ese es mi punto –

0

C es imprescindible. C# está orientado a objetos.

+1

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! –