Articles of c preprocesador

Macros de preprocesador multilínea

¿Cómo hacer macroprocesador de líneas múltiples macro? Sé cómo hacer una línea: #define sqr(X) (X*X) pero necesito algo como esto: #define someMacro(X) class X : public otherClass { int foo; void doFoo(); }; ¿Cómo puedo hacer que esto funcione? Esto es solo un ejemplo, la macro real puede ser muy larga.

Macro de longitud de matriz común para C?

He visto varias macros para la longitud de la matriz flotando: De esta pregunta : #define length(array) (sizeof(array)/sizeof(*(array))) #define ARRAY_LENGTH(array) (sizeof((array))/sizeof((array)[0])) #define SIZE(array, type) (sizeof(array) / (sizeof(type)) Y el _countof Visual Studio: #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0])) Lo que me gustaría saber es: ¿Cuál es la diferencia entre aquellos que usan array[0] y *array ? […]

Cómo definir un símbolo de preprocesador en Xcode

¿Es posible establecer un símbolo para la comstackción condicional configurando propiedades en un proyecto de Xcode? Mi objective es crear un símbolo que esté disponible para todos los archivos, sin tener que usar import / include, para que un conjunto de clases comunes pueda tener un comportamiento especial en algunos proyectos. Como el siguiente, pero […]

Preprocesador C ++: evitar la repetición de código de la lista de variables miembro

Tengo varias clases, cada una con diferentes variables miembro que se inicializan trivialmente en un constructor. Aquí hay un ejemplo: struct Person { Person(const char *name, int age) : name(name), age(age) { } private: const char *name; int age; }; Cada uno tiene una función de print() asociada print() . template void print(const Person &person) […]

¿Es un preprocesador C ++ idéntico a un preprocesador C?

Me pregunto qué tan diferentes son los preprocesadores para C ++ y C. El motivo de la pregunta es esta pregunta sobre una pregunta específica del preprocesador donde el párrafo del estándar que aborda la pregunta tiene una redacción diferente (y un número de párrafo diferente) y también una diferencia relativa a las palabras clave […]

¿Cómo se usa #if dentro de #define en el preprocesador C?

Quiero escribir una macro que escupe código basado en el valor booleano de su parámetro. Por lo tanto, supongamos que DEF_CONST(true) debe expandir a const , y DEF_CONST(false) debe expandir a nada. Claramente, lo siguiente no funciona porque no podemos usar otro preprocesador dentro de #defines: #define DEF_CONST(b_const) \ #if (b_const) \ const \ #endif

C ++ concat dos literales de cadenas `const char`

¿Es posible combinar dos cadenas literales usando un constexpr ? O reformulado puede uno eliminar macros en código como: #define nl(str) str “\n” int main() { std::cout << nl("usage: foo") nl("print a message") ; return 0; } Actualización : no hay nada de malo con el uso de “\n” , sin embargo, me gustaría saber […]

¿Es aceptable la barra invertida en las directivas C y C ++ #include?

Hay dos separadores de ruta de uso común: la barra diagonal inversa de Unix y la barra diagonal inversa de DOS. Descansa en paz, Classic Mac colon. Si se usa en una directiva #include, ¿son iguales bajo las reglas de los estándares C ++ 11, C ++ 03 y C99?

¿Cómo puedo generar valores únicos en el preprocesador C?

Estoy escribiendo un montón de macros de preprocesador relacionados, uno de los cuales genera tags a las que el otro salta. Los uso de esta manera: MAKE_FUNNY_JUMPING_LOOP( MAKE_LABEL(); MAKE_LABEL(); ) Necesito alguna manera de generar tags únicas, una para cada llamada interna MAKE_LABEL , con el preprocesador. He intentado usar __LINE__ , pero como llamo […]

Varódico macros de preprocesador recursivo: ¿es posible?

Me encontré con un pequeño problema teórico. En una pieza de código que estoy manteniendo hay un conjunto de macros como #define MAX_OF_2(a, b) (a) > (b) ? (a) : (b) #define MAX_OF_3(a, b, c) MAX_OF_2(MAX_OF_2(a, b), c) #define MAX_OF_4(a, b, c, d) MAX_OF_2(MAX_OF_3(a, b, c), d) …etc up to MAX_OF_8 Lo que me gustaría […]