que prozac medicamentos medicamento marca listado lista genericos generico entre ejemplos diferencia desventajas comercial c generics c11

medicamentos - prozac vs genericos



Efectos secundarios en expresiones genéricas. (2)

Como mencioné en los comentarios, usted publicó la pregunta aproximadamente dos semanas después de que se solucionó el error en el tronco de Clangs. Ver revisión rL223266 (3 de diciembre de 2014). La corrección está incluida en Clang 3.6.

Ahora, ¿puedo ignorar con seguridad la advertencia de Clang, o me equivoco?

Ya sabemos que tienes razón, por lo que aquí hay una forma de ignorar los pragmas en Clang para el futuro:

#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunsequenced" write_char(*s++); #pragma clang diagnostic pop

Para no repetirlo en cada uso de la macro, puede poner _Pragma en su cuerpo:

#define write_char(c) / _Pragma("clang diagnostic push") / _Pragma("clang diagnostic ignored /"-Wunsequenced/"") / _Generic(c, char: putchar, const char: putchar)(c) / _Pragma("clang diagnostic pop")

Estoy haciendo algunos experimentos con la nueva palabra clave _Generic y me topé con un caso especial relacionado con múltiples evaluaciones. Vea lo siguiente:

#include <stdio.h> #define write_char(c) _Generic(c, char: putchar, const char: putchar)(c) int main(void) { const char *s = "foo"; write_char(*s++); write_char(*s++); write_char(*s++); putchar(''/n''); }

Esto compila bien y produce el resultado esperado con GCC:

$ gcc -std=c11 -Wall plusplus.c -o plusplus $ ./plusplus foo

Por otro lado, Clang emite una gran advertencia:

$ clang -std=c11 plusplus.c -o plusplus plusplus.c:9:18: warning: multiple unsequenced modifications to ''s'' [-Wunsequenced] write_char(*s++); ^~ plusplus.c:3:32: note: expanded from macro ''write_char'' #define write_char(c) _Generic(c, char: putchar, const char: putchar)(c) ...

Sin embargo, el resultado es el esperado:

$ ./plusplus foo

Revisé el borrador de la norma , que dice (en la página 97 del PDF):

La expresión de control de una selección genérica no se evalúa.

Esto parece abordar precisamente el problema de los efectos secundarios en las macros (por ejemplo, MIN y MAX ).

Ahora, ¿puedo ignorar con seguridad la advertencia de Clang, o me equivoco?


Parece que fue un error. Ahora se ha resuelto desde el clang 3.6 en adelante como se muestra here .