Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессор
Рейтинг: 6708
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2666
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2275
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1622
Дата выхода:15.01.2011, 09:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:325 / 181
Вопросов / ответов:1 / 2

Вопрос № 181807: Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующиt вопросы: 1. Почему при компиляции в VS 2005 программы простого окна на строку return(lpMsg.wParam); появляется предупреждение: source01.cpp(54) : warning C4244: 'return' ...



Вопрос № 181807:

Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующиt вопросы:
1. Почему при компиляции в VS 2005 программы простого окна на строку return(lpMsg.wParam); появляется предупреждение:
source01.cpp(54) : warning C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data.
2. Нужны ли скобки в return(lpMsg.wParam); я чаще встречал написание без скобок, хотя, что со скобками, что без скобок, всё равно появляется предупреждение.
3. И обязательно ли прописывать то, что в скобках в функции
hWnd=CreateWindow(..., (HWND)NULL, (HMENU)NULL, (HINSTANCE)hInstance,
(HINSTANCE)NULL); Опять же, чаще встречал написание hWnd = CreateWindow(..., NULL, NULL, hInst, NULL); без (HWND), (HMENU), (HINSTANCE)
4. Программа компилируется и запускается, но после закрытия программы, окно закрывается, но программа находится в процессах, т.е. не перестаёт работать, может, это из-за предупреждения или код неправильно написан?

Отправлен: 10.01.2011, 08:22
Вопрос задал: Adsorores (Посетитель)
Всего ответов: 2
Страница вопроса »


Отвечает Павел Юрьевич (8-й класс) :
Здравствуйте, Adsorores!

1. Ставьте в конце программы return(0) и не мучайтесь.
2. Можно и без скобок.
3. Явное преобразование NULL к определенным типам данных необязательно (это чисто для наглядности).
4. Должна пропадать из процессов. Проверьте с измененным return.

Ответ отправил: Павел Юрьевич (8-й класс)
Ответ отправлен: 10.01.2011, 08:35
Номер ответа: 265316
Россия, Челябинск
ICQ # 197232777

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 265316 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Отвечает Сергей (2-й класс) :
    Здравствуйте, Adsorores!

    1. По-видимому, вы собираете 64-битное приложение. В 32-битном окружении WPARAM имеет тип unsigned int, в то время, как в 64-битном уже unsigned __int64. Разумеется, восемь байт (__int64) ну никак не поместится в четыре байта (int) без потери остальных четырёх байтов. А ведь возможно, что в них содержалось что-то очень важное, без чего мы жить не сможем, о чём и выражает своё беспокойство компиллятор (possible loss of data). В вашем случае это не страшно, достаточно успокоить его явным приведением WPARAM к int:
    return (int) lpMsg.wParam;

    2. Наличие скобок в данном случае ни на что не влияет.

    3. Не обязательно.

    4. Цикл while GetMessage прерывается, когда из очереди сообщений произойдёт выборка WM_QUIT.
    У вас она никогда не произойдёт потому, как вы установили фильтр "сообщения для окна hWnd":
    while (GetMessage(&lpMsg, hWnd, 0, 0)) {
    В то время, как WM_QUIT посылается не какому-то конкретному окну, а всему приложению в целом (если точнее, то треду, но у вас он всего один). Чтобы всё-таки отловить его, можно поступить например так:
    while (GetMessage(&lpMsg, NULL, 0, 0)) {

    Ответ отправил: Сергей (2-й класс)
    Ответ отправлен: 10.01.2011, 20:19
    Номер ответа: 265333
    Россия, Мурманск

    Оценка ответа: 5

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 265333 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное