C99 es otro nombre de la especificación de estándares ISO/IEC 9899:1999 para C que se adoptó en 1999. Este artículo se concentra principalmente en las nuevas funciones agregadas en C99 comparándolas con el estándar C89. En la etapa de desarrollo del estándar C99, se volvió a examinar cada elemento del lenguaje C, se analizaron los patrones de uso y se anticiparon las demandas futuras. La relación de C con C++ proporcionó un telón de fondo para todo el proceso de desarrollo. El estándar C99 resultante es un testimonio de las fortalezas del original.
- Palabras clave añadidas en C99:
- en línea : C99 agrega la palabra clave en línea que se aplica a las funciones. Si escribimos nombre_función de tipo de datos en línea (parámetro) en cualquier función, significa que estamos especificando que el compilador optimice las llamadas a esa función, es decir, el código de la función se expandirá en línea en lugar de llamarse.
Ejemplo:
// C program to demonstrate inline keyword
#include <stdio.h>
inline
int
maximum(
int
a,
int
b)
{
return
a > b ? a : b;
}
int
main()
{
int
x = 5, y = 10;
printf
(
"Maximum of %d and %d is %d"
,
x, y, maximum(x, y));
return
0;
}
Nota: Algunos compiladores muestran una referencia no definida al máximo(). Esta característica en línea rara vez se usa como palabra clave.
El programa anterior es equivalente al siguiente
#include <stdio.h>
int
main()
{
int
x = 5, y = 10;
printf
(
"Maximum of %d and %d is %d"
,
x, y, (x > y ? x : y));
return
0;
}
Producción:Maximum of 5 and 10 is 10
Producción:Maximum of 5 and 10 is 10
Las funciones en línea nos ayudan a crear código eficiente al mantener un enfoque estructurado basado en funciones.
- restrict : restrict es un calificador de tipo aplicable solo para punteros. Un puntero calificado por restrict es inicialmente el único medio por el cual se puede acceder al objeto al que apunta. El acceso al objeto por otro puntero puede ocurrir solo si el segundo puntero se basa en el primero.
Usamos el calificador restrict para restringir el acceso al objeto. Estos se usan principalmente como parámetros de función o en malloc() . El calificador restrict nunca cambia la semántica del programa.
- _Bool Datatype: _Bool datatype se agregó en el estándar C99 que almacena valores 0 y 1. _Bool es un tipo entero.
Nota: la palabra clave bool en C++ y _Bool en C son diferentes.
_Bool rara vez se usa en su lugar C99 define un nuevo archivo de encabezado stdbool.h que define tres macros bool, verdadero y falso.
- _Complex: C99 agrega soporte para realizar operaciones en números complejos a través de palabras clave _Complex e _Imaginary. Estas palabras clave brindan un mejor soporte para la programación numérica.
Tipos definidos en _Complex:
- flotar _Complejo
- doble _Complejo
- largo doble _Complejo
- _Imaginario: como se dijo anteriormente, C99 agrega soporte para realizar operaciones en números complejos a través de palabras clave _Complejo e _Imaginario. Estas palabras clave brindan un mejor soporte para la programación numérica.
Tipos definidos en _Complex e _Imaginary:
- flotar _imaginario
- doble _imaginario
- largo doble _imaginario
De la misma manera discutida en el tipo de datos _Bool, estos _Complex e _Imaginary no se usan con frecuencia. En su lugar, usamos el archivo de encabezado que consta de macros integradas complejas e imaginarias .
- en línea : C99 agrega la palabra clave en línea que se aplica a las funciones. Si escribimos nombre_función de tipo de datos en línea (parámetro) en cualquier función, significa que estamos especificando que el compilador optimice las llamadas a esa función, es decir, el código de la función se expandirá en línea en lugar de llamarse.
- Adición de calificadores de tipo: otro aspecto importante agregado en C99 es la introducción de modificadores de tipo largo largo y largo largo sin firmar . Un int largo tiene un rango de –(2^63 – 1) a +(2^63 –1). Un int largo largo sin signo tiene un rango mínimo que va de 0 a +(2^64 –1). Este tipo long long permite que los enteros de 64 bits se admitan como un tipo integrado.
- Cambios en los arreglos: C99 agregó dos funciones importantes a los arreglos:
- Arrays de longitud variable: en el estándar C89, el tamaño de la array debe especificarse mediante constantes enteras en la declaración de la array y el tamaño de la array se fija en el momento de la compilación. En el estándar C99, podemos declarar una array cuyas dimensiones están especificadas por cualquier expresión entera cuyos valores se conocen en tiempo de ejecución. Esto se llama arrays de longitud variable (VLA) .
- Inclusión de calificadores de tipo: en C99, podemos usar la palabra clave estática dentro de los corchetes durante la declaración de la array. Esto solo se aplica cuando la array se declara en los parámetros de la función, es decir
Ejemplo:
int
fun1(
char
arr[
static
80])
{
// code
}
En el ejemplo anterior, arr es siempre un puntero a una array de 80 elementos, es decir, se garantiza que arr apunta al elemento inicial de la array de caracteres que contiene al menos 80 elementos. También podemos usar las palabras clave restrict , volatile y const dentro de los corchetes si esa array se declara dentro de los parámetros de una función. La palabra clave restrict especifica que el puntero es el único medio inicial de acceso al objeto. const establece que el puntero siempre apunta al mismo objeto. volatile está permitido, pero no tiene significado.
Ejemplo:
#include <stdio.h>
void
fun(
int
a[
static
10])
{
for
(
int
i = 0; i < 10; i++) {
a[i] += 1;
printf
(
"%d "
, a[i]);
}
}
int
main()
{
int
a[] = { 1, 2, 3, 4,
4, 4, 4, 4,
5, 5, 6, 7,
8, 9, 10 };
fun(a);
}
Producción:2 3 4 5 5 5 5 5 6 6
- Comentarios de una sola línea: los comentarios de una sola línea no se aceptan en el estándar C89. El estándar C99 introduce comentarios de una sola línea que se usan solo cuando se necesitan comentarios breves. Estos comentarios comienzan con // y se extienden hasta el final de la línea.
P.ej:
// First Comment
int
a;
// another comment
- Declaración de identificadores:
según el estándar C89, todos los identificadores deben declararse al comienzo del bloque de código. Si necesitamos cualquier otro identificador en el medio, no podemos declarar para esa instancia o tiempo. Tenemos que declarar eso al principio. C99 ha cambiado esta regla ya que podemos declarar identificadores siempre que lo necesitemos en un código.En simple, podemos ver esto como:
#include <stdio.h>
int
main()
{
int
i;
i = 1;
int
j;
// this declaration is invalid in C89 standard, but valid in C99 and C++
j = 3;
}
Producción:
Publicación traducida automáticamente
Artículo escrito por avsadityavardhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA