Есть некоторый .h-файл MyFile.h . В нём я хочу дать указание компилятору, что он определяется только один раз.
Я могу для этого написать в этом файле как следующим образом:
#pragma once
// текст файла MyFile.h
так и следующим образом:
#ifndef MYFILE_H
#define MYFILE_H
// текст файла MyFile.h#endif
Здравствуйте, RussianFellow, Вы писали:
RF> Есть некоторый .h-файл MyFile.h . В нём я хочу дать указание компилятору, что он определяется только один раз. RF> Я могу для этого написать в этом файле как следующим образом: RF> В чём отличие этих двух способов друг от друга?
Здравствуйте, Qbit86, Вы писали:
RF>>В чём отличие этих двух способов друг от друга?
Q>Способ «#pragma once» не стандартизован и поэтому теоретически непереносим.
но в то же время поддерживается большинством современных компиляторов, что делает его переносимым практически
Здравствуйте, galileo, Вы писали:
G>но в то же время поддерживается большинством современных компиляторов, что делает его переносимым практически
Для переносимости мало одной поддержки компиляторами. Нужно чтобы ещё и поведение совпадало. И вот именно с этим возникают проблемы. Ну если, конечно, не стандартизировать для этой функциональности unspecified поведение :)
Здравствуйте, RussianFellow, Вы писали:
RF>Есть некоторый .h-файл MyFile.h . В нём я хочу дать указание компилятору, что он определяется только один раз. RF>Я могу для этого написать в этом файле как следующим образом:
Здравствуйте, watchmaker, Вы писали:
G>>но в то же время поддерживается большинством современных компиляторов, что делает его переносимым практически
W>Для переносимости мало одной поддержки компиляторами. Нужно чтобы ещё и поведение совпадало. И вот именно с этим возникают проблемы. Ну если, конечно, не стандартизировать для этой функциональности unspecified поведение
даже стандарт не гарантирует полной переносимости, потому что это зависит от реализации компиляторов
но что касается #pragma once тут все довольно очевидно, уже давно пора ее в стандарт включить
Здравствуйте, galileo, Вы писали:
G>даже стандарт не гарантирует полной переносимости, потому что это зависит от реализации компиляторов G>но что касается #pragma once тут все довольно очевидно, уже давно пора ее в стандарт включить
Тем не менее, есть, как минимум, две разные реализации.
Одна — действует на однократность включения того хедера, в котором заявлена
Вторая — действует на однократность включения всех хедеров в той единице трансляции, в которой заявлена
Какую надо включить в стандарт?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Тем не менее, есть, как минимум, две разные реализации. E>Одна — действует на однократность включения того хедера, в котором заявлена E>Вторая — действует на однократность включения всех хедеров в той единице трансляции, в которой заявлена E>Какую надо включить в стандарт?
я не силен в реализациях компиляторов, но не вижу принципиальной проблемы, если обе реализации имеют место быть, можно стандартизировать обе
но если должен остаться только один, со своей колокольни я бы не глядя проголосовал за ту что используется в MSVC