|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Сравнение: Borland C++ 5.5.1 for Win32 и Digital Mars Compiler Version 8.42n? |
|
C/C++ - [решено] Сравнение: Borland C++ 5.5.1 for Win32 и Digital Mars Compiler Version 8.42n?
|
Новый участник Сообщения: 42 |
Профиль | Отправить PM | Цитировать Вот эти две классические штуки компилят по-разному вот такую маленькую прогу. DM делает нормально, а Borland не делает вааще. Я уже башку сломал. Помогите, пожалуйста. Вот код (drakon.c):
#include <windows.h> const int storona = 2; char szTitle[] = "Драконова ломаная"; void drakon(HDC hdc, int d, int *n, char *p, int *x, int *y) { if (d == 0) { // 1-N 2-S 3-W 4-E MoveToEx(hdc, *x, *y, NULL); if (*n == 1) *y -= storona; //Шаг на север if (*n == 2) *y += storona; //Шаг на юг if (*n == 3) *x -= storona; //Шаг на запад if (*n == 4) *x += storona; //Шаг на восток LineTo(hdc, *x, *y); } else { drakon(hdc, d - 1, n, "P", x, y); //Правый дракон порядка d-1 if (p == "P") //поворот направо { if (*n == 1) *n = 4; else if (*n == 2) *n = 3; else if (*n == 3) *n = 1; else if (*n == 4) *n = 2; } else if (p == "L") //... или поворот налево { if (*n == 1) *n = 3; else if (*n == 2) *n = 4; else if (*n == 3) *n = 2; else if (*n == 4) *n = 1; } drakon(hdc, d - 1, n, "L", x, y); //Левый дракон порядка d-1 } } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static int x0, y0; int N = 1; switch (msg) { case WM_SIZE: x0 = LOWORD(lParam) * 0.3; y0 = HIWORD(lParam) * 0.8; break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); drakon(hdc, 19, &N, "P", &x0, &y0); EndPaint(hwnd, &ps); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "myWindowClass"; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wc); hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "myWindowClass", szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } |
|
Отправлено: 16:09, 09-11-2009 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать BacuJIuu KypraHoB, что Borland C++ 5.5.1 for Win32 пишет в ответ на данный исходник?
Вместо while (GetMessage(&msg, NULL, 0, 0)) лучше написать while (GetMessage(&msg, NULL, 0, 0)>0) иначе в случаи если GetMessage(&msg, NULL, 0, 0) вернёт -1, что тоже не ноль, будет ошибка. GetMessage Function Возвращая результат return msg.wParam; его можно привести к целому - return (int)msg.wParam; Но это уже на усмотрение. |
Отправлено: 18:13, 09-11-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Вроде всё нормально пишет, но не рисует... Вот что пишет.
D:\csrc>bcc32 -W gdi32.lib "drakon.c" Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland drakon.c: Warning W8057 drakon.c 120: Parameter 'hPrevInst' is never used in function WinMain Warning W8057 drakon.c 120: Parameter 'lpszCmdLine' is never used in function WinMain Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland |
Последний раз редактировалось BacuJIuu KypraHoB, 10-11-2009 в 08:26. Отправлено: 08:13, 10-11-2009 | #3 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Решено.
Всё-таки Си - отличный язык. Надо всегда учить матчасть. Вот 2 рабочих варианта. #include <windows.h> const int storona = 2; char szTitle[] = "Драконова ломаная"; void drakon(HDC hdc, int d, int *n, int p, int *x, int *y) { if (d == 0) { // 1-N 2-S 3-W 4-E MoveToEx(hdc, *x, *y, NULL); if (*n == 1) *y -= storona; // Шаг на север if (*n == 2) *y += storona; // Шаг на юг if (*n == 3) *x -= storona; // Шаг на запад if (*n == 4) *x += storona; // Шаг на восток LineTo(hdc, *x, *y); } else { drakon(hdc, d - 1, n, 0, x, y); // Правый дракон порядка d-1 switch (p) { case 0: //поворот направо if (*n == 1) *n = 4; else if (*n == 2) *n = 3; else if (*n == 3) *n = 1; else if (*n == 4) *n = 2; break; case 1: // ... или поворот налево if (*n == 1) *n = 3; else if (*n == 2) *n = 4; else if (*n == 3) *n = 2; else if (*n == 4) *n = 1; break; } drakon(hdc, d - 1, n, 1, x, y); // Левый дракон порядка d-1 } } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static int x, y; int N = 1; switch (msg) { case WM_SIZE: x = LOWORD(lParam) * 0.3; y = HIWORD(lParam) * 0.8; break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); drakon(hdc, 19, &N, 0, &x, &y); EndPaint(hwnd, &ps); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "myWindowClass"; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wc); hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "myWindowClass", szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } #include <windows.h> const int storona = 2; char szTitle[] = "Драконова ломаная"; void drakon(HDC hdc, int d, char *n, char p, int *x, int *y) { if (d == 0) { MoveToEx(hdc, *x, *y, NULL); if (*n == 'N') *y -= storona; // Шаг на север if (*n == 'S') *y += storona; // Шаг на юг if (*n == 'W') *x -= storona; // Шаг на запад if (*n == 'E') *x += storona; // Шаг на восток LineTo(hdc, *x, *y); } else { drakon(hdc, d - 1, n, 'P', x, y); // Правый дракон порядка d-1 switch (p) { case 'P': //поворот направо if (*n == 'N') *n = 'E'; else if (*n == 'S') *n = 'W'; else if (*n == 'W') *n = 'N'; else if (*n == 'E') *n = 'S'; break; case 'L': // ... или поворот налево if (*n == 'N') *n = 'W'; else if (*n == 'S') *n = 'E'; else if (*n == 'W') *n = 'S'; else if (*n == 'E') *n = 'N'; break; } drakon(hdc, d - 1, n, 'L', x, y); // Левый дракон порядка d-1 } } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static int x, y; char N = 'N'; switch (msg) { case WM_SIZE: x = LOWORD(lParam) * 0.3; y = HIWORD(lParam) * 0.8; break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); drakon(hdc, 19, &N, 'P', &x, &y); EndPaint(hwnd, &ps); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = NULL; wc.lpszClassName = "myWindowClass"; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wc); hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "myWindowClass", szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } |
Отправлено: 17:00, 10-11-2009 | #4 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать BacuJIuu KypraHoB, если ошибка была в алгоритме, то фраза
Цитата BacuJIuu KypraHoB:
что никак не связанно с кривой дракона. А вот по первому исходнику из поста №4 строит вполне знакомую картинку. |
||
Отправлено: 03:00, 11-11-2009 | #5 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата Admiral:
|
|
Отправлено: 08:01, 11-11-2009 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Mars Installer (выбор устанавливаемых приложений) | Snakus | Автоматическая установка Windows 2000/XP/2003 | 19 | 06-02-2012 13:04 | |
Разное - [решено] Компиляция при помощи Innno Setup Compiler 5.1.0-beta | Baw17 | Программирование и базы данных | 3 | 21-02-2010 18:27 | |
[решено] последствие Digital Access | Пострадавшийотвируса | Лечение систем от вредоносных программ | 40 | 21-12-2009 19:58 | |
[решено] обнаружены вирусы Trojan.Win32.Patched.fr и Trojan.Win32.ВНО.isy | levss_09 | Лечение систем от вредоносных программ | 6 | 25-11-2009 23:00 | |
Звук - Digital Audio Out Coaxial (SPDIF RCA) -> Digital input (AES/EBU XLR) | MiDNiGhT MaN | Прочее железо | 0 | 16-03-2009 19:47 |
|