Es allí una manera limpia para evitar que windows.h a partir de la creación de una cerca de & ahora macro?

StackOverflow https://stackoverflow.com/questions/118774

  •  02-07-2019
  •  | 
  •  

Pregunta

En lo profundo de WinDef.h hay una reliquia de la memoria segmentada de la época:

#define far
#define near

Obviamente, esto causa problemas si intenta utilizar de cerca o de lejos como nombres de variables.Cualquier limpio soluciones?Otros, a continuación, cambiar el nombre de mis variables?

¿Fue útil?

Solución

De forma segura puede anular la definición de ellos, al contrario de las afirmaciones de los demás.La razón es que son las macros del.Sólo afecta el preprocesador entre su definición y sus undefinition.En su caso, que será desde temprano en windows.h a la última línea de windows.h.Si usted necesita extra de windows encabezados, deberías incluir en ellos después de windows.h y antes de la #undef.En su código, el preprocesador simplemente dejar los símbolos sin cambios, como se pretendía.

El comentario sobre el código anterior es irrelevante.Que el código será en una biblioteca independiente, compilados de forma independiente.Sólo en el momento de enlazar estas conectado, cuando las macros se han ido.

Otros consejos

Anular la definición de macros no desea que después de haber incluido windows.h:

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

tal vez:

#undef near
#undef far

podría ser peligroso, aunque...

Usted probablemente no quiere indefinido de cerca y de lejos de todas partes.Pero cuando usted necesita para utilizar los nombres de variable, puede utilizar el siguiente a anular la definición de la macro a nivel local y agregar de nuevo cuando haya terminado.

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

Mejor no.Ellos se definen para mantener la compatibilidad con versiones antiguas de código si se deshizo de ellos de alguna manera y, a continuación, más tarde necesarios para utilizar algunos de los que el viejo código que estaría roto.

Uno podría argumentar que "cerca" y "lejos" no son muy descriptivos nombres de variable.Han considerado que la de simplemente proporcionar detalles adicionales en su nombre de variable para resolver el conflicto (es decir,nearest_match, furthest_match).Sólo un pensamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top