Верно или неверно: раздел имеет файл интерфейса и ноль или более файлов реализации.C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Верно или неверно: раздел имеет файл интерфейса и ноль или более файлов реализации.

Сообщение Гость »


В статье, опубликованной в Microsoft Learn под названием Учебное пособие по именованным модулям (C++), говорится следующее:

Раздел содержит файл интерфейса и ноль или более файлов реализации.

Похоже, что это простое утверждение о том, что каждый раздел должен иметь файл интерфейса, даже если из раздела не экспортируются никакие имена.

Утверждение появляется в конце статьи, в разделе «Файлы разделов модуля». Я видел то же самое заявление в блоге на сайте Modernescpp.com.

Вопрос: Верно ли это для стандарта ISO C++ или это ограничение, наложенное Microsoft на реализацию модулей?
Пример из стандарта C++
Когда я попытался ответить на этот вопрос, обратившись к стандарту C++, я не нашел прямого утверждения, ни того, ни другого.

Однако я нашел пример, в котором раздел с именем A:Internals не имеет интерфейсного модуля раздела. Это убедительный признак того, что ограничение Microsoft не распространяется на стандарт.

В то же время этот пример подтверждает идею о том, что реализация модулей Microsoft требует, чтобы раздел имел интерфейсный модуль. Без него пример не будет скомпилирован под MSVC.

Раздел 10.1 mod.unit стандарта C++ содержит следующий пример:

// A.ixx // Единица перевода №1: экспортный модуль А; экспорт-импорт :Foo; экспортировать int baz(); // A-Foo.ixx // Блок перевода №2: модуль экспорта A:Foo; импорт: Внутренние устройства; экспорт int foo() { return 2 * (bar() + 1); } // A-Internals.cpp // Блок перевода №3: модуль А:Внутренности; интервал бар(); // A.cpp // Блок перевода №4: модуль А; импорт: Внутренние устройства; int bar() { return baz() - 10; } int baz() {возвращение 30; } Я добавил следующий модуль, содержащий функцию main, простой драйвер, вызывающий функции foo и baz.

// main.ixx модуль экспорта основной; импорт стандартный; импорт А; экспортировать int main() { станд::cout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»