WIN32 C -программа с Windows Mobile 5.0 SDK: невозможно использовать time_t для отображения текущей даты и времени - PullRequest
1 голос
/ 04 марта 2020

Я пишу WIN32 C -программу для КПК Motorola M C -55A с использованием Windows Mobile 5.0 SDK. Я пытаюсь получить текущую дату и время, чтобы получить уникальную строку DDMMYYYYHHMMSS, которую я могу использовать. Я проверил учебники и попытался использовать time_t и SYSTEMTIME, но он возвращается с ошибкой: «незаконное использование этого типа в качестве выражения» (см. Код ниже). Я включил необходимые заголовочные файлы, включая «time.h», но ошибка сохраняется с использованием time_t и SYSTEMTIME. Вот мой код:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <windows.h>
#include <windowsx.h>

.
.
.
case WM_INITDIALOG:

//Below fails with error : 'time_t' : illegal use of this type as an expression  
//C:\Program Files (x86)\Windows Mobile 5.0 SDK R2\PocketPC\include\ARMV4I\stdlib.h : 
//see declaration of 'time_t
time_t current_time = time(NULL);
printf("Hours since January 1, 1970 = %ld\n", current_time/3600);

//This also fails
time_t now;
time(&now);


//SYSTEMTIME below also fails with error : 'SYSTEMTIME' : illegal use of this type as an expression  
//C:\Program Files (x86)\Windows Mobile 5.0 SDK R2\PocketPC\include\ARMV4I\winbase.h : 
//see declaration of 'SYSTEMTIME'
GetSystemTime(&st);
GetLocalTime(&lt);                  
printf("The system time is: %02d:%02d\n", st.wHour, st.wMinute);
printf(" The local time is: %02d:%02d\n", lt.wHour, lt.wMinute);

Как узнать текущую дату и время?

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Обходной путь - использовать функции GetSystemTime или / и GetLocalTime, сначала добавив прагму для Kernel32.lib, где 2 функции определены в самом верху вашего кода.

//This works

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <windows.h>
#include <windowsx.h>
#pragma comment(lib, "Kernel32.lib")

.
.
.
case WM_INITDIALOG:

     GetSystemTime(&st);
     GetLocalTime(&lt);                 
     printf("The system time is: %02d:%02d\n", st.wHour, st.wMinute);
     printf(" The local time is: %02d:%02d\n", lt.wHour, lt.wMinute);
0 голосов
/ 04 марта 2020

Хотя вы не опубликовали свой полный код, похоже, что вы объявляете переменные current_time, st и it в неправильном / запрещенном месте (после case WM_INITDIALOG:). Вы должны либо объявить эти переменные перед оператором switch, либо добавить { ... } фигурные скобки внутри , которые case.

Например, код, подобный этому неправильно сформирован:

switch (a) {
    case 1:
        int b = a/2; // illegal here!
        //...
        break;
    default:
        break;
}

, но это будет работать:

int b; // Note: This declaration MAY need to be at the beginning of the enclosing function!
switch (a) {
    case 1:
        b = a/2; // works
        //...
        break;
    default:
        break;
}

, и так будет:

switch (a) {
    case 1: { // These "{ ... }" create a new scope
        int b = a/2; // works
        //...
        break;
    }
    default:
        break;
}

Причина этого заключается в том, что в Ваш код, объявление / определение вышеупомянутых переменных пропускается в случаях, отличных от WM_INITDIALOG. См. Это переполнение стека Q / A для дальнейшего обсуждения: Почему переменные не могут быть объявлены в операторе switch?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...