Contactos

C Uso del argumento principal. Argumentos opcionales y nombrados. Depuración del programa con argumentos de línea de comandos.

Etiquetas: Configuración de la línea de comandos

Configuración de la línea de comandos

C y - lenguaje compilado. Después del ensamblaje, el programa es un archivo ejecutable (no consideramos la creación de bibliotecas dinámicas, controladores, etc.). Nuestros programas son muy simples y no contienen bibliotecas de tiempo de ejecución (bibliotecas de tiempo de ejecución), por lo que pueden transferirse a una computadora con el mismo sistema operativo (y una arquitectura similar) y se están ejecutando allí.

El programa durante el inicio puede tomar parámetros. Son los argumentos de la función principal. Vista general de la función principal siguiente.

Vieves principales (int argc, char ** argv) (...)

El primer argumento de ArgC es el número de funciones de parámetros transmitidas. El segundo argumento es una matriz de cadenas: los parámetros en sí son en realidad. Dado que los parámetros de la función pueden ser cualquiera, entonces se transmiten como cadenas, y el programa en sí debe desmontarlos y conducir al tipo deseado.

El primer argumento (ARGV) es siempre el nombre del programa. En este caso, el nombre se muestra dependiendo de dónde se ejecutara el programa.

#Incluir. #Incluir. Nulo principal (int argc, char ** argv) (Printf ("% S", ARGV);)

Ahora aprende a trabajar un poco con la línea de comandos. Se necesitará para transmitir los argumentos a nuestro programa. La combinación de las teclas Win + R llama la ventana "Ejecutar". Marque en él cmd y usted abrirá línea de comando. También puede encontrar la búsqueda cmd.exe en el menú Inicio. En unix como sistemas operativosoh, puedes llamar al programa "Terminal".

No estudiaremos muchos equipos. Sólo aquellos que se necesitarán en el trabajo.

Estándar para todos los sistemas operativos El comando de CD se transforma para la carpeta deseada. Hay dos nombre reservado -. (Punto) y .. (dos puntos). El punto es el nombre de la carpeta actual.

No va a ninguna parte

Apelar a la carpeta principal

Transición a la carpeta principal

Para la transición a la dirección de CD deseada está escrita. Por ejemplo, debe ir a Windows a la carpeta C: \\ Windows \\ System32

CD C: \\ Windows \\ System32

En Linux, si necesita ir a la carpeta / var / MySQL

CD / VAR / MYSQL

Si la ruta contiene espacios, está escrito en comillas dobles.

CD "D: \\ DOCUNTS Y CONFIGURACIÓN \\ Prolog"

El terminal tiene las siguientes características útiles: si presiona la flecha hacia arriba, aparecerá el comando ejecutado anterior. Si presiona la pestaña, el terminal intentará agregar una cadena al comando conocido, o agregar la ruta, desplegar todas las carpetas y archivos en la carpeta actual.
Marque CD C: \\
Presione TAB y vea lo que está sucediendo.

Uno mas equipo importante Dir en Windows y LS en Linux, muestra los contenidos de la carpeta actual a la consola (la carpeta en la que está actualmente)

Su programa devolvió su nombre completo. Vaya a la carpeta donde se encuentra su programa y vea su contenido.


Ahora, después de que cambiamos a nuestra carpeta, puede realizar nuestro programa. Para hacer esto, escriba su nombre.


Nota: el nombre ha cambiado. Dado que el programa se llama desde su carpeta, se muestra en relación con el nombre. Ahora cambiará el programa y lo hará sacará todos los argumentos. que son trasladados a ella.

#Incluir. #Incluir. Nulo principal (int argc, char ** argv) (int i; para (i \u003d 0; i< argc; i++) { printf("%s\n", argv[i]); } }

Recoge el proyecto. Antes de la asamblea, asegúrese de que el programa esté cerrado. Ahora llame al programa pasándole diferentes argumentos. Para hacer esto, escriba el nombre del programa y a través del espacio de argumento.


Ahora escribamos un programa que reciba dos argumentos del número y muestra su suma.

