- 1 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 14:52:45 ]
- このスレは標準C規格や規格に合致した移植性の高い記法・技法に関するスレです。
C言語初心者の初歩的な質問、GUIなどの標準Cではできない事の質問、 ソース丸投げ、宿題、書籍 などは専門の別スレッド↓があるのでそちらへ。 C言語なら俺に聞け(入門篇) Part 24 pc11.2ch.net/test/read.cgi/tech/1201083176/ 【初心者歓迎】C/C++室 Ver.47【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1200464091/ C/C++の宿題を片付けます 103代目 pc11.2ch.net/test/read.cgi/tech/1200318925/ 【書き込む前に】 ・まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。 ・質問する前には最低限検索を。 ・エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。 【参考文献】 C FAQ 日本語訳 www.kouno.jp/home/c_faq/ Cプログラマ必読 ・プログラミング言語C(通称 K&R) www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244 【このスレのログ】 前スレ:pc11.2ch.net/test/read.cgi/tech/1190261457/ 他の過去ログ:nssearch.hp.infoseek.co.jp/clang/ 【このスレ住人としての心得】 わざとスレ違いあるいはごく低レベルな質問を繰り返して 流れを妨害する荒らしがいます。適当に誘導して放置してください。
- 32 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:00:41 ]
- >>22
-std=c99もつけてあげて
- 33 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:12:35 ]
- GCCはC99に準拠していない。
- 34 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:34:28 ]
- >>33
> GCCはC99に準拠していない。 具体的に。
- 35 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:39:25 ]
- ググレカス
- 36 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:01:18 ]
- 準拠状況が書いてあるとこがあったな。
完全ではなかったのは覚えてる。
- 37 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 05:18:37 ]
- つーかC99完全準拠の環境なんてあるのか?現状
- 38 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:28:23 ]
- Comeau の準拠状況ってどうなんだろうか?
- 39 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 07:30:35 ]
- >>37
Intel C++は100%C99標準準拠だよ
- 40 名前:デフォルトの名無しさん [2008/01/31(木) 13:02:51 ]
- C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
- 41 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:03:31 ]
- >>40
スレタイ読め
- 42 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:26:45 ]
- >>41
ビットシフトはなんの役に立つのでしょうか でぐぐれ
- 43 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:47:50 ]
- >>40 ビット単位でシフトしたい時に役に立つ
- 44 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 15:53:26 ]
- >>42
やっぱりこれテンプレにいれとかないとダメだな
- 45 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 20:16:45 ]
- ビットシフトはなんの役に立つのでしょうかでググれ に一致する日本語のページ 約 766 件
- 46 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 21:02:34 ]
- >>34
gcc.gnu.org/c99status.html
- 47 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:48:40 ]
- ふと思ったんだが…
各種処理系のヘッダで NULL が以下のように宣言されているのはなぜ? #if !defined(__cplusplus) #define NULL ((void *)0) #else #if defined(__LP64__) #define NULL (0L) #else #define NULL 0 #endif /* __LP64__ */ #endif /* !__cplusplus */ つか, C でも (void *)にキャストする必要はないと思われるんだが, (void*)にキャストしておくとなんかご利益あったりする?
- 48 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:55:00 ]
- int p = NULL; がエラーになる。
- 49 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:58:48 ]
- NULLを'\0'と間違えて使うような馬鹿を摘発したりとか、型チェックの面でご利益がある。
- 50 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:01:20 ]
- #if defined(__LP64__)
#define NULL (0L) これ処理系依存っぽくて鬱陶しいな
- 51 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:03:41 ]
- 処理系自身がそう定義してるのなら
その処理系で大丈夫っつーことだから問題はないだろう
- 52 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:04:07 ]
- >>50
printf の可変長引数対策じゃないか?
- 53 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:06:36 ]
- つーかそういう処理系依存を覆い隠すためにヘッダがあるわけで
ヘッダの定義をのぞき見てあれこれ言っても このスレ的に意味があるのか疑わしい
- 54 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:06:54 ]
- 処理系定義であるポインタのサイズを、NULLの定義の形を借りて記述しているんだよ
- 55 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:16:17 ]
- ポインタのサイズが型ごとに異なったりする処理系もあるんじゃなかった?
- 56 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:58:41 ]
- MS-DOSのミディアムモデルやコンパクトモデルが典型的だな
- 57 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:18:16 ]
- 型ごとにというかデータのポインタとコードのポインタのサイズが違う事はあるな
関数ポインタと通常のポインタに互換性がないのはそのため
- 58 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 00:51:14 ]
- pimpl パターンとか見てる分には
データ同士だとポインタのサイズはかわらないはずだとは思ってるが、 規格のどこに書いてあるかとかは知らんなあ。
- 59 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 01:46:52 ]
- pimplのどこに異種ポインタの変換が介在するのですかね。
- 60 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:53:14 ]
- スレ違い
- 61 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:57:46 ]
- 変換は関係ないだろう。
構造体/クラスの中身が分からなくても ポインタのサイズが決まるようじゃないと pimpl パターンは使えないという話だ。 ただ、組み込み型との間でもサイズが等しいかどうかは分からんね。 これだけだと。
- 62 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 05:15:44 ]
- 構造体/クラスの宣言(通常はヘッダファイル)があれば型が分かるから
中身見なくてもポインタのサイズは決まると思う
- 63 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 05:38:48 ]
- ポインタのサイズって32bitCPUなら4バイト固定だと思ってた
- 64 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:02:56 ]
- Intel + Windows で 16-bit アプリケーションなら 32-bit CPU でも
2 バイトのポインタが使われたりする が 32-bit アプリケーションならポインタは 4 バイト固定 要するに CPU 依存でなくコンパイラ依存 void* と int* でサイズが違う処理系があるらしいが見てみたいな
- 65 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:06:04 ]
- void* (char*) と int* でアドレッシングが違う処理系があると聞いたが、
それの間違いではなくて?
- 66 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:11:12 ]
- 規格ではポインタのサイズはどこまで規定されている?
構造体型を指すポインタのサイズはすべて等しい?
- 67 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 16:20:19 ]
- 処理系依存ってことはつまり、ユーザープログラムより下にあるコンパイラからアーキテクチャから
すべてひっくるめて依存。データ型についてうるさいアーキテクチャもあるかもしれない。 (タグビットでデータ型を指定するような) 仕様では、6.3.2.3 で、任意のデータ型へのポインタから void * へ、 void * にしたものから元の型へ、という変換は保証されることになっている。 (関数へのポインタに関しては規定がない) 整数と任意のポインタ(関数へのポインタ含む)との変換は、処理系定義。 ポインタを入れることができる整数の型として intptr_t(uintptr_t) が 7.18.1.4 に。
- 68 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:46:07 ]
- >>66
> 構造体型を指すポインタのサイズはすべて等しい? 少なくとも、これは処理系によらず保証されている。
- 69 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 17:58:44 ]
- 同サイズの整数型限定だっけ? >整数/ポインタ キャスト
intptr_t はどのポインタと等しいサイズの整数型なんだろう。 それとも、全てのポインタ型のサイズが等しいと保証されているのか?
- 70 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:00:06 ]
- intptr_tはポインタを格納できればいいのであって、
ポインタと同じ大きさである必要は無いだろう。
- 71 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:04:23 ]
- >>69-70
(u)intptr_tに変換できるのはvoid*だけ。 int i = 42; intptr_t p = (void*)&i; int j = *(int*)(void*)p;
- 72 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:39:20 ]
- そしてobjectを指すポインタであればどれでも、voidへのポインタに変換後、元に戻せる。
つまり、voidへのポインタのサイズは少なくとも関数ポインタ以外のすべてのポインタ以上。
- 73 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 20:06:00 ]
- >>71
70に対する反論になっていない
- 74 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 20:28:45 ]
- 反論したつもりはないよ。
- 75 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 20:54:06 ]
- なるほど。
基本型同士、あるいは基本型と構造体型との間で ポインタのサイズが違ってても良さそうではあるな。
- 76 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:16:41 ]
- int *とunsigned int*みたいな、指示先型の符号の有無だけが異なる場合、ポインタのサイズは等しい。
- 77 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:18:39 ]
- >>74
じゃあ何で一見関係ありそうで全然関係ない話をしたの?
- 78 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:33:08 ]
- >>77
>>69
- 79 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:35:13 ]
- >>77
何でアンカー間違えただけでそんなに責められないといけないんですか><
- 80 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 19:59:51 ]
- 先に「間違えた」と言わないから。
- 81 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 21:58:01 ]
- >>79
条件の後出しはやめろと。
- 82 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:19:53 ]
- いじめが好きな人達が集まるスレ
- 83 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:56:02 ]
- といいつつ自分の非を棚に挙る人が責められるスレ
- 84 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:48:59 ]
- >>82-83
それはどのスレでもそう
- 85 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 15:22:26 ]
- ふと気になったんだけど
>50の、0Lをかっこでくくる必要あるの?
- 86 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:02:18 ]
- >>85
#include <stdio.h> #define HOGE 0L #define CAT2(a, b) a ## b #define CAT1(a, b) CAT2(a, b) #define CAT(a, b) CAT1(a, b) #define STR2(a) # a #define STR1(a) STR2(a) #define STR(a) STR1(a) int main() { long double a = CAT(0., HOGE); printf("%Lf\n", a); printf("%s\n", STR(CAT(0., HOGE))); return 0; }
- 87 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:43:53 ]
- マクロNULLをトークン連結演算子に投げ込むような状況があるとは思えんが
- 88 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:45:36 ]
- そういう問題じゃない
- 89 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:50:11 ]
- あってもこまらないし
あればもしかしたら役に立つかもしれないから 一般的にはある必要はない
- 90 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:51:38 ]
- あってもこまらないし
あればもしかしたら役に立つかもしれないから とりあえずつけておけ
- 91 名前:デフォルトの名無しさん [2008/02/19(火) 23:04:55 ]
- 超カメレスなんだが >>64
ワードアドレッシングのマシンの場合, ワードアドレス + オフセット ここで, ワードアドレス == レジスタサイズ が, バイトポインタになり得ますが…
- 92 名前:デフォルトの名無しさん [2008/02/20(水) 14:01:41 ]
- 可変引数型の関数にいくつ引数が入力されたか、
数える方法はありますか?
- 93 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 14:09:30 ]
- 標準では、ない
- 94 名前:92 [2008/02/20(水) 14:44:34 ]
- >93
サンクス
- 95 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:25:37 ]
- そう言えばさぁ...
左辺がキャストできなくなったのは C89 からで ok ? int c; (char)c = 1; みらいやつ
- 96 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:33:43 ]
- *(char *)&c = 1;ならおk
ただしcharは必ず整合するけどもっと大きな型だとむやみなキャストは 境界に整合しなくなるおそれがある
- 97 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 07:32:26 ]
- それはキャストはしてるけど、
キャストした後の値に直接代入してる訳じゃないよね。
- 98 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:23:07 ]
- >>95
というかそれが出来た時期なんかあったのか どういう処理になるの?
- 99 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:30:53 ]
- >>95
少なくとも現在より前に制定された規格で、 (type)variable を左辺値として認めたものは一つもない。 たしか、gcc, msvcともにラフなモードではコンパイルとおるけど、 結果が違うようになったと思う。
- 100 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:35:11 ]
- ああ、C++で(type)が参照型なのは除く。
- 101 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:36:16 ]
- ちなみにC++だと(char&)c = 1って書ける。
- 102 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 19:10:21 ]
- >>98
*(char*)c = 1; と同じになった気がする。 K&R C あたりではできると聞いた事があるような気がするが、 詳しい事は俺は知らん。
- 103 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 20:01:18 ]
- K&Rではできた。
- 104 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:50:20 ]
- Cでは符号なし整数をビットシフトすると論理シフト、符号有り整数をビットシフトすると算術シフトになるんですか?
- 105 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:53:58 ]
- 右シフトはそのとおり。
左シフトは論理/算術の区別が無い。
- 106 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:54:59 ]
- わかりました。
早いレスありがとうございます。
- 107 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:55:53 ]
- 符号あり整数をビットシフトして算術シフトになるかどうかは
C の規格では規定されていない。 ただ、実際問題そういう実装が多いだろうね。
- 108 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:57:02 ]
- unsignedは論理シフトになる
signedが算術シフトになるかどうかは処理系依存
- 109 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:59:55 ]
- 規格見直したら、負の数を右シフトしたときは結果の値が処理系定義になるって
書いてあった。つまり、算術シフトとも論理シフトとも違う結果が得られてもおかしくない わけだ。 あと、型が signed でも値が負じゃなければ unsigned と同じ動作って決められてた。
- 110 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 03:03:49 ]
- 2の補数表現じゃない環境だと
算術シフトにならない実装になってるだろうね。
- 111 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 09:37:18 ]
- ただしどうなるかは(規格準拠の処理系なら)マニュアルに明記されていなければならない
- 112 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:29:31 ]
- 明記されていればry
- 113 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:13:23 ]
- 最近レスが無いので、ビットシフトについて質問してもいいですか?
- 114 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 00:24:28 ]
- 負の数の右シフトが算術シフトになるか論理シフトになるかは処理系依存です。
- 115 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 00:29:04 ]
- 負の数の左シフトは?
- 116 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 00:42:31 ]
- 「場合によって未定義」でいいのかな?
f4.aaa.livedoor.jp/~pointc/105/No.27873.htm のNo.27888がわかりやすく解説してくれてる。
- 117 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 02:34:20 ]
- >>116
リンク先読んだら、負の数は全部未定義としか読めない。
- 118 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 06:56:17 ]
- The behavior is undefined if the right operand is negative,
or greater than or equal to the length in bits of promoted left operand.
- 119 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 06:57:38 ]
- それはシフト数の方の話だった。
- 120 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 13:58:33 ]
- そろそろビットシフトの質問の出番ですか?
- 121 名前:デフォルトの名無しさん [2008/04/07(月) 21:51:36 ]
- C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
- 122 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 22:33:59 ]
- スレ違い
- 123 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 03:27:19 ]
- 規格上未定義になってる処理を書いたら例外吐いて止まるコンパイラきぼう
いちいち覚えるの面倒
- 124 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 10:47:47 ]
- ベンダーに言え
- 125 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 12:31:00 ]
- もしさまざまなマシンでどのように実行されるか知らなければ、
知らないということが自分を守る助けとなるかもしれ ない from K&R
- 126 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 00:45:45 ]
- 例外吐かれるより警告がうれしいな・・・
- 127 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:48:04 ]
- エラーでいいよ。
どうせ警告も0にしてるんだし。
- 128 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:05:24 ]
- 俺は信号を見ないけど車は俺をよけて通れよ!
なんて高らかに宣言しなくても・・・
- 129 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 17:31:25 ]
- エラーでも警告でもアラーとでもいいけど、
そこで止まられるのは、、ちょっとやだな。
- 130 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 17:49:13 ]
- 過疎スレ
- 131 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:07:09 ]
- 結構前に、アラーメッセージというのがあったな・・・
- 132 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:31:01 ]
- アッラーアクバル!
|

|