tres tipos son programa preprocesamiento preprocesador los lenguaje funcion estructura ejemplos directivas directiva define datos básicos c++ c-preprocessor double-quotes

programa - los tres tipos de datos básicos en lenguaje c++ son



Agregar comillas al argumento en el preprocesador de C++ (4)

Me gustaría pasar el nombre de un archivo de inclusión como un argumento del compilador para poder modificar una gran cantidad de parámetros de configuración. Sin embargo, mi compilación de C ++ se realiza a través de un proceso similar a makefile que elimina las comillas de los argumentos pasados ​​al compilador y al preprocesador. Esperaba hacer algo equivalente a

#ifndef FILE_ARG // defaults #else #include "FILE_ARG" #endif

con mi línea de comando incluyendo -DFILE_ARG = foo.h. Por supuesto, esto no funciona ya que el preprocesador no traduce FILE_ARG.

He intentado

#define QUOTE(x) #x #include QUOTE(FILE_ARG)

que no funciona por la misma razón

Por razones de secuencias de comandos, prefiero hacer esto en la línea de comandos que ir y editar una línea de inclusión en la rutina apropiada. ¿Hay alguna manera?


Funciona para mi. Tal vez se le olvidó citar correctamente en su Makefile?

$ cat example.c #include FILE_ARG $ cat test.h #define SOMETHING $ gcc -Wall -Wextra -W -DFILE_ARG=/"test.h/" -c example.c $

EDITAR: la razón por la que no puede hacer que la cotización funcione es porque el preprocesador funciona en phases . Además, usé "gcc (Ubuntu / Linaro 4.5.2-8ubuntu4) 4.5.2", los resultados pueden variar entre los compiladores.


Para agregar citas necesitas este truco:

#define Q(x) #x #define QUOTE(x) Q(x) #ifdef FILE_ARG #include QUOTE(FILE_ARG) #endif


También puedes probar el interruptor -include.

gcc manual:

-incluir archivo

Procese el archivo como si #include "archivo" apareciera como la primera línea del archivo fuente principal. Sin embargo, el primer directorio buscado es el directorio de trabajo del preprocesador en lugar del directorio que contiene el archivo fuente principal. Si no se encuentra allí, se busca en el resto de la cadena de búsqueda #include "..." de manera normal. Si se dan varias opciones de inclusión, los archivos se incluyen en el orden en que aparecen en la línea de comandos. *


Tu puedes hacer

#ifdef FILE_ARG #include FILE_ARG #endif

En la linea de comando

$ gcc -DFILE_ARG="/"foo.h/"" ...

debe hacer el truco