Vereis, yo tengo esto:
CXString CHaddd::VersionDelMotor()
{
return CXString(_T("Haddd 1.0 (31 Enero 2004 23:05)"));
}
Y cada vez que hago una nueva versión, debo cambiar la fecha y la hora.
¿Existe algún opción en VStudio.Net para que me ponga el solito la fecha de compilación?
Algo así:
CXString CHaddd::VersionDelMotor()
{
return CXString(_T("Haddd 1.0 ()")+DATE_TIME_STRING);
}
Efectivamente existen tales macros. He mirado en la ayuda de VS.NET para pegar la sección, pero no sé que coj##@~ le pasa que no lo encuentra. Así que te pongo un enlace que he encontrado en google:
http://h30097.www3.hp.com/docs/base_doc/DO...TE/DOCU_084.HTMPongo aquí lo más interesante:
Citar
8.8.1 The __DATE__ Macro
The __DATE__ macro evaluates to a string literal specifying the date on which the compilation started. The date has the following format:
"Mmm dd yyyy"
The names of the months are the same as those generated by the asctime library function. The first d is a space if dd is less than 10. For example:
printf("%s",__DATE__);
The value of this macro remains constant throughout the translation unit.
8.8.2 The __FILE__ Macro
The __FILE__ macro evaluates to a string literal specifying the file specification of the current source file. For example:
printf("file %s", __FILE__);
8.8.3 The __LINE__ Macro
The __LINE__ macro evaluates to a decimal constant specifying the number of the line in the source file containing the macro reference. For example:
printf("At line %d in file %s", __LINE__, __FILE__);
8.8.4 The __TIME__ Macro
The __TIME__ macro evaluates to a string specifying the time that the compilation started. The time has the following format (the same as the asctime function):
hh:mm:ss
For example:
printf("%s", __TIME__);
The value of this macro remains constant throughout the translation unit.
No sé si es lo que buscas pero puedes usar la función time:
// Archivo
mCout = new ofstream ("debug.log", ios::out);
// Tiempo
time_t mT;
time (&mT);
struct tm *mPetm = localtime (&mT);
// Fecha
char *mDs [7] = {"Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado"};
char *mMs [12] = {"Enero","Febreo","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
*mCout << "[Debug.log]:" << " (";
// Fecha
*mCout << mDs [mPetm->tm_wday] << ", " << mPetm->tm_mday << " de " << mMs [mPetm->tm_mon] << " del " << mPetm->tm_year+1900 << ")" << endl << endl;
Da como resultado algo del estilo de:
Citar[Debug.log]: (Sabado, 31 de Enero del 2004)
Genial Zaelsius, es así!! (ole)
s.Formato(_T("Haddd 1.0 (%s %s)"),__DATE__,__TIME__);
Cita de: "Loover"No sé si es lo que buscas pero puedes usar la función time
Loover, creo que lo que quería Haddd era la fecha de compilación, no la de creación del log...
Saludos.
Ah, ok :)
Pero esto me plantea una duda:
Si pones string fecha = __DATE__; al compilar eso se expande y queda como string fecha = "1-2-04"; pero dado que por lo general muchos archivos solo se compilan cuando se produce un cambio entonces probablemente la fecha que aparecerá será la de la ultima vez que ESE archivo se compilo, y si dicho archivo está en una librería entonces aparecerá una fecha erronea ya que por lo general al compilar solo se compilan unos pocos archivos (a no ser que hagas rebuild all).
¿Controla eso el compilador? O es necesario poner esa macro solo en el archivo más bajo de la jerarquía para asegurarse que siempre se recompila y se procesa la macro?
En la documentación dice que __DATE__ y __TIME__ especifican la fecha y la hora de la última compilación del archivo al que hace referencia. De forma que habrán casos en los que ocurra lo que dice tamat. Si el archivo de código del log no se recompila en cada compilación de proyecto, el resultado no será el esperado.
Saludos.
Y ya que hablamos de macros una duda más, existe alguna macro que retorne un valor unico? algo semejante a una hash de la hora del sistema, es para el tema de los RTTIs, para que cada clase tenga un metodo que retorne un valor unico que sirva para identificar clases, gracias.
Lo más normal es que una combinacion de __FILE__ y __LINE__ sea única, lo que no sabria decirte es como luego identificarlas.
Y ya puestos en el tema, ¿hay alguna forma de hacer que la versión del exe se incremente en cada compilación? Me refiero a que muchos programas tienen una versión tipo: 2.0.4.2456 o del tipo 2.0.4 build 2456 El último número imagino que hace referencia al número de compilación, pero no creo que cada vez que el programador compile vaya al editor de recursos a cambiar el numero de versión ¿o si?
saludos
Si usas dev-cpp tiene una opción para eso, en opciones de proyecto (ALT+P), pestaña de información (la última).
Perdón, se me olvidó comentar que uso VC 6
un saludo
Hola a todos,
fiero, mírate esto:
http://www.codeguru.com/devstudio_macros/B...crementer.shtmlUtiliza macros de Visual C++, añadiendo código al evento Application_BeforeBuildStart
Saludos
P.D. Mírate los comentarios de la página, el código original tenía errores que corrigieron luego
Gracias Juan, es justo lo que buscaba
un saludo