#Incluir. #Incluir. #Incluir. Inventario principal (int argc, char ** argv) (int a, b; if (argc! \u003d 3) (Printf ("Error: se encuentran en argencias de% D. Necesita exactamente 2", ARGC-1); salida (1); ) A \u003d Atoi (ARGV); B \u003d Atoi (ARGV); Printf ("% d", A + B);)

Recopilamos y llamamos


Así, la mayoría de los programas funcionan. Haga clic en una etiqueta, llame al programa al que se refiere. La mayoría de los programas también toman diferentes argumentos. Por ejemplo, puedes llamar navegador Firefox. Desde la línea de comandos y los argumentos de transferencia.
Firefox.exe "www.mozilla.org" sitio "e inmediatamente abrirá los sitios en dos pestañas direcciones especificadas.

Muchos comandos estándar también tienen parámetros. Se acepta en Windows que comienzan con una mirada directa, en Unix con menos o dos menos. por ejemplo

Muestra solo carpetas, y en el terminal de Linux

LS -L muestra todos los archivos y carpetas con atributos

Por ver adicional comandos de Windows Marque en la línea de comandos de ayuda o vea la guía (es fácil encontrar en Internet). Para los equipos de Linux y sus opciones, mucho más, y algunas de ellas son lenguajes de programación independientes, por lo que vale la pena aprender al menos un conjunto mínimo y sus opciones.

Sucede que los datos en el programa se transmiten desde la línea de comandos cuando se llama. Dichos datos se denominan argumentos de línea de comandos. Parece esto, por ejemplo:

./a.out test.txt ls -lt / home / Peter /

Aquí están los programas A.OUT (desde el directorio actual) y LS (de un directorio especificado en la variable de entorno de ruta). El primer programa de la línea de comandos recibe una palabra - test.txt, el segundo es dos: -lt y / home / Peter /.

Si el programa está escrito en C, entonces cuando comienza, el control se transmite inmediatamente a la función principal (), por lo tanto, es que obtiene los argumentos de la línea de comandos que se asignan a sus variables.

Antes de esto, definimos la función principal () como si no aceptara parámetros y no devuelve nada. De hecho, en el idioma C, cualquier función predeterminada (si no se define nada) devuelve un entero. Puede asegurarse de que pueda asegurarse. Si escribes el código de esta manera:

main () (Printf ("Hola \\ n ") Retorno 0; )

Que no surgirá ninguna advertencia ni error en la compilación. Lo mismo será, si grabas INT Main (). Esto demuestra que la función predeterminada devuelve un número entero, y no nada (vacío). Aunque lo que devuelve la función siempre puede ser "anular", por ejemplo, voidmain () o flotará en el principal ().

Al llamar a un programa desde la línea de comandos, siempre se transmite un par de datos:

  1. enterodenotando el número de palabras (elementos separados por espacios) en la línea de comandos al llamar,
  2. poste indicador en una matriz de cuerdas.Donde cada fila es una palabra separada de la línea de comandos.

Debe tenerse en cuenta que también se considera el nombre del programa en sí. Por ejemplo, si la llamada se ve así:

./A.OUT 12 TEMA 2

El primer argumento del programa es 4, y la matriz de cadenas se define como ("./a.out", "12", "tema", "2").

Preste atención a la terminología, solo hay dos argumentos del programa (número y matriz), pero cualquier argumento de la línea de comandos. Los argumentos de la línea de comandos se "convierten" en los argumentos del programa (en los argumentos principales de la función).
Estos datos (número y puntero) se transmiten al programa incluso cuando se llama simplemente por nombre sin transferir algo :./ A.OUT. En este caso, el primer argumento tiene un valor de 1, y el segundo indica una matriz que consiste en una sola línea ("./a.out").

El hecho de que el programa se transmita al programa no significa que la función principal () debe recibirlos. Si la función principal () se define sin parámetros, es imposible acceder a los argumentos de la línea de comandos. Aunque nada te molesta para transferirlos. Los errores no surgirán.

