Директивы препроцессора C ++, такие как __TIME__, иногда не меняются / не обновляются - PullRequest
0 голосов
/ 28 декабря 2011

Я использую Visual Studio 2008 Express, и у меня есть этот код регистрации:

fprintf(fp,"%s %s %s %s %d %s\n", pType, __DATE__, __TIME__, pFileName, lineNo, pMsg.c_str());
fflush(fp);

Иногда, если я не удаляю журнал и просто добавляю к нему макрос __TIME__просто продолжает печатать старое время, а не текущее.

Я использую следующий код для открытия файла

if(pfileName != NULL)
{
    fp = fopen(pfileName, "a+");
    if(fp != NULL)
        fseek(fp, 0, SEEK_END);
}

Ответы [ 2 ]

8 голосов
/ 28 декабря 2011

Проблема в том, что вы не выполняете перестройку.

По умолчанию Visual Studio собирает / компилирует только исходные файлы, которые изменили (были изменены) с момента последнейскомпилировали ваш проект.Это предназначено для экономии времени, и это очень полезная функция.Если вы хотите, чтобы исходные файлы были перекомпилированы, независимо от того, были ли они изменены с момента последней сборки, вы должны указать VS перестроить ваш код (или пройти через песню и танецвыполнение очистки, а затем сборка проекта).

Причина, по которой это имеет значение, заключается в том, что макрос препроцессора __TIME__ расширяется во время предварительной обработки (чтопроисходит прямо перед компиляцией, по крайней мере, для наших целей здесь) с текущим временем.Она была расширена в первый раз, когда вы компилировали код, и никогда не будет изменена, если вы не измените исходный файл или не перекомпилируете (пересоберите) его.

Это, вероятно, не то, что вы ищетев функции регистрации.Вместо времени компиляции вы хотите напечатать текущее системное время.Вы можете использовать функцию time , чтобы получить это - чтобы использовать ее, убедитесь, что вы включили <time.h> в верхней части исходного файла.Или же, если вы уже включили <windows.h>, вы можете вызвать функцию GetSystemTime , чтобы заполнить SYSTEMTIME структуру , которая дает вам текущее время и дата.

2 голосов
/ 28 декабря 2011

__TIME__ равно

Самое последнее время компиляции текущего исходного файла.Время - строковый литерал в формате чч: мм: сс.

Это определение из Предопределенные макросы .

Чтобы получить текущее время, вы можете использовать time () или другую аналогичную функцию.

...