Язык ничего не определяет о расширениях файлов, ему все равно. Это полностью зависит от реализации.
Компиляторы, которые я использовал, не используют расширения файлов, чтобы различать различные диалекты C ++. Также в этом отношении они не используют расширения файла, чтобы различить источник C89 и C99. Например, в g ++ способ указать диалект с помощью параметров командной строки -std
, -pedantic
, -ansi
.
Насколько я знаю, эта политика будет продолжаться: как только C ++ 0x станет стандартом, а g ++ объявит, что он поддерживается, способ указать, хотите ли вы C ++ 03 или C ++ 11 [*], будет с опция -std
.
Конечно, вы можете придумать свое собственное соглашение (точно так же, как вы в настоящее время выбираете между .cc
, .cpp
, .C
, .cxx
или другими расширениями файлов, которые другие люди использовали для C ++). Если вы чувствуете, что расширение файла - это путь, и вы используете make
, определите правило:
*.o : *.cpp11
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -std=c++11 -c
Детали для других систем сборки и других компиляторов, конечно, могут отличаться, но все это выходит за рамки стандарта, который просто определяет язык, а не файлы, в которых он хранится.
Если вас беспокоит файл, который использует C ++ 0x, случайно компилируемый как C ++ 03, то у вас есть несколько вариантов. Если он использует функции C ++ 0x, отсутствующие в C ++ 03, то часто файл не компилируется как C ++ 03, и в этом случае вам не нужно ничего делать (кроме исправления параметров сборки). В противном случае вы можете сознательно убедиться, что он использует такую функцию, например, для обеспечения версии C ++, по крайней мере, такой же новой, как FDIS:
#if __cplusplus < 201103L
#error "Wrong version!"
#endif
[*] будем надеяться.