Para acceder a los datos transferidos al programa, deben asignarse a las variables. Dado que los argumentos se transmiten de inmediato a Main (), su título debe parecerse a:
Main (int n, char * arr)

La primera variable (N) contiene el número de palabras, y en el segundo puntero a la matriz de fila. A menudo, el segundo parámetro está escrito como ** ARR. Sin embargo, esto es lo mismo. Recuerde que las líneas de la matriz en sí, contengan punteros a las líneas como sus elementos. Y en la función transmitimos un puntero al primer elemento de la matriz. Resulta que transmitimos un puntero al puntero, es decir,. ** arr.

La tarea
Escribe tal programa:

#Incluir. Int main (int argc, char ** argv) (int i; printf ("% d \\ n ", argc); para (i \u003d 0; i< argc; i++ ) puts (argv[ i] ) ; }

Muestra el número de palabras en la línea de comandos cuando se llama y cada palabra con nueva cadena. Llámalo sin argumentos de línea de comandos y con argumentos.

En el programa, utilizamos las variables Argc y ARGV. Es común usar tales nombres, pero en realidad pueden ser de todos modos. Es mejor adherirse a esta norma para que sus programas sean más comprensibles, no solo para usted, sino también a otros programadores.

El valor práctico de la transferencia de datos al programa.

Si tiene experiencia en el símbolo del sistema GNU / Linux, usted sabe que la mayoría de los equipos tienen llaves y argumentos. Por ejemplo, al ver el contenido de los directorios, copia, se mueve como argumentos, se indican objetos. sistema de archivosSobre el cual se realiza el equipo. Las características de su ejecución se determinan utilizando las teclas. Por ejemplo, en el equipo.

CP -R ../les_1 ../les_101

cP es el nombre del comando, -R - la tecla, y ../ LES_1 y ../ LES_101 - Argumentos de comando.

En general, las direcciones de los archivos y los "modificadores" (estas son las claves) del proceso del programa se transmiten en el programa.

Escribiremos un programa que abra los archivos especificados por el usuario en la línea de comandos para registrar o agregar y escribir (agregar) a una y la misma información que el usuario ingresa desde el teclado durante el proceso de ejecución del programa:

#Incluir. #Incluir. Main (int argc, char ** argv) (int i, ch; archivo * f [5]; if (argc< 3 || argc > 7) (pone ( "Número inválido de parámetros") Return 1; ) Si (STRCMP (Argv [1], "-W")! \u003d 0 && strcmp (Argv [1], "-A")! \u003d 0) (pone ( "El primer parámetro puede ser, o -A") Retorno 2; ) para (i \u003d 0; i< argc- 2 ; i++ ) { f[ i] = fopen (argv[ i+ 2 ] , argv[ 1 ] + 1 ) ; if (f[ i] == NULL) { printf ("El archivo% s no se puede abrir \\ n", Argv [I + 2]); Regreso 3; )) Mientras ((CH \u003d getchar ())! \u003d Eof) para (i \u003d 0; i< argc- 2 ; i++ ) putc (ch, f[ i] ) ; for (i= 0 ; i < argc- 2 ; i++ ) fclose (f[ i] ) ; return 0 ; }

