C言語なら、俺に聞け! <10>

このエントリーをはてなブックマークに追加
>>898
クソカベの隔離スレ
900RA・イール:01/12/25 11:32
僭越ながら質問させてください。
UTFビット列をUnicodeビット列に変更するプログラムを
作成しているのですが。
どのようにマスクを掛けたり、ビットをずらしたりすれば
良いのか思い浮かびません。
どなたかご教授願えませんでしょうか。

            UTFビット列         Unicodeビット列
1バイトコード  0aaa bbbb            0000 0000 0aaa bbbb
2バイトコード  110a aabb 10bbc ccc       0000 0aaa bbbb cccc
3バイトコード  1110 aaaa 10bb bbcc 10cc dddd aaaa bbbb cccc dddd
>僭越ながら質問させてください。
興味深い日本語だ。
1バイトかどうか (c1 & 0x80) == 0
2バイトかどうか (c1 & 0xe0) == 0xc0
3バイトかどうか (c1 & 0xf0) == 0xe0
4バイトかどうか (c1 & 0xf8) == 0xf0
5バイトかどうか (c1 & 0xfc) == 0xf8
6バイトかどうか (c1 & 0xfe) == 0xfc

2バイトのとき (c1 & 0x1f) << 6 | (c2 & 0x3f)
3バイトのとき (c1 & 0x0f) << 12 | (c2 & 0x3f) << 6 | (c3 & 0x3f)
4バイトのとき (c1 & 0x07) << 18 | (c2 & 0x3f) << 12 | (c3 & 0x3f) << 6 | (c4 & 0x3f)
5バイトのとき (c1 & 0x03) << 24 | (c2 & 0x3f) << 18 | (c3 & 0x3f) << 12 | (c4 & 0x3f) << 6 | (c5 & 0x3f)
6バイトのとき (c1 & 0x01) << 30 | (c2 & 0x3f) << 24 | (c3 & 0x3f) << 18 | (c4 & 0x3f) << 12 | (c5 & 0x3f) << 6 | (c6 & 0x3f)
903RA・イール:01/12/25 13:25
>>901さん
変な日本語になってますね。
僭越の意味が「身分や権限などを越えて、差し出がましいことをする」
だからこの場合おかしな表現でした。「不躾」であっていますかね?

>>902さん
私宛ての解答ですよね?
ありがとうございます。
これを参考に頑張ってみます。
904デフォルトの名無しさん:01/12/25 13:46
typedefしたものを使わずに関数をキャストするにはどうやりますか。
void foo(int, char *);

int (*bar)(long *, ...) = (int (*)(long *, ...))foo;
906Kusakabe Youichi:01/12/25 13:53
In article >>903, RA・イール/903 wrote:

> >>901さん
> 変な日本語になってますね。
> 僭越の意味が「身分や権限などを越えて、差し出がましいことをする」
> だからこの場合おかしな表現でした。「不躾」であっていますかね?

っていうか、余計な前置きしている暇があるなら、さっさとわかりやすく質問
すればいいのでは?
>>905
ありがとー。
908RA・イール:01/12/25 14:03
>>906
こういうところって前置きいらないですか?
909デフォルトの名無しさん:01/12/25 14:05
マクロを可変引数に対応させたい場合はどうやったらいいですか?
#define macro(s,...) printf(s,...)
910ズバット怪傑:01/12/25 14:08
>>909
#define macro printf
911Kusakabe Youichi:01/12/25 14:09
In article >>908, RA・イール/908 wrote:
> こういうところって前置きいらないですか?

