- 1 名前:デフォルトの名無しさん [2008/04/29(火) 09:44:57 ]
- 言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 26 pc11.2ch.net/test/read.cgi/tech/1206196600/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 105代目 pc11.2ch.net/test/read.cgi/tech/1208268461/
- 369 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 21:57:45 ]
- >>363
Basic系から来た人だと right とかも使うんでしょw・・それは置いといて無いものは自作するってのも楽しみじゃないかいな? >>360 参考までに書いてくれると周りも参考になるとおもう。 せいぜい数行だと思うから sprintf で書いてみてよ。
- 370 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 22:12:13 ]
- >>369
360じゃないが、こうじゃないかな。 char* left(char *dst, const char *src, int count) { sprintf(dst, "%.*s", count, src); return dst; } char* mid(char *dst, const char *src, int pos, int count) { return left(dst, src+pos, count); }
- 371 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:40:11 ]
- C言語用でお勧めのフリーコンパイラを教えてください
- 372 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:43:44 ]
- >>370
おお、%.*s ・・・しらなんだ。
- 373 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 23:47:34 ]
- >>371
・ GCC (MinGW) ・ Microsoft Visual C++ Express Edition 2008 好きなの選べ
- 374 名前:デフォルトの名無しさん [2008/05/06(火) 00:05:01 ]
- >>373
その2つの違いがまったくわかりません… それとMSの方はC++となってますがC言語にも対応してるんですか??
- 375 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:08:44 ]
- おまえは紹介されたコンパイラについてちゃんと調べたのか?
- 376 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:09:31 ]
- >>374
MSのコンパイラでもCのコンパイルはできます。但し、99年の規格にさえ準拠していないので注意が必要です。 gccは、Cコンパイラではなくコンパイラコレクションです。勿論、CもC++もコンパイルできます。 まぁ、MinGWにしろCygwinにしろ、環境に対する知識が必要にはなります。
- 377 名前:デフォルトの名無しさん [2008/05/06(火) 00:24:49 ]
- fputc( )の使い方の説明で
int fputc(int 文字、FILE *ストリーム); fputc( )関数は、「文字」の下位バイトを、「ストリーム」に結び付けられているファイルにunsigned char型の値として書き込みます。 とあるんですが、上位バイトはどうなるんですか?
- 378 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:25:59 ]
- 捨てられる
- 379 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:26:49 ]
- ttp://www.bohyoh.com/CandCPP/C/Library/fputc.html
- 380 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 08:01:36 ]
- vistaで動くコンパイラだったら何がいい?
やっぱりbcc、gcc辺りかな
- 381 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 09:42:29 ]
- VC++ 2008 Express Edition
- 382 名前:デフォルトの名無しさん [2008/05/06(火) 09:53:56 ]
- uint16 とか uint8 とかは int とどう違うのですか?
使い方を教えてください。
- 383 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 09:54:04 ]
- Express Editionとgccの好きな方
- 384 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 09:56:25 ]
- uint16_t や uint8_t なら標準(C99)で用意されているが
uint16 や uint8 は標準では用意されていない。
- 385 名前:382 [2008/05/06(火) 09:59:52 ]
- >>384
もう少し詳しくお願いします。
- 386 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 10:11:53 ]
- >>385
標準で用意されてない以上、 ヘッダファイル内にある定義を見てくださいとしか言いようが無い。
- 387 名前:382 [2008/05/06(火) 10:22:11 ]
- >>386
ということは・・・ uint16 uint8 はwindows.hとかでも定義されてる分ではなく、 自分の使っているライブラリかなにかで定義されているということですね。 わかりました。 調べてみます。
- 388 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 10:24:30 ]
- >>387
windows.hにあるかもしれませんが、そこにあったとしても標準とは言えません。 そもそも、あなたがWindowsを使っているのかどうか誰にもわかりませんから。
- 389 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 10:25:09 ]
- 処理系独自に定義されてるかもしれないが、
どの処理系使ってるかも知らんし、 結局自分で調べてくれ、というこった。
- 390 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 13:51:05 ]
- struct histgram{
int x; int y[100]; }; void one(struct histgram hist); void two(struct histgram hist); int main (void){ struct histgram hist; int z; hist.x = 0; for(z=0;z<100;z++){ hist.y[z]=0; } printf("before***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]); one(hist); printf("after***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]); for(z=0;z<9999999999;z++); return 0; } void one(hist){ two(hist); void two(hist){ int z; hist.x = 1; for(z=0;z<100;z++)hist.y[z]=1; } とするとtwo(hist)でエラーが起きます。なぜでしょうか?
- 391 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 13:57:38 ]
- すいません、解決しました。
- 392 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:00:16 ]
- INT_MAX 4bites = 2147483647 < 9999999999
- 393 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:02:26 ]
- やっぱうまくいきません。
struct histgram{ int x; int y[100]; }; void one(struct histgram hist); void two(struct histgram hist); int main (void){ struct histgram hist; int z; hist.x = 0; for(z=0;z<100;z++){ hist.y[z]=0; } printf("before***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]); two(hist); printf("after***%d***%d***%d***",hist.x,hist.y[0],hist.y[50]); for(z=0;z<9999999999;z++); return 0; } void two(struct histgram *hist) { int z; hist->x = 1; for(z=0;z<100;z++){ hist->y[z]=1; } } は何がいけないのでしょうか?
- 394 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:04:25 ]
- two()は構造体のポインタを受け取る関数
main()で呼んでるtwo()に渡されてるhistは構造体そのもの あと>392
- 395 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:06:22 ]
- bites …くそorz
- 396 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:11:21 ]
- Winでコマンドプロンプトがすぐ終了するのを抑止したいなら、scanf("%*s"); がいい
- 397 名前:393 mailto:sage [2008/05/06(火) 14:11:59 ]
- www9.plala.or.jp/sgwr-t/c/sec15-4.html
ここに、393のようにかけと書いてありました… 393を書き直した正解はどうなるのでしょうか? グローバル変数を使わずに、n個上の階層から任意の変数を↓に投げて、returnすることなく 処理された任意の変数をn個、n-1個上の階層で使用したいのですが
- 398 名前:393 mailto:sage [2008/05/06(火) 14:12:39 ]
- >396
ありがとうございます。使ってみます。
- 399 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:17:24 ]
- #define ZETTAI(x) (x < 0) ? -(x) : x
int x; x = ZETTAI(-9 - 50) + 5; これでxの中身が59になってしまうのですが、何故でしょうか? -59をZETTAIで59にした後、5を加算しているはずなのですが
- 400 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:17:47 ]
- >>.397
そこの二つ目のの「seito2」は構造体の配列名。配列名は大抵の場合すぐポインタに成り下がるので、 ポインタを引数としてとるseidesp2()にそのまま渡すことができる。 >>393 の場合histは構造体の単体だから、two(&hist) として呼び出さなければならない。 >グローバル変数を使わずに、n個上の階層から任意の変数を↓に投げて、returnすることなく >処理された任意の変数をn個、n-1個上の階層で使用したいのですが 言ってる意味がよくわからないが、1つの構造体のデータを再帰的に処理したいのなら構造体のポインタを渡す。
- 401 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:21:07 ]
- コンパイラのエラーメッセージをちゃんと読め。
プロトタイプ宣言と定義が噛み合っていないぞ。 void two(struct histgram hist); void two(struct histgram *hist)...
- 402 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:23:09 ]
- >>399
x = ZETTAI(-9 - 50) + 5; ↑は↓のように展開されるから。 x = (-9 - 50 < 0) ? -(-9 - 50) : -9 - 50 + 5; これはもちろん x = (-59 < 0) ? 59 : -54; と解釈されて、xには59が代入される。 マクロZETTAIの正しい宣言は下のようになる。 #define ZETTAI(x) ((x < 0) ? -(x) : x) もちろん自作などせずにライブラリ関数を使うことが望ましい。
- 403 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:23:31 ]
- >>399
#define ZETTAI(x) (x < 0) ? -(x) : x を #define ZETTAI(x) (((x) < 0) ? -(x) : (x)) にしておてきなさい。
- 404 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:30:39 ]
- >>402-403
上手くいきました ありがとうございます ですが、 >x = (-9 - 50 < 0) ? -(-9 - 50) : -9 - 50 + 5; 同じxなのに何故一番右のxだけに+5がくっつくのですか?
- 405 名前:393 mailto:sage [2008/05/06(火) 14:30:43 ]
- すいません、結構理解に手こずってます。
配列でなく、実体を受け渡しする場合は、 struct histgram{ int x; int y[100]; }; void one(struct histgram hist); void two(struct histgram *hist); int main (void){ struct histgram hist; int z; hist.x = 0; printf("before***%d***%d***%d***",hist.x); one(&hist); printf("before***%s***%s***%s***",hist.x,hist.y[0],hist.y[50]); return 0; } void one(struct histgram hist){ two(&hist); } void two(struct histgram *hist){ int z; hist->x = 1; } だと思ったのですが、error C2440: '関数' : 'histgram *__w64 ' から 'histgram' に変換できません。 というエラーが出てしまいました。
- 406 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:36:01 ]
- >>404
元のx=の式の一番右の+5がそのまま残っているだけ。
- 407 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:36:58 ]
- >>405
構造体をそのまま渡したいのであれば、アンパサンドをつけてはいけません。
- 408 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:40:42 ]
- >>406
つまり #define ZETTAI(x) (x < 0) ? -(x) : x を #define ZETTAI(x) ((x < 0) ? -(x) : x) に変えると x = (-9 - 50 < 0) ? -(-9 - 50) : -9 - 50 + 5; が x = ((-9 - 50 < 0) ? -(-9 - 50) : -9 - 50) + 5; になるということですね? #define ZETTAI(x) (((x) < 0) ? -(x) : (x)) だと x = (((-9 - 50) < 0) ? -(-9 - 50) : (-9 - 50)) + 5; ですね! 理解できました 丁寧にありがとうございました
- 409 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:40:56 ]
- まぁ、あんなサイトを見ているようじゃいつまでたっても理解できないわな。
- 410 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:29:22 ]
- いいから黙ってstdlib.h::abs()を使え
- 411 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:49:43 ]
- やっぱ自作するより、ライブラリ探したほうがいいのかな
- 412 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:56:26 ]
- absはintだから・・・
- 413 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 16:56:59 ]
- そりゃそうだが基本的なパーツの使い方を勉強してる初心者にそれは野暮な突込みだ。
- 414 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:00:03 ]
- >>399
悪いことはいわん。inline 使え。 #define は C言語ではない・・マクロは副作用があるからうっかり a++ なんて記述したら・・判るでしょ?
- 415 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:03:58 ]
- inline は C99 からだから
- 416 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 22:56:05 ]
- >>415
そ、そんなこといいだしたら・・・今から始めるなら新しいツール使おうよって Linux も *BSD も Darwin も普通にクリアしてるし。Windows は今一つ判らないけどまさかそうじゃないの?
- 417 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:00:59 ]
- VC++ は C89 だ
- 418 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:03:14 ]
- まぁ、最適化を当てにして関数にしておけってのはありだがな。
- 419 名前:デフォルトの名無しさん [2008/05/07(水) 08:24:58 ]
- すみません質問させてください。
入門書見て書いてるんですが #include <stdio.h> int astoi(const char s[]) { int i; int number = 0; for(i = 0; s[i] >= '0' && s[i] <= '9'; i++) number = 10 * number + (s[i] - '0'); return(number); } int main(void) { char x[]= "1234"; printf("%d", astoi(x)); return(0); } という文字型を数値に変えるプログラムで、 number = 10 * number + (s[i] - '0'); のところで (s[i] - '0') とあるんですがこれはどういう意味なんでしょうか? この部分を消してみると、変な結果になることは確認したのですが・・・すみません教えてください。
- 420 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 09:07:44 ]
- >>419
文字を数値へ変換してる asciiコードとかがポイント
- 421 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 11:06:21 ]
- 誰か>>414の
>#define は C言語ではない の意味を説明してくれないか?
- 422 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 11:12:54 ]
- >>421
プリプロセッサの範疇だと言うことだろ。
- 423 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 12:12:00 ]
- >>419
s[i]というのは文字コードが格納されている '0'というのも、数値の0ではなくて文字0の文字コードが格納されている '1'は'0'より文字コードが一つ大きいんだ つまり'1'から'0'を引けば数値の1が返るという仕組み
- 424 名前:デフォルトの名無しさん [2008/05/07(水) 13:12:40 ]
- >>419
ASCIIコード表をみると423さんの言ってることがよりわかりやすい思うよ! ASCIIのコード表はググってもあるだろうし、参考書にも載ってると思う。
- 425 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 13:49:07 ]
- コンパイラが扱う範疇ではないがC言語の範疇には入るんじゃまいか?
- 426 名前:419 mailto:sage [2008/05/07(水) 14:49:58 ]
- asciiコード!そういう仕組みなんですか・・・僕友達いないんで、ここで聞かなければ絶対わかりませんでした。
レスしてくれたみなさん、ありがとうございました!
- 427 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 15:49:27 ]
- プリプロセッサも、C標準に規定されている訳だし、
C言語の一部と考えてもいいんじゃないかな。 プリプロセッサがなきゃコメントすら書けん
- 428 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 15:50:27 ]
- >>426
せめてGoogleくらいは味方にしておこう。
- 429 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 16:00:13 ]
- プリプロセッサの問題点はC言語の一部かどうかじゃなくて
コンパイラと完全に独立しているところ
- 430 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 16:11:51 ]
- 問題点ではないだろ
- 431 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 16:13:36 ]
- 問題でしょ。デバッグしにくくなるし、型チェックなども甘くなるし。
- 432 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 19:53:41 ]
- プリプロセッサ部がCと強く結びついてるからなんだけどマクロの多用はどうかという一意見だす。
#include に変わるものは Cコンパイラに用意されてないし #ifdef のような部分も(あまり好きでないけど)うまく使うといろんな環境に対応したソースをまとめることができる・・ ただ #define で色々マクロ組むのはどうかな。 美しく無いばかりか副作用とバグを引き起こす危険な匂いすらある。置換されて結果コンパイラに渡るけど置換元がどうだったかをコンパイラは知らない・・いろんな落とし穴になる。普通に関数に書くのがいいと思う。 #define CONSTANT_VAL 50 ではな const int CONSTANT_VAL = 50; こう書けば char a = CONSTANT_VAL; とした時に警告があるし(アホなことした)と直ぐに気付くわけです。
- 433 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:00:28 ]
- それは別に警告出ないと思う。
マクロは使わなくていいなら使わない方がいいってのは賛成だが、 C++ に比べて C はマクロを使わざるを得ない状況が多いのは確かだな。
- 434 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:01:59 ]
- プリプロセッサディレクティブを勉強して間もない俺とするとすごい便利だと思うんだけど・・・
引数の型気にしなくてもいいマクロとか素敵じゃない?
- 435 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:03:47 ]
- マクロはどう展開されてどう実行されるのかを理解して無いと
バグを生むことがあるってのがアレなんだろうね
- 436 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:10:13 ]
- そんなとうにされつくしてる議論してんなよ・・・・・・・・
- 437 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:14:03 ]
- >>436
入門篇って書いてあるし、議論すればえ〜ねん
- 438 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:16:43 ]
- >>433
私はこのレベルの警告を出すようにしてる。 >>434 そう、ただ型を気にしなくて言いというのは有る意味危険な感覚だと。 #defin abs(x) (x) < 0 ? -(x) : (x) とすれば int, long, double いずれも行けるけど a = -3; k = abs(a++); 結果は悲惨になるけど気付きにくいでしょ? これは関数でなくマクロなんだと意識しなければいけない。何かスマートでないよね。
- 439 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:19:39 ]
- C++ だとそれを何とかするために関数テンプレートが導入されたが、
C だとやっぱどうしてもマクロになっちゃうんだよなあ。
- 440 名前:434 mailto:sage [2008/05/07(水) 20:24:50 ]
- >>438
マクロの怖さを頭ではなく心で理解したわ
- 441 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:26:02 ]
- ABSにすれば解決
- 442 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:52:15 ]
- 馬鹿が使えば包丁も自動車も凶器になる。
- 443 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:45:43 ]
- >>435
それを言ったら無知と無理解はなんだってバグのもとだろ
- 444 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 21:51:07 ]
- 所詮人間一人なんてちっぽけな存在さ。自分一人なんて
この世の60億分の1に過ぎない存在。万能、全知全能、 絶対権力者の人間なんて存在しない。 人間なんて脆い生き物だ。打ち所が悪ければすぐに死んでしまう。 そんなもん。だから、気ぃ張るなや、適当に生きろ。 どうせお前が強がっても、地球の運命までは変えられないから。 せいぜい、政府与党に不満を持って、反対票を民主党に入れるくらいしかぁ 出来んやろ?なっ?俺はずっと共産党に投票してたけどな。
- 445 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 22:09:35 ]
- マクロを使うと一見上級者のようでかっこいいんだけどね
地道に関数でということかな
- 446 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 22:12:57 ]
- ふっ、例えポルシェやBMWを運転していようが、軽自動車を運転していようが
同じ道路交通法が適用されている道で守るべきルールは同じさ。 それよりも、ドライバーの運転技術はいかがなものか?他に、 アクセルペダルを思いっきり踏み込めば、エンジンの性能が良い車の方が 加速性は良いが、燃費はかなり悪い。見た目じゃないぜ、人間は。
- 447 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 22:15:20 ]
- ええいお前のたとえは分かりにくい
- 448 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 22:35:14 ]
- linuxのコンソール上でカーソルの処理を行いたいのですが、
カーソルの処理には何を使ったらいいのでしょうか? ncursesはできれば使いたくないです。 ttp://oshiete1.goo.ne.jp/qa3121681.html の方法だとカーソルキー押す度に"[b"などと出力されてしまいます。 よろしくお願いします。
- 449 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:12:49 ]
- >434
型を気にしないプログラムがどうなるのか?コンパイラが事前に警告してくれるのはありがたいと思わないと。
- 450 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:21:56 ]
- >>434
昔な、変数を宣言しなくても使えるBASICてのがあってな、綴りのミスを目で探したよ。・ 昔な、プロトタイプ宣言のないCコンパイラがあってな、引数の間違いを目で探したよ。
- 451 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:23:27 ]
- FORTRANなら普通の事です
- 452 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:25:14 ]
- >>445
マクロ使っても全然上級者には見えないから安心して関数を使おう
- 453 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:28:26 ]
- 可読性、保守性の高いソースを書く人のほうが上級者に見える。
まあマクロはその手段の一つなんだけれども。
- 454 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:31:13 ]
- 浮動小数点の定数って定義できるんだっけ?
C++でも未だにマクロ使ってるんだけど
- 455 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:35:27 ]
- 別に定数を定義することくらいはできるけど。
ただ、初期化順でハマることはあるかもしれないね。
- 456 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:37:42 ]
- voidポインタの参照先はビットシフトできないのかな?
- 457 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:40:54 ]
- >>456
void*をint*にキャストしてシフトすれば?
- 458 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:43:20 ]
- >>456
何ビット幅でシフトしたいかをコンパイラが判断できない。必要な幅の型のポインタにキャストする必要がある。
- 459 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:57:36 ]
- キャストしたらできた!
これって任意のバイト数を指定することはできないのかな? mallocで指定しても駄目だったし無理か・・・
- 460 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 23:59:21 ]
- >>459
> これって任意のバイト数を指定することはできないのかな? 意味不明
- 461 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:16:42 ]
- void*の参照先を任意のビット幅としてビットシフトしたいんです
- 462 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:18:04 ]
- 自分でそういうプログラム書け。
- 463 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:26:54 ]
- >>461
それ、何のデータ?
- 464 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:28:38 ]
- ビットシフトすりゃいいじゃん。
- 465 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:35:13 ]
- >>463
void*の参照先ですか? intとかcharとか不定です void*とsize_tを仮引数にして、型に関係なくビット表示するような関数を作りたいんですが・・・
- 466 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:38:59 ]
- とりあえずバイトオーダをはっきりしておかないとな。
リトルエンディアン環境の場合、数十バイトだろうが その全体でリトルエンディアンになることを仮定していいのか、 それとも4バイト単位でリトルエンディアンになることを仮定するのか。
- 467 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:44:48 ]
- >>465
char*にキャストして一バイトごと表示しろよ
- 468 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:51:12 ]
- >>466
リトルエンディアンだとおもう よくわからないから続きはwebで勉強してくるわ >>467 おk試してみる
- 469 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 01:05:04 ]
- >>461
できない ビットシフトは組み込み整数型(のビット長)に対してしか保証されていない どうしてもやりたいなら自力でそのような関数を作るしかない
|

|