Я пытаюсь разделить части реализации моего модуля на отдельный исходный файл в качестве единицы реализации модуля:
банан.cppm
export module banana;
export int banana();
банан.импл.cppm
module banana;
int banana() {
return 42;
}
Visual Studio жалуется на этот код с предупреждением C4844:
1>banana.impl.cppm(1,14): предупреждение C4844: 'банан экспорта модуля;' является теперь предпочтительный синтаксис для объявления интерфейса модуля
Что здесь происходит? Как я могу избавиться от этого предупреждения?
@RichardCritten Посмотрите на вторую строку в примере для раздела объявлений модуля.
Visual C++ считает, что модуль реализации вашего модуля является модулем интерфейса модуля.
Возможны два варианта того, как это могло произойти:
Properties->Configuration Properties->C/C++->Advanced->Compile As
и убедитесь, что для него не установлено значение Compile as C++ Module Code (/interface)
. Если вы используете CMake для создания решений Visual Studio, удалите источники реализации модуля из файла CXX_MODULES
FILE_SET
..ixx
или .cppm
, для исходного файла реализации модуля. Visual Studio автоматически обрабатывает их как интерфейсы модулей. Либо переопределите это с помощью параметра компиляции /TP (установите для свойства Compile As
выше значение Compile As C++ Code (/TP)
), либо измените расширение файла на немодульное, например .cpp
. Я настоятельно рекомендую изменить расширение файла, так как другие компиляторы аналогичным образом придают особое значение расширениям файлов модулей.
Синтаксиса
module banana;
нет, см. en.cppreference.com/w/cpp/language/modules#Syntax