しちゃだめです。
>>909
gccの独自拡張なら
#define macro(format, args...) \
printf (format , ## args)

C99なら……、知らん。
913デフォルトの名無しさん:01/12/25 14:16
>>910
ごめんなさい、説明不足でした。

デバッグ出力のために使うのでシンボルDEBUGが定義されていない場合
コードを消したいんです。

#ifdef DEBUG
#define macro(str) puts(str)
#else
#define macro(str)
#endif

のような感じで…
>>913ならこうじゃん

#ifdef DEBUG
#define macro printf
#else
#define macro
#endif
915ズバット怪傑:01/12/25 14:27
>>913
#ifdef DEBUG
#define macro printf
#else
#define macro 1?(void)0:printf
#endif
916914:01/12/25 14:27
あ、そか、だめだ。
>>912
> C99なら……、知らん。
#define macro(format, ...) \
printf(format, __VA_ARGS__)
918RA・イール:01/12/25 14:32
>>911
わかりました。以後注意します。
919デフォルトの名無しさん:01/12/25 14:51
>>917
ありがとう、できました!
920Kusakabe Youichi:01/12/25 17:38
皆さん素晴らしいレスをありがとうございました。
おかげでとても面白いスレッドになりました。
最優秀スレッド賞をひろゆきからいただきました。
単行本にも掲載されるそうです。
皆さん楽しみにしていてください。
ではごきげんよう。
え、C99対応のコンパイラ使ってんの? 何?
922Kusakabe Youichi:01/12/25 17:43
正直、レベルが低くてがっかりだ。
またクソスレ立ててやるからしっかり煽ってくれよ。
>>908
全然かまわないよ−。偽日下部なんか無視して、
どんどん前置き書いて−。
だからといって時候の挨拶から入るなよ。
925デフォルトの名無しさん:01/12/26 21:43
Cで終了コードを取得するにはどうすればよいでしょうか?
以下のようなコードをためしたのですが:

geho.c:

int main(void)
{
  exit(2);
}

hoge.c:

int main(void)
{
  int ret;
 
  ret = system("./geho");
  printf("%d\n", ret);

  return 0;
}

しかし、出力は2とはならずに、512となってしまいます。
926お胸おっぱい:01/12/26 22:18
>>925
OS が何かは知らないけど、上位 8bit は確かに 2 だ。
927デフォルトの名無しさん:01/12/26 23:59
ret=system(...)/256 とすべきでわ?
厳密にはスレ違いだが。
wait()システムコールで得られる値には、
下位8ビットにcore dumpしたかのフラグとシグナルの値が入ってる。
子プロセスがexit()に渡した値は上位8ビットだけ。
929デフォルトの名無しさん :01/12/27 18:25
struct age *sage = (struct age *)malloc(10 * sizeof(struct age));
で動的に割り当てた構造体の記憶領域の解放のしかたは
free((struct age *)sage);
であってる?
freeの中でキャストいるんだっけ?
free(sage)でいいんじゃないの?
つーかmalloc()もキャストはいらん。
void*からの代入はOKだし、void*をサポートしてない処理系がエラーや警告を
出すとも思えん。
ただし、当然#include <stdlib.h>はしてるものとする。
次元配列の宣言は、「実際には配列の配列」って言ってるけど、
ほんとの次元配列ってのはどういうものか教えてください。
次元配列ってなんだよ。
SF板かアニメ板のルパンスレにでも逝け。
また、つまらぬレスをつけてしまった・・・
935デフォルトの名無しさん:01/12/28 02:41
ヘッダファイル内にはそのヘッダが依存するヘッダの
インクルードも書いておくべきだ!
それぞれのヘッダには二重定義防止マクロを記述しておけばよい。
この考え方に賛成の人〜!
ふつうそうなってないか?
937sage:01/12/28 05:19
それが常識なら文句ないっす。
938Kusakabe Youichi:01/12/28 05:29
In article >>937, sage/937 wrote:

> それが常識なら文句ないっす。

っていうか、まず自分で確かめろって。
鬱陶しいね〜 このオヤジ
早く死ねよ〜〜 
>939
off会で殺せよ
>>938
読解力ないね。
そろそろなので、新スレを作りました。
移動をお願いします。

http://pc.2ch.net/test/read.cgi/tech/1009499565/l50
943ねね:02/01/26 20:17
CのソースからPealのソースを呼び出すにはどーすればいいの?コンパイル時にリンクさせるには・・・・。それとも直接ファイル指定での呼び出しが可能?シェルじゃないしそれはムリかな?だれか教えて。
944デフォルトの名無しさん:02/01/26 20:19
>>943
system()
>>943
system("〜.pl")が最も簡単な手。
>>943
Perl5でCとの親和性が高くなったらしいから調べてみては?
>>943
Pealってなんだ。っつーか>>942が読めねーのかこの文盲。
どうでもいいけど新スレへ

C言語なら、俺に聞け! <11>
http://pc.2ch.net/test/read.cgi/tech/1009499565/