Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

int APIENTRY WinMain

1.3K
20 февраля 2002 года
ultramax
12 / / 20.09.2000
Что такое APIENTRY и что такое CALLBACK(тоже стоит между функцией и типом возвращения)?
И что делает строка srand (time(0)), поподробней если можно:)
380
20 февраля 2002 года
Arestov
285 / / 20.09.2000
Для единообразности и читаемости Microsoft просто переопределила многие фишки (т.е. назначила синонимы)
например, LPSTR это char *, LPSTR обозначает как Long Pointer to STRing (Long Pointer достался еще от реального режима x86 процов, Windows разрабатывается с 1985 года)
DWORD это unsigned int, мы можем писать и то и другое. Но Microsoft предлагает некоторые правила именования
-имена типов заглавными буквами POINT,INT,BOOL
-перед именем переменной префикс, обозначающий её тип или назначение nCount, chBuffer, xDelta, yDelta
-слова в именах ф-ций писать с большой буквы CreateWindow, RegisterClass, CoInitialize
- и т.д.

так вот
LRESULT - это просто long, а слово введено для читаемости
CALLBACK - это __stdcall, т.е. такая ф-ция вызывается по данному соглашению, это необходимо указывать, чтобы вызывающий правильно работал со стеком. Параметры помещаются справа налево, и вызываемая ф-ция очищает стэк.
есть вариант __cdecl - соглашения Си, там тоже параметры справа налево, то стек очищает вызывающая ф-ция.
Если соглашение не писать void Foo(), то подразумевается такое соглашение, которое прописано в параметрах компилятора, например, ключ /Gz для Microsoft Visual C++ делает все ф-ции __stdcall.

Так вот
LRESULT CALLBACK WinMain(...)
это
long __stdcall WinMain(...)

разницы, особой нет, НО есть такое НО
Синонимы типов, делаю более гибким перенос с платформы на платформу, достаточно поменять только определение, а всю прогу не надо. Грядёт 64-битная платформа от Intel и AMD, Microsoft ввела еще ряд типов для определённости
DWORD32, DWORD64, INT32, INT64, LONG32,... UINT32, UINT64,... и DWORD_PTR, INT_PTR,... для арифметики с указателями.
там где размер важен (сетевой протокол, структуры в файле) надо использовать эти типы, а то придётся всю прогу перебирать.

О вызове srand(time(0));

1. Ф-ция void srand( unsigned int seed );
устанавливает генератор случайных чисел в некоторое состояние seed, где seek это любое 32-битное число.
2. Ф-ция long time( long *pTimer );
возвращет кол-во секунд прошедших с полуночи, первого января 1970 года (по Гринвичу), также если pTimer не NULL то это же значение записывается в адрес указываемый pTimer.
3. имеем, что srand(time(0)) устанавливает генератор случайных чисел в разное состояние при каждом запуске программы.
4. ф-ция int rand( void ) возвращает псевдослучайное число в диапазоне от 0 до RAND_MAX, и это число зависит от параметра seed в srand(). RAND_MAX в MSVC++ определён как 32767. Если надо сгенерировать число в другом диапазоне [a,b) используйте формулу r = a + rand() % (b-a)

Пример, эта программа будет при каждом запуске выдавать ОДИНАКОВЫЕ a и b
#include <stdio.h>
#include <stdlib.h>

void main()
{
int a = rand() % 10; // п-случ. число от 0 до 9
int b = rand() % 10; // другое число.
printf(&quot;a = %d\nb = %d\n&quot;, a, b);
}

а вот эта РАЗНЫЕ

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{

srand(time(NULL));

int a = rand() % 10; // п-случ. число от 0 до 9
int b = rand() % 10; // другое число.
printf(&quot;a = %d\nb = %d\n&quot;, a, b);
}

Вот такие дела

Аноним
а что будет с функцией time(time_t) через 136 лет после 1970???
0xFFFFFFFF!
380
21 февраля 2002 года
Arestov
285 / / 20.09.2000
Цитата:

On 2002-02-20 2306, Anonymous wrote
а что будет с функцией time(time_t) через 136 лет после 1970??? wink
0xFFFFFFFF!



Програм её использующих не будет ) ведь это стандартная библиотечная ф-ция. Windows предлагает более гибкие решения, timeGetTime() и уж совсем крутую QueryPerformanceCounter. А для текущего времени GetSystemTime, GetLocalTime.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог