
Michael Fisher
0
3494
1008
El lenguaje de programación C es la madre de todos los lenguajes de programación modernos 10 lenguajes de programación que probablemente nunca escuchó 10 lenguajes de programación que probablemente nunca escuchó Hay algunos lenguajes de programación muy extraños y extraños que han cambiado la lógica y aún se las han arreglado para quedarse fiel a la ciencia de la comunicación con una computadora. Vas a… . Casi todos los lenguajes en uso hoy en día incluyen varias características que aparecieron por primera vez en el lenguaje C. Se ha utilizado ampliamente para escribir software para las microcomputadoras integradas más pequeñas en las computadoras centrales y supercomputadoras más grandes.
Las aplicaciones escritas en C abarcan una amplia variedad de software de sistema, software de escritorio, software empresarial, bases de datos, etc. Sería muy bueno comenzar una carrera de programación 10 trabajos de programación de computadoras que están en demanda ahora mismo 10 trabajos de programación de computadoras que están en Exija ahora mismo Dado que conseguir un trabajo de programación puede ser difícil en el panorama actual, considere concentrarse en una de las siguientes concentraciones para mejorar sus posibilidades de éxito. con un conocimiento de los conceptos básicos de C.
Una breve historia de C
El desarrollo del lenguaje C está muy relacionado con Unix. Fue desarrollado alrededor de 1972, con más adiciones hechas en años posteriores..
Antes de que se desarrollara C, el sistema operativo Unix se desarrolló para la computadora PDP-7 usando su lenguaje ensamblador. Más tarde, se compiló un compilador para C en esta plataforma, nuevamente utilizando lenguaje ensamblador. En este momento, C fue diseñado para facilitar el desarrollo de Unix. Usando este compilador, Unix fue reescrito completamente en C para la computadora PDP-11. Y nuevamente, el compilador del lenguaje C fue reescrito en C (ayudado, por supuesto, por el excelente lex y yacc herramientas), completando así el proceso de arranque de C / Unix.
La razón principal por la que se reescribió Unix en C fue por la portabilidad. Desde lenguajes de ensamblaje para diferentes arquitecturas de CPU Una guía breve de la CPU AMD Threadripper fantástica Una guía breve de la CPU AMD Threadripper Fantastic AMD estuvo en el desierto de la CPU durante varios años, pero ha vuelto con una explosión masiva. AMD Threadripper es una de las CPU de consumo más potentes del mercado, pero ¿es adecuada para usted? son diferentes, portar el sistema operativo Unix a cada uno habría sido un esfuerzo significativo. Al desarrollar un lenguaje de sistemas como C, y reescribiendo el sistema operativo Unix en C, este esfuerzo se redujo en varios órdenes de magnitud.
Una vez que se desarrolló el lenguaje, se reconoció que podría usarse para escribir mucho más que el software del sistema. Y por lo tanto, C comenzó a usarse para escribir software como servidores de archivos, servidores de bases de datos, pilas de red, software de escritorio y servidores web (y posteriores) Cómo convertir un dispositivo Android en un servidor web Cómo convertir un dispositivo Android en una web Servidor ¿Desea alojar un sitio web simple sin un plan de alojamiento costoso? Aquí le mostramos cómo alojar un sitio web en su teléfono o tableta Android. etc..
En 1978, Brian Kernighan y Dennis Ritchie publicaron el libro. El lenguaje de programación C. Este libro sirvió como un libro informal. Especificación de lenguaje C durante muchos años hasta 1989, cuando C fue formalmente estandarizada por ANSI. La última versión de C es C11, publicada en 2011.
Veamos ahora algunas características de C que lo hacen único..
C vs C ++: ¿están relacionados??
A medida que se desarrolló un software más complejo en C, se reconoció que los conceptos orientados a objetos, como la encapsulación, el polimorfismo, etc., ayudarían a gestionar la complejidad. Esto condujo al desarrollo de C ++ como un superconjunto de C.
C ++ se creó agregando ciertas características para escribir software orientado a objetos, manteniendo la compatibilidad con C. Se desarrolló con la idea de mejora progresiva - haciendo cambios compatibles al lenguaje C para que los módulos C y C ++ puedan combinarse en el mismo programa y compilarse con el mismo compilador. Esto permitió que los módulos más antiguos basados en C se reutilizaran con cambios mínimos en un programa más grande escrito usando conceptos orientados a objetos.
Un programa de C puede, en teoría, ser compilado por un compilador de C ++ sin requerir ningún cambio. En la práctica, sin embargo, una verificación de tipo más estricta impuesta por C ++ produce errores, lo que requiere algunos cambios en el código.
Pequeño número de palabras clave
El lenguaje C ha sido un lenguaje pequeño a pesar de su poder. Esto se debe a que declara solo 32 palabras como palabras clave con un significado específico. Por el contrario, C ++ declara 82 palabras clave, java tiene 50 palabras clave reservadas y javascript tiene 63. Y COBOL declara la friolera de 357 palabras clave. Imagine el dolor de cabeza de tener que recordar y esquivar tantas palabras clave!
Sin tipo de cadena explícita
A diferencia de la mayoría de los otros lenguajes modernos Para construir una aplicación de Android, necesita aprender estos 7 lenguajes de programación Para construir una aplicación de Android, necesita aprender estos 7 lenguajes de programación ¿Qué lenguaje de programación es el adecuado para crear aplicaciones de Android? Se trata de tu historial de programación y de los idiomas con los que te sientes más cómodo. Afortunadamente, tienes opciones. como Java, C ++ y JavaScript, C no proporciona un tipo separado para cadenas. Una cadena se considera una matriz de caracteres terminados por un 0 personaje (denotado “\ 0”) La longitud de la cadena se denota mediante una convención: el número de caracteres hasta 0 personaje. Usted es libre de ignorarlo y contar o almacenar más allá del “\ 0”. Esta falta de un tipo de cadena adecuado y la convención ha dado lugar a innumerables errores a lo largo de los años, conocidos como desbordamiento de búfer.
De hecho, el primer gusano que llegó a Internet, el Morris Internet Worm, fue el resultado de tal error en una pieza crucial del software del sistema conocido como dedo demonio.
Aquí hay un ejemplo de tal error. Ilustra cuán fácil es introducir tales errores en un programa. El programa se compila bien, pero se bloquea debido al desbordamiento del búfer.
# include main () char * buf = "hola mundo"; buf [12] = 'a'; printf ("% s \ n", buf);
En contraste, la mayoría de los lenguajes modernos proporcionan un tipo de cadena explícito que hace que tales travesuras sean imposibles. Incluso C ++, que compila bien el código anterior, proporciona un explícito std :: string tipo.
Manipulación de puntero
Un puntero es una referencia a una ubicación de memoria. C es completamente flexible cuando se trata de leer y escribir ubicaciones de memoria arbitrarias. Esta flexibilidad tiene un gran costo y ha sido la causa de muchos errores en todo el espectro de software. Los más notables y que afectan a todo el Internet incluyen tales errores en servidores web, servidores de correo y servidores ftp. Incluso hoy en día, ocasionalmente hay noticias sobre errores causados por referencias y actualizaciones de ubicaciones de memoria no válidas..
El infame SSL HeartBleed El error de seguridad descubierto en 2014 fue el resultado de una gestión inadecuada de las ubicaciones de los punteros e ilustra la importancia crucial de una gestión adecuada de los punteros en C.
Incluso el BSOD ocasional (“pantalla azul de muerte”) los errores que se ven en los sistemas Windows también son probablemente causados por un manejo inadecuado del puntero.
Los lenguajes distintos de C ++ no permiten la manipulación del puntero y, por lo tanto, no son vulnerables a esta clase de errores.
Las matrices y los punteros son intercambiables
En C array, las referencias y los punteros son intercambiables. El lenguaje permite el uso de una referencia de matriz Cómo usar una Java ArrayList Cómo usar una Java ArrayList Una matriz de Java es una matriz redimensionable de propósito general. Proporciona la mayoría de las instalaciones que generalmente se esperan de las matrices en otros idiomas. En este artículo aprenderá a configurar y usar una lista de arrays. donde se requiere un puntero, y viceversa. Si bien esto permite una manipulación poderosa, también ha dado lugar a muchos errores infames.
Uso amplio de “definir” Macros
Las macros se usan para sustituir un nombre por una expansión diferente. Se pueden usar para cambiar la definición de un nombre en tiempo de compilación, o para sustituir una expansión más larga por un nombre simple. El sistema macro C admite ifdef condicionales que permiten la compilación condicional. Esta es una forma en que el software se transfiere a diferentes arquitecturas y sistemas operativos. Los nombres genéricos se definen y sustituyen en tiempo de compilación con diferentes expansiones para diferentes condiciones.
También es posible incluir o eliminar secciones enteras de código de ser compiladas usando estas macros ¿Tienes un teclado Razer? Grabar macros es fácil con Synapse ¿Tienes un teclado Razer? Grabar macros es fácil con Synapse Si usa periféricos Razer pero no aprovecha el software Synapse, se está perdiendo. Aquí le mostramos cómo usar las macros de manera efectiva y cómo pueden potenciar sus juegos. .
Están en desuso pero están disponibles en C ++. Otros lenguajes como Java, JavaScript, Python, etc. no ofrecen una instalación similar..
Módulos encapsulados en archivos
C no tiene el concepto de una clase y, por lo tanto, no admite la noción de visibilidad pública, privada y protegida separada. La única encapsulación proporcionada por C es la de los archivos. Las funciones, las variables globales y los tipos definidos dentro de un archivo fuente solo son visibles dentro de ese archivo a menos que se exporten los nombres. Las palabras clave estático y externo se proporcionan con el propósito de controlar la visibilidad de los nombres de variables y funciones.
Por el contrario, otros lenguajes como C ++, Java y Python generalmente admiten clases y la encapsulación que acompaña a las clases..
Bibliotecas externas
Además de las construcciones de lenguaje básico, la funcionalidad más compleja en C se delega a bibliotecas externas. La manipulación de cadenas, matemáticas, entrada-salida, redes, etc., son proporcionados por bibliotecas externas. En contraste, otros idiomas generalmente vienen con una biblioteca bien surtida de módulos con el lenguaje en sí.
Y eso cubre algunas características básicas del lenguaje C, especialmente aquellas que lo distinguen de otros lenguajes..
¿Has trabajado con C? ¿Te gustó o hubieras preferido trabajar con otro idioma? Por favor explique en los comentarios a continuación.