Explicación del código:

  1. Se crea una matriz de cinco punteros de archivo. Por lo tanto, puede abrir simultáneamente no más de cinco archivos. El puntero de archivo del primer archivo se almacenará en el elemento de la F, la segunda en F, etc.
  2. Se verifica el número de argumentos de línea de comandos. Deben tener al menos tres, porque El primero es el nombre del programa, el segundo: el modo de apertura del archivo, el tercero o el único archivo en el que se realizará el registro. Dado que el programa le permite abrir solo cinco archivos, el número total de argumentos de línea de comandos no puede ser más siete. Por lo tanto, si el número de argumentos es inferior a 3 o más de 7, entonces se completa el programa, porque El operador de retorno conduce a la salida de la función, incluso si todavía hay código después de eso. El valor devuelto de la función es desigual 0, puede ser interpretado por el proceso principal, como un mensaje que el programa se completó con un error.
  3. Revisó la corrección del segundo argumento de la línea de comandos. Si no es igual a ningún "-w", ni "-a", entonces la expresión condicional en la segunda, si devuelve 1 (verdadero). La función STRCMP () le permite comparar cadenas y devoluciones 0 si son iguales.
  4. El bucle FORCYCLE abre los archivos en las direcciones especificadas, que comienzan con el tercer elemento de la matriz ARGV. Es por eso que se agrega 2 a I, para recibir los elementos de la matriz ARGV, comenzando con el tercero. La expresión ARGC-2 indica el número de nombres de archivos aprobados; Porque El ArgC almacena el número total de argumentos de línea de comandos, los dos primeros de los cuales no son nombres de archivos.
  5. Expression ArgV + 1 le permite "cortar" de la cadena "-w" (o "una subcademia)" W "(o" A "), porque ARGV es esencialmente un puntero al primer elemento de la cadena. Agregando a la unidad de puntero, lo cambiamos al siguiente elemento de la matriz.
  6. Si el archivo falla, la función FOPEN () devuelve NULL. En este caso, se completa el programa.
  7. Cada carácter ingresado por el usuario desde el teclado se escribe en todos los archivos abiertos.
  8. Al final, los archivos están cerrados.

Argumentos opcionales y nombrados.

Argumentos opcionales

En la versión C # 4.0, una nueva herramienta que mejora la comodidad de especificar argumentos al llamar a un método. Esta herramienta se llama argumentos opcionales Y le permite determinar el valor predeterminado para el parámetro del método. Este valor se utilizará de forma predeterminada si se especifica el argumento correspondiente para el parámetro cuando se llama el método. En consecuencia, especifique el argumento para que no sea necesario dicho parámetro. Los argumentos opcionales le permiten simplificar la llamada a los métodos donde se aplican los argumentos predeterminados a algunos parámetros. También se pueden utilizar como una forma "abreviada" de métodos de sobrecarga.

El estímulo principal para agregar argumentos opcionales fue la necesidad de simplificar la interacción con las instalaciones de COM. En varios modelos de objetos de Microsoft (por ejemplo, Microsoft Office.) La funcionalidad se proporciona a través de instalaciones COM, muchas de las cuales se escribieron hace mucho tiempo y están diseñadas para usar parámetros opcionales.

A continuación se muestra un ejemplo de los argumentos opcionales:

Utilizando sistema; utilizando System.Collections.Genic; Utilizando System.linq; Utilizando System.Text; Consolapplication1 de espacio de nombres (programa de clase (// argumentos b y con especificar al llamar opcionalmente estática INT MYSUM (INT A, INT B \u003d 5, INT C \u003d 10) (devuelva A + B + C;) PRINCIPAL DE VACÁNTICO ESTÁTICO () (int sum1 \u003d MySum (3); int sum2 \u003d mySum (3,12); consola.writeline ("sum1 \u003d" + sum1); console.writeline ("sum2 \u003d" + sum2); console.readline ();)))))

Cabe tener en cuenta que todos los argumentos opcionales deben estar indicados con el derecho de obligatorio. Además de los métodos, los argumentos opcionales se pueden utilizar en diseñadores, indexadores y delegados.

La ventaja de los argumentos opcionales es, en particular, en el hecho de que simplifican el tratamiento de programación con desafíos complejos de métodos y constructores. De hecho, a menudo en el método tiene que establecer más parámetros de lo habitual. Y en tales casos, algunos de estos parámetros se pueden hacer opcionales debido al uso preciso de los argumentos opcionales. Esto significa que solo se necesitan los argumentos que son importantes en este caso particular, y no todos los argumentos que de otra manera deben ser obligatorios. Este enfoque nos permite racionalizar el método y simplificar la apelación de la programación.

Argumentos denominados

Uno mas funcionalidadque se ha agregado a C # con la versión de salida de la versión .NET 4.0, es el soporte de la llamada llamada argumentos nombrados (argumentos nombrados). Como se sabe, al transferir argumentos, el procedimiento por su seguimiento, por regla general, debe coincidir con ese orden en el que se definen los parámetros en el propio método. En otras palabras, el valor del argumento se asigna al parámetro por su posición en la lista de argumentos.

Esta restricción está diseñada para superar los argumentos nombrados. El argumento nombrado le permite especificar el nombre del parámetro al que se asigna su valor. Y en este caso, el orden de los argumentos ya no importa. Por lo tanto, denominados argumentos hasta cierto punto similar a los mencionados inicializadores anteriores de objetos, aunque difieren de ellos con su sintaxis. Para especificar el argumento del nombre, se utiliza la siguiente forma de sintaxis:

nombre del parámetro: Valor

Aquí nombre del parámetro Indica el nombre del parámetro al que se pasa el valor. Por supuesto, el parameter_name debe significar el nombre del parámetro válido para el método llamado.

Mientras creas aplicación de consola En el lenguaje de programación de C ++, la cadena se crea automáticamente muy similar a esta:

INT Main (int argc, char * argv) // Parámetros de función principal ()

Esta cadena es un encabezado función principal Main (), los parámetros de Args y ARGV se anuncian en los soportes. Por lo tanto, si ejecuta el programa a través de la línea de comandos, entonces es posible transferir cualquier información a este programa, para esto, y existen parámetros ARGC y ARGV. El parámetro ARGC tiene un tipo de datos INT, y contiene el número de parámetros transmitidos a la función principal. Además, ARGC siempre es al menos 1, incluso cuando no transmitimos ninguna información, ya que el primer parámetro es el nombre de la función. El parámetro ARGV es una matriz de punteros a las cuerdas. A través de la línea de comandos, solo se puede transmitir un tipo de cadena. Los punteros y las líneas son dos grandes temas que se crean. secciones separadas. Por lo tanto, es a través del parámetro ARGV y se transmite cualquier información. Desarrollaremos un programa que hagamos a través del comando. cadena de Windowsy transmitir algo de información.

// argc_argv.cpp: Determina el punto de entrada para la aplicación de la consola. #Include "stdafx.h" #include Usando el espacio de nombres STD; INT principal (int argc, char * argv) (si (argc\u003e<< argv<

// Código de código :: bloques

// código dev-c ++

// argc_argv.cpp: Determina el punto de entrada para la aplicación de la consola. #Incluir. Usando el espacio de nombres STD; INT principal (INT ARST, CHAR * ARGV) (IF (ARGC\u003e 1) // Si transmitimos argumentos, el ArgC será mayor que 1 (dependiendo de la cantidad de argumentos) (COUT<< argv<

Después de haber robado el programa, abra la línea de comandos de Windows y arrastre a la ventana de la línea de comandos de nuestro programa en la ventana de la línea de comandos, la ruta completa al programa se mostrará en la línea de comandos (pero puede prescribir la ruta a el programa manual), entonces puede hacer clic en INGRESAR Y el programa comenzará (ver Figura 1).

Figura 1 - Configuración de la función principal

Como acabamos de lanzar el programa y no pasamos ningún argumento, aparecieron el mensaje que no aparecieron. La Figura 2 muestra el inicio del mismo programa a través de la línea de comandos, pero ya con la transmisión del argumento abierto.

Figura 2 - Parámetros de función principal

El argumento es la palabra abierta, como se puede ver en la imagen, esta palabra apareció en la pantalla. Puede transmitir varios parámetros inmediatamente, separándolos entre sí. Si necesita pasar el parámetro que consiste en varias palabras, debe tomarse en comillas dobles, y luego estas palabras se considerarán como un parámetro. Por ejemplo, la figura muestra el lanzamiento del programa, con la transferencia del argumento que consiste en dos palabras, funciona.

Figura 3 - Parámetros de función principal

Y si eliminas las cotizaciones. Solo voy a ver la palabra. Si no planea transmitir ninguna información cuando inicie el programa, puede eliminar argumentos en la función principal (), también puede cambiar los nombres de los argumentos. A veces, existe una modificación de los parámetros ARGC y ARGV, pero todo depende del tipo de aplicación creado o del entorno de desarrollo.

En el programa C, puede transferir algunos argumentos. Cuando el cálculo en el cálculo inicial se realiza a la principal (), se transmiten tres parámetros. El primero de ellos define el número de argumentos de comando al acceder al programa. El segundo es una matriz de punteros a cadenas simbólicas que contienen estos argumentos (un argumento uno en una línea). El tercero también es una matriz de punteros a cadenas de caracteres, se utiliza para acceder a los parámetros del sistema operativo (a las variables de entorno).

Cualquier cadena de este tipo parece ser:

variable \u003d valor \\ 0

La última cadena se puede encontrar en dos ceros finales.

Llamamos a los argumentos de la función principal (), respectivamente: ArgC, ARGV y ENV (cualquier otro nombre es posible). Luego se permiten las siguientes descripciones:

main (int argc, char * argv)

main (int argc, char * argv, char * env)

Supongamos que en el disco A: hay algún programa PROG.EXE. Pasar a ella de la siguiente manera:

A: \\\u003e prog.exe file1 file2 file3

Luego, ARGV es un puntero a una cadena A: \\ PROG.EXE, ARGV - en el archivo de línea1, etc. El primer argumento real indica ARGV, y en el último - ARGV. Si ARGC \u003d 1, luego, después del nombre del programa, no hay un símbolo del sistema de parámetros. En nuestro ejemplo argc \u003d 4.

Recursión

La recursión se llama tal método de llamada, en el que la función se dirige a sí misma.

Un punto importante al establecer un programa recursivo es la organización de la salida. Es fácil hacer un error que consiste en el hecho de que la función se causará constantemente a sí mismo infinitamente larga. Por lo tanto, el proceso recursivo debe pasar paso a paso para simplificar la tarea de modo que al final no sea una solución recursiva. El uso de la recursión no siempre es deseable, ya que esto puede llevar a un desbordamiento de la pila.

Funciones de la biblioteca

En los sistemas de programación, el subprograma para resolver las tareas comunes se combina en las bibliotecas. Estas tareas incluyen: calcular las funciones matemáticas, ingresar / emitir datos, procesamiento de filas, interacción con las herramientas del sistema operativo, etc. El uso de las subrutinas de la biblioteca elimina al usuario de la necesidad de desarrollar fondos apropiados y le proporciona un servicio adicional. Las funciones incluidas en la biblioteca se envían con el sistema de programación. Sus anuncios se dan en archivos * .H (estos se llaman archivos incluidos o encabezados). Por lo tanto, como ya se mencionó anteriormente, al comienzo del programa con las funciones de la biblioteca debe ser cadenas de la forma:

#Incluir.<включаемый_файл_типа_h>

Por ejemplo:

#Incluir.

También existen medios para expandir y crear nuevas bibliotecas con programas de usuario.

Para las variables globales, se asigna un lugar fijo en la memoria en todo momento del programa. Las variables locales se almacenan en la pila. Entre ellos es un área de memoria para la distribución dinámica.

Las funciones malloc () y libre () se utilizan para distribuir dinámicamente la memoria libre. La función Malloc () resalta la memoria, la función libre () lo libera. Los prototipos de estas funciones se almacenan en el archivo de encabezado STDLIB.H y tienen el formulario:

nulo * malloc (tamaño TAMAÑO);

void * libre (Void * P);

La función malloc () devuelve un indicador vacío; Para obtener un uso adecuado, el valor de la función debe convertirse en el puntero al tipo apropiado. Tras la ejecución exitosa, la función devuelve un puntero al primer byte del tamaño gratuito del tamaño del tamaño. Si no hay una cantidad suficiente de memoria, el valor es 0. Para determinar el número de bytes requeridos para la variable, use el tamaño de la operación ().

Un ejemplo de uso de estas funciones:

#Incluir.

#Incluir.

p \u003d (int *) malloc (100 * sizeof (int)); / * Asignación de memoria para 100

enteros * /

printf ("No hay suficiente memoria \\ n");

para (i \u003d 0; i< 100; ++i) *(p+i) = i; /* Использование памяти */

para (i \u003d 0; i< 100; ++i) printf("%d", *(p++));

libre (P); / * Liberación de la memoria * /

Antes de usar el puntero devuelto por malloc (), debe asegurarse de que la memoria sea suficiente (el puntero no es cero).

Preprocesador

El preprocesador SI es un programa que procesa la entrada para el compilador. El preprocesador navega por el programa de origen y realiza las siguientes acciones: conecta los archivos especificados, hace sustituciones y también controla las condiciones de compilación. Para el preprocesador, las filas del programa que comienzan con el símbolo # están diseñadas. Se permite que una línea registre un solo comando (Directiva de preprocesador).

Directiva

Identificador de sustitución #define

causa un reemplazo en el siguiente texto del programa del identificador nombrado al texto de la sustitución (preste atención a la falta de un punto con una coma al final de este comando). Esencialmente, esta directiva entra en la definición de macro (macro), donde el "identificador" es el nombre de la definición de macro, y la "sustitución" es una secuencia de caracteres a los que el preprocesador reemplaza el nombre especificado cuando lo encuentra en el texto del programa. . El nombre de la definición de macro está tomada por letras mayúsculas.

Considere los ejemplos:

La primera línea llama el reemplazo en el programa MAX Identificador a la constante 25. El segundo le permite usarlo en el texto en lugar de la abertura (() la palabra comienza.

Notamos que, dado que el preprocesador no verifica la compatibilidad entre los nombres simbólicos de las definiciones macro y el contexto en el que se utilizan, se recomienda que se recomiendan dichos identificadores para determinar la directiva #define, pero utilizando la palabra clave const con un Tipo de tipo explícito (esto está más relacionado con C + +):

const int max \u003d 25;

(El tipo INT no puede especificar, ya que está instalado de forma predeterminada).

Si la directiva #define es:

#Definir identificador (identificador, ..., identificador) Sustitución

además, no hay espacio entre el primer identificador y el soporte de apertura, esta es la definición de macro-argumentos con argumentos. Por ejemplo, después de la aparición de una cadena de la forma:

#Define lee (val) scanf ("% d", & val)

operador de lectura (y); percibido como Scanf ("% d", & y); Aquí val es un argumento y un macro-argumento con el argumento.

Si hay definiciones largas en la sustitución en la siguiente línea, al final de la siguiente fila, se establece el símbolo.

En la definición de macro, puede colocar objetos separados por ## caracteres, por ejemplo:

#Define pr (x, y) x ## y

Después de eso, PR (A, 3) causará la sustitución A3. O, por ejemplo, definición macro

#Define z (a, b, c, d) a (b ## c ## d)

será reemplazado por z (pecado, x, +, y) en el pecado (x + y).

El símbolo # colocado delante del macroartum indica la conversión de la misma en la cadena. Por ejemplo, después de la directiva.

#Define prim (var) printf (#var "\u003d% d", var)

siguiente fragmento del texto del programa.

convertido así:

printf ("año" "\u003d% d", año);

Describimos otras directivas de preprocesador. La directiva #include ya se ha reunido antes. Se puede utilizar en dos formas:

#Include "nombre de archivo"

#Incluir.<имя файла>

La acción de ambos comandos se reduce para habilitar archivos con el nombre especificado. El primero de ellos descarga un archivo de la corriente o especificada como prefijo de catálogo. El segundo comando está buscando un archivo en ubicaciones estándar definidas en el sistema de programación. Si el archivo cuyo nombre se registra en comillas dobles, no se encuentra en el directorio especificado, la búsqueda se continuará en subdirectorios especificados para el comando #include<...>. # Incluir las directivas se pueden invertir el uno en el otro.

El siguiente grupo de directivas le permite compilar selectivamente partes del programa. Este proceso se llama una compilación condicional. Este grupo incluye #if, #else, #Elif, #endif, #ifdef, #ifndef directive. La forma principal de la grabación de la Directiva #IF es:

# si constant_construction secuence_perators

Aquí se verifica el valor de la expresión constante. Si es cierto, se realiza la secuencia especificada de los operadores, y si es falso, esta secuencia de operadores se omite.

La acción de la Directiva #ELSE es similar a la acción del Mano en S S, por ejemplo:

# si constante) empleo

secuencia_ operadores_2.

Aquí, si la expresión constante es verdadera, entonces se realiza el secuenciador Secencers_1 y, si es falsamente, secuence_2.

#EELIF Directiva significa tipo "de lo demás si". La forma principal de su uso tiene la forma:

# si constante) empleo

operadores de secuencia

#elif constant_mapsion_1

secuence_perator_1.

#elif constant_nesome_n.

secuence_perator_n.

Este formulario es similar al diseño del tipo SI: si ... si ... si ... si no ...

Directiva

Identificador #IFDEF

establece el identificador especificado en este momento, es decir, Si entró en la Directiva de especies #define. Fila de tipo

Identificador #IFNDEF

comprueba si el identificador especificado está actualmente en este momento. Para cualquiera de estas directivas, se puede seguir un número arbitrario de cadenas de texto, #ELSE (#ELIF no se puede usar) y terminando con la cadena #endif. Si la condición de prueba es cierta, entonces todas las filas entre #else y #endif son ignoradas, y si son falsamente, las filas entre la comprobación y #else (si las palabras #ELSE no son, entonces #endif). # Si las directivas #IFNDEF pueden "habilitar" uno a otro.

Vista de la Directiva

Identificador #unfef

conduce al hecho de que el identificador especificado comienza a ser considerado incierto, es decir, no sujeto a reemplazo.

Considere los ejemplos. Tres siguientes directivas:

compruebe si se define el identificador de escritura (es decir, hubo un equipo de la especie #define Write ...), y si es así, entonces el nombre de escritura comienza a considerarse incierto, es decir. no sujeto a reemplazo.

Directiva

#Define escribir fprintf.

compruebe si el identificador de escritura es incierto, y si es así, entonces el identificador de escritura se determinará en lugar del nombre FPRINTF.

La directiva #Error está escrita en el siguiente formulario:

#Error Message_AB_OBKKA

Si se encuentra en el texto del programa, la compilación se detiene y se muestra un mensaje de error en la pantalla de visualización. Este comando se aplica principalmente en la etapa de depuración. Tenga en cuenta que el mensaje de error no necesita entrar en comillas dobles.

La Directiva #Line está diseñada para cambiar los valores de las variables _line_ y _file_ definidas en el sistema de programación SI. La variable _line_ contiene el número de la cadena del programa realizada en la hora actual. El identificador _File_ es un puntero a una cadena con el nombre del programa compilado. La directiva #line está escrita de la siguiente manera:

# Número de línea "Nombre del archivo"

Aquí el número es cualquier entero positivo que se asignará a la variable _line_, el nombre_name es un parámetro opcional que anula el valor _file_.

La Directiva #PRAGMA le permite transferir algunas instrucciones al compilador. Por ejemplo, cadena

sugiere que el programa en el idioma SI tiene líneas en el lenguaje del ensamblador. Por ejemplo:

Considere algunos identificadores globales o macroenases (nombres de definición de macros). Cinco nombres de este tipo se definen: _line_, _file_, _date_, _time_, _stdc_. Dos de ellos (_Line_ y _File_) ya se describieron anteriormente. El identificador _Date_ define una cadena en la que los datos de la transmisión del archivo fuente se guardan en el código de objeto. El identificador _Time_ establece la cadena que guarda el tiempo de transmisión del archivo de origen al código de objeto. Macro _stdc_ es 1, si se usa MacRrospace específico. De lo contrario, esta variable no se determinará.



¿Te gustó el artículo? Compártelo