07/11/30 22:47:26
static struct MAP map[]={
{&ID_HOGE_,"hoge"},
...
};
500:デフォルトの名無しさん
07/11/30 22:52:31
>>499
いや、上にも書いたとおり、ID_HOGE_は公開されていなくて、
実体があるソースコードも書き換え不可なんですよ・・・。
501:デフォルトの名無しさん
07/11/30 23:23:44
今日からC言語の勉強を開始しようと思っていますが、初心者でも使いやすい
コンパイラーあれば、教えて頂けないでしょうか?
ちなみにVisual C++ 2005 Express Edition持ってます、使えますでしょうか?
502:デフォルトの名無しさん
07/11/30 23:28:12
つ『14歳からはじめるC言語わくわくゲームプログラミング教室』
URLリンク(www.amazon.co.jp)
Borland C++使ってる。
503:デフォルトの名無しさん
07/11/30 23:29:45
>>500
やりたいこと、よくわかんねけどさ。
こうじゃあかんの?
struct MAP{
const ID *id; // <ポインタに
char *name;
};
static struct MAP map[]={
{&ID_HOGE,"hoge"},
};
// 使用例?
int main()
{
printf("%x\r\n", (*map[0].id)->a);
return 0;
}
504:デフォルトの名無しさん
07/11/30 23:39:05
>>502 まだまだ軍資金がないもんで、フリーでできるものを願いします
505:デフォルトの名無しさん
07/11/30 23:42:27
最長共通部分列(LCS)問題について教えてください。
ある座標系が2つ(x1,y1),(x2,y2)が存在して、その座標系に
それぞれ10個の要素があったとします。各要素のx1,もしくはx2座標
とy1,y2座標に重複はないものとします。
要素 1 2 3 10
ex 座標系1・・・(x1,y1)={(4,3),(2,6),(5,9),,,,(10,1)}
座標系2・・・(x2,y2)={(1,5),(7,5),(9,8),,,,(3,4)}
この2つの座標系において要素間の位置関係が等しくなっている全ての要素の
のなかで一番要素数が多いものを割り出す。プログラミングは
どのように組めばいいのでしょうか?よろしく願いします。
506:デフォルトの名無しさん
07/11/30 23:48:20
>>501
>>1-2
>>505
>>1-2
507:デフォルトの名無しさん
07/12/01 01:34:09
>>498
そのやりかたではできない。
どうせmapは変更しないのだろうから、ID構造体を隠蔽してそのポインタを提供するのではなく
MAP構造体を隠蔽してそのポインタを提供する方式にするんだ。
// id.h
typedef struct{
uint32_t a;
uint8_t bc[2]
}ID;
typedef struct{
const ID *id;
const char *name;
}MAP_;
typedef const MAP_ * const MAP;
extern MAP map;
// id.c
static ID ID_HOGE_ = {0xaaaa, {0xbb, 0xcc}};
static MAP_ map_[]={
{&ID_HOGE_,"hoge"},
...
};
MAP map=map_;
これでいけるはず
508:デフォルトの名無しさん
07/12/01 02:04:09
>>507
どこがMAPを隠蔽してるんですか?
509:デフォルトの名無しさん
07/12/01 03:12:18
>507
hogeの実体部分のソースは変更不可だってんだからそれは駄目だろ
静的な初期化はあきらめて、mainの頭で初期化するか
map要素を返す関数を用意してそれが最初に呼ばれたときに初期化するかしかないな
510:デフォルトの名無しさん
07/12/01 13:01:43
/* map.h */
ID map_ID(int);
const chat * map_name(int);
/* map.c */
struct {
ID *id;
char *name;
} MAP;
static struct MAP map[]={
{&ID_HOGE,"hoge"},
...
};
ID map_ID(int n)
{
const chat * map_name(int n);
511:デフォルトの名無しさん
07/12/01 13:03:25
途中送信しちった
/* map.c */
struct {
ID *id;
char *name;
} MAP;
static struct MAP map[]={
{&ID_HOGE,"hoge"},
...
};
ID map_ID(int n)
{
return *map[n].ID;
}
const chat * map_name(int n)
{
return map[n].name;
}
これでいいんじゃ?
512:デフォルトの名無しさん
07/12/01 16:10:51
>505
もうちょい正確にやりたいことを書かないと無理だと思うんだな。
何がしたいか正確には分からないけど多分 LCS とは別物だと思う。
>重複はない
座標系1の点 { (x10, y10), ... , (x19,y19) }
座標系2の点 { (x20, y20), ... , (x29,y29) }
で、どう重複がないのよ?i ≠ j なら x1i ≠ x1j って言ってるの?
>要素間の位置関係が等しくなっている全ての要素ののなかで一番要素数が多いもの
座標系1 に対して並行および回転移動を行った際、座標系1の点と座標系2の点とが一致する数が最大となる移動時での
一致する点の組みを選び出せばいいの?
513:デフォルトの名無しさん
07/12/01 17:47:56
スレの趣旨から外れた質問は流せって
514:デフォルトの名無しさん
07/12/01 22:41:50
プリプロセッサってたいがい
#define hoge
って書いてあるけど、インデントやスペースを挟んだ
# define hoge
みたいな書き方も規格的にOKですか?
515:デフォルトの名無しさん
07/12/01 22:42:09
うん
516:デフォルトの名無しさん
07/12/01 23:16:53
字下げするときはそうすることが多いよNE
517:デフォルトの名無しさん
07/12/01 23:54:57
ありがとうございます。
自信を持ってインデントします。
518:デフォルトの名無しさん
07/12/02 01:45:27
>>511
ポインタのポインタをコンパイラ制限のために、さらにポインタに
するなど受け入れがたいため却下。
IDの比較はどうする?ポインタのポインタのポインタだから、
値を比較するには、ポインタのポインタn・・・とか、
ポインタのポインタが静的に定義されているから、
ポインタのポインタのアドレスで比較すればいいとか、
コピーするにはうんぬんとか。
ヤッテラレッカボケ!
519:デフォルトの名無しさん
07/12/02 01:52:34
可能なら、動的初期化できるC++としてコンパイルすればほぼ498のコードで通る。
これだけのためにそうするのは少々無駄遣いという気もするけど。
520:デフォルトの名無しさん
07/12/02 03:07:50
>518
IDはポインタだからID *はポインタのポインタどまりだろうが
お前はまず教科書読み直せ
521:デフォルトの名無しさん
07/12/02 03:11:31
>>520
アゲアシとってナニが楽しいのかね。そうやって
見下すことでオノレの存在価値を認識する作業を繰り返す
人生なんてオワリにしたほうがいいよ。
522:デフォルトの名無しさん
07/12/02 03:18:59
>>521
こんなところで見下されてる人生なんてオワリにした方がいいよ
523:デフォルトの名無しさん
07/12/02 03:36:44
このあいだ関数プロトタイプ使いたくないとぬかしてたボケと同じ臭いがする
524:デフォルトの名無しさん
07/12/02 10:12:37
>>518
その程度で受け入れ難いなら、まず「C言語を使う」という選択肢を捨てるべき。
C言語しか使えないならC言語の制限は受け入れるしか無いだろ。jk
525:デフォルトの名無しさん
07/12/02 10:34:24
>>524
同意。言語の制限が枷になるなら言語選択からやり直すべき。
526:デフォルトの名無しさん
07/12/02 11:21:12
Dおすすめだにょ!
527:デフォルトの名無しさん
07/12/07 12:25:18
整数型のオーバーフローについて質問です。符合無し型ではラップすると規定されていて、
符号付き型では未定義動作になると理解しました。
その場合、以下のようなコードは「ラップする」と「未定義動作」のどっちになるんでしょうか?
unsigned char c = 1;
c += INT_MAX;
期待する動作としては符号無しのルールに従ってラップした結果が c に残って
欲しいんですが、 c = c + INT_MAX の右辺の c は int (符号付き)に格上げされて
しまうので、未定義動作という解釈もできるように思います。
後者の場合、未定義動作を避けるためには明示的に
c = (unsigned int)c + INT_MAX と書く必要があることになってしまいそうですけど、
ちょっと意味不明なコードになってしまいます。
528:デフォルトの名無しさん
07/12/07 12:38:32
c += (unsigned int)INT_MAX;
529:デフォルトの名無しさん
07/12/07 21:00:23
c = (unsigned char)((unsigned int)c + INT_MAX)
無理して規格の解釈ギリギリのコード書く必要もあるまい。
530:デフォルトの名無しさん
07/12/08 09:39:13
もしかして下線1文字 _ って予約識別子ではない?
531:デフォルトの名無しさん
07/12/08 10:45:41
予約識別子は __func__ だけじゃないかな。
予約マクロにも下線二文字か下線+英字と最低二文字を想定しているっぽいし、
下線一文字は処理系で特別に解釈されるようなことはないと思う。
普通に変数名としても使えるし。
532:デフォルトの名無しさん
07/12/08 11:51:47
下線1文字 _ は
・二重下線を含む
・下線 _ で始まり英数文が続く
どちらのルールにも当てはまらない。
だから「予約識別子ではない」だろうね。
>予約識別子は __func__ だけじゃないかな。
>
>下線一文字は処理系で特別に解釈されるようなことはないと思う。
>普通に変数名としても使えるし。
たとえ予約識別子だろうと "普通に変数名として使える" よ。
"処理系で特別に解釈される" のではなく "処理系が既に使っている可能性がある" 名前。
533:デフォルトの名無しさん
07/12/08 12:06:58
何を以って普通と言うかはわからないが、未定義の動作が伴うことは"普通に変数名として使える"と言えるのか?
処理系が予約している識別子を他の予約されていない識別子と同様に扱えたとして
処理系依存としか言えない。
534:デフォルトの名無しさん
07/12/08 12:52:31
C99しか見て無いけど。
>>530
ファイルスコープは予約されてるっぽい。
>>531
マクロ名も識別子らしい。
自分から進んで規格見ないから勉強になるわぁ。
C89はシラネ。
どっかで見れないかね?
お取り寄せメンドイ。
535:デフォルトの名無しさん
07/12/08 13:17:21
>>530
_ はC89の頃から大域名前空間では予約済み。
>処理系が予約している識別子を他の予約されていない識別子と同様に扱えたとして
というか、処理系は予約識別子も予約されていない識別子も同様に扱う。
名前の上書きが問題になるのは識別子が予約されているかどうかとは別の問題。
例えば
char hoge[]="hoge";
…………
hoge[10] = '\0';
ってコードは言うまでもなく未定義で正しくないコードだが、
それでも "普通に書ける" コードではあろう。
536:デフォルトの名無しさん
07/12/08 13:19:43
"普通"の定義によるんじゃない?
コンパイルが通るだけで普通なのかってことになるだろ
537:デフォルトの名無しさん
07/12/08 13:37:38
そこはコンパイラの説明書を読めとしか。
538:デフォルトの名無しさん
07/12/08 14:50:48
イマサラだけど「普通」って文化の問題だから、
規格と比べて云々しても答え出ないっしょ。
肯定も否定もでけまへん。
539:デフォルトの名無しさん
07/12/08 15:36:42
根本的に間違ってる。
コンパイルできるかどうかも処理系依存だということを忘れてる。
よって処理系に依存しない書き方が普通。
540:デフォルトの名無しさん
07/12/08 16:06:01
C89のコードが普通のところもあれば
C99のコードが普通のところもあれば
gcc依存のコードが普通なところもあれば
言えばキリが無いよ。
何が普通かなんて、語るだけナンセンス。
541:デフォルトの名無しさん
07/12/08 16:30:37
このスレでは普通についての議論はしません
542:デフォルトの名無しさん
07/12/08 16:33:40
予約識別子を予約されていない識別子と同様に扱うことが普通かどうかって話だろ?
とりあえず避けるわな、普通。
543:デフォルトの名無しさん
07/12/08 16:59:17
・赤信号だろうが普通に渡ることはできる。だが普通は渡らない。
・予約識別子は普通に変数名として使える。だが普通は使わない。
どっちも正しい。
二人とも普通の指してる先が違うんだ。
それに気づかなきゃ話が噛み合うわけがない。
544:デフォルトの名無しさん
07/12/08 17:01:06
予約識別子を普通に扱うってのはコンパイラが?プログラマが?
545:デフォルトの名無しさん
07/12/08 17:41:55
>>543
例え話に例え話で返すと話がズレがちなんで嫌なんだが、ちょっと言いたい。
>赤信号だろうが普通に渡ることはできる
規約違反。
精々「横断歩道の無い道を渡る」ぐらいのものだと思う。
車線無しならOK、対向1車線でもまぁ、対向2車線・・・うーん。
という感じで、程度問題ではなかろーか。
546:デフォルトの名無しさん
07/12/08 18:07:53
本筋とズレたところで例え話の粗探ししてどうすんの。
そういう話じゃねえべ。
547:デフォルトの名無しさん
07/12/08 18:25:32
細かい所に拘りたいのも本質さえ掴めれば良しとするのも人それぞれ。
何が普通かと同じで結論は出ません。
548:デフォルトの名無しさん
07/12/08 18:33:52
コンパイルできるのは処理系依存だってことはみんな理解して発言してるんだよな?
549:543
07/12/08 21:47:05
予約識別子は constraint ではないのでCのコードとしては "普通" に使える識別子である。 <= 文法上の問題
ただし、そのようなコードをコンパイルする場合については undefined である。 <= 意味上の問題
だから、そういう書き方は "普通" はしない。 <= 道徳上の問題
「使えない」のか「使ってはいけない」のか「使わない」のかでは全く意味が違う。
だから話が噛み合っていない。
550:デフォルトの名無しさん
07/12/08 21:51:40
道徳というより実作業上の問題じゃね?
551:543
07/12/08 21:55:55
>道徳というより実作業上の問題じゃね?
ん、そっちの方が適当だね。
552:543
07/12/08 22:09:08
あと「誰が」普通に扱うのかっていう主語の混乱もあるな。
俺的に分類してみた。
>>531 ?? (主語:プログラマが)
>>532 文法 (主語:処理系が)
>>533 意味 (主語:???)
>>535 文法 (主語:処理系が)
>>539 意味+作業 (主語:プログラマが)
>>540 文化 (主語:プログラマが)
>>542 作業 (主語:プログラマが)
>>548 意味 (主語:???)
553:デフォルトの名無しさん
07/12/08 22:42:44
>>549
話が噛み合ってないとか以前に、自分の発言の意味を自分自身理解してるのか?
傍目にはお前が一番混乱してるぞ。 電波撒き散らすな。
554:デフォルトの名無しさん
07/12/09 03:07:37
>>553は>>549の何が気に入らないんだ?
真っ当な指摘だと思うがね。
555:デフォルトの名無しさん
07/12/09 11:12:45
さあこんなことを言われてしまった>>553は何がどうどういった根拠で
>>549が混乱しているのか詳しく説明するか、逃げるかふたつにひとつになってしまいました
556:デフォルトの名無しさん
07/12/17 04:56:43
なんで、mallocは1引数関数なのにcallocは2引数なんでしょうか?
557:デフォルトの名無しさん
07/12/17 09:43:27
>>556
calloc()を1引数にしたら存在意義がほとんどないじゃないか。
558:デフォルトの名無しさん
07/12/17 11:18:15
ゼロクリア
559:デフォルトの名無しさん
07/12/17 11:23:22
柳家calloc
560:デフォルトの名無しさん
07/12/17 16:12:57
callocは要らない子
561:デフォルトの名無しさん
07/12/17 16:42:51
>>557
なんで?
562:デフォルトの名無しさん
07/12/18 03:45:39
mallocで確保したメモリを、100x200の2次元配列だとおもってa[m][n]のようにアクセスしたいので、
int* p = (int*)malloc(100*200*sizeof(int));
...
typedef int A[100][200];
A* a = (A*)p;
のようなコードを書いたのですが、これだと使うときに(*a)[0][0]のように*が必要になってしまいます。
どうにか、*を使わずにa[0][0]のように書く方法はないでしょうか。
C++はNGです。
563:デフォルトの名無しさん
07/12/18 03:56:03
>>562
int (*a)[200] = (int (*)[200])malloc(sizeof(int[200]) * 100);
typedef int A[200];
A* a = (A*)malloc(sizeof(A) * 100);
564:デフォルトの名無しさん
07/12/18 08:57:51
int (*a)[200] = malloc(sizeof(int[200]) * 100);
これでいい
565:デフォルトの名無しさん
07/12/19 23:21:25
VC++のstrstr系関数って、KMP法とかBM法で実装されてるんでしょうか?
それと、もし自分で実装するとしたらですが、KMPとBMのどちらが評判よいですか?
566:デフォルトの名無しさん
07/12/19 23:35:28
お帰りください
567:デフォルトの名無しさん
07/12/19 23:44:40
たぶんそんなのは使っていないと思う。
あまりにも短い文字列などだとかえって時間かかるから。
568:デフォルトの名無しさん
07/12/20 02:59:48
絶対使ってない、と言い切れるね。
1回しか使わない探索にテーブルのセットアップとかが無駄と言うのもあるけど
そもそも、そういうスキップする(全文字走査しない)アルゴリズムは
テキストの長さがあらかじめ判ってないと使えない。
そして、(strstrに渡す)文字列の長さをstrlenで調べてからBM法を使うくらいなら
長さを求める'\0'探しのついでに力任せ探索をするほうがずっとまし。
たとえ同じ文字列を何回も探索するような、初期化が必要ないケースでも。
569:デフォルトの名無しさん
07/12/21 00:21:03
ビット操作の練習をしています。符号あり2の補数表現の整数の符号を反転するコードは、
x=(~x)+1;とx=~(x-1);のどちらが適切でしょうか?
570:デフォルトの名無しさん
07/12/21 01:38:53
x=-x;
571:何を以って適切とするかが提示されていないから答えようがない罠
07/12/21 01:39:24
>>569
x *= -1;
572:デフォルトの名無しさん
07/12/21 04:13:19
このスレ的には2の補数表現を仮定してる時点で間違い
573:デフォルトの名無しさん
07/12/21 09:58:35
>>572 は誰に言ってるのか
574:デフォルトの名無しさん
07/12/21 10:09:03
>>573
>>570-571ではなかろうか
575:デフォルトの名無しさん
07/12/21 10:12:04
俺は>>569だと思った
576:デフォルトの名無しさん
07/12/21 11:02:23
>>569
xがunsignedならどっちも同じになるから、どっちでもいいよ。
577:デフォルトの名無しさん
07/12/21 11:52:01
>>576 符号ありと書いてあるが。
578:デフォルトの名無しさん
07/12/21 11:56:24
んー微妙だなw
579:デフォルトの名無しさん
07/12/21 13:00:08
構造体の定義で、たまに
struct X {
...
char tag[1];
}
とか書いてあるものがありますが([0]の場合もあり)、これは何でしょうか?
580:デフォルトの名無しさん
07/12/21 13:08:33
>>579
URLリンク(www.kouno.jp)
581:デフォルトの名無しさん
07/12/21 13:11:49
C FAQ 次スレからテンプレに入れよう
582:デフォルトの名無しさん
07/12/21 13:13:08
>>581
>>1にあるだろ。テンプレ嫁
583:デフォルトの名無しさん
07/12/21 13:15:32
あ、見落とした m(__
しかし、それが何であるかの説明にはなってないなw
しかしこのスレではスレ違いなので、
スレ立てるまでもない質問のほうに答えは書いておく。
584:デフォルトの名無しさん
07/12/21 13:57:03
どうせ規格の話になるんだし、ここで答えてもよかっただろうに。
分散して見づらくなる。
585:デフォルトの名無しさん
07/12/21 14:23:06
心得の意味がわかってないやつがいるなぁ
「わざとスレ違いな質問をする荒らしがいるのでそういうのは無視するか軽く流してください」
次からこう書かなきゃダメか?
586:デフォルトの名無しさん
07/12/21 14:34:52
何でスレ違いなのか、さっぱりわからない
587:デフォルトの名無しさん
07/12/21 14:42:27
>586
どの質問についての話なのかさっぱりわからない
>579についてのことなら、プログラム技法の質問であって規格の質問ではないからだ
588:デフォルトの名無しさん
07/12/21 14:43:51
え、いつからこのスレは規格オンリーなスレになったんだ?
589:デフォルトの名無しさん
07/12/21 14:43:54
何でしょうかって聞かれたらそれは
要素数が1のcharの配列です
としか答えられんよな
590:デフォルトの名無しさん
07/12/21 14:44:56
>>587
規格に準拠したC言語に関するスレであって、規格のスレではなかったはずだが。
591:デフォルトの名無しさん
07/12/21 14:45:53
だから>>579に対する答えは>>589で終わりだ
592:デフォルトの名無しさん
07/12/21 14:46:23
>>2
593:デフォルトの名無しさん
07/12/21 14:47:40
>>587みたいなキチガイが湧くから>>2の注意書きがあるってのに…
594:デフォルトの名無しさん
07/12/21 14:49:45
なんなの、この自治厨
595:デフォルトの名無しさん
07/12/21 14:51:46
なぜ「だから」なのか、さっぱりわからない
596:デフォルトの名無しさん
07/12/21 15:03:45
ざっとこのスレ見直したけど、いかにも>>587の気に食わなさそうな話題がたくさん見逃されてるよ。
何故?
597:デフォルトの名無しさん
07/12/21 15:05:58
なんかいろいろ言われてるけど
スレリンク(tech板:552番)
結局なぜ、こういう使いかたをするのかわからない
598:デフォルトの名無しさん
07/12/21 15:08:10
>>597
向こうで聞け
599:デフォルトの名無しさん
07/12/21 15:17:17
この書き方が文法的に正しいかも移植性が高いのかもともにはっきりしない。ただし、かなり幅広く使われている。この技法による実装は以下のようになる。
#include <stdlib.h>
#include <stdio.h>
struct name *makename(char *newname)
{
struct name *ret
=malloc(sizeof(struct name)-1 + strlen(newname)+1);
/* -1 は頭の [1] 用; +1 は \0 用 */
if(ret!=NULL){
ret->namelen = strlen(newname);
strcpy(ret->namestr, newname);
}
return ret;
}
上の関数は、name 構造体の実体を、引数で要求された名前を保持できるように(構造体の定義から想像する1文字ではなく)大きさを調整して割り付ける。
幅広く使われているけれど、この技はいささか悪名高い。……
以上、CFAQ初版より抜粋
600:デフォルトの名無しさん
07/12/21 16:48:26
なんで、
struct name {
int namelen;
char *namestr;
};
にしないんだろう?二回malloc/freeするのがイヤってことなのかな。
601:デフォルトの名無しさん
07/12/21 16:58:54
ファイルの入出力も1回で済んだしな
602:デフォルトの名無しさん
07/12/21 17:05:11
>>600
そのまま通信用バッファとかに使えるから、流行ってたんだと思う。
603:デフォルトの名無しさん
07/12/21 17:21:32
CG法のプログラムを完成させ、以下のA,bに対する解xを求めよ。
A:
-6.761582e-01 8.649824e-01 5.974179e-01 1.510212e-01 9.412452e-01
8.649824e-01 -9.466491e-01 9.172758e-02 9.491567e-02 3.673389e-01
5.974179e-01 9.172758e-02 8.015639e-01 -7.419281e-01 2.099383e-03
1.510212e-01 9.491567e-02 -7.419281e-01 -2.940182e-01 -6.722990e-01
9.412452e-01 3.673389e-01 2.099383e-03 -6.722990e-01 -8.416333e-01
b:
8.156371e+00
1.463224e+00
2.283493e-01
-6.422500e+00
-5.215142e+00
これってどうやったらできるんですかね?(>。<)
cg法自体よくわかってないんですが…
604:デフォルトの名無しさん
07/12/21 17:22:17
これこそ、正にスレ違いだな。
605:デフォルトの名無しさん
07/12/21 17:26:04
連立方程式の開放の一つだろ
606:デフォルトの名無しさん
07/12/21 17:35:03
URLリンク(ja.wikipedia.org)
607:デフォルトの名無しさん
07/12/21 17:38:06
Lesson6 連立方程式-大規模疎行列-(不完全Colesky分解)
Lesson7 連立方程式-大規模疎行列(前処理つきICG法)
URLリンク(www.saitama-u.ac.jp)
608:597
07/12/21 17:44:58
>>599
なるほどーよくわかりました。
やっぱり、>>600のように書いたほうがいいですね。
609:デフォルトの名無しさん
07/12/21 17:45:59
共益勾配法のことか。
なつかしー。BCG法とかもやらされたなあ・・・
610:デフォルトの名無しさん
07/12/21 19:49:22
処理系依存の話ではなくANSI Cとしての話ですが、
シフト演算で、シフト量が0の場合の挙動は定義されているのかな?
それとも未定義?
int x;
x>>= 0:
x<<=0;
とかした場合
611:デフォルトの名無しさん
07/12/21 19:53:12
変化無し
612:610
07/12/21 20:16:42
>>611
どもです。
ANSI C ( JISX3010)
URLリンク(www.jisc.go.jp)
をぱらぱら読んでみましたが、
6.5.7 ビット単位のシフト演算子
を読む限り、負数の場合は未定義とはありますが、0に関しては
特に述べられてませんね。
どの処理系でも
(x >>= 0) == x
(x <<= 0) == x
と想定してFA?
613:デフォルトの名無しさん
07/12/21 20:22:21
c<<(m-n)
という式ではm-n=0という場合もある
614:デフォルトの名無しさん
07/12/21 23:50:39
>612
x >= 0 ならね。厳密に解釈するなら x < 0 なら << は未定義、>> は処理系定義。
615:610
07/12/23 23:40:58
>>614
どうもです。でしたらunsigned int なら大丈夫ですね。
616:デフォルトの名無しさん
07/12/23 23:54:53
>>599あたりの話なんですが、
なぜこの技法はだめなんですか?
特に問題なさそうに思えるんですが
617:デフォルトの名無しさん
07/12/23 23:59:05
C89の規格に「やってもよい」と明記はされてないから。C99なら問題ない。
618:デフォルトの名無しさん
07/12/24 00:03:12
規格を厳密に解釈すると、駄目ということになるから。
URLリンク(www.kouno.jp)
619:デフォルトの名無しさん
07/12/24 00:14:46
Windowsもbitmap周りでやってたな
620:デフォルトの名無しさん
07/12/24 09:56:51
C99 ならサイズ無しで書いとけば可変長メンバが使えるようになったね。
621:デフォルトの名無しさん
07/12/24 10:19:28
>>617
ahosugi
622:デフォルトの名無しさん
07/12/24 10:21:23
>>620
なんで何度も出てることを新しい情報のように紹介してくれるの?
623:デフォルトの名無しさん
07/12/24 10:32:47
安部さんが首相を辞任したね
624:デフォルトの名無しさん
07/12/24 10:47:43
中日ドラゴンズが日本一になったね
625:デフォルトの名無しさん
07/12/24 10:53:53
C99対応のコンパイラってGCCぐらいかな?
626:デフォルトの名無しさん
07/12/24 10:55:47
GCCがC99に対応したね
627:デフォルトの名無しさん
07/12/24 10:56:34
そう。でもGCCでも完璧に対応してるわけじゃないけどね。
URLリンク(gcc.gnu.org)
628:デフォルトの名無しさん
07/12/24 11:09:16
DMCをお忘れではありませんか。
こっちも完璧ではないけどね。
629:デフォルトの名無しさん
07/12/24 11:12:56
VCも少しは見習え
630:デフォルトの名無しさん
07/12/24 11:48:35
数年前のC99をいまだ対応させないコンパイラって・・・
昔との互換性?それとも技術的に改良部分が多いのか?難しいのか?
よくわからないけど
631:デフォルトの名無しさん
07/12/24 11:50:12
そりゃC99に対応させても努力が多いわりに実入りが少ないなら
当然じゃない?ビジネス的にはC++かC#を使ってってこと。
632:デフォルトの名無しさん
07/12/24 13:02:19
iccはc99だし、SunWorksのccもc99だけどね。
633:デフォルトの名無しさん
07/12/24 13:20:11
>>629
620は、少なくともVC++ 7.1以上なら独自拡張扱いで使える。
URLリンク(msdn2.microsoft.com)(VS.71).aspx
634:デフォルトの名無しさん
07/12/24 21:17:49
fread関数でサーバーにあるファイル(ファイルサイズ1G)を読む際、
読込みサイズを32*1024*1024にするとエラーがおきなくて、
読込みサイズをファイルサイズにするとエラーが起きるのはどうしてでしょうか
?
どなたかご教授下さいm(_願_)m
635:デフォルトの名無しさん
07/12/24 21:21:44
そんなに大量のメモリをいっぺんに確保できていないのだろう。
636:デフォルトの名無しさん
07/12/24 21:23:47
エラーってなんだよ
637:デフォルトの名無しさん
07/12/24 22:07:40
634です。
スレ違いでした。失礼しました。
638:デフォルトの名無しさん
07/12/25 00:36:13
規格の話以外はスレ違いだと騒ぐのに、コンパイラの話になると嬉々として話題に加わる
639:デフォルトの名無しさん
07/12/25 00:49:57
>>638
なんでそう必死なんだ。
640:デフォルトの名無しさん
07/12/25 00:52:13
コンパイラの規格準拠度なんて、まさにこのスレの守備範囲だろ。
641:デフォルトの名無しさん
07/12/25 21:23:25
実装に特化したスレってあったっけ?
642:デフォルトの名無しさん
07/12/25 21:23:58
↑「実装すること」に特化した
643:デフォルトの名無しさん
07/12/25 21:27:32
「コンパイラ・スクリプトエンジン」相談室12
スレリンク(tech板)
とかか?