2010-10-23 13 views
8

Quiero ampliar mi experiencia de programación y pensé que aprender C (no C++) sería una buena idea - Tengo un proyecto inicial (algunos juegos 2D simples usando SDL) y dado es una oportunidad, pero tengo que admitir que estoy luchando.Aprendiendo C desde un fondo en C#

Ahora me considero un desarrollador de C# muy competente, ¡pero C es un mundo completamente diferente!

  • No hay espacios de nombres.
  • Sin clases, no sé cómo estructurar mi código.
  • I comprender archivos de encabezado incluye, pero el uso que hago de ellos no parece del todo correcto.
  • La pérdida de (por ejemplo) la clase String es un poco un choque cultural.

Además de eso se me hace difícil de separar la información de C++ de la información de C (por ejemplo, es snprintf un C++ único?)

Esto puede sonar como una extraña petición, pero ¿Hay alguna buena guía para aprender C si tienes experiencia en otros idiomas?

+1

Sólo para hacerle saber: 'snprintf' es una función C que se puede utilizar en C++. Evidencia: http://libslack.org/manpages/snprintf.3.html en Bugs se puede ver que es una función ISO C99. –

+0

Diablos, ... podría golpear Cobol mientras estás en ello ... –

+0

Además, ¿por qué no usar C++? Su uso de SDL que se supone que debe usarse con C++. –

Respuesta

4

No intente aprender C de libros/sitios web en C++. Comience con algo dirigido solo a C. Un gran lugar es The C Programming Language. Es el original y sigue siendo uno de los mejores libros de lenguaje de programación que hay.

Aprender C va a ser una lucha porque es un tipo de lenguaje diferente. Es un lenguaje de procedimientos, no un lenguaje orientado a objetos. Será bueno estirar tu cerebro para aprenderlo. Probablemente también aprenderá mucho más sobre la forma en que funciona su sistema operativo porque está mucho más cerca del metal.

Tenga en cuenta también que es un lenguaje mucho menos complejo y, por lo tanto, le faltan muchas de las sutilezas de un lenguaje moderno. No hay BCL/.Net Framework. Como habrás notado, no hay una clase de cadena (aunque hay funciones de cadena).

+1

1 por mencionar la tomo. Creo que * todos * independientemente del idioma que estén usando deben leer ese libro. Es uno de los mejores libros de programación jamás escritos. –

1

Te recomiendo que empieces con un libro sobre C. No es una buena idea aprender un nuevo idioma en constante comparación con el anterior, terminas aprendiendo lo que es diferente y no lo nuevo y único.

Eche un vistazo al libro de Kernighan y Ritchie, o Deitel & Deitel's. Ambos te parecerán demasiado básicos al principio, pero terminarás teniendo un conocimiento mucho más sólido del idioma.

edición: un amigo mío aquí sugiere también se encuentra algo en estructuras de datos y algoritmos después de haber captado el idioma, ya que va a trabajar en un ambiente con ningún objeto.

Espero que ayude!

0

Te responderé la pregunta, pero primero: pasar de C# a C es como pasar de un cepillo de dientes de plástico a uno de madera ... No veo ninguna ventaja.

Así:

espacios de nombres - No, no hay ninguno en C. Esta es una característica # C++/C. Debería poder compensar con prefijos. (namespace_myClass).

En cuanto a las clases, no sé cómo ayudarle. Soy un programador de C++ (no C), pero C sí tiene struct, aunque no sé si puede tener funciones de miembro.

Archivos de cabecera e incluye son sintácticamente la misma. Por ejemplo:

#include <Windows.h> 

le ofrece la funcionalidad de Windows. Tenga en cuenta que es posible que deba vincular en las bibliotecas muchos archivos de encabezado, como OpenGL.

Y lo haremos sin cuerda? Se podría hacer su propio, o se puede administrar manualmente cadenas de C (char *) con las funciones C, tales establecimiento de memoria, ect ...

de despedida y Goodluck!

+0

C# y C tienen diferentes resistencias. C sigue siendo la herramienta preferida para el trabajo integrado. Hay ventajas * genuinas * al probar C out. –

+0

Existen muchas buenas razones para pasar de C# a C. Toda la programación integrada se realiza en C. Como lenguaje de nivel inferior, lo ayuda a aprender más sobre el sistema operativo y el hardware. Asumir los privilegios y responsabilidades adicionales de C es una buena experiencia de programación. O como en mi caso, puedes hacerlo porque tu jefe te paga por hacer el cambio. – skinnedKnuckles

0

C++ es un superconjunto de C. Así que cualquier cosa que puede hacer en C, puede hacerlo en C++.

Creo que es una buena idea aprender C. Tendrá que lidiar con la administración de memoria y recursos, programación estructurada frente a orientada a objetos, también tiene una biblioteca estándar mucho más pequeña (en comparación con C#) .

+0

C++ no es * técnicamente * (en el sentido matemático) un superconjunto de C, y en el sentido computacional (si es así), todos los lenguajes de turing-completo son equivalentes.Es importante hacer esta distinción porque algunos códigos C no se compilarán cuando se use un compilador C++, y (obviamente) el código C++ no se compilará con un compilador C. –

+0

Estaba sobre simplificando: http://public.research.att.com/~bs/bs_faq.html#C-is-subset – KSchmidt