2010-03-23 10 views
12

Me he comprometido a aprender C ahora, estoy bien con Python/PHP/Bash pero he decidido que estoy limitado por no ser fluido en C. Sin embargo, no me puedo imaginar trabajando en un lenguaje sin listas y hashes, tal vez Me estoy tirando un arma, pero seguramente hay bibliotecas de colección 'estándar'. No veo ninguno en la libra estándar de GNU, ¿alguna sugerencia?C Language Standard Collections ¿Dónde están?

+0

Si no tiene otra razón que la de "ser limitado", le sugiero que empiece a aprender C++ en su lugar. C++ tiene vectores, listas, casi cualquier cosa que desee, excepto hashtables, que se agregarán en C++ 0x y ya están disponibles en los compiladores modernos. – Thomas

+0

Realmente siento la necesidad de familiarizarme más con C porque la mayor parte de la infraestructura que consumo como usuario de VHL Language se realiza allí y no en C++, siendo bash/PHP/Python los principales. – flaxeater

Respuesta

14

No hay un conjunto "estándar" de clases de colección para C. Muchas personas simplemente hacer rodar los suyos según sea necesario.

Pero, por supuesto, hay algunas bibliotecas que llenan este vacío. Por ejemplo, glib ofrece listas enlazadas, tablas hash y varios tipos de árboles.

+0

sí, esto es realmente lo que estaba preguntando. Vi que no había un 'estándar', pero sé que hay un conjunto de herramientas que la gente utiliza principalmente. Esto es probablemente así. :) Gracias – flaxeater

11

C es un nivel inferior al que está acostumbrado. No hay colecciones estándar en C fuera de la matriz.

+0

Ya, OP se sorprenderá de que ni siquiera hay sobrecarga de funciones y no se pueden declarar variables en el medio de una función – Pyrolistical

+2

@Pyrolistical C99 permite declaraciones de variables en el medio de una función – amrox

+0

No estaba claro y me siento mal por eso, pensé que poner las comillas en "estándar" dejaba en claro que estaba pidiendo un estándar comunitario. – flaxeater

0

No hay colecciones muy estándar en C. Al ser un lenguaje de nivel muy bajo (en comparación con C++ y más idiomas "modernos")

C++ añade éstos a través de la Standard Template Library. La mayoría de las "colecciones" como hashes y listas se basan en técnicas de programación orientadas a objetos o genéricas que no están disponibles (excepto por convención) en C.

4

Tal vez deberías probar mirar en glib. Si bien no es un estándar en el mismo sentido que STL para C++, es una biblioteca comprobada y se usa en muchas aplicaciones.

http://library.gnome.org/devel/glib/2.22/

0

No hay bibliotecas de contenedores "estándar" (como en parte de la norma ISO C), al menos no a partir del C99. He visto varios intentos de terceros; todos tuvieron algún grado de pérdida u otro.

C tiene un conjunto de herramientas muy primitivo y escaso; He comparado la programación en C con la construcción de una casa con nada más que un serrucho y un martillo.

2

No hay un estándar, pero hay una excelente alternativa que es mucho más simple que glib: Dave Hanson's C Interfaces and Implementations. Incluye varias abstracciones de recolección eficientes y una cantidad de otros módulos útiles. El software es gratuito y vale la pena comprar el libro.

0

Dependiendo de su sistema, puede encontrar lo que está buscando en sys/queue.h, que incluye "implementaciones de listas de enlace único, listas de doble enlace, colas simples y colas de espera".