検索結果 16 件

by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++のvoidポインタの明示的なキャストについて
返信数: 22
閲覧数: 17400

Re: C++のvoidポインタの明示的なキャストについて

C++で、ポインタを別の型のポインタに代入する際に明示的にキャストをしなければコンパイルエラーが出るのは、
それでポインタ値が変わることを防げるからではなく、
「代入に伴って、ポインタ値が変わる可能性がある」ということを処理系やプログラムを読む人に伝えるべきだからということですね!

Mathさん、伊藤詩織さん、usaoさん
ありがとうございました!
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++のvoidポインタの明示的なキャストについて
返信数: 22
閲覧数: 17400

Re: C++のvoidポインタの明示的なキャストについて

Mathさん

すいません!コードをcに指定する事を忘れていました
僕の環境でもpcとpdは同じになったのですが、
コラムに実行結果一例としてpc=9 pd=16とあったので、変わってしまうことがあると理解しました
僕の環境と、想定している環境が違っているからpcとpdが同じになったのだと思います
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++のvoidポインタの明示的なキャストについて
返信数: 22
閲覧数: 17400

Re: C++のvoidポインタの明示的なキャストについて

Mathさん

確認しましたが間違えていませんでした
cコンパイラでコンパイルすると警告は出ますがコンパイルは通りましたが、
c++コンパイラでコンパイルすると画像と同じようなエラーが出ました

void*型との関連は、
このプログラムでは、char*型を例にとって説明しましたが、void*型は1バイトの境界調整をもち、任意のアドレスを指すことができるという点ではchar*型と共通です
と説明されています
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++のvoidポインタの明示的なキャストについて
返信数: 22
閲覧数: 17400

Re: C++のvoidポインタの明示的なキャストについて

usaoさん、伊藤詩織さん その本の最後に、 C言語では明示的なキャストが必須ではないとは言え、ポインタの値を、異なるポインタ型に代入する際は「代入に伴って、ポインタ値が変わる可能性がある」ということを、処理系やプログラムを読む人に伝えるべきです。そういう意味では、キャストが必須ではないC言語でも明示的なキャストを行うほうが好ましいといえます と書いてあったので、C++には他の理由があると思ったのですが、これを"書かなければいけない"と決めたというだけの話なのでしょうか・・・ Mathさん 書名は 新・明解C言語中級編 です。 このコラムにはポインタを他の型へのポインタに変換すると値が変わる可...
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++のvoidポインタの明示的なキャストについて
返信数: 22
閲覧数: 17400

Re: C++のvoidポインタの明示的なキャストについて

Mathさん

メモリを確保してvoid*型にアドレスを入れてから、キャストして確保したメモリの位置を変更するのではなくて
初めからキャストされた型としてメモリを確保するということですか?
コンパイル時点でキャストが分かるから上のようなことをするのは手間がかかるだけなのかな・・・
そうだとしても、暗黙的なキャストでも明示的なキャストでも行われるのではないですか?
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++のvoidポインタの明示的なキャストについて
返信数: 22
閲覧数: 17400

Re: C++のvoidポインタの明示的なキャストについて

Mathさん

キャストをすれば正しいアライメントになる とは、メモリの配置を変えるということですか?
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: C++のvoidポインタの明示的なキャストについて
返信数: 22
閲覧数: 17400

C++のvoidポインタの明示的なキャストについて

現在C言語を勉強していて、使用している本のコラムに、 C++では、voidへのポインタを、別の型へのポインタに代入する際には、キャストが必須です。 とあり、その理由を境界調整で説明しています。 そのコラムの最後の方に ポインタを他の型へのポインタに型変換するということは、その値までもが変わる可能性のある危険な行為です。 そのため、C++では、voidへのポインタを別の型へのポインタに代入する局面では、明示的なキャストが必須となっているのです。 と書いてあります。 境界調整というものでポインタの値が勝手に変わってしまうことがあることは理解したのですが、それが明示的なキャストをすることでどのように...
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: makeのエラー
返信数: 1
閲覧数: 1726

Re: makeのエラー

setupで、カタログにあるX11をすべてインストールするとエラーが出なくなりました。
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: makeのエラー
返信数: 1
閲覧数: 1726

makeのエラー

CygwinにAllegroを入れようと色々と試しているところです。 現在zipファイルをダウンロード、解凍して、READMEファイルを参考にcmakeを実行し終えました。次にmakeを実行してAllegroを構築したいのですが、以下のエラーが出てしまいます In file included from /usr/lib/allegro/src/opengl/extensions.c:42:0: /usr/include/w32api/GL/glu.h:68:79: エラー: expected ‘)’ before ‘*’ token void APIENTRY gluQuadricCallba...
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: CygwinにAllegroを導入?
返信数: 3
閲覧数: 2796

Re: CygwinにAllegroを導入?

回答ありがとうございます。
Cygwinのgccでは出来ないのでしょうか?
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: CygwinにAllegroを導入?
返信数: 3
閲覧数: 2796

CygwinにAllegroを導入?

CygwinでAllegroを使い簡単なゲームを作りたいのですが、どのようにするとAllegroを使用できるのかが分からず困っています。
公式サイトへ飛んでzipファイルをダウンロードしてもどこに何を置けばいいのか、他に何が必要なのかも分かりません。
CygwinでAllegroを使うためにはどのような手順を踏む必要があるのかが知りたいです。
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: execでwebページが開けない
返信数: 5
閲覧数: 3532

Re: execでwebページが開けない

cmd /c start ではなく、cygstart を使用したらブラウザでwebページを開くことができました。
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: execでwebページが開けない
返信数: 5
閲覧数: 3532

Re: execでwebページが開けない

Unixを前提として書かれていますが、windowsの場合はCygwinを入れると良いとも書いてありました
それを使ってエラーは出ていないはずですが・・・
by ハワルド
8年前
フォーラム: C言語何でも質問掲示板
トピック: execでwebページが開けない
返信数: 5
閲覧数: 3532

execでwebページが開けない

現在ある書籍でC言語を勉強しています。 環境は、windows10にcygwinで、どちらも64bitです。 その本にexecを使って、webページを開くプログラムの一部が書いてあるのですが上手くいきません。 具体的にはそのプログラムを実行すると、表示したいwebページのURLをタイトルとしたコマンドプロンプトが起動してしまいます。 どうしてこのような事が起こるのか、どうしたらwebページを表示できるようになるのかを知りたいです。 そのコードは次の通りです。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include ...
by ハワルド
9年前
フォーラム: C言語何でも質問掲示板
トピック: C言語の後置インクリメントについて
返信数: 2
閲覧数: 2291

Re: C言語の後置インクリメントについて

解答ありがとうございました。
2007年時点ではtoupper(*p)の計算が、pが増える前に行われるか、増えない前に行われるか決定できないので未定義動作となるということで本が間違っているということが分かりました。
現在では = の右辺と左辺の評価の順番が決定していないので未定義動作となるということもわかり、解決しました。
by ハワルド
9年前
フォーラム: C言語何でも質問掲示板
トピック: C言語の後置インクリメントについて
返信数: 2
閲覧数: 2291

C言語の後置インクリメントについて

現在、2007年に出版された本を使ってC言語を学習しているのですが、本に載っているコードが本に書いてあるとおりの結果にならなかったので、原因を教えて下さい。書いてあるコードは #include <ctype.h> #include <stdio.h> int main(void) { char str[80], *p; printf("文字列を入力してください: "); gets(str); p = str; while(*p) *p++ = toupper(*p); printf("%s\n", str); return 0; } というものです。 本に書いてあるとおりに動かないのは、 wh...

詳細検索ページへ移動する