win32 programming program for first example app c++ c winapi dos

programming - winapi c++ pdf



¿Hay alguna manera limpia de evitar que windows.h cree una macro cercana y lejana? (6)

En el fondo de WinDef.h existe esta reliquia de la era de la memoria segmentada:

#define far #define near

Esto obviamente causa problemas si intenta usar nombres cercanos o lejanos como variables. ¿Alguna solución limpia? ¿Otro entonces renombrando mis variables?


Defina las macros que no desee después de incluir windows.h :

#include <windows.h> #undef near #undef far


Es probable que no desee indefinido cerca y lejos en todas partes. Pero cuando necesite usar los nombres de las variables, puede usar lo siguiente para definir la macro localmente y agregarla de nuevo cuando haya terminado.

#pragma push_macro("near") #undef near //your code here. #pragma pop_macro ("near")


Mejor no hacerlo Se definen por compatibilidad con versiones anteriores con código anterior; si se deshace de ellos de alguna manera y luego necesita usar parte del código anterior, se romperá.


Puede definirlos de manera segura, contrariamente a las afirmaciones de los demás. La razón es que son solo macros. Solo afectan al preprocesador entre su definición y su indefinición. En su caso, eso será desde principios de windows.h a la última línea de windows.h. Si necesita encabezados de ventanas adicionales, los incluiría después de windows.hy antes de #undef. En su código, el preprocesador simplemente dejará los símbolos sin cambios, según lo previsto.

El comentario sobre el código anterior es irrelevante. Ese código estará en una biblioteca separada, compilada de forma independiente. Solo en el momento del enlace se conectarán, cuando las macros se hayan ido.


Uno podría argumentar que "cerca" y "lejos" no son nombres de variables muy descriptivos. ¿Ha considerado simplemente proporcionar detalles adicionales en su nombre de variable para resolver el conflicto (es decir, el más cercano, el más lejano)? Solo un pensamiento.


tal vez:

#undef near #undef far

podría ser peligroso sin embargo ...