Почему я получаю предупреждение C4844 при компиляции модуля реализации модуля?

Я пытаюсь разделить части реализации моего модуля на отдельный исходный файл в качестве единицы реализации модуля:

банан.cppm

export module banana;

export int banana();

банан.импл.cppm

module banana;

int banana() {
    return 42;
}

Visual Studio жалуется на этот код с предупреждением C4844:

1>banana.impl.cppm(1,14): предупреждение C4844: 'банан экспорта модуля;' является теперь предпочтительный синтаксис для объявления интерфейса модуля

Что здесь происходит? Как я могу избавиться от этого предупреждения?

Синтаксиса module banana; нет, см. en.cppreference.com/w/cpp/language/modules#Syntax

Richard Critten 09.04.2023 15:48

@RichardCritten Посмотрите на вторую строку в примере для раздела объявлений модуля.

ComicSansMS 09.04.2023 15:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
2
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Visual C++ считает, что модуль реализации вашего модуля является модулем интерфейса модуля.

Возможны два варианта того, как это могло произойти:

  • Вы используете параметр компиляции /interface для компиляции исходного файла реализации модуля. Щелкните правой кнопкой мыши исходный файл и перейдите к Properties->Configuration Properties->C/C++->Advanced->Compile As и убедитесь, что для него не установлено значение Compile as C++ Module Code (/interface). Если вы используете CMake для создания решений Visual Studio, удалите источники реализации модуля из файла CXX_MODULESFILE_SET.
  • Вы используете расширение файла модуля, например .ixx или .cppm, для исходного файла реализации модуля. Visual Studio автоматически обрабатывает их как интерфейсы модулей. Либо переопределите это с помощью параметра компиляции /TP (установите для свойства Compile As выше значение Compile As C++ Code (/TP)), либо измените расширение файла на немодульное, например .cpp. Я настоятельно рекомендую изменить расширение файла, так как другие компиляторы аналогичным образом придают особое значение расширениям файлов модулей.

Другие вопросы по теме