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

回答編集履歴

3

追記

2018/10/12 13:50

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,12 +1,23 @@
1
1
  > 上記のコードでは2重にpi.hがインクルードされていると思うですが,なぜエラーが出ないのしょうか?
2
2
 
3
- N1570に次のような記述がありました。
3
+ C言語規格書のドラフトであるN1570に次のような記述がありました。
4
4
  > An identifier currently defined as an object-like macro shall not be redefined by another #define preprocessing directive **unless the second definition is an object-like macro definition and the two replacement lists are identical**.
5
5
 
6
6
  引用元: [N1570 6.10.3 Macro replacement](https://port70.net/~nsz/c/c11/n1570.html#6.10.3) **太字**は引用者
7
7
 
8
- マクロ置き換えが全く同一なら問題ない、というふうに読み取れそうです。
8
+ マクロに依る置き換えが全く同一なら問題ない、というふうに読み取れそうです。
9
+ 試しに次のようなコードを書くと、gccはエラーを吐きます。
10
+ ```C
11
+ #define HALF 0.5
12
+ #define HALF .5
13
+ ```
9
14
 
15
+ 一方、次のコードは問題なくコンパイルが通ります。
16
+ ```C
17
+ #define HALF 0.5
18
+ #define HALF 0.5
19
+ ```
20
+
10
21
  ---
11
22
  > 「多重インクルードによるエラー」を確認できる例はありますでしょうか?
12
23
 

2

追記

2018/10/12 13:50

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  引用元: [N1570 6.10.3 Macro replacement](https://port70.net/~nsz/c/c11/n1570.html#6.10.3) **太字**は引用者
7
7
 
8
- 置き換えが全く同一なら問題ない、というふうに読み取れそうです。
8
+ マクロの置き換えが全く同一なら問題ない、というふうに読み取れそうです。
9
9
 
10
10
  ---
11
11
  > 「多重インクルードによるエラー」を確認できる例はありますでしょうか?

1

追記

2018/10/12 13:42

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,3 +1,13 @@
1
+ > 上記のコードでは2重にpi.hがインクルードされていると思うですが,なぜエラーが出ないのしょうか?
2
+
3
+ N1570に次のような記述がありました。
4
+ > An identifier currently defined as an object-like macro shall not be redefined by another #define preprocessing directive **unless the second definition is an object-like macro definition and the two replacement lists are identical**.
5
+
6
+ 引用元: [N1570 6.10.3 Macro replacement](https://port70.net/~nsz/c/c11/n1570.html#6.10.3) **太字**は引用者
7
+
8
+ 置き換えが全く同一なら問題ない、というふうに読み取れそうです。
9
+
10
+ ---
1
11
  > 「多重インクルードによるエラー」を確認できる例はありますでしょうか?
2
12
 
3
13
  pi.hをこのように書いてみます。