Tag: C-PREPROCESSOR
Considere este escenario: $ cat t783.c #define EXPR (“xxx” + 1) char* s = EXPR; $ clang t783.c -c t783.c:2:11: advertencia: añadir ‘int’ a una cadena no agrega a la cadena [-Wstring-plus-int] $ clang t783.c -E | clang -xc – -c t783.c:2:18: advertencia: añadir ‘int’ a una cadena no agrega . . . Read more
¿Alguien sabe (o puede adivinar) el motivo de: – #define en lugar de #def – #undef en lugar de #undefine Motivo: – esperado: simetría: #define o #def, y #undefine o #undef => fácil de recordar – real: no hay simetría: #define y #undef => no es fácil de recordar
El código es como sigue: void f1(){ /* … */ } void f2(){ /* … */ } int main() { const int n=2; USE(f, n)(); return 0; } Espero que pueda llamar a f2(). Si solo lo definimos como: define PASTE(a,b) a##b define USE(a,b) PASTE(a,b) llamará a fn(). Por lo . . . Read more
Estoy manteniendo una aplicación que se ejecuta en GNU/Linux (x86, x8664), Windows (x86, x8664), Bionic/Android (armeabi-v7a, arm64-v8a, x86, x86_64) y también en Raspberry Pi (armhf). Dado que Raspberry OS es en realidad una versión modificada de GNU/Linux Debian, puedo determinar si estoy ejecutando linux (__linux__) en ARM (__arm__), pero no . . . Read more
En un programa C (u-boot), para verificar si el programa ejecuta esa macro, cambié un estado definido de la siguiente manera: #define debug_cond(cond, fmt, args…) \ ({ \ if (cond) \ log(LOG_CATEGORY, \ (enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG), \ fmt, ##args); \ }) a #define debug_cond(cond, fmt, args…) \ ({ \ . . . Read more