11. Избегайте логических переменных, обозначающих отрицание. Found, а не notFound; Good, а не notGood. Вообще, хорошим стилем считается дополнять логические переменные префиксом "is": isFound, isGood. Это же относится к функциям, возвращающим значение true/false, напр. IsKindOf.
12. Константы из типов-перечислений (enum) должны содержать имя типа. COLOR_BLUE, а не BLUE; FILE_ERROR_ALREADY_EXISTS, а не ALREADY_EXISTS.
13. Всегда приводите типы к нужным явно, не полагаясь на автоматику.
14. Переменные, связанные между собой по смыслу, можно объявлять одной строкой:
int x, y, z;
Record first, last, next, previous;
Никак не связанные переменные лучше объявлять на разных строках, даже если они одного типа.
15. В пустых циклах хорошо явно прописывать continue. Этим вы показываете, что оставили цикл пустым нарочно, а не по ошибке. Пример: while (*p++ = *q++) continue;
Ну, хватит пожалуй. Если кто-то особенно заинтересовался этим вопросом, он может посмотреть более чем 70 подобных правил в Geosoft's C++ Programming Style Guidelines.
Должен заметить, что далеко не со всеми положениями этого документа я согласен. Например, я не считаю нужным обязательно начинать имена функций с маленькой буквы, – действительно важно различать переменные и типы, а функцию от типа отличить гораздо легче. Или еще, например, правило всем private-членам классов давать суффикс "_" — ну вот не нравится и все тут… Я здесь привел самые, на мой взгляд, нужные и, прошу прощения за тавтологию, "правильные" правила; те, которые встречаются практически во всех документах такого типа.
Так что дам еще один, последний, совет: подходите ко всем правилам, необходимость которых для вас не очевидна, с некоторой толикой здравого смысла.
Q. Как в VC++ 6.0 можно сделать окно, которое не будет видно на Taskbar'e?
A. Самый простой способ – это создать основное окно с расширеным стилем окна WS_EX_TOOLWINDOW:
hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, NULL, 0, hInstance, NULL);
При использовании MFC следует перекрыть метод PreCreateWindow:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
if (!CMDIFrameWnd::PreCreateWindow(cs)) return FALSE;
cs.dwExStyle=WS_EX_TOOLWINDOW;
return TRUE;
}
Но такое решение не всегда приемлемо – у созданного таким образом окна на тайтлбаре может находится только кнопка закрытия, и его заголовок отличается от заголовков других окон (он меньше). Для того, чтобы исправить эти недостатки, сначала создаем невидимое окно со стилем WS_EX_TOOLWINDOW, а затем дочернее окно, которое будет выполнять роль основного окна приложения. Это будет выглядеть следующим образом:
//…
HWND hWnd1,hWnd2;
hInst = hInstance;
hWnd1 = CreateWindowEx(WS_EX_TOOLWINDOW, szWindowClass1, szTitle, 0, 0, 0, 100, 100, NULL, 0, hInstance, NULL); // cоздаем невидимое окно
// создаем окно, которое будет основным; указываем hWnd1 в кач.родителя:
hWnd2 = CreateWindowEx(0, szWindowClass2, szTitle, WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, hWnd1, 0, hInstance, NULL);
ShowWindow(hWnd1, FALSE); // скрываем 1-ое окно
UpdateWindow(hWnd1);
ShowWindow(hWnd2, nCmdShow); // делаем дочернее окно видимым
UpdateWindow(hWnd2);