время не возвращает ожидаемых результатов - PullRequest
2 голосов
/ 21 апреля 2011

У меня есть код, показанный ниже:

#include <stdio.h>
#include <sys/time.h>

typedef struct{
     struct timeval timestamp;
}teststruct;

class TestClass {
     public:
       TestClass();
       void dosomething(int, int);
};

TestClass::TestClass(){
}

void
TestClass::dosomething(int num, int numb) {
}

int main(void){
     TestClass *testclass = new TestClass();
     teststruct test;
     gettimeofday(&test.timestamp, NULL);
     printf("%llu \n", test.timestamp.tv_sec);
     testclass->dosomething(1,1);
     printf("%llu \n", test.timestamp.tv_sec);
}

Вывод этого кода:

13825459612132795564 dosomething 5598307500

, но я понятия не имею, почему первое числоиспорчен.Кроме того, вызов класса абсолютно необходим для того, чтобы номера отличались друг от друга.

Ответы [ 2 ]

4 голосов
/ 21 апреля 2011

Я получаю warning: format ‘%llu’ expects type ‘long long unsigned int’, but argument 2 has type ‘__time_t’. Должен быть намек. Повысьте уровень предупреждения вашего компилятора до чего-то разумного.

Это работает , когда вы используете правильный тип ввода. В противном случае вы вызывали UB, читая память, которая была не вашей; Подобные ошибки могут привести к забавным результатам, которые ведут себя по-разному в зависимости от факторов, которые вы, как правило, не ожидаете изменить, так как содержимое вашей памяти меняется.

1 голос
/ 21 апреля 2011

Кажется, работает, если вы измените %llu на %lu.

http://codepad.org/YGubabLR

...