「無名名前空間」の版間の差分
提供: C++入門
(相違点なし)
|
2014年7月9日 (水) 16:09時点における最新版
無名名前空間 (unnamed namespace) とは、無名の名前空間です。C言語の変数、関数にstaticで修飾することで、ファイル内のみの局所的な変数、関数にすることができました。C++では、無名名前空間で同様のことができます。
匿名名前空間(anonymous namespace)と呼ばれることもありますが、C++の規格上の正式名称は、無名名前空間 (unnamed namespace) です。
読み方
- 無名名前空間
- むめい なまえくうかん
- unnamed namespace
- あんねいむど ねーむすぺーす
- 匿名名前空間
- とくめい なまえくうかん
- anonymous namespace
- あのにます ねーむすぺーす
目次
概要
無名名前空間を使用することで、名前空間を汚さずに、コーディングが可能です。 無名名前空間では、namespace キーワードに「名前空間の名前」を指示せずに使用することで表記します。
namespace { int bar; void foo() { cout << "Hoge" << endl; } }
unnamed_namespace1.cpp 無名名前空間の例
ソースコード unnamed_namespace1.cpp
/* * unnamed_namespace1.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <cstdlib> namespace { void foo () { std::cout << "Hello" << std::endl; } } int main(int argc, char const* argv[]) { foo(); return 0; }
コンパイル
c++ unnamed_namespace1.cpp -o unnamed_namespace1
実行例
% ./unnamed_namespace1 Hello
他のファイルから参照できない例
func.cpp で unnamed_namespace1.cpp の foo()を参照しようとするとコンパイル時に当然エラーになります。
/* * func.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ void foo (); void func () { foo(); }
$ c++ unnamed_namespace1.cpp func.cpp /tmp/func-qFrK1L.o: In function `func()': func.cpp:(.text+0x5): undefined reference to `foo()' c++: error: linker command failed with exit code 1 (use -v to see invocation)