dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

Глупый вопрос о *.h и *.cpp

Останнє повідомлення 09-01-2007, 12:44 від Dmitry Peleshenko. 4 відповіді.
Сортувати: Попереднє Наступне
  •  30-12-2006, 13:15 1659

    Глупый вопрос о *.h и *.cpp

    Как компил. понимает о существовании *.срр файла, если в main() включено (#icnlude ) только *.h с объявлением прототипов этих функций, которые реализованы в *.срр?
  •  31-12-2006, 2:58 1660 у відповідь на 1659

    Re: Глупый вопрос о *.h и *.cpp

    Так для этого и нужны solution & project в Visual Studio, компилятор их компилирует т.к. у них атрибут "Compile" стоит. А если файла .cpp вообще нет? Как тогда быть (например код .cpp уже скомпилирован)? Ответ прост: за процесс связи отвечает линкер. Он и определяет как прототип функции связывается с компилированным кодом.
  •  31-12-2006, 6:40 1664 у відповідь на 1660

    Re: Глупый вопрос о *.h и *.cpp

    Пробовал написать что то типа этого, в итоге говорит что нет концовки, а какой? (Заранее, Спасибо за помощь).

    //////////Main.cpp/////////////////
    #include "my.h"
    #include "iostream"
    #include "stdio.h"
    using namespace std;

    int main()
    {
    cout << sum( 1, 2 );
    return 0;
    }

    ///////////My.h/////////////////

    float sum(int a, int b);

    ///////////My.срр/////////////////

    #include "my.h"

    float sum(int a, int b)
    {
    return a+b;
    }

    ////////////////////////////
    Компилятор на это отвечает:

    --------------------Configuration: ewfw - Win32 Debug--------------------
    Compiling...
    my.cpp
    d:\c++ games\ewfw\my.cpp(9) : fatal error C1010: unexpected end of file while looking for precompiled header directive
    Error executing cl.exe.

    ewfw.exe - 1 error(s), 0 warning(s)
    Помічено як:
  •  05-01-2007, 12:03 1778 у відповідь на 1664

    Re: Глупый вопрос о *.h и *.cpp

    Я так понял идея заключается в том что, stdafx.h необходимо включать в *.срр для того что бы компилятор понял о том что он идёт в компоновку с *.h.
  •  09-01-2007, 12:44 1832 у відповідь на 1778

    Re: Глупый вопрос о *.h и *.cpp

       Компилятор обычно просматривает файлы *.cpp, *.c и некоторые другие(не уверен можно ли это менять). Такие файлы попадают обычно в папку SorceFiles. Заоговочные файлы (*.h, *.hpp) можно вообще выкинуть из проекта. Компилятор о них знает только потому, что на них есть #include в *.cpp, *.с и др.
       Особого внимания заслуживает файл stdafx.h. Дело в том, что для ускорения компиляции проекта используется прекомпиляция. При первом запуске результат компиляции "редко изменяемого" кода записывается в Precompiled Header это файл с расширением *.pch. При последующих билдах компиляция этого "редко изменяемого" кода не происходит. Обычно "редкои изменяемый" код это заголовочные файлы библиотек.
    Если посмотреть на настройку проекта VC, то в разделе [C/C++]->[Precompiled Header] можно найти настройки прекомпиляции, там же указан и файл который надо прекомпилировать - stdafx.h. Если выключить совсем прекомпиляцию, то ошибки с не найденной директивой не будет.
       Схема такая, включаете прекомпиляцию и все включения заголовков библиотек выносите в stdafx.h, его включаете во все *.cpp. Или выключаете прекомпиляцию и можете "разбрасываеть" включения по своему проекту как хотите :) Хотя я бы советовал во втором случае тоже вынести все в stdafx.h.

    Все выше изложенное относиться к MS Visual Studio 2003, в других версиях расположение настроек может быть другим. Но смысл прекомпиляции тот же.
    -- Dmitry Peleshenko --
Переглядати як новосний Блог RSS в XML