Tengo un pequeño archivo de encabezado propio que declara un par de funciones, una de las cuales tiene un tipo de devolución de DWORD
. Soy reacio a arrastrar en windows.h
solo para obtener la definición oficial de este tipo, ya que ese archivo es enorme, y mi encabezado se utilizará en una serie de módulos fuente que de otra manera no lo necesitan.¿Cuál es el encabezado de Windows más pequeño que puedo #incluir para definir DWORD?
Por supuesto, en la práctica sé que DWORD
es solo , pero prefiero el enfoque más higiénico de incluir un archivo de encabezado oficial si es posible.
En this page dice que DWORD
se define en windef.h
, incluyendo pero desafortunadamente solo este pequeño archivo conduce directamente a errores de compilación - al parecer, que espera ser incluido por otras cabeceras. (Además, el hecho de que mi archivo sea un archivo de encabezado también significa que no puedo declarar WIN32_LEAN_AND_MEAN
, ya que el archivo de origen que #include mi archivo podría necesitar que no esté definido).
¿Alguna idea? Sé que no es el fin del mundo, puedo continuar al #include <windows.h>
, pero pensé que alguien podría tener una mejor idea.
[EDIT] Gracias por su respuesta. Para aquellos que sugirieron usar un tipo diferente, permítanme explicar por qué no es deseable en este caso: he configurado diferentes versiones específicas de la plataforma de las dos funciones en diferentes archivos fuente, y solicito a la configuración de CMake que detecte la plataforma actual y elige cuál construir. En Windows, mis funciones se ven como:
typedef DWORD TimePoint;
TimePoint GetTimeNow(void);
double TimeDifference(TimePoint start, TimePoint end);
La versión de Windows de GetTimeNow()
sólo llama a la API de Windows timeGetTime()
, que tiene tipo DWORD
volver, y por lo tanto deben tener el mismo tipo de retorno. (En otras plataformas, TimePoint
tendrá un tipo diferente, por ejemplo struct timeval
en plataformas UNIXy). En efecto, los valores de tipo TimePoint
son opacos, y lo único que puede hacer con ellos es pasar dos de ellos al TimeDifference()
para medir el tiempo transcurrido entre ellos en segundos. Esto permite el desarrollo multiplataforma. Desafortunadamente, todavía significa que el código del cliente debe conocer el tipo concreto de TimePoint
.
¿Por qué no utilizar C standard lib, que está disponible en Windows (ver http://msdn.microsoft.com/en-us/library/abx4dbyh%28VS.80%29.aspx y http: // msdn. microsoft.com/en-us/library/w4ddyt9h%28VS.80%29.aspx); si todo lo que necesitas es una resolución de 1 segundo, ya hay una versión multiplataforma de 'TimeDifference()' llamada 'difftime()' – Christoph
Gracias Cristoph, de hecho eso es exactamente lo que tenía, pero esto es para perfilar y tenemos varios conjuntos de datos que abarcan el rango 1-10, así que decidí que quería un poco más de resolución. –