Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Спасибо. А кроме того, что это - чисто студийный метод, есть какие-либо отличия/преимущества?
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Преимущество в том, что в крупном проекте может оказаться 2 файла с одинаковыми именами и тогда в обоих файлах (если принять как правило дефайн -- измененное имя файла) будут одинаковые дефайны -- глюки при включениях обоих хидеров. В случае с pragma once такого не будет. + увеличение скорости сборки (компилятору нет нужды проверять повторное вхождение символа).
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Минус например в том, что комипилятор может дать осечку. Например в случае двух ссылок на один файл. Но это по большей части проблемы компиляторов, а не "once".
    Можно и одновременно эти конструкции использовать.
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    censored
    Booster
    Понял, спасибо.

    Ещё вопрос. Я перегрузил(или переопределил) new и delete слудующим образом:
    Код (Text):
    1. LPVOID operator new(size_t size)
    2. {
    3.     return HeapAlloc(hHeap,HEAP_ZERO_MEMORY,size);
    4. }
    5. VOID operator delete(LPVOID mem)
    6. {
    7.     HeapFree(hHeap,0,mem);
    8. }
    Как, по аналогии, сделать то же самое с new[] и delete[].
    Не могу понять в чём принципиальное отличие операторов, возвращающих указатель и вектор.
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Так же и перегружай: operator new[] (size_t size); operator delete[](void *mem);

    >Не могу понять в чём принципиальное отличие операторов, возвращающих указатель и вектор.
    Какой вектор?
     
  6. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Я так понял.

    Я к тому, что внутри писать.
    Неужели так?!
    Код (Text):
    1. LPVOID operator new[](size_t size){
    2.     return HeapAlloc(hHeap,HEAP_ZERO_MEMORY,size);
    3. }
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    twgt
    >Неужели так?!
    Конечно, как же ещё. ^)

    Это они массив вектором обозвали. Тем и отличаются, что в одном случае выделяем/уничтожаем один элемен, в другом массив.
     
  8. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Booster
    Ясно :), спасибо.
     
  9. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    При записи, строка TCHAR (например TCHAR szString = L"Data";) автоматически завершается NULL.
    Как записать строчку без автоматического завершения?
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MirrorBlack
    Мона например так: TCHAR szString[] = {'D', 'a', 't', 'a'};
     
  11. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Booster
    А покашерней варианты есть?
    Может TCHAR подправить?
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MirrorBlack
    А чем 0 мешает? Да и чем предложенный мной вариант не кошерный?
    Править строку можно, но смысл?
     
  13. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    MirrorBlack
    в Oz атому не содержат \0, пользуйтесь им.
     
  14. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    * атомы
     
  15. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Booster
    Если использовать твой вариант с длинными строками, то либо на клаве кавычки сломаеш, либо в дурку попадёш :)
    А что касается правки TCHAR - я имел ввиду (если возможно конечно) убрать завершение строки, или создать например TCHARNZ.
    В файле WinNT.h typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;
    Если я правильно понял достаточно убрать __nullterminated?
     
  16. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    censored
    Знать бы ещё что это - Oz, с радостью бы воспользовался.
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MirrorBlack
    Ну блин, это же всё на стадии написания кода. Для таких случаев или пишут скрипт, либо юзают редактор с поддержкой регулярок. Студия держит регулярки. Вот выражения которое делает такое преобразование: Find and Replace -> 1)Find: {.} 2)Replace: '\1',
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MirrorBlack
    А вообще так и не ответил, чем тебе ноль помешал? Оптимизируем? ^)
     
  19. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Booster
    Можно сказать что оптимизируем...
    Например есть строка - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
    и надо обращаться как ко всей строке, так и каждому параметру в отдельности.
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MirrorBlack
    Ну так и кто мешает не учитывать этот пресловутый ноль?
    Проблема по-моему притянута за уши.