Soumettre la recherche
Mettre en ligne
C++ tips1 #include編
•
Télécharger en tant que PPTX, PDF
•
7 j'aime
•
6,406 vues
道化師 堂華
Suivre
主に cppll ML でご紹介してきた tips をC++の仕様をより掘り下げた形でまとめ直してみました。 今回は#includeにフォーカスした内容です。
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 31
Télécharger maintenant
Recommandé
C++ tips2 インクリメント編
C++ tips2 インクリメント編
道化師 堂華
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
道化師 堂華
C++ tips4 cv修飾編
C++ tips4 cv修飾編
道化師 堂華
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
C++0x総復習
C++0x総復習
道化師 堂華
C++入門?
C++入門?
tsudaa
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
Recommandé
C++ tips2 インクリメント編
C++ tips2 インクリメント編
道化師 堂華
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
道化師 堂華
C++ tips4 cv修飾編
C++ tips4 cv修飾編
道化師 堂華
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
C++0x総復習
C++0x総復習
道化師 堂華
C++入門?
C++入門?
tsudaa
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
エラーハンドリング
エラーハンドリング
道化師 堂華
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
第1回勉強会スライド
第1回勉強会スライド
koturn 0;
F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
第2回勉強会スライド
第2回勉強会スライド
koturn 0;
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
C++11
C++11
京大 マイコンクラブ
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
知って得するC#
知って得するC#
Shota Baba
Emcpp0506
Emcpp0506
Takatoshi Kondo
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
yieldとreturnの話
yieldとreturnの話
bleis tift
Better C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
Keisuke Fukuda
モナドハンズオン前座
モナドハンズオン前座
bleis tift
C# 8.0 null許容参照型
C# 8.0 null許容参照型
信之 岩永
Aula 2 Concordância
Aula 2 Concordância
2º ano CSR
Sikeres nemzetközi márkázott alkalmazások
Sikeres nemzetközi márkázott alkalmazások
MÖBIUS Mobile Marketing
Contenu connexe
Tendances
エラーハンドリング
エラーハンドリング
道化師 堂華
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
Takashi Hoshino
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
第1回勉強会スライド
第1回勉強会スライド
koturn 0;
F#によるFunctional Programming入門
F#によるFunctional Programming入門
bleis tift
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
第2回勉強会スライド
第2回勉強会スライド
koturn 0;
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
C++11
C++11
京大 マイコンクラブ
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
digitalghost
知って得するC#
知って得するC#
Shota Baba
Emcpp0506
Emcpp0506
Takatoshi Kondo
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
yieldとreturnの話
yieldとreturnの話
bleis tift
Better C#の脱却を目指して
Better C#の脱却を目指して
bleis tift
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
Keisuke Fukuda
モナドハンズオン前座
モナドハンズオン前座
bleis tift
C# 8.0 null許容参照型
C# 8.0 null許容参照型
信之 岩永
Tendances
(20)
エラーハンドリング
エラーハンドリング
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
templateとautoの型推論
templateとautoの型推論
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
第1回勉強会スライド
第1回勉強会スライド
F#によるFunctional Programming入門
F#によるFunctional Programming入門
Define and expansion of cpp macro
Define and expansion of cpp macro
第2回勉強会スライド
第2回勉強会スライド
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
C++11
C++11
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
知って得するC#
知って得するC#
Emcpp0506
Emcpp0506
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
yieldとreturnの話
yieldとreturnの話
Better C#の脱却を目指して
Better C#の脱却を目指して
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
モナドハンズオン前座
モナドハンズオン前座
C# 8.0 null許容参照型
C# 8.0 null許容参照型
En vedette
Aula 2 Concordância
Aula 2 Concordância
2º ano CSR
Sikeres nemzetközi márkázott alkalmazások
Sikeres nemzetközi márkázott alkalmazások
MÖBIUS Mobile Marketing
Oscars after - party
Oscars after - party
Makala D.
Mis02 Hc04
Mis02 Hc04
Ernst Phaff
Wie Startups unsere Welt verändern (2015)
Wie Startups unsere Welt verändern (2015)
Sascha Böhr
電子書刺激擴大閱讀產業
電子書刺激擴大閱讀產業
Sophie Pang
Evolucija Klijenata
Evolucija Klijenata
Ivan Rečević
Latvija 2030, NAP2020 un deklarācijas īstenošanas uzraudzības ziņojums
Latvija 2030, NAP2020 un deklarācijas īstenošanas uzraudzības ziņojums
Pārresoru kordinācijas centrs (PKC)
2013 content strategy - EBriks Infotech
2013 content strategy - EBriks Infotech
EBriks Infotech Pvt. Ltd.
Homoeopathic Home Prescribing Class 18th October 2014
Homoeopathic Home Prescribing Class 18th October 2014
Owen Homoeopathics
Balonmán touro
Balonmán touro
davidares1
урок знам и мога
урок знам и мога
Chavdara Veleva
Climbing Off The Ladder, Before We Fall Off
Climbing Off The Ladder, Before We Fall Off
C4Media
20120319 aws meister-reloaded-s3
20120319 aws meister-reloaded-s3
Amazon Web Services Japan
[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China
Seungmin Shin
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws sqaleの場合
Ryo Kuroda
Creatividad o mal gusto de los japoneses.
Creatividad o mal gusto de los japoneses.
Emilio Gil (unjubilado)
Suzuki adferdin god_uppskrift
Suzuki adferdin god_uppskrift
Kristinn Örn Kristinsson
En vedette
(18)
Aula 2 Concordância
Aula 2 Concordância
Sikeres nemzetközi márkázott alkalmazások
Sikeres nemzetközi márkázott alkalmazások
Oscars after - party
Oscars after - party
Mis02 Hc04
Mis02 Hc04
Wie Startups unsere Welt verändern (2015)
Wie Startups unsere Welt verändern (2015)
電子書刺激擴大閱讀產業
電子書刺激擴大閱讀產業
Evolucija Klijenata
Evolucija Klijenata
Latvija 2030, NAP2020 un deklarācijas īstenošanas uzraudzības ziņojums
Latvija 2030, NAP2020 un deklarācijas īstenošanas uzraudzības ziņojums
2013 content strategy - EBriks Infotech
2013 content strategy - EBriks Infotech
Homoeopathic Home Prescribing Class 18th October 2014
Homoeopathic Home Prescribing Class 18th October 2014
Balonmán touro
Balonmán touro
урок знам и мога
урок знам и мога
Climbing Off The Ladder, Before We Fall Off
Climbing Off The Ladder, Before We Fall Off
20120319 aws meister-reloaded-s3
20120319 aws meister-reloaded-s3
[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws sqaleの場合
Creatividad o mal gusto de los japoneses.
Creatividad o mal gusto de los japoneses.
Suzuki adferdin god_uppskrift
Suzuki adferdin god_uppskrift
Similaire à C++ tips1 #include編
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
boost - std - C#
boost - std - C#
Tatsuya Ishikawa
C#勉強会
C#勉強会
hakugakucafe
Cython intro prelerease
Cython intro prelerease
Shiqiao Du
C++ lecture-0
C++ lecture-0
sunaemon
.NETの自作ツール公開手段
.NETの自作ツール公開手段
Pierre3 小林
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
Boost17 cpplinq
Boost17 cpplinq
miki_hirofumi
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)
Akira Takahashi
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
TATSUYA HAYAMIZU
基礎からC言語 part1
基礎からC言語 part1
Hiroyuki Ito
Unity C#3からC#6に向けて
Unity C#3からC#6に向けて
onotchi_
研究生のためのC++ no.2
研究生のためのC++ no.2
Tomohiro Namba
わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25
Yasuhiko Yamamoto
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
Tatsuhiko Yamamura
新しい並列for構文のご提案
新しい並列for構文のご提案
yohhoy
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
画像処理でのPythonの利用
画像処理でのPythonの利用
Yasutomo Kawanishi
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
Kiyoshi Ogawa
Similaire à C++ tips1 #include編
(20)
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
boost - std - C#
boost - std - C#
C#勉強会
C#勉強会
Cython intro prelerease
Cython intro prelerease
C++ lecture-0
C++ lecture-0
.NETの自作ツール公開手段
.NETの自作ツール公開手段
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
Boost17 cpplinq
Boost17 cpplinq
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
基礎からC言語 part1
基礎からC言語 part1
Unity C#3からC#6に向けて
Unity C#3からC#6に向けて
研究生のためのC++ no.2
研究生のためのC++ no.2
わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
新しい並列for構文のご提案
新しい並列for構文のご提案
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
画像処理でのPythonの利用
画像処理でのPythonの利用
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
Plus de 道化師 堂華
Reflection with xamarin.forms
Reflection with xamarin.forms
道化師 堂華
独りガラパゴス開発
独りガラパゴス開発
道化師 堂華
エラーハンドリングモデル考察
エラーハンドリングモデル考察
道化師 堂華
C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門
道化師 堂華
マスタリング バベル
マスタリング バベル
道化師 堂華
並列プログラミング入門!&おさらい!
並列プログラミング入門!&おさらい!
道化師 堂華
バグベアード入門
バグベアード入門
道化師 堂華
LUCIFERの設計コンセプトと 導入予定の機能紹介
LUCIFERの設計コンセプトと 導入予定の機能紹介
道化師 堂華
Plus de 道化師 堂華
(8)
Reflection with xamarin.forms
Reflection with xamarin.forms
独りガラパゴス開発
独りガラパゴス開発
エラーハンドリングモデル考察
エラーハンドリングモデル考察
C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門
マスタリング バベル
マスタリング バベル
並列プログラミング入門!&おさらい!
並列プログラミング入門!&おさらい!
バグベアード入門
バグベアード入門
LUCIFERの設計コンセプトと 導入予定の機能紹介
LUCIFERの設計コンセプトと 導入予定の機能紹介
C++ tips1 #include編
1.
Boost.勉強会 #6 札幌
( 2011-11-05 ) C++ TIPS 1 #INCLUDE編
2.
概要 主に cppll
ML でご紹介してきた tips をC++ の仕様をより掘り下げた形でまとめ直し てみました。 今回は#includeにフォーカスした内容で す。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 2
3.
C++ Tips #INCLUDE
4.
#includeってなに? 指定されたファイルの内容を#include指令の 記述の位置に展開する機能です。
コンパイルの直前にプリプロセスによって展開さ れます。 コンパイラに対して展開するのであって元のファ イルは書き換わりません。 ISO/IEC 14882 では 2003 年版および 2011 年版とも に§16.2 Source file inclusion ( JIS X 3014 では「ソー スファイルの取込み」 )で記述されています。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 4
5.
#includeってなに? 【a.h】
【展開結果】 inline int nabs(int a) … { inline int nabs(int a) return 0 <= a ? -a: a; { } return 0 <= a ? -a: a; } 【a.cpp】 … int main() #include "a.h" { ... int main() } { ... } C++ Tips 1 #include編 Boost.勉強会 #6 札幌 5
6.
#includeってなに? Java の
import や C# の using とは似て非な るモノです。 最近の他言語の類似した機能とその本来の目 的は似たようなものなのですが、CおよびC++ の#include指令は仕様上、プリプロセスによっ てただ機械的に指定されたテキストファイル をその場所にぶちまけるだけです。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 6
7.
#includeってなに? cppコマンドを使って #include
の展開結果 を確認すると #line 指令も挿入されます。 この#line指令によりコンパイルエラーの位置 情報や __FILE__, __LINE__ といったマクロが展 開前の位置で指し示されるようにします。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 7
8.
#includeってなに? 【a.h】
【展開結果】 inline int nabs(int a) … // ←a.cppの19行目だとします。 { #line 1 "a.h" return 0 <= a ? -a: a; inline int nabs(int a) } { return 0 <= a ? -a: a; 【a.cpp】 } … #line 20 "a.cpp" #include "a.h" int main() int main() { { ... ... } } C++ Tips 1 #include編 Boost.勉強会 #6 札幌 8
9.
#includeってなに? プリプロセスは #include
指令以外にも #define 指令や #if 指令などを処理しま す。 他のヘッダファイルに依存しているヘッ ダファイルは必ずその依存先のヘッダ ファイルを#includeしておきましょう。 これをちゃんとやっておかないとメンテナン ス性が著しく低下します。 #6 札幌 C++ Tips 1 #include編 Boost.勉強会 9
10.
#includeってなに? #include する時の
<hoge.h> と "hoge.h" の違い ファイル探索範囲に AとBがあったとして、 <hoge.h> は A しか見ないが、 "hoge.h" はまず B を見た上で見つからな かったら A からもファイルを探す。 ただし B はそもそも存在しないことも許されており、その場 合、ファイル探索範囲の違いはなくなる。 A と B のファイル探索範囲およびその指定方法は処理系依 存。 一般的には時の <hoge.h> は標準ライブラリおよび処理系に 組み込んだライブラリのヘッダを読み込む場合に使用さ れ、 "hoge.h" はユーザープログラムのヘッダを読み込む場 合に使用されます。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 10
11.
#includeってなに? ファイルの指定に利用可能な文字列の種類については ISO/IEC
14882 の2003 年版では§2.8 Header names 、 2011 年版 では同名の§2.9 ( JIS X 3014 では「 §2.8 ヘッダ名 」 )で記述 されています。 ISO/IEC 14882 の2003 年版では§2.2 Character sets 、 2011 年版では同 名の§2.3 ( JIS X 3014 では「 §2.3 文字集合 」 )も参照のこと。 簡単且つ乱暴にまとめるとASCII文字(タブや改行も含む)は使ってい いけど、日本語を直接使用するのはダメで、国際文字名を使いた い場合は uXXXX あるいは UXXXXXXXX の形式で指定。( Xは16進数 文字 ) 例外としてヘッダ名を < と > で囲む場合は > が、二つの " で囲む場 合は" が使えない。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 11
12.
インクルードガード 依存関係にあるヘッダファイルをヘッダ ファイル内で#includeしていると、複数の ヘッダファイルを#includeした際に、共通 で依存関係にあるヘッダファイルの #includeが重複し、コンパイラからすると その中で行われる定義も重複することに なりエラーになってしまいます。
C++ Tips 1 #include編 Boost.勉強会 #6 札幌 12
13.
インクルードガード 【a.h】
【展開結果】 #include "c.h" inline int nabs(int a) { 【b.h】 return 0 <= a ? -a: a; #include "c.h" } 【c.h】 inline int nabs(int a) inline int nabs(int a) { { return 0 <= a ? -a: a; return 0 <= a ? -a: a; } } 【a.cpp】 定義が重複してしまいエラーになる! #include "a.h" #include "b.h" C++ Tips 1 #include編 Boost.勉強会 #6 札幌 13
14.
インクルードガード そこで出てくるのがインクルードガード
と呼ばれるテクニックです。 #if 指令と #define 指令を使って2つ目以 降は展開されないようにします。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 14
15.
インクルードガード 【c.h】
【中間展開イメージ】 #if !defined(c_h) #if !defined(c_h) #define c_h #define c_h inline int nabs(int a) inline int nabs(int a) { { return 0 <= a ? -a: a; return 0 <= a ? -a: a; } } #endif #endif #if !defined(c_h) 【最終展開イメージ】 ここは #if の条件が成立しないので inline int nabs(int a) 展開されない。 { #endif return 0 <= a ? -a: a; } C++ Tips 1 #include編 Boost.勉強会 #6 札幌 15
16.
インクルードガード インクルードガードで #define
するマクロは名前 はなんでもいいのですが他と名前が被るといろ いろまずいことが起きることが予想されますの で、まず被らないだろうって名前にする必要が あります。 #includeされる側ではなく#includeする側でイン クルードガード行うこともあります。 #includeする側でインクルードガードするのをどこか でうっかり忘れてしまうリスクがあるので多用はされ ていないようですが。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 16
17.
インクルードガード 【a.h】 #if !defined(c_h) #define c_h #include
"c.h" #endif 【b.h】 #if !defined(c_h) #define c_h #include "c.h" #endif C++ Tips 1 #include編 Boost.勉強会 #6 札幌 17
18.
インクルードガード 拡張仕様で #pragma
once と記述しておく だけでインクルードガードをやってくれ るコンパイラもあります。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 18
19.
インクルードガード 【c.h】
【c.h】 #if !defined(c_h) #pragma once #define c_h inline int nabs(int a) inline int nabs(int a) { { return 0 <= a ? -a: a; return 0 <= a ? -a: a; } } #endif C++ Tips 1 #include編 Boost.勉強会 #6 札幌 19
20.
インクルードガード::使い分け コンパイルの速度的には#pragma once
や#includeする 側で行う手製インクルードガードがよいとされていま す。 移植性の面では#includeされる側で行う手製インク ルードガードがベストです。 直接は手を入れたくないあるいは手を入れられない第 三者から提供されるヘッダファイルにインクルード ガードが施されていない場合は#includeする側で行う 手製インクルードガードしかありません。 手製インクルードガードでラップしたヘッダファイルを使 うのもありです。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 20
21.
インクルードガード::補足 定義だから重複エラーになるのであっ て、宣言だけなら重複エラーになりませ ん。
C++ Tips 1 #include編 Boost.勉強会 #6 札幌 21
22.
意図的な再インクルード ヘッダファイルでいろいろな小細工をしたい場合に意 図的に再インクルードさせる場合などもあります。
躊躇無く複数のヘッダファイルを使える状況下ではまず必 要になることはないテクニックです。 このテクニックを利用する場合、#pragma once などに頼ら ず自前で且つ適切にインクルードガードを行う必要があり ます。 特定のマクロ群のOn/Offを切り替えさせる為。 ひとつのヘッダファイルに複数の機能を持たせる為。 マクロの指定により異なる内容のヘッダファイルのように振 る舞わせたり。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 22
23.
ソースファイルのインクルード C++のテンプレートの機能を使ったコード を書くと一般的にはソースファイルに書
くべきコードまでヘッダファイルに書か ざるを得ませんが、ソースファイルを ヘッダファイルから #include することで、 形だけは従来どおりにヘッダファイルと ソースファイルへ書き分けることができ ます。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 23
24.
データファイルのインクルード 移植性が高く且つ超お手軽なデータ埋め 込み方法としても #include
は使えます。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 24
25.
データファイルのインクルード … int data[] =
{ #include "data.csv" // 42,42,42, }; … C++ Tips 1 #include編 Boost.勉強会 #6 札幌 25
26.
ストリームのインクルード 役に立つことはまずないですが /dev/tty
(linux)だの con (windows)だのといったスト リームをインクルードすることも可能で す。 プロンプトの類いが出せないのが辛いところ です。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 26
27.
ストリームのインクルード … int confidential_value =
// この値はコンパイル時に手入力する。 #if defined(__WIN32__) || defined(_WIN32) #include <con> #else #include <dev/tty> #endif ; … C++ Tips 1 #include編 Boost.勉強会 #6 札幌 27
28.
#include __FILE__ について
そのファイル自身をインクルードしよう として #include __FILE__ とするのは構文 的は間違いではないが、規格上も実際も #include で指定する形式と __FILE__ が一 致している保証がなく、またカレント ディレクトリの扱いが処理系によって異 なる問題もある為、規格的には有効に機 能する保証はない。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 28
29.
#line
明示的に利用することで次のようなことができます。 コンパイル環境の物理的なファイルパスの隠蔽。 __FILE__ がどのような形のナロー文字列になっているのかは処理系依存。 ユーザー名が含まれるパスでコンパイルして実行形式ファイルに __FILE__ と して埋め込まれる事態を防げます。 同じファイル内でのブロックの明示。 __function__ 疑似マクロなどが使える場合はあまりその必要性はありません が。 #line で指定できる行番号は C++03だと 1~32,767 の範囲で C++11だ と1~2,147,483,647の範囲になります。この値域から外れる数値が 指定された場合の動作は未定義となります。 ISO/IEC 14882 では 2003 年版および 2011 年版ともに§16.4 Line control ( JIS X 3014 では「行制御」 )で記述されています。 C++ Tips 1 #include編 Boost.勉強会 #6 札幌 29
30.
C++ Tips 1
#include編 質疑応答
31.
C++ Tips 1
#include編 ご清聴ありがとうございまし た。
Télécharger maintenant