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

回答編集履歴

7

修正

2020/09/01 02:36

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -37,4 +37,4 @@
37
37
  ### 追記
38
38
 
39
39
  途中からわざわざ導入された書き方なので、制定者たちエキスパートの知見を信じるなら、「使える状況で絶対に明示的キャストを省略してはいけない理由」は少なくともないと思います。むしろ需要があるからこそ供給されたものです。
40
- コードを書いた人が明示的キャストを選ばなかった理由はそれぞれあると思いますが、C 言語の歴史に思いをはせるなら、その理由の大半が「古いコードである」または「古い書き方をそのまま使っている」と言って間違いないのではないかと思います。
40
+ いくつかの C 言語のコードに明示的キャストが無かった場合、コードを書いた人が明示的キャストを選ばなかった理由はそれぞれあると思いますが、C 言語の歴史に思いをはせるなら、その理由の大半が「古いコードである」または「古い書き方をそのまま使っている」と言って間違いないのではないかと思います。

6

修正

2020/09/01 02:36

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -37,4 +37,4 @@
37
37
  ### 追記
38
38
 
39
39
  途中からわざわざ導入された書き方なので、制定者たちエキスパートの知見を信じるなら、「使える状況で絶対に明示的キャストを省略してはいけない理由」は少なくともないと思います。むしろ需要があるからこそ供給されたものです。
40
- コードを書いた人が明示的キャストを選ばなかった理由はそれぞれあると思いますが、C 言語の歴史に思いをはせるなら、その理由の大半が「古いコードである」または「古い書き方をそのまま使っている」と言って間違いないのではないかと思います。
40
+ コードを書いた人が明示的キャストを選ばなかった理由はそれぞれあると思いますが、C 言語の歴史に思いをはせるなら、その理由の大半が「古いコードである」または「古い書き方をそのまま使っている」と言って間違いないのではないかと思います。

5

追記

2020/09/01 02:29

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -32,4 +32,9 @@
32
32
 
33
33
  コンパイラによって暗黙のキャストがされる場合でも明示的キャストを**しなければならないか**という質問なら、「冗長であるし警告が出ないので、**しなくて良い**」と答えます。maisumakun さんの回答にあるように、強引なキャストによってバグが見えにくくなることもあります。
34
34
  **した方が良いか**という質問なら「**どちらでも良い**のでチームのコーディング規約に従うか、個人開発の場合は好きな方を使えば良い」と答えます。
35
- **自分ならするか**という質問なら「私は**しない**」と答えます。C 言語のソースコードは、C 言語としてコンパイルします。C++ ならもっと C++ らしい書き方をするでしょう。そしてこの質問は C 言語の質問です。
35
+ **自分ならするか**という質問なら「私は**しない**」と答えます。C 言語のソースコードは、C 言語としてコンパイルします。C++ ならもっと C++ らしい書き方をするでしょう。そしてこの質問は C 言語の質問です。
36
+
37
+ ### 追記
38
+
39
+ 途中からわざわざ導入された書き方なので、制定者たちエキスパートの知見を信じるなら、「使える状況で絶対に明示的キャストを省略してはいけない理由」は少なくともないと思います。むしろ需要があるからこそ供給されたものです。
40
+ コードを書いた人が明示的キャストを選ばなかった理由はあそれぞれあると思いますが、C 言語の歴史に思いをはせるなら、その理由の大半が「古いコードである」または「古い書き方をそのまま使っている」と言って間違いないのではないかと思います。

4

修正

2020/09/01 02:28

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -30,6 +30,6 @@
30
30
 
31
31
  ### 追記
32
32
 
33
- コンパイラによって暗黙のキャストがされる場合でも明示的キャストを**しなければならないか**という質問なら、「警告が出ないので、**しなくて良い**」と答えます。
33
+ コンパイラによって暗黙のキャストがされる場合でも明示的キャストを**しなければならないか**という質問なら、「冗長であるし警告が出ないので、**しなくて良い**」と答えます。maisumakun さんの回答にあるように、強引なキャストによってバグが見えにくくなることもあります。
34
34
  **した方が良いか**という質問なら「**どちらでも良い**のでチームのコーディング規約に従うか、個人開発の場合は好きな方を使えば良い」と答えます。
35
35
  **自分ならするか**という質問なら「私は**しない**」と答えます。C 言語のソースコードは、C 言語としてコンパイルします。C++ ならもっと C++ らしい書き方をするでしょう。そしてこの質問は C 言語の質問です。

3

修正

2020/09/01 02:06

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -30,6 +30,6 @@
30
30
 
31
31
  ### 追記
32
32
 
33
- コンパイラによって暗黙のキャストされる場合でも明示的キャストを**しなければならないか**という質問なら、「警告が出ないので、**しなくて良い**」と答えます。
33
+ コンパイラによって暗黙のキャストされる場合でも明示的キャストを**しなければならないか**という質問なら、「警告が出ないので、**しなくて良い**」と答えます。
34
34
  **した方が良いか**という質問なら「**どちらでも良い**のでチームのコーディング規約に従うか、個人開発の場合は好きな方を使えば良い」と答えます。
35
- **自分ならするか**という質問なら「私は**しない**」と答えます。C 言語のソースコードなので、C 言語としてコンパイルします。C++ ならもっと C++ らしい書き方をするでしょう。そしてこの質問は C 言語の質問です。
35
+ **自分ならするか**という質問なら「私は**しない**」と答えます。C 言語のソースコード、C 言語としてコンパイルします。C++ ならもっと C++ らしい書き方をするでしょう。そしてこの質問は C 言語の質問です。

2

追記

2020/09/01 01:58

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -26,4 +26,10 @@
26
26
  free(ptr);
27
27
  }
28
28
  ```
29
- `malloc` でメモリを得る場合、配列などの大きなメモリであることがしばしば考えられます。その場合、アドレス演算が必要になる可能性が高いため、それなりの型にキャストが必要なことが多いでしょう。逆に演算しないなら、そのポインタが示す先の型が何でもよいことを示すため、`void*` のままでも問題ないと思います。
29
+ `malloc` でメモリを得る場合、配列などの大きなメモリであることがしばしば考えられます。その場合、アドレス演算が必要になる可能性が高いため、それなりの型にキャストが必要なことが多いでしょう。逆に演算しないなら、そのポインタが示す先の型が何でもよいことを示すため、`void*` のままでも問題ないと思います。
30
+
31
+ ### 追記
32
+
33
+ コンパイラによって暗黙のキャストされる場合でも明示的キャストを**しなければならないか**という質問なら、「警告が出ないので、**しなくて良い**」と答えます。
34
+ **した方が良いか**という質問なら「**どちらでも良い**のでチームのコーディング規約に従うか、個人開発の場合は好きな方を使えば良い」と答えます。
35
+ **自分ならするか**という質問なら「私は**しない**」と答えます。C 言語のソースコードなので、C 言語としてコンパイルします。C++ ならもっと C++ らしい書き方をするでしょう。そしてこの質問は C 言語の質問です。

1

修正

2020/09/01 01:53

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  int* ptr = (int*)malloc(100);
13
13
  ```
14
14
 
15
- 次のようにポインタ演算する場合、キャストは必要不可欠です。次の `iptr` と `cptr` は違う値を指します。
15
+ 次のようにポインタ演算する場合、キャストは必要不可欠です。次の `iptr + 1` と `cptr + 1` は違う値を指します。
16
16
 
17
17
  ```C
18
18
  #include <stdio.h>