teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

追記

2018/01/16 12:08

投稿

toki_td
toki_td

スコア2850

answer CHANGED
@@ -10,9 +10,11 @@
10
10
  #include COMMON_INCLUDE(my_header.h)
11
11
  ```
12
12
 
13
+ 規格などは下の通りですが、「できない」、というのは僕の間違いでした。
14
+ マクロの使い方に発想が足りませんでしたね、、、
13
15
 
14
- すみません、以下、僕の間違いでした。
16
+ 以下、旧回答
15
-
17
+ -------------------------------------------------------------------------------
16
18
  [JISの規格 6.10.2ソースファイル取込み](http://kikakurui.com/x3/X3010-2003-01.html)を見る限り、includeのファイル名としてマクロを記述することは可能だが、注釈(143)に隣接する文字列リテラルは連結されない、とあるのでそういった記述は無理だと思います。
17
19
  C++でも規格ではありませんが[cppreference](http://en.cppreference.com/w/cpp/preprocessor/include)ではマクロの展開結果が<>か""で囲われている場合に限り許可される、とあるので同じだと思います。
18
20
 

4

追記

2018/01/16 12:08

投稿

toki_td
toki_td

スコア2850

answer CHANGED
@@ -11,7 +11,7 @@
11
11
  ```
12
12
 
13
13
 
14
- すみません、以下、僕の違いでした。
14
+ すみません、以下、僕の違いでした。
15
15
 
16
16
  [JISの規格 6.10.2ソースファイル取込み](http://kikakurui.com/x3/X3010-2003-01.html)を見る限り、includeのファイル名としてマクロを記述することは可能だが、注釈(143)に隣接する文字列リテラルは連結されない、とあるのでそういった記述は無理だと思います。
17
17
  C++でも規格ではありませんが[cppreference](http://en.cppreference.com/w/cpp/preprocessor/include)ではマクロの展開結果が<>か""で囲われている場合に限り許可される、とあるので同じだと思います。

3

回答誤り訂正

2018/01/16 12:03

投稿

toki_td
toki_td

スコア2850

answer CHANGED
@@ -1,3 +1,18 @@
1
+ 気になったので調べ直したら以下の方法なら可能でした。
2
+ 文字列として連結せずに最後に文字列化 or <>で囲んでやればいけます。
3
+
4
+ ```C
5
+ #define LOCAL_INCLUDE(x) #x
6
+ #define GLOBAL_INCLUDE(x) <x>
7
+
8
+ #define COMMON_INCLUDE(x) GLOBAL_INCLUDE(common/include/dir/##x)
9
+
10
+ #include COMMON_INCLUDE(my_header.h)
11
+ ```
12
+
13
+
14
+ すみません、以下、僕の勘違いでした。
15
+
1
16
  [JISの規格 6.10.2ソースファイル取込み](http://kikakurui.com/x3/X3010-2003-01.html)を見る限り、includeのファイル名としてマクロを記述することは可能だが、注釈(143)に隣接する文字列リテラルは連結されない、とあるのでそういった記述は無理だと思います。
2
17
  C++でも規格ではありませんが[cppreference](http://en.cppreference.com/w/cpp/preprocessor/include)ではマクロの展開結果が<>か""で囲われている場合に限り許可される、とあるので同じだと思います。
3
18
 

2

誤記修正

2018/01/16 12:01

投稿

toki_td
toki_td

スコア2850

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  [JISの規格 6.10.2ソースファイル取込み](http://kikakurui.com/x3/X3010-2003-01.html)を見る限り、includeのファイル名としてマクロを記述することは可能だが、注釈(143)に隣接する文字列リテラルは連結されない、とあるのでそういった記述は無理だと思います。
2
- C++でも規格ではありませんが[cppreference](http://en.cppreference.com/w/cpp/preprocessor/include)ではマクロの展開結果が<>か""で囲われている場合に限り許可されるとあるので、C++でも同じだと思います。
2
+ C++でも規格ではありませんが[cppreference](http://en.cppreference.com/w/cpp/preprocessor/include)ではマクロの展開結果が<>か""で囲われている場合に限り許可されるとあるので同じだと思います。
3
3
 
4
4
  多分、マクロなのかフォルダ名なのか判定できなくなるためだと思います。
5
5
  VS2017では通りませんでした。

1

誤記修正

2018/01/15 16:29

投稿

toki_td
toki_td

スコア2850

answer CHANGED
@@ -14,5 +14,6 @@
14
14
  #include HEADER_B
15
15
  #include HEADER_C
16
16
  ```
17
- といった記載は可能ですから機能ごとにヘッダー一覧マクロを書いたヘッダーを作成しておくとかでしょうか?
17
+ といった記載は可能ですから機能ごとにヘッダー一覧マクロを書いたヘッダーを作成しておくとかでしょうか?
18
- それだったら最初から機能をまとめたヘッダー作ったほうが、という気がしなくもないですが。
18
+ それだったら最初から機能をまとめたヘッダー作ったほうが、という気がしなくもないですが。
19
+ 機能が巨大で部分的に使用できたり雑多に集めた機能集だとどうしようか悩むところですね。