- 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/ 【このスレ住人としての心得】 わざとスレ違いあるいはごく低レベルな質問を繰り返して 流れを妨害する荒らしがいます。適当に誘導して放置してください。
- 9 名前:デフォルトの名無しさん [2008/01/24(木) 17:32:23 ]
- JISのPDFダウンロードできるじゃん
ってダウンロードしたけど、全ページ黒塗りだった。 なんとかしてくんろ
- 10 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 18:53:16 ]
- いいスレタイだな。
これなら流石にスレチは減るだろう。
- 11 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:24:43 ]
- 先生, 質問!
はじめて, MS の処理系で業務に使うものを作る事になりそうなんだけど 規格準拠してる? 最低限でも, stdint.h とか stddef.h が規格準拠しててほしいわけだが…
- 12 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:27:39 ]
- >>11
VSスレ辺りで聞いてみてはどうか。
- 13 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:33:42 ]
- >>12 そもそもVSスレって何???
まじで, Windows ほとんど触った事ねぇし 俺的には Windows == ユーザが要求してくる使いたくもない MS-word を書く あるいはゲームをやるための環境なんだが
- 14 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:37:24 ]
- >>13
VisualStudio
- 15 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 00:41:47 ]
- 前スレではMSのコンパイラは過去に準拠してなかった部分があるらしいという話は出ていた
現在ではざっと調べた限りでは準拠してると謳ってるようなので 問題起こったらMSのせい、でいいと思うが
- 16 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 00:55:40 ]
- C89では//コメントとかアウトだよね。
- 17 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 00:56:05 ]
- フリー、シェア含めて今一番ガチC言語の規格に沿ったコンパイラって何だろ?
C99用のコンパイラになるのか?
- 18 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 01:38:48 ]
- お前ら落ち着けよ
いまどきWindowsでC++じゃなくC? ありえん
- 19 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 01:46:04 ]
- >>18
ゲイツに侵されすぎwww
- 20 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 04:17:13 ]
- >>9
暗号化PDFを読めるリーダーを使え
- 21 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 20:56:36 ]
- エスパーしてみると、最新のFoxitReaderには黒塗りになるバグがある。
- 22 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 01:04:53 ]
- >>17
gcc -Wall -ansi -pedantic-errors かな?C89だけど
- 23 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:30:20 ]
- C99激しくいらない
- 24 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:40:56 ]
- C++0x に導入されるような機能は欲しい。
C++0x に導入されないような機能はいらない。
- 25 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 07:17:37 ]
- C99って誰が望んだんだ?
- 26 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 10:21:02 ]
- C++あがりが望んだんじゃないの
- 27 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 11:08:58 ]
- 誰もが望んでいたものもそれなりに入ったような気もするが?
- 28 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:35:15 ]
- 望んでいたものの半分以上はC++にあるものの劣化版だったから困る
- 29 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 18:45:42 ]
- C99は糞
K&Rの第3版が出ないのが何よりの証拠
- 30 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:40:03 ]
- 望んでいたというか有名どころの拡張を追認しただけというか
- 31 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:44:39 ]
- C++ との互換性が無いのは致命的だよな。
C で作った関数の中には C++ から呼べない物も・・・なんて嫌だわ。
- 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 と同じ動作って決められてた。
|

|