5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130

1 :デフォルトの名無しさん:2006/09/30(土) 19:56:29
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
【ANSI-C】 C言語なら俺に聞け!  Part 129
http://pc8.2ch.net/test/read.cgi/tech/1156661024/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/

2 :デフォルトの名無しさん:2006/09/30(土) 19:56:44
    ∧
    < | >     俺はグラットン持ちの通りすがりのナイトであって
    |.|.|              2getしたがどうやってブロントって証拠だよ!!
    |.|.|
    |.|.|
    < | >      おいィ?お前それで良>>1のか? 
   ...| | |.      仏の顔を>>3度までという名セリフを知らないのかよ
   ...| | |.      暗黒が持つと逆に頭がおかしくなって>>4
   ...| | |.      グラットンす>>5いですね
    .< .| .>     >>6駄にaguるなネットポリスに捕まりたいのか?
 /(.._..|..|..|.._..)ヽ   それほどでも>>7
 >.─<>─.<   このままでは俺の寿命がストレスでマッ>>8なんだが・・
 ヾ ̄ヾ .√ ")'   >>9枚で良い
    .| .|      俺の怒りが有頂>>10になった
    .| .|
    .| .|      おれパンチングマシンで>>100とか普通に出すし
      ) (
    .▽



3 :デフォルトの名無しさん:2006/09/30(土) 20:04:25
>>1

4 :デフォルトの名無しさん:2006/09/30(土) 21:40:46
>>1
ISO/ANSI/JIS乙

5 :デフォルトの名無しさん:2006/09/30(土) 21:42:11
MONSOON禁止。

6 :デフォルトの名無しさん:2006/09/30(土) 21:42:42
このスレはC99に完全準拠したコンパイラを持っている>>1
全ての疑問に答えます。

7 :デフォルトの名無しさん:2006/09/30(土) 21:44:19
仕様書を持っていればその実装は必ずしも必要ないと思いますが。
HTML 4.01+CSS 2.1を完全実装したブラウザは存在しませんが
Web板のstrictスレはちゃんと回ってます。

8 :デフォルトの名無しさん:2006/09/30(土) 22:01:43
モヒカンだー!
モヒカンが出たぞー!

9 :デフォルトの名無しさん:2006/09/30(土) 22:23:02
あべし

10 :デフォルトの名無しさん:2006/09/30(土) 23:20:11
早速の質問ですが、

11 :デフォルトの名無しさん:2006/09/30(土) 23:37:26
VC2005にも__restrictキーワードがやっと付けられたな。
SP1が待ち遠しいぜ。

12 :デフォルトの名無しさん:2006/09/30(土) 23:47:06
restrictついたんか。
少しだけ嬉しいかな。

13 :デフォルトの名無しさん:2006/09/30(土) 23:52:14
スレ違いかもしれませんが、質問させてください。
俺はC言語全くの初心者です。
勉強しようと思って本は買いました。
ついでに何かソフトも買ってキーボードを叩きながら覚えようと思うのですが・・・
何かお薦めのソフトはありますか?
教えて君で申し訳ないのですが。。。教えてください。

14 :(^-^) ◆MONSOON/qo :2006/09/30(土) 23:55:09
>>13
BCC developer (ボーランドc++5.51)がおすすめ

15 :デフォルトの名無しさん:2006/09/30(土) 23:56:08
これだから「初心者お断り」と書いておけって言ったのに。

>>13
このスレは初心者や教えて君はお断りだ。もっと適切なスレがある。そっち行って。
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
http://pc8.2ch.net/test/read.cgi/tech/1153818463/

16 :13:2006/10/01(日) 00:03:29
>>15
ごめんなさい。
撤収します。

17 :デフォルトの名無しさん:2006/10/01(日) 00:14:03
お前はもう来るな!
死ね。ぴかぁ〜

18 :デフォルトの名無しさん:2006/10/01(日) 18:56:07
「ANSI-Cの雛形のプログラム」って何か知ってる人居ますか?

19 :デフォルトの名無しさん:2006/10/01(日) 19:10:41
>>18 居ないから出て行け。

20 :デフォルトの名無しさん:2006/10/02(月) 06:57:03
>>15
誘導してやったのは結構なことだが
一言多いとガキっぽく見えるぞ

21 :デフォルトの名無しさん:2006/10/02(月) 08:09:16
最近思うのは、2chで暴言やそれに類する発言を吐きまくる人々は、
実年齢はどうあれ、精神年齢が低いことは間違いないという事だな。

22 :デフォルトの名無しさん:2006/10/02(月) 09:11:18
>>21
そんなどうでもいいことを言わずにいられないあなたも、精神年齢が低いということですね。

23 :デフォルトの名無しさん:2006/10/02(月) 14:27:41
実年齢が低そうな人達だなぁ…。

24 :デフォルトの名無しさん:2006/10/02(月) 16:15:09
汚い穴だなぁ…。

25 :デフォルトの名無しさん:2006/10/02(月) 19:45:10
↓しゃぶれよ

26 :デフォルトの名無しさん:2006/10/02(月) 20:14:06
                  _______   __ 
                ..||   __   ||  |WC| 
                ..||  | |  ||    ̄ ̄ 
    __ _   ∧_∧  ||.   ̄ ̄   || 
     ――― (゚Д゚ )  .||.       ◎|| 
⌒ヽ   ̄ ̄ ̄  / つ  _つ||.        ..|| 
  人, ’ ’,  人  Y   ||.  |三三| ...|| 
Y⌒ヽ)⌒ヽ、 )し'(_)   ||______ || 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 


27 :デフォルトの名無しさん:2006/10/02(月) 21:28:16
カチャカチャ

28 :デフォルトの名無しさん:2006/10/03(火) 17:06:01
お前はもう俺から逃げられない

29 :デフォルトの名無しさん:2006/10/03(火) 22:35:45
             
           ハ_ハ  
         ('(゚∀゚∩ 
         ヽ  〈 
          ヽヽ_)           



30 :デフォルトの名無しさん:2006/10/06(金) 22:34:41
保守

31 :至福:2006/10/07(土) 10:05:45
はじめまして

C言語で素数列挙プログラムをつくっているのですが
高速にするためには剰余計算を
足し算(もしくは引き算)で行うようにするといいと言われました

いったいどのようなアルゴリズムで剰余計算を加算(or減算)で
おこなえるのでしょうか?

32 :デフォルトの名無しさん:2006/10/07(土) 10:20:12
被除数nから除数dが何回引けるかをカウントするループを作って、
そこから抜けてきた時点でのnが余りってことだろ

33 :デフォルトの名無しさん:2006/10/07(土) 10:32:02
>>32
そんな単純だと遅いよな

34 :デフォルトの名無しさん:2006/10/07(土) 10:48:37
俺もそう思うけど >>31 を読む限りそうとらざるをえないだろ
C で書いたアルゴリズムを動作合成とか言うならそれなりの話がありそうだが

35 :デフォルトの名無しさん:2006/10/07(土) 11:00:48
もしCPUの譲与演算が使えないような整数型で、
その整数型には次の演算が行えるなら
・加減算
・乗算
・n倍できる高速な演算(シフト演算)
・等号、大なり、小なり

a/bの余りは、
for(;;){
for(d=0.i=1;1;i++){ if(a<b.leftshift(i)){ d=i-1; break; } } //シフトして初めてaを超えるシフト数dを得る←ここが一番呼ばれる
c=b.leftshift(d);for(;a>c;a-=c); //bをdだけシフトしたcをaから引いていく
if(d==0) break; //もうシフトしてaを超えない最大のdを見つける必要はないので、抜ける
}

で、余りはきっとa
これでもかなり遅いがなぁ…加減算でやったら死ぬと思うが

36 :デフォルトの名無しさん:2006/10/07(土) 11:07:44
多分、それまでのすべての素数の倍数をプールしとけってことじゃない?

37 :デフォルトの名無しさん:2006/10/07(土) 11:08:07
>>35
C でおk

38 :デフォルトの名無しさん:2006/10/07(土) 14:11:10
エンターを入力すると do 〜 while ( ); が、
また続けられるようにするのは、可能でしょうか?
エンターの入力以外は、終了させたいです。

39 :デフォルトの名無しさん:2006/10/07(土) 14:31:36
可能

40 :デフォルトの名無しさん:2006/10/07(土) 14:40:03
>>39
ありがとうございます。 でも、言葉足らずでした。
できれば、その方法も教えて頂きたいのです。

41 :デフォルトの名無しさん:2006/10/07(土) 14:42:34
>>40
そこまでは忠言できない、情報が少なすぎる

42 :デフォルトの名無しさん:2006/10/07(土) 14:51:27
>>41
えーと、ごめんなさい。 どう言えばいいかもわかりません。
もうちょっと自分で調べてからまた来ます。

43 :デフォルトの名無しさん:2006/10/07(土) 14:57:26
http://pc8.2ch.net/test/read.cgi/tech/1158367586/l50

44 :デフォルトの名無しさん:2006/10/07(土) 15:08:42
>>38
機種依存のやり方を取らざるを得ないから、機種依存OKスレへ。
while (1) {
do 〜 while ();
//キーボード入力
if (リターンキーだったら) break;
}
でできるけど、キーボード入力の部分が機種依存になる。
かならずリターンキーを押すのなら
char buf[4];
fgets(buf, sizeof buf, stdin);
if (buf[0] == '\n') break;
みたいなかんじでいけるけど。

45 :デフォルトの名無しさん:2006/10/07(土) 15:40:29
リニアPCmのWAVファイルを
ADPCMに変換したいので参考になるところオシエテ

46 :デフォルトの名無しさん:2006/10/07(土) 18:53:28
        ,.-─ ─-、─-、
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ , -─        Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  ___________
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ  /
     ヽ ヽ     -''ニニ‐  / < つーか、スレ違いだろハゲ
        |  `、     ⌒  ,/   \___________
       |    > ---- r‐'´
      ヽ_         |
         ヽ _ _ 」

     ググレカス [ gugurecus ]
   (西暦一世紀前半〜没年不明)

47 :デフォルトの名無しさん:2006/10/07(土) 18:59:14


48 :至福:2006/10/07(土) 22:33:20
ありがとうございます
剰余計算はあまり速くならないみたいですね

Rabin法を用いた素数の
高速判定アルゴリズムってのがあるそうなんですが
C言語だとどうやって書けばいいでしょうか?

49 :デフォルトの名無しさん:2006/10/07(土) 22:51:53
>>48
素直に書けばいい

50 :デフォルトの名無しさん:2006/10/07(土) 23:01:26
>>48
思うがままに書けばいい
書くことは do に過ぎない
see すなわち実測を怠るなかれ

51 :デフォルトの名無しさん:2006/10/10(火) 12:16:39
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

52 :デフォルトの名無しさん:2006/10/10(火) 12:18:29
>>51
ビットフラグの操作。

53 :デフォルトの名無しさん:2006/10/10(火) 12:52:28
そういえば、剰余の計算のテーブル引き版ってどうやるんだっけ?
昔インテルがp5-90でしくじったやり方

54 :デフォルトの名無しさん:2006/10/10(火) 15:20:33
>>51
まだやってんのか阿呆。

55 :デフォルトの名無しさん:2006/10/10(火) 17:22:30
倍精度を丸めたあの日

56 :デフォルトの名無しさん:2006/10/12(木) 13:06:12
returnで文字列を返すにはどうすればいいのでしょうか?

57 :デフォルトの名無しさん:2006/10/12(木) 13:10:59
配列は返せない
ポインタなら返せる

58 :56:2006/10/12(木) 13:43:17
分かったような気がしたんですが、上手くいかないのでご指導をお願いします。

char * f(void) {
char buf[80];
fgets(buf, 80, stdin);
return buf;
}
int main(void) {
char * a;
a = f();
printf("%s\n", a);
}

59 :デフォルトの名無しさん:2006/10/12(木) 13:50:53
ポインタは返せるけど
そのポインタがローカル変数を指している場合
関数を抜けた時点で無効になる

60 :デフォルトの名無しさん:2006/10/12(木) 13:52:49
(sprintf() のように) 戻り値で文字列を返さずに、
引数で渡されたバッファ(?)の内容を書き換える

61 :56:2006/10/12(木) 13:56:16
少し変更したんですが、どうでしょうか?

char * f(void) {
static char buf[80];  /* staticにしました */
fgets(buf, 80, stdin);
return buf;
}
int main(void) {
char * a;
a = f();
printf("%s\n", a);

return 0;
}


62 :デフォルトの名無しさん:2006/10/12(木) 14:38:42
まあまあだね。スレッド使わないならいいんじゃね。
>>60 のいうこと聞いて書き直せ!

63 :56:2006/10/12(木) 15:03:08
引数渡しに変更したんですが、これでどうですか

void f(char *buf) {
fgets(buf, 80, stdin);
}
int main() {
char buf[80];

f(buf);
printf("%s\n", buf);

return 0;
}

64 :56:2006/10/12(木) 15:08:03
間違えました。修正版です

int main() {
char buf[80];
printf("%s\n", fgets(buf, 80, stdin));
return 0;


65 :デフォルトの名無しさん:2006/10/12(木) 15:10:37
てめえ 80 って直で書きやがっていい度胸だなっ
それから stdin ていうのも引数で受けるのが普通だ。
それから戻り値も成功時は buf をそのまま(ry

66 :デフォルトの名無しさん:2006/10/12(木) 15:12:46
ばけやろい
いきなり ^Z とか ^D とかよ、落ちるようなうろぐらむは書くんじゃねえよ

67 :デフォルトの名無しさん:2006/10/12(木) 15:13:11
>>65
結局 fsets そのままじゃん とお約束

68 :デフォルトの名無しさん:2006/10/12(木) 15:25:47
1行レスでtypo してるし。 fsets って何やねんorz

69 :デフォルトの名無しさん:2006/10/12(木) 18:35:12
複数の変数を定義することができるデータ構造って何ですか?

70 :デフォルトの名無しさん:2006/10/12(木) 19:00:44
>複数の変数を定義することができる
            ( ゚Д゚)構造体か?
>データ構造って何ですか?
            (;゚Д゚)…え?

71 :デフォルトの名無しさん:2006/10/12(木) 20:22:28
つ 疲れ目だ、休め

72 :デフォルトの名無しさん:2006/10/12(木) 21:54:36
日本語でおkのお手本だな

73 :デフォルトの名無しさん:2006/10/12(木) 23:40:18
#include <stdio.h>

int main(void);
int main() {
printf(">>67 fsets って何やねん\n");

main();
return 0;
}

74 :デフォルトの名無しさん:2006/10/13(金) 04:37:38
【3:1001】C言語なら俺に聞け(入門篇) ぱぁと2〜

が1000を超えてしまったので、こちらで質問させて頂きます

皆さん、ありがとうございます。
>>997
では、最後に行がなくてもカウントしてもいいのですね

では>>993で述べた、
>>何故、自分の環境だとtotatに(つまり改行文字の数に)1足さなければならないのでしょうか?

で、何故自分の環境だと1を足さなければならないのかが
他の参考書などを調べましたが解決しません・・・・
理由は改行文字で終わってないなら 1を足さなければならないからですかね?

要するの最後の行はとにかくEOFでも数えると覚えればいいみたいですね。



75 :デフォルトの名無しさん:2006/10/13(金) 04:41:43
EOF自体、DOS時代の遺物みたいなものだからな。最後のクラスタの
有効バイト数が分からないファイルシステムを使っている時、EOFで
ファイルの終わりを判別するという、今考えるととんでもない事をしていた。

76 :デフォルトの名無しさん:2006/10/13(金) 04:45:34
もうわけがわかりません・・・
結果的には数えるのでしょうか?

77 :デフォルトの名無しさん:2006/10/13(金) 04:47:02
好 き に し ろ よ

78 :デフォルトの名無しさん:2006/10/13(金) 04:59:24
>>74-
筋が分岐しているみたいだから一応次スレを立てておいた。
話の続きはそっちでヨロ

C言語なら俺に聞け(入門篇) Part 3
http://pc8.2ch.net/test/read.cgi/tech/1160682950/

79 :デフォルトの名無しさん:2006/10/13(金) 05:08:49
>>78
すみません

80 :デフォルトの名無しさん:2006/10/13(金) 05:28:35
int ch;
ch=fgetc(io); if (ch==EOF) abort();
char c;
size_t sz=fread(&c, sizeof (char), 1, io); if (sz==0) abort();

freadは生バイトのまま読み込みで(raw byte)、
fgetcがバイトから文字に符号化(auto ascii char encoding)されるわけじゃないですよね。
1バイト読み込みの方法ですが、両者はどう違うのでしょうか?

81 :デフォルトの名無しさん:2006/10/13(金) 05:33:03
"r"か"rb"のどちらでオープンしたか、それとOSとの組み合わせで
挙動が異なる事がある。

82 :デフォルトの名無しさん:2006/10/13(金) 06:07:26
"rb"でオープンしたらfgetcでもfreadでも同じってことでしょうか?


83 :デフォルトの名無しさん:2006/10/13(金) 06:12:06
ASCIIのEOFとCのEOFを混同している奴がいるな

84 :デフォルトの名無しさん:2006/10/13(金) 06:50:49
DOS/Windowsでのテキストモードとバイナリモードの動作をわかってない奴もいる。

85 :デフォルトの名無しさん:2006/10/13(金) 07:18:39
DOS/Windowsの話ならスレ違い。

86 :デフォルトの名無しさん:2006/10/13(金) 12:12:26
>>82
どちらでオープンしようとも、1バイト読み込んだ内容についてはどちらも同じ。
仮にテキストモードで"\r\n"⇒'\n'の変換が行われるならば、fgetc()でもfread()でも行われる。

87 :デフォルトの名無しさん:2006/10/13(金) 15:21:31
C言語からアセンブラ語に変換するにはどうすればいいですか??
分かりやすくお願いします..

88 :デフォルトの名無しさん:2006/10/13(金) 15:29:15
勉強すればいいと思います。

89 :デフォルトの名無しさん:2006/10/13(金) 15:52:57
うるせーバカ氏ね

90 :デフォルトの名無しさん:2006/10/13(金) 15:59:42
マルチは死ねばいいと思います。

91 :デフォルトの名無しさん:2006/10/13(金) 17:08:13
マルチが死ぬにはどうすればいいですか???
分かりやすくお願いします。。。。

92 :デフォルトの名無しさん:2006/10/13(金) 17:10:19
>>91
鼬害。

93 :デフォルトの名無しさん:2006/10/13(金) 21:29:52
86 デフォルトの名無しさん sage 2006/10/13(金) 12:12:26
>>88
コンパイラを使う。
そんなことをしてもほとんどの場合役に立たないけど。

手段を聞くのではなく、目的を示したほうがいいと思う。

94 :デフォルトの名無しさん:2006/10/13(金) 21:32:01
うわ操作ミス。
一行目は無視して。

95 :デフォルトの名無しさん:2006/10/13(金) 23:06:11
>>94
スレ違いは誘導しましょう。
例えばあんたはこっち。
http://pc8.2ch.net/test/read.cgi/tech/1158275665/

96 :デフォルトの名無しさん:2006/10/15(日) 01:35:30
『宣言が正しく終了していない』
と言ったエラーが出て困りました。
ググッて調べてみましたが、いまいち解決策が
みつかりません。
宜しくお願いします。

97 :デフォルトの名無しさん:2006/10/15(日) 01:37:40
>>96 いったい何をお願いしてるんだろう?

98 :デフォルトの名無しさん:2006/10/15(日) 01:44:13
>>97 コンパイルが通らないので、宣言が正しく終了していない
と表示された時の一般的な対処方法ご存知ないですか?
・・・ということでしたorz。


99 :デフォルトの名無しさん:2006/10/15(日) 01:47:51
>>98
http://pc8.2ch.net/test/read.cgi/tech/1160682950/35-

100 :デフォルトの名無しさん:2006/10/15(日) 01:50:15
>>96
>>90

101 :デフォルトの名無しさん:2006/10/15(日) 11:50:21
同じ構造体同士でmemmove(memcpy)を使うと、こちらの想定どおりに
同じオブジェクトのコピー(クローン)になるのでしょうか。

上のような構造体のビット・コピーは、CとC++でも挙動は同
じ(互いの構造体メンバー間の同一性は保障される)になるのでしょうか?

もしかしmemmoveは環境依存なの?

102 :デフォルトの名無しさん:2006/10/15(日) 11:54:51
/*
* なんか、低脳な質問が増えてきてるな
*/


103 :構造体の代入ができないと信じるOldTimerは多いよね:2006/10/15(日) 12:06:25
>>101
memmove()はC99にある。しかし、同じオブジェクトのコピーならmemcpy()だろうとmemmove()だろうと使うのは馬鹿。
また、C++についてはスレ違いにつき割愛。

104 :デフォルトの名無しさん:2006/10/15(日) 12:15:42
環境依存のようなので、違うスレで質問します。

もしかしてmemmove/memcpyの仕様は環境依存なの?
の誤植でした。

105 :デフォルトの名無しさん:2006/10/15(日) 12:23:36
構造体の代入はともかく、memmove使うのはどうして馬鹿なの?

106 :デフォルトの名無しさん:2006/10/15(日) 12:36:47
代入しろってことじゃないか?

107 :デフォルトの名無しさん:2006/10/15(日) 12:54:28
構造体を代入するのは馬鹿
達人はダフのデバイスを使う

108 :デフォルトの名無しさん:2006/10/15(日) 13:14:22
スレ違いだから詳しいことは省略するが、
構造体のコピーをmemcpy()で行なう癖のついた阿呆が
C++でも同じことをやってどつぼにはまった例は何度も見た。

109 :デフォルトの名無しさん:2006/10/15(日) 13:35:57
LinuxでC言語のプログラムをコンパイルして実行したらちゃんと動作したのに
Windowsでそのファイルを実行すると正しく動作しないんですけど
なぜですか?

110 :デフォルトの名無しさん:2006/10/15(日) 13:39:43
>>108 仮想関数テーブルってオチなの?

111 :デフォルトの名無しさん:2006/10/15(日) 13:45:03
>>110
代入演算子を宣言しているクラスがあるだけでもマズイ。

112 :デフォルトの名無しさん:2006/10/15(日) 13:59:04
ダフのデバイスを使うのは馬鹿
達人はインラインで rep movsb を使う

113 :デフォルトの名無しさん:2006/10/15(日) 14:16:31
構造体のコピーならmemcpyでいいだろ

114 :デフォルトの名無しさん:2006/10/15(日) 14:47:45
>>113
ダメだとは言わないが、癖になると C++ で嵌る。
string.h のインクルードが必要になるし、
構造体がレジスタに収まる場合などで
最適化の機会が減ってしまうかもしれない。

逆に、代入に比べて何のメリットがある?

115 :デフォルトの名無しさん:2006/10/15(日) 15:13:33
メリットというよりも、出来る保障があるかないかだろ。
といっても、レジスタなどと環境依存を出してくる人には、
メリットをいくらいっても無駄だろう。

116 :デフォルトの名無しさん:2006/10/15(日) 15:18:53
>>115
正しくコピー出来る保障があるかないかという観点でも、
代入のほうが有利じゃないか?

117 :デフォルトの名無しさん:2006/10/15(日) 15:24:49
C++でもstructに仮想関数を定義してない
時(structをオブジェクトでなくて値として使っている)でも何か問題が起こるのか?
ていうか、具体的にどうダメなのか分からないから適当に言ってるんだろうな。

118 :デフォルトの名無しさん:2006/10/15(日) 15:30:14
先頭アドレスをコピーしてしまえば・・・

119 :デフォルトの名無しさん:2006/10/15(日) 15:37:41
こいつは何と比べて代入の方が有利と主張してるんだ?


120 :デフォルトの名無しさん:2006/10/15(日) 15:40:22
>>116に聞きたいが、代入演算子'='を実装するとき、お前ならどうするつもりだ?

121 :デフォルトの名無しさん:2006/10/15(日) 15:55:22
ビットコピーしたいだけならmemmoveで十分か?
というのが問いだとしたら、答えはYes、ではダメなのかな。

122 :デフォルトの名無しさん:2006/10/15(日) 16:00:10
代入演算子を使うべきだという話はおいておいて、
C++では、構造体・クラスはPODならmemcpyでコピーしても問題ないと規定されている。

123 :デフォルトの名無しさん:2006/10/15(日) 16:20:50
あれだろ、strlen 使わないで自分で長さ数えるループ置いて回る奴とかたまにいるじゃん

124 :デフォルトの名無しさん:2006/10/15(日) 16:35:00
すり替え乙

125 :デフォルトの名無しさん:2006/10/15(日) 16:50:09
>>123によれば、ダンスでもしているのか、アホな奴が回っているようなんだが…

126 :デフォルトの名無しさん:2006/10/15(日) 16:57:22
PODの詳しい定義を見たいのだが検索出来なくて面倒くさいので
誰か規格に詳しい人、何ページに書いてあるのか教えてくれ

127 :デフォルトの名無しさん:2006/10/15(日) 17:00:28
どうも白熱しているけど、memcpy/memmoveは
C++だと面倒が多いのは分かった。というか普通はやらない。
構造体のクローンはCではK&R第1版では(ISO/ANSIでも?)OKってことね。

何に使うかはまだ考えてないけど、
例えば構造体も配列もプリミティブも結局同じってことかな。

128 :デフォルトの名無しさん:2006/10/15(日) 17:02:42
ここ一応Cスレなのでよろしこ

129 :デフォルトの名無しさん:2006/10/15(日) 17:08:25
なんか知らんけど、C++でインスタンスをmemcpyしてはまった馬鹿がいるみたいねw

130 :デフォルトの名無しさん:2006/10/15(日) 17:17:24
>>129
vtblとかオーバーライドとか、演算子オーバーロード規則とかどうなっちゃうんだよ。
俺は怖くてやらないけど。

131 :デフォルトの名無しさん:2006/10/15(日) 17:20:06
はぁ

132 :デフォルトの名無しさん:2006/10/15(日) 18:21:50
Cスレらしいほのぼのとした馬鹿でつね

133 :デフォルトの名無しさん:2006/10/15(日) 18:29:15
>>126
X 3014:2003では9. クラスの4節。次を満たす集成体クラスと書いてある。
参照型である非静的データメンバ
利用者定義のコピー代入演算子
利用者定義のデストラクタ

集成体は、ようするに= {hoge, foo}の書式で初期化できるもの。
8.5.1で次のいずれも持たない配列又はクラスと規定されている。
利用者宣言のコンストラクタ
非公開又は限定公開の非静的データメンバ
基底クラス
仮想関数

134 :デフォルトの名無しさん:2006/10/15(日) 18:32:52
>>120 クラスに応じて変わるに決まってるだろ。何が聞きたいんだ?

135 :デフォルトの名無しさん:2006/10/15(日) 18:52:00
クラスの話なんて誰もしてないし

136 :デフォルトの名無しさん:2006/10/15(日) 18:55:20
聞きたいのは煽り耐性

137 :デフォルトの名無しさん:2006/10/15(日) 18:59:33
Cコンパイラの実装の話か。
数個の命令で済めばそれで、ダメなら memcpy() 相当の
汎用コードを呼び出す。実際に実装するわけじゃないが、
これぐらいの動作は期待してもいいだろう。

138 :デフォルトの名無しさん:2006/10/15(日) 22:24:55
>>127
> 構造体のクローンはCではK&R第1版では(ISO/ANSIでも?)OKってことね。
K&R第1版の時代はそもそも構造体の代入ができなかったんだから当然。
memcpyやmemmoveを使いたがるのはそのころの名残だろ。

139 :デフォルトの名無しさん:2006/10/15(日) 22:41:08
いい加減にしろ

140 :デフォルトの名無しさん:2006/10/16(月) 14:16:07
だから、ISO/ANSIでもCなら構造体のコピーはmemcpyやmemmoveを
使って問題ないってことだ。誰も勧めたり確証しないから曖昧になってるがな。

141 :デフォルトの名無しさん:2006/10/16(月) 20:56:01
K&R1準拠のために構造体の代入を封印する奴は
コードのその他の部分ももちろんK&R1準拠なんだろうな?
つーか標準ライブラリ使えるの?

142 :デフォルトの名無しさん:2006/10/17(火) 00:52:54
別に代入を封印するとかいう話じゃないだろ。
memcpyで正しく複製できるかどうかの話だ。

143 :デフォルトの名無しさん:2006/10/17(火) 01:01:49
いい加減にしろ

144 :デフォルトの名無しさん:2006/10/17(火) 01:11:44
おこらりた

145 :デフォルトの名無しさん:2006/10/17(火) 02:29:30
>>141
UNIXのプログラムでgccが使えると仮定してないやつはプロトタイプ宣言すら使ってないな。
つーかmemcpyが使える保証すらないからbcopy使ってたり

146 :デフォルトの名無しさん:2006/10/17(火) 02:31:24
いい加減にしろ
構造体の代入やmemcpyの話題はまだスレタイに沿ってるが
K&R1の話はスレ違いだろ

147 :デフォルトの名無しさん:2006/10/17(火) 02:43:53
配列とポインタの問題でちょっと分からないことがあります。

void func(unsigned char *data) { }

このような関数があって main(){} から

int main(){
unsigned char data[100];

func(data);
}

こう書くと正常に動作するのですが、

int main(){
unsigned char *data;

data = (unsigned char*)malloc(sizeof(unsigned char)*100);

func(data);
}

こう書くと func() の処理がおかしな動作になってしまいます。
このような場合どんなことが原因として挙げられるのでしょうか?

148 :デフォルトの名無しさん:2006/10/17(火) 03:00:01
func()がdataの境界を越えて書き込んでる

149 :デフォルトの名無しさん:2006/10/17(火) 07:13:30
>>141
K&R1準拠のために構造体の代入を封印する
準拠のためってどういうこと?
K&R1に「構造体の代入規定」が無いのに、無い規定を封印することはできないだろ。
ところで、お前のコードは読みにくそうだな。

150 :デフォルトの名無しさん:2006/10/17(火) 08:45:50
最悪K&RをNGワード設定しようかとおもてる

151 :デフォルトの名無しさん:2006/10/17(火) 09:47:22
>>149
規定が無い=仕様にない=使えない

ハイハイ、K&Rの話は終了

152 :デフォルトの名無しさん:2006/10/17(火) 11:48:35
>>144
なんか可愛いぞお前。

153 :147:2006/10/17(火) 15:13:51
>>148
レスありがとうございます。
境界を越えて書き込んでいる、ということは、
確保したメモリ領域を超えてアクセスしている、
ということでいいのでしょうか?
メモリを大量に確保して動かしてみましたが変化が無かったです。

VC++でコンパイルしているのですが、
Release だとある程度正常に動き、
Debug だと全く見当違いな動作をしたりと、
何だか怪しさ爆発です…

154 :デフォルトの名無しさん:2006/10/17(火) 15:17:45
>>153
そのまま悩み続けてろww

155 :デフォルトの名無しさん:2006/10/17(火) 16:42:29
>>153
そのfunc()にバグがあるとして、
ローカル変数版はそのバグを偶然巧く回避できて、
ヒープ版もReleaseビルドならなんとか回避できているのだろう。
Debugビルドはそういうバグにぶち当たるようにごみデータを詰め込むようになっているので、
「正しく異常動作」しているのだろう。

156 :デフォルトの名無しさん:2006/10/17(火) 20:03:27
未定義動作とはそういうもんだ。一見正しく動いているように見せかけても
おかしくなっても一向に問題なし

157 :デフォルトの名無しさん:2006/10/17(火) 22:18:58
>>153
ReleaseビルドとDebugビルドで動作が違う
ローカル変数を使ったときと、ヒープを使ったときで動作が違う

まず考えられるのは、初期化していない変数を参照している可能性
コンパイル時のチェックを一番シビアな設定にして、エラーはもちろんワーニング
をすべて取り除く

158 :デフォルトの名無しさん:2006/10/17(火) 23:18:42
>>149
現物が手元にないので確認できないが
K&R1 にも構造体代入についての言及はあったように記憶している
確か、将来の C では可能になるやも知れんとか言っていたような・・・

159 :147:2006/10/18(水) 00:43:51
>>155-157
レスありがとうございます。
>>157さんの指摘がまさにビンゴでした。
ローカル変数を全てチェックしたみたら初期化していない変数がありました。
複数人の手で書かれているコードで、尚且つかなりカオスしてたので大変助かりました。
みなさんどうもありがとうございます、スレ汚しすみません。

160 :デフォルトの名無しさん:2006/10/18(水) 00:48:04
課題3
入力した文字列の中に数字文字、アルファベット大文字、小文字がそれぞれ何個あるか表示するプログラムを作りなさい。
例) AB123cdを受け取ったら数字3、大文字2、小文字2

↑の答えお願いしますm(_ _)m



161 :デフォルトの名無しさん:2006/10/18(水) 00:55:14
>160
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/l50

162 :デフォルトの名無しさん:2006/10/18(水) 18:58:53
>>160
うちの大学にはこういうのがうじゃうじゃいるよ、
教科書も読まないでプログラミング受けに来る奴。
フランス語知らない奴が、いきなりフランス語は喋らないだろ?
マックとかケンタッキーだとかあんな高カロリーなものばっか食ってるからだいたい,,,,,,ブツブツ

163 :デフォルトの名無しさん:2006/10/18(水) 19:35:56
プロフェッショナルにとって理解することと感じることは車の両輪。
理解するだけでも感じるだけでもいけない。
どちらから入るかは性格による。
マの大半は感じることから入ったクチではないかな。
だから理解することに関して後ろめたさがあり、
それが教科書至上主義を助長していると思ってみたりしようじゃないかw

164 :デフォルトの名無しさん:2006/10/18(水) 20:40:13
ベクトルを正規化する式は
float x, y, z;//元のベクトル
float vx, vy, vz;//正規化したベクトル
float=s;
s=sqrt(x*x+y*y+z*z);
vx=x/s;
vy=y/s;
vz=z/s;

で求まると思いますが、sqrtを使わずに正規化するにはどうすればいいのでしょうか?
どうしても速度が気になります。

165 :デフォルトの名無しさん:2006/10/18(水) 20:42:25
どなたか感じた方いませんか〜

166 :デフォルトの名無しさん:2006/10/18(水) 20:58:31
あんっ!感じる!感じるわ!

167 :デフォルトの名無しさん:2006/10/18(水) 20:59:45
なんだこの右上のプレッシャーは

168 :デフォルトの名無しさん:2006/10/18(水) 21:20:57
>>164
自前で開平する効率のいいマクロ関数でも実装する

169 :デフォルトの名無しさん:2006/10/18(水) 21:22:12
このスレは標準Cのみの限定スレです。

170 :デフォルトの名無しさん:2006/10/18(水) 21:25:15
>>164
計算アルゴリズム【U】
http://pc8.2ch.net/test/read.cgi/tech/1129376543/

171 :デフォルトの名無しさん:2006/10/18(水) 21:33:37
>>162
知らないことを学びに来た奴がそれを学べないプアな教育機関を選んでしまった気の毒な奴だよ
予習が全てなんて恥知らずな公言をする穀潰し教師が横行できてしまう少子化社会だからな

172 :デフォルトの名無しさん:2006/10/18(水) 21:56:44
>>171
予習がすべて、なんて教師は論外だけど、
講義の時間中しか勉強しない、課題は自力でやらない、なんて学生も論外だろう。
そんな学生のペースに合わせて講義なんかされたら、知りたいことを学びに来た学生が気の毒だ。

173 :デフォルトの名無しさん:2006/10/18(水) 22:00:57
>>172
その教育機関がどんな連中を相手にしているかによるな
昼間は仕事でびっちりな人たち相手に宿題は物理的に無理な場合もある

174 :164:2006/10/18(水) 22:03:59
>>170
ありがとうございます。
そっちで聞いてみます

175 :デフォルトの名無しさん:2006/10/20(金) 02:43:31
C99 規格 6.5.3.3 では、単項マイナス演算子について以下のように記述されています。
"The result of the unary - operator is the negative of its (promoted) operand. The integer
promotions are performed on the operand, and the result has the promoted type."

そこで質問ですが、 -1u という式の型と値はそれぞれ何になるのでしょうか?

型は 1u が unsigned int で、整数拡張しても unsigned int のままなので
やっぱり unsigned int だと思うのですが、値のほうは符号無し型に対して
"negative" と言われても定義できないような気がします。もしや未定義動作でしょうか?

未定義動作ってことになると、 -sizeof(...) なんてコードでうっかり踏んでそう。

176 :デフォルトの名無しさん:2006/10/20(金) 03:57:26
演算子がおかしいって言われるんじゃないの?

177 :デフォルトの名無しさん:2006/10/20(金) 06:04:07
>>175
> 符号無しオペランドを含む計算は、決してオーバフローしない。すなわち、結果を
> 符号無し整数型で表現できないときは、その型で表現しうる最大値より1だけ大きい
> 数を法とする剰余を結果とする。
JIS X 3010:2003 本体6.2.5より

178 :175:2006/10/20(金) 10:23:30
>>176
エラーにはなりません。警告の出るコンパイラはあるようですが。

>>177
なるほど。それで決まりますね。
つまり -1u は unsigned int で UINT_MAX - 1 + 1 (== UINT_MAX) ということに。

unsigned int 以外の(より精度の高い)型に変換した場合に
ソースコードから期待される値は得られなさそうですので、
結局はやるべきではないですね。

ありがとうございました。

179 :デフォルトの名無しさん:2006/10/20(金) 10:28:17
>>176
とりあえず、コードで試してから書けよw

180 :デフォルトの名無しさん:2006/10/20(金) 10:29:47
errx() ってANSIか?


181 :デフォルトの名無しさん:2006/10/20(金) 10:30:31
>>178
ということは
0 - sizeof なら可だけど -sizeofならダメかもってこと?

182 :デフォルトの名無しさん:2006/10/20(金) 10:35:19
>>181
0 - sizeof と -sizeof は、両方とも >>177 のルールによって結果が決まるので
等価になると言えます。

unsigned int 同士の加減算に使う限りは負の値として作用してくれるので、
それだけで「ダメ」とも言い切れないですが。

183 :デフォルトの名無しさん:2006/10/20(金) 11:11:54
>unsigned int 同士の加減算に使う限りは負の値として作用してくれるので、

え??

184 :デフォルトの名無しさん:2006/10/20(金) 11:23:34
>>182
なるほど

185 :デフォルトの名無しさん:2006/10/20(金) 11:41:31
>>183
assert(3u + (-2u) == 1u);

186 :デフォルトの名無しさん:2006/10/20(金) 13:37:46
>>185
式の途中の値の型ってコンパイラが適当に処理してるってこと?
終端ならunsigned 型にするが、
途中なら単純に変換するのではなく
減算に使われているか調べて判断してくれてるってことでおk?

187 :デフォルトの名無しさん:2006/10/20(金) 17:50:36
問題:
orz == 3 を含む美しく実用的なコードを書け。

188 :デフォルトの名無しさん:2006/10/20(金) 18:00:07
{
    /* orz == 3 */
    実用的なコード
}

189 :デフォルトの名無しさん:2006/10/20(金) 18:05:36
printf(" ッブ\n);
printf("orz ==3 嫌なあいつ\n");


190 :デフォルトの名無しさん:2006/10/20(金) 18:13:31
最高にド低脳な発言してください in ム板(XIIII)
http://pc8.2ch.net/test/read.cgi/tech/1158275665/

191 :デフォルトの名無しさん:2006/10/20(金) 18:23:11
>>188
無駄なコメントは可読性を下げると思う

192 :デフォルトの名無しさん:2006/10/20(金) 18:32:59
>>191
なつかしい きょくが
ながれてるじゃないか。
あのころは、よかったな。

193 :デフォルトの名無しさん:2006/10/20(金) 19:24:37
if ((OTL==3)>>191) puts("鼻からぎゅ〜にゅ〜♪");

194 :誰かおねがい:2006/10/20(金) 19:31:16
サイトに番号つけたいんですが、下のは何で変な結果が出るのかわからん。
#include<stdio.h>
#define L 10
main(){
int i,j,y,x=0,site[L][L];
for(i=0;i<L;i++){
for(j=0;j<L;j++){
x++;
site[i][j]=x;
printf("%d\n",site[i][j]); //yoi
}printf("%d\n",site[i][j]); //hen
}
//system("pause");
}

195 :デフォルトの名無しさん:2006/10/20(金) 19:43:53
>>194
for文の仕様を100回音読しろ
それでもわからなければ諦めろ

196 :誰かおねがい:2006/10/20(金) 19:45:43
ごめん、なんでもない

197 :デフォルトの名無しさん:2006/10/20(金) 19:47:39
>>186
いいえ。185も単に>>177の規則に従った結果。

198 :デフォルトの名無しさん:2006/10/20(金) 20:38:17
>>185
assert(3u + ((unsigned int)(-(int)2u)) == 1u);

199 :さrg3:2006/10/20(金) 22:33:02
C言語おしえて

200 :デフォルトの名無しさん:2006/10/20(金) 23:14:53
gotoでの飛び先について質問なのですが、
ラベルが有効なのはgotoと同一の関数内のみなのでしょうか?
それともソースファイル全体、またはプログラム全体で有効ですか?

201 :デフォルトの名無しさん:2006/10/20(金) 23:29:32
>>200
同一の関数内のみ

202 :201:2006/10/20(金) 23:32:16
でもC言語のソースではあまりgoto文を見ないですけど
エラー処理へ飛ばすぐらいかな

203 :デフォルトの名無しさん:2006/10/21(土) 00:12:51
>>200
そんくらいやってみろ

204 :デフォルトの名無しさん:2006/10/21(土) 00:20:05
goto文は廃絶運動が起きてるからよ

205 :デフォルトの名無しさん:2006/10/21(土) 00:45:05
まぁ、滅多なことじゃ無い限り使うことも無い構文だしな。

206 :デフォルトの名無しさん:2006/10/21(土) 00:55:35
蛇蝎のごとく嫌うほどのもんでもないけどな。
たまに使う分には、それなりに便利だ。

207 :デフォルトの名無しさん:2006/10/21(土) 00:57:43
なぜ goto を使わないの?

これに歯切れ良く答えられない奴は異様なコードを書く

208 :デフォルトの名無しさん:2006/10/21(土) 01:10:07
使いまくりの俺には、何故使わないのか歯切れの良い答えが打線。
模範解答きぼん。

209 :デフォルトの名無しさん:2006/10/21(土) 01:14:31
goto文は構造化プログラミングの時代の嫌われ者になってしまった
あっちゃこっちゃ飛ぶのはよろしくないということだ

210 :デフォルトの名無しさん:2006/10/21(土) 01:15:46
次の標準規格にはgoto文の代わりに comefrom文を入れてもらおう

211 :デフォルトの名無しさん:2006/10/21(土) 01:26:29
本来goto文が悪いんじゃなくて、goto文の濫用が嫌われるんだがな。

goto文を使うべき場面も、少ないながらあるわけで・・・

212 :デフォルトの名無しさん:2006/10/21(土) 01:34:29
gotoを一切使わないなんて言っているやつを今まで何人か
見てきたが、(グローバル変数も一切使わないというヤツもいた)
プログラムなんて動けばいいんだと、俺は思う。

213 :デフォルトの名無しさん:2006/10/21(土) 01:51:29
まあ確かに動けば良いんだが、大抵は動かし続けなきゃならんからなー。
部屋が汚いくらいじゃ早々死にはしないが、限度を超えるのは考えもんだろうし。

214 :デフォルトの名無しさん:2006/10/21(土) 02:00:30
一万行くらいのコードを書けば数個くらいのgoto文を使うだろ。
そこに100個もgoto文使うやつがいたら、俺はそのコードを
興味本位で見せて欲しいわ。

215 :デフォルトの名無しさん:2006/10/21(土) 07:49:22
>>209
SPでもあっちゃこっちゃサブルーチンへ飛ぶね
ループや if, switch は分岐以外の何物でもないし
関数ポインタでの分岐に至っては飛び先が予測できないがSPで普通に使う

216 :デフォルトの名無しさん:2006/10/21(土) 09:32:14
goto排他原理主義者が見えない罠
・プログラミングと構造化について分けて考えられない

217 :デフォルトの名無しさん:2006/10/21(土) 10:27:56
だな
プログラミングでない構造化はそこいら中にあるから
要は何をすればいいのかが見えていれば
道具の1つに過ぎないものを見境いなく毛嫌いはしなくていいはず

218 :デフォルトの名無しさん:2006/10/21(土) 11:23:16 ?2BP(204)
「プログラミング」とか「構造化」とかあいまいな用語をならべて、
分けるとか分けないとか言ってるヤツの方が理解浅そう。

219 :入力した数字を表示したい ◆g/ZMVdytmo :2006/10/21(土) 11:25:08
#include <stdio.h>
void main (void)

{
int b_data[5],a,i;
int *b_pt;


a=0;

printf("2けたの番号を入力して下さい\n");

for(i=0;i<5;i++)

scanf("%d",&b_data[i]);

b_pt=b_data;

printf("入力された番号は\n");

for(i=0;i<5;i++){

printf("%d\n",b_data);

}
printf("以上です。\n");
}

オワタ

220 :入力した数字を表示したい ◆g/ZMVdytmo :2006/10/21(土) 11:26:02
配列を使用して、

221 :デフォルトの名無しさん:2006/10/21(土) 11:27:38
printf("%d\n",b_data);

printf("%d\n",b_data[i]);
じゃないの佐賀?


222 :デフォルトの名無しさん:2006/10/21(土) 11:28:19
>>218
浅かろうが深かろうが
おまえさんが食い込めないことだけは動かぬ事実
違うならそれを示してみな、お見事なら謝るから

223 :デフォルトの名無しさん:2006/10/21(土) 11:37:09 ?2BP(204)
>>222
まるで>>216がたいそうなことでも言ってるような口ぶりだな。

224 :デフォルトの名無しさん:2006/10/21(土) 11:38:45
「プログラミング」と「構造化」が曖昧…?

225 :デフォルトの名無しさん:2006/10/21(土) 11:42:32
>>223
ただ煽るだけで話してても実りのなさそうな奴にえさはやらんぞ
これからちょっと出かけるから、夕方までにもうちっとマシなこと書いとくんだな

226 :入力した数字を表示したい ◆g/ZMVdytmo :2006/10/21(土) 11:46:46
>>221 解決しました。ありがとうございました。

227 :デフォルトの名無しさん:2006/10/21(土) 11:51:21
>>223が理解浅そうな人です


っつーかemacsが容量不足でインスコできねぇ

228 :デフォルトの名無しさん:2006/10/21(土) 11:52:58
構造化ってもう時代遅れ?
確かに大事な概念だけど・・

229 :デフォルトの名無しさん:2006/10/21(土) 11:53:03
歳のせいか、数ヶ月前に自分で書いたコードを見直しても思い出すまでに
1〜2日かかります。
忘れないようにコメントをいろいろ追加しているのですが、それでも何で
こんな処理しているのか思い出せない場合があります。
どうすればよいでしょうか?皆さん、どうしていますか?

230 :デフォルトの名無しさん:2006/10/21(土) 11:54:24
>>229
ソースコードがコメントになるくらいのコード書く
これしかない

231 :デフォルトの名無しさん:2006/10/21(土) 12:22:54 ?2BP(204)
>>225
いや、おれは最初からなんか出せとか言ってないし。
あんたこそ、相手をあおって「なんか出せだせ」みたいな乞食みたいなことは
やめたほうがいいよ。

232 :デフォルトの名無しさん:2006/10/21(土) 12:26:35
>>231
出せない奴乙

233 :デフォルトの名無しさん:2006/10/21(土) 12:37:23
>>231
理解してないのに口先だけで世の中渡ってこれたんだ?
それだけでも勲章モノだから、もう出しゃばらない方がいいと思うよ、うん

234 :デフォルトの名無しさん:2006/10/21(土) 12:40:20
>230
それが、その、数ヶ月前のコードは、自分が書いたものに見えないんです。
まるっきり記憶が飛んでいて。まるで他人のコードを見ているように
感じます。それを1−2日かけて思い出すと、どうにか理解できる
場合があります。やはり歳かな。

235 :デフォルトの名無しさん:2006/10/21(土) 12:42:58 ?2BP(204)
>>233
まるで>>216がなにか理解しているかのような口ぶりだな。

236 :佐賀:2006/10/21(土) 12:48:35
はいはい佐賀佐賀

237 :デフォルトの名無しさん:2006/10/21(土) 12:55:16 ?2BP(204)
むしろ>>216みたいなコトを言ってるヤツのほうが、
「口先だけで世の中渡ってる」感が強い。

238 :デフォルトの名無しさん:2006/10/21(土) 12:57:22
(´д`)
 〜ただいま>>218が真っ赤な顔で必死になっております〜

239 :デフォルトの名無しさん:2006/10/21(土) 12:58:54
>>229
コメントを書く際は、まず最初に

/* 【何でこんな処理しているのか】 */
/* ・・・ */

と書くルールを決める。
他に書きたい事があるだろうが、それらは後回し。


240 :デフォルトの名無しさん:2006/10/21(土) 13:06:32
>>239
んだね
プログラミング以前に戻って情報を引っ張ってこれるなら、
全体が、何を問題にして何を目標にどんな解決法でコードを導いたのか、一筆書き加えると後々楽だね

241 :デフォルトの名無しさん:2006/10/21(土) 13:21:02
コメントも構造化。
構造化というか、クラスのように階層化できるのがベストなんだが。

242 :デフォルトの名無しさん:2006/10/21(土) 13:21:36
コードの動作じゃなくて意図を書かないと意味ないな

i++; //カウンタをインクリメント

とかアホかと

243 :デフォルトの名無しさん:2006/10/21(土) 13:32:54
コメントの文法ならともかく作法はスレ違いだと思うの。
確か専用スレなかったっけ?

244 :241:2006/10/21(土) 14:30:06
>>243
あるのか。是非逝ってみたいが、できれば誘導ヨロ。

245 :デフォルトの名無しさん:2006/10/21(土) 14:33:17
        コーディング規約 第2条
っ   ttp://pc8.2ch.net/test/read.cgi/tech/1068752664/

246 :デフォルトの名無しさん:2006/10/21(土) 14:36:21
サンクス。ちょっくら行ってくら。

247 :デフォルトの名無しさん:2006/10/22(日) 13:38:31
>>234
それは脳に血栓があるかもよ
場所によっては自己同一性にアクセスできなくなるから。


248 :デフォルトの名無しさん:2006/10/22(日) 19:41:24
絶えず自己進化を続けることに気付かない>>234

249 :デフォルトの名無しさん:2006/10/22(日) 21:24:02
char arr[1]={'A'};
arr
&arr
&arr[0]
&*arr
実質的に全部同じなんですが、違いを教えてもらえないでしょうか

250 :デフォルトの名無しさん:2006/10/22(日) 21:31:37
>>249
&arr だけ、型が違う。

251 :デフォルトの名無しさん:2006/10/22(日) 21:37:04
>>249
注意せよ、「実質的に」にひどい罠がある

252 :デフォルトの名無しさん:2006/10/22(日) 21:42:04
配列が式の中に現れると、原則として先頭要素へのポインタに変換される。
それを逆参照してまたアドレスを得ているだけなので、arrと&*arrは等価。

また添え字演算子は間接参照演算子などの糖衣構文であることから、&*arrと&arr[0]も等価。
故にarrと&arr[0]も等価。

&arrはというと、アドレス演算子が「式中で配列は先頭要素へのポインタに変換される」という規則の例外となっており、
配列そのものへのポインタが得られるということになっている。

まあ、ようするに&arrだけは結果の型がchar (*)[1]で、ほかは結果の型がchar *になる。

253 :デフォルトの名無しさん:2006/10/22(日) 22:08:36
>>250-252 ありがとうございます。
>>252 よくわかりました。
>&arrだけは結果の型がchar (*)[1]で、
>ほかは結果の型がchar *になる。


254 :デフォルトの名無しさん:2006/10/22(日) 22:14:57
>まあ、ようするに&arrだけは結果の型がchar (*)[1]で、ほかは結果の型がchar *になる。

これは嘘
printf("%u", sizeof arr);

255 :デフォルトの名無しさん:2006/10/22(日) 22:24:22
>>254
そのコードで何を証明したつもりなの?

256 :デフォルトの名無しさん:2006/10/22(日) 22:40:36
スルーでおk?

257 :デフォルトの名無しさん:2006/10/22(日) 22:57:43
痛い教えて君と同じことを言われたいかい?

258 :デフォルトの名無しさん:2006/10/22(日) 23:02:46
言われたい!!

259 :デフォルトの名無しさん:2006/10/22(日) 23:04:59
そんくらいやってみろ

260 :デフォルトの名無しさん:2006/10/22(日) 23:21:08
スルーでおk

261 :デフォルトの名無しさん:2006/10/22(日) 23:23:07
「sizeof arrの表示」と「arrや&arrの型」の間の関係が理解できる人はエスパー

262 :デフォルトの名無しさん:2006/10/22(日) 23:25:08
「サイズの違い」と「型の違い」の間の関係が理解できない人は C 使いにあらず

263 :デフォルトの名無しさん:2006/10/22(日) 23:26:52
また例の痛いヒトが現れたんだね。

264 :デフォルトの名無しさん:2006/10/22(日) 23:27:42
>>254は、他の人には見えないものが見えています。

265 :デフォルトの名無しさん:2006/10/22(日) 23:29:59
もう終わりかよ、つまんね

266 :デフォルトの名無しさん:2006/10/22(日) 23:32:35
エスパーって言葉どこのスレから拾ってきたの?

267 :デフォルトの名無しさん:2006/10/22(日) 23:32:55
たぶん、
char arr[1]={'A'};
arr
&arr
&arr[0]
&*arr
この次にやりそうなのを先に書いたんじゃないかな
とエスパー

268 :デフォルトの名無しさん:2006/10/22(日) 23:44:45
それはありえるけど、{'A'}
が怒っているように見えるのにエスパー

269 :デフォルトの名無しさん:2006/10/23(月) 00:35:29
>254
マジレスするとsizeofも配列そのものの大きさを返すことから、アドレス演算子同様あの規則の例外。

270 :デフォルトの名無しさん:2006/10/24(火) 15:06:26
入力した文字列の中に数字文字、アルファベット大文字、小文字がそれぞれ何個あるか表示するプログラムをポインタを使って作りなさい。
例) AB123cdを受け取ったら数字3、大文字2、小文字2

↑この答えお願いしますm(_ _)m


271 :デフォルトの名無しさん:2006/10/24(火) 15:43:24
#include<stdio.h>
#include<stlib.h>
#include<ctype.h>
int main(void) {
int numbers=0,upperCase=0,lowerCase=0;
char *p="AB123cd";
for( ; *p ; p++) {numbers+=(isdigit(p)!=0)?1:0;upperCase+=(isupper(p)!=0)?1:0;lowerCase+=(islower(p)!=0)?1:0}
printf("数字%n、大文字%n、小文字%n\n",numbers,upperCase,lowerCase)
return EXIT_SUCCESS;
}

272 :デフォルトの名無しさん:2006/10/24(火) 15:57:06
>>270-271
宿題スレ逝け阿呆。

273 :デフォルトの名無しさん:2006/10/24(火) 16:07:34
>>270
自分の間抜けさが露呈するから止めたほうがいいよ

274 :デフォルトの名無しさん:2006/10/24(火) 16:28:35
>>271

275 :デフォルトの名無しさん:2006/10/24(火) 16:29:59
↑すまん操作ミス、気にせんでくれ

276 :270:2006/10/24(火) 16:37:39
すみません。

OSはWindows XP home SP1
グラフィックは GemeForce5200です。
ハードディスクは1が40ギガBで2が80ギガBです。

277 :デフォルトの名無しさん:2006/10/24(火) 16:43:03
>>276
それは本気で言っているのか

278 :デフォルトの名無しさん:2006/10/24(火) 16:46:57
>>277
あっ、Bはバイトです

279 :デフォルトの名無しさん:2006/10/24(火) 16:48:11
>>276
そのプログラムはGemeForce5200じゃ動かないよ

280 :デフォルトの名無しさん:2006/10/24(火) 17:53:58
ファイル(ASCIIやバイナリ)を高速でコピーしたいのだけれど、
WindowsでもUnixでも使える関数があれば教えてケロ。


281 :デフォルトの名無しさん:2006/10/24(火) 18:13:16
fopen, fread, fwrite, fclose
必要に応じてsetvbuf

282 :デフォルトの名無しさん:2006/10/24(火) 18:20:25
>281
ありがとうございます。
できれば、サンプルをアップロードしてもらえるとうれしい。

283 :270:2006/10/24(火) 18:37:44
>>279
動きませんか・・・・ヒントは頂けたんで頑張ってみます。ありがとうございました。ペコリ

284 :デフォルトの名無しさん:2006/10/24(火) 18:51:49
異様な力場を感じる。
何かがおかしくなっていると感じるのだが
どこまでが正しかったのか分からない。
そんな経験ないだろうか。

285 :デフォルトの名無しさん:2006/10/24(火) 20:02:14
>>284
このスレが今そんな感じ

286 :デフォルトの名無しさん:2006/10/25(水) 00:21:28
関数ポインタにセットされている関数が、関数defかどうかを判断する処理を
mainと言う関数内で行いたいのですが、エラーが出てぜんぜんダメなんです。。。
誰か助けてください(泣)
わたしって馬鹿すぎですかね。。。
32bit処理系です(←関係ないですかね〜)


void ( *func )( void ) ;// 関数ポインタを宣言

void def( void ){//何か処理をする関数
}

void abc( void ){
func = &def ;// 関数defのアドレスをセット}
}

long check( void ){// 関数のアドレスを返す関数のツモリです
return( ( long )func ) ;
}

void main( void ){
if( check() == &def ){
//funcのの関数はdef
}
else{
//defでは無い
}
}


287 :デフォルトの名無しさん:2006/10/25(水) 00:31:56
すいませんが質問させてください。
キーボードから入力された文字列をHEXコードに変換するプログラムを書きたいんですけど
やりかたがさっぱりわかりません。
たとえばAと入力したとき、実際は0x41ですけどこれを0x0Aに変換したいんですがどなたか
アイデアをください。初心者なのでほんとお願いいたします。

288 :デフォルトの名無しさん:2006/10/25(水) 00:35:06
>>286
単なるwarnigじゃないんですか?
だとするとcheckのlongをvoid *にして(long)を取り払えばいいと思いますが。

289 :デフォルトの名無しさん:2006/10/25(水) 00:36:18
>>286 単純にabc()を呼んでないだけでは

290 :デフォルトの名無しさん:2006/10/25(水) 00:41:59
>>288
解答ありがとうございます。
明日会社で早速試してみます。

>>289
abc()は別の関数で呼んでいます、説明が悪かったと思います、申し訳ございません。


291 :デフォルトの名無しさん:2006/10/25(水) 00:46:04
>>287
distance = 'A' - 0x0A
putchar (getchar() - distance) ;

292 :デフォルトの名無しさん:2006/10/25(水) 00:52:16
スマソ
printf ("%X", (getchar () - distance)) ;

293 :デフォルトの名無しさん:2006/10/25(水) 01:13:18
>>292
ありがとうございます。俺の書き方が悪かったんですが、これだと0〜9まで
の入力がうまくいかないんですよ。16進数だから16通りのIf分岐
でできそうだけどもっとスマートにできないかなと・・・。

294 :デフォルトの名無しさん:2006/10/25(水) 01:34:02
>16進数だから16通りのIf

もちつけ。
頼むからもちついてくれ。
16進数で表現できるのは65536通りの数字なわけだが、1ビットごとに処理を分岐させるつもりかおまいさんわ。

295 :デフォルトの名無しさん:2006/10/25(水) 01:36:26
>>293
c2n(x){return (x&79)%55;}

296 :デフォルトの名無しさん:2006/10/25(水) 01:47:35
>>294
> 16進数で表現できるのは65536通りの数字なわけだが
オマエがおちつけ。

297 :デフォルトの名無しさん:2006/10/25(水) 01:48:55
>>295
そんな方法があったのか・・・
いつも0-9、a-f、A-Fの場合で条件分岐してやってたよ・・・

298 :デフォルトの名無しさん:2006/10/25(水) 01:51:17
>>294
落ち着かなくてイイ
ただこの世から消えてくれるだけでイイ

299 :デフォルトの名無しさん:2006/10/25(水) 02:52:12
16通りのif文なんて
保守担当者がリアルorzとなるのが目に浮かんで
オラなんだかとってもワクワクしちゃうぞ。

300 :デフォルトの名無しさん:2006/10/25(水) 03:30:35
switch caseのことかー!!

301 :デフォルトの名無しさん:2006/10/25(水) 05:41:45
16通りのifで驚くのは初級者
達人は16段のifを使う

302 :デフォルトの名無しさん:2006/10/25(水) 08:46:49
16段のfor文を書く俺がきましたよ。

303 :デフォルトの名無しさん:2006/10/25(水) 09:55:26
俺のターン!
>>302にgoto禁止を提示!

304 :デフォルトの名無しさん:2006/10/25(水) 10:52:54
おれならテーブルを使うな
それならキャラクタセットがASCII上位互換でなくてもOKだしなにより移植性が高い

305 :デフォルトの名無しさん:2006/10/25(水) 13:01:48
char s[10];
char* p = s;
@
p + 100;
A
p += 100;
B
p += 100;
*p;
どの時点で未定義ですか?
それともすべて未定義?

306 :デフォルトの名無しさん:2006/10/25(水) 14:09:37
3じゃね


307 :デフォルトの名無しさん:2006/10/25(水) 14:23:07
別に

308 :デフォルトの名無しさん:2006/10/25(水) 14:29:24
未定義の動作を引き起こすのは3だろうけど
1から値は不定になるよ。(例えばNULLと判定されても文句は言えない)
正常な比較等ができると保証されているのはs+10まで。
アクセスできるのは*(s+9)まで。

それと機種依存文字はやめた方がいいぞ。
他の板ならともかく、こういう板では互換性に気を配るべきだ。

309 :デフォルトの名無しさん:2006/10/25(水) 16:57:59
うんこ、ぷりっ。

310 :デフォルトの名無しさん:2006/10/25(水) 19:51:27
>>293
ありがとうございました。無事解決しました。

みなさんありがとうございました。

311 :デフォルトの名無しさん:2006/10/25(水) 22:14:45
ファイルa.h
struct A{
 struct A *next;
};
ファイルb.c
struct A *aroot, *alist;
func_a(){
 aroot = (struct A *)calloc(1, sizeof(struct A));
 alist = aroot;
 func_b();
 alist = aroot;
 while(alist = alist->next != NULL){
  alistの要素を表示
 }
}
ファイルc.c
extern A *alist;
func_b(){
 while(){
  func_c(alist);
 }
}
func_c(struct A *list){
 list = (alist->next = (struct A *)calloc(1, sizeof(struct A)));
}

大体このような感じでalistの要素を表示のところでalistの中身を次々に出ることを期待したんですが、
1つしか出ません。
アドレスを調べてみるとfunc_cを読んですぐの時点でlistのアドレスが毎回arootのアドレスになってました(順々にアドレスが増えていっていて欲しい)
func_cでcallocした後のアドレスは順々に増えていっています
なぜ1回1回listのアドレスがarootのアドレスに戻ってしまっているのでしょうか?
上記の範囲で問題があるのでしょうか?それとも書いてない部分に問題があるっぽいでしょうか?

312 :デフォルトの名無しさん:2006/10/25(水) 23:33:51
なんかやりたい事が良く判らんないけど、
func_c(struct A **list){ 
  *list = (alist->next = (struct A *)calloc(1, sizeof(struct A))); 
}
って事?


313 :デフォルトの名無しさん:2006/10/25(水) 23:49:21
func_a(){
 aroot = (struct A *)calloc(1, sizeof(struct A));
 alist = aroot;
の辺りも意味不明だな

314 :311:2006/10/26(木) 00:15:18
>>312
まさにそれっぽいです
試してみます

>>313
arootの領域を確保しておかないとnextに代入しようとしたときにエラーが出ると思ったので
確保してからalistがarootを指すようにしたんですが
どう書くのが正しかったのでしょうか?

315 :デフォルトの名無しさん:2006/10/26(木) 01:03:02
>>288
>>289

今日、早速試してみたら問題なくできました!!
本当にありがとうございました。

今まで4年間アセンブラで書いていて、急に環境がC言語になってしまって・・・
C言語は難しいです。。。

316 :デフォルトの名無しさん:2006/10/26(木) 01:34:14
Cのどこが難しいの?

317 :デフォルトの名無しさん:2006/10/26(木) 01:37:00
アセンブラで普通にプログラム書けるやつがC難しいって・・・
とりあえずインラインアセンブラで書いとけばいいんじゃね?

318 :デフォルトの名無しさん:2006/10/26(木) 01:42:57
>>316-317
ずっとアセンブラだけやってる人から見たら、そーゆーモノらしいよ。
とくにVBとかの高級言語になるともう完全にバイナリでの動作を
イメージ(する必要もないのに)できなくてギブアップしてしまうらしい。

まぁ、あれだ、彼らは言うなれば深海魚で浅い海にあがってくると破裂して死んでしまうんだよ。

319 :デフォルトの名無しさん:2006/10/26(木) 01:54:24
バイナリーでの動作をイメージするってどういうこと?破裂しそう。

320 :デフォルトの名無しさん:2006/10/26(木) 01:57:30
>>319
メモリ上にどのようにデータとコードが展開され、
レジスタがどのように使われるかわかんないと破裂しちゃうらしい。

321 :デフォルトの名無しさん:2006/10/26(木) 02:45:36
まさしく実装依存だ。コード中にマジックナンバー云々の域を越えてる。
int(ポインタ)が20バイトとか考えてるのかな。
それじゃ、破裂しちゃう。

322 :デフォルトの名無しさん:2006/10/26(木) 04:28:01
オレがたまに型無し言語(スクリプトとか)を使うときと同じ感じなのかな
コンパイルエラーが無いと破裂する

323 :デフォルトの名無しさん:2006/10/26(木) 05:34:59
ここはよく破裂するインターネッティングですね。

324 :デフォルトの名無しさん:2006/10/26(木) 08:21:52
確かに型なし言語は俺も破裂するわ

325 :デフォルトの名無しさん:2006/10/26(木) 08:41:24
型無し不安症候群とかこの際だからビョーキにしてしまおう

326 :デフォルトの名無しさん:2006/10/26(木) 08:44:37
WinAPIが形無しになったら病気にされても文句は言わないよ

327 :デフォルトの名無しさん:2006/10/26(木) 10:51:00
>>318
ポインタの型依存な加減算で嵌るらしい。
アセンブラにも似たのはあるけど(type ptr)、参照時の抜き出す大きさ解決だけだしな…

328 :デフォルトの名無しさん:2006/10/26(木) 11:12:40
そういう奴らに非手続き型言語やらせると面白そうw

329 :デフォルトの名無しさん:2006/10/26(木) 11:40:06
>>318
>イメージ(する必要もないのに)できなくて
不安になるんだろう。俺もVBやってると
「これNewしっぱなしで大丈夫なのか?」と不安になる事があった。

330 :デフォルトの名無しさん:2006/10/26(木) 12:27:00
どうすれば安心なわけ?

331 :デフォルトの名無しさん:2006/10/26(木) 12:30:46
>>329
不安になる必要はないぞ
ちゃんとリソースリークしてくれるから安心しろ

332 :デフォルトの名無しさん:2006/10/26(木) 12:59:19
ANSIなんですけど、

void main(void)

って書くと、intがありませんって警告が出るんですが、なぜ?


333 :デフォルトの名無しさん:2006/10/26(木) 13:25:59
ANSIだと mian の戻りは必ず int を要求するから

334 :デフォルトの名無しさん:2006/10/26(木) 13:26:20
mian → main

335 :デフォルトの名無しさん:2006/10/26(木) 14:19:52
>>334
miami

336 :デフォルトの名無しさん:2006/10/26(木) 16:58:07
>>333
そうなんですか…
でも石田晴久著の入門ANSI-Cには堂々と
void main(void)
って書いてあるんですよね…
この本はずれ?


337 :デフォルトの名無しさん:2006/10/26(木) 17:07:04
すみません。

有 効 桁 っ て 何 ?


338 :デフォルトの名無しさん:2006/10/26(木) 17:30:44
>>336
規格ではintを返すか、intをtypedefした型を返すか、実装依存の型を返すかの
いずれかでなければならないとされている。
よって、君の環境でvoidがOKならばvoidでも構わないし、ダメならばダメ。ただし、
int(とそのtypedef)以外をreturnとして指定した場合動かない環境が出てきても
文句は言えない。コード自体は規格違反ではない。
ただ、ANSI-Cと銘打ってある以上、intを指定するのが望ましい。よって、規格
違反ではないが、「親切な」本とは言い難い。

339 :デフォルトの名無しさん:2006/10/26(木) 18:43:56
>>338
なるほど〜
ありがとうございます。
自己参照型構造体を知りたくて買ったんだけど、はずれだったか〜

340 :デフォルトの名無しさん:2006/10/27(金) 06:26:05
そういうわかりやすいミスをしている本はむしろ注意力を身につける練習にぴったりだろ
極端な話、規格書にだってエラッタはある
何も信じるな、全てを疑え

341 :デフォルトの名無しさん:2006/10/27(金) 06:51:27
>>340
ちょいカッコいいな、実際は疑わしいが

342 :デフォルトの名無しさん:2006/10/27(金) 07:35:49
サヨるのは十代までだ。
大衆に迎合して体制に媚び諂い、お上が黒を白と言えば即ちそれは白なのだと信じることが
腐敗を極めた俗世を生き抜く真理。
疑ってはならん。
ルーク。ソースを信じるのだ。

343 :デフォルトの名無しさん:2006/10/27(金) 07:41:04
引っ込めヒッピー!
ここは日本だ!

344 :デフォルトの名無しさん:2006/10/27(金) 11:17:45
>>337
数学の勉強しろ
精度がどの桁数まで有効かって事だ

一般的に使われる浮動小数は2進数で表現されて居るので精度は2進数の桁数で表現できるんだけど
通常使う10進数では有効桁数は違う


345 :デフォルトの名無しさん:2006/10/27(金) 11:35:28
c言語初めて1ヶ月で壁に当たっています。
レベル低くて申し訳ないんですが教えてください。

ファイル操作に関する問題なのですが、fprintf()をつかって出力しています
このとき[^z]の入力を判断したいのですが不可能ですか?
個人で勉強してるので聞くところがここしかありません><

346 :デフォルトの名無しさん:2006/10/27(金) 11:43:51
>ファイル操作に関する問題なのですが、fprintf()をつかって出力しています
             (´-`).。oO(何を出力するのかなあ)
>このとき[^z]の入力を判断したいのですが不可能ですか?
            (;゚Д゚)…え?

347 :デフォルトの名無しさん:2006/10/27(金) 11:44:20
>>345
初心者スレへどうぞ。
つーか、出力関数で入力判断って何がしたいのやら。
#巧く説明できないようなら日本語を遣り直した方がいいかもね。

348 :345:2006/10/27(金) 12:08:29
間違えてました。ごめんなさい
scanf("%s",str)で^zを判断する方法が知りたいです

349 :デフォルトの名無しさん:2006/10/27(金) 12:15:07
初心者スレへ池といってるのに人の話を聞かない奴だな。
^zが特別扱いされるかどうかすら環境依存だ。このスレで扱う内容ではない

350 :345:2006/10/27(金) 12:32:30
読み飛ばしてました
初心者スレいってきま

351 :デフォルトの名無しさん:2006/10/28(土) 04:31:38
双方向リストをソートしたいのですが、適当なソート方法があれば教えてくださいませ
配列におけるソート方法はいろいろ学習したのですが・・・

352 :デフォルトの名無しさん:2006/10/28(土) 07:36:41
マージソートだな

353 :デフォルトの名無しさん:2006/10/28(土) 08:49:00
つーか、スレ違いだな。
今アルゴリズムスレが機能しているかどうかは知らんが。

354 :デフォルトの名無しさん:2006/10/28(土) 09:29:21
すいませんスレ違いかもしれませんが、きかせてください
C言語の勉強して基本情報をとったので、オブジェクト指向をやってみたいのですが
C++とC#のどちらをやったらいいのですか。仕事とかではなく趣味なのですが

355 :デフォルトの名無しさん:2006/10/28(土) 09:46:40 ?2BP(204)
>>351
「C言語で書くアルゴリズム」って本に、リストのクイックソートが載ってるよ。

356 :デフォルトの名無しさん:2006/10/28(土) 09:48:36 ?2BP(204)
>>354
C++とC#とJavaを読めるようにしとけばいいんじゃないの?

357 :デフォルトの名無しさん:2006/10/28(土) 15:42:36
>>354
普通にJavaがいいよ
Windowsで何か作りたいのがあるならC#
仕事でしょうがなくC++

358 :デフォルトの名無しさん:2006/10/28(土) 17:47:29 ?2BP(204)
Java,C++,C#あたりは、どれか一個やれば、
オブジェクト指向の解説本に載ってるようなコードは、
他の言語でも、だいたい読めるよ。

359 :デフォルトの名無しさん:2006/10/28(土) 23:43:06
func A(struct A a){
....
a->any = malloc()
}

func B(){
struct A a;
funcA(&a);
}

この関数Aの中のmallocで確保した領域は
funcBに戻った時点で未定義ですよね?

360 :デフォルトの名無しさん:2006/10/28(土) 23:49:53
>>359
そもそもコンパイルエローだよちんこ!

361 :デフォルトの名無しさん:2006/10/28(土) 23:54:08
うーんサンプル適当に書いてしまった
とりあえず、関数のスコープを跨ぐ領域の確保を行う場合は
どうすればいいの?4分木作りたいけど、なんか別関数でアクセス
するとすぐセグメンテーションフォルトってやつが出る

362 :デフォルトの名無しさん:2006/10/29(日) 00:02:25
きっとポインタの値渡ししてるんだろうなあ・・・

363 :デフォルトの名無しさん:2006/10/29(日) 01:00:11
ううーん関数側でmallocする場合って

void char(char ** buf)とかでいいの?
でもさmallocでエラー出たときどうすればいいの?

364 :デフォルトの名無しさん:2006/10/29(日) 01:01:09
>>363 ヌル詰めれば?

365 :デフォルトの名無しさん:2006/10/29(日) 01:04:01
>>361
まぁ、初心者スレにでも実際のソースを貼って味噌。

366 :デフォルトの名無しさん:2006/10/29(日) 01:35:19
プログラムからファイルの読み込みや書き出しを
行うとはどういう意味なのでしょうか?
コピーを作ると言う事なのでしょうか?

367 :デフォルトの名無しさん:2006/10/29(日) 01:38:49
そのまんま。
ソースファイルにファイルを読んだり書いたりするコードを記述し、
それをコンパイルし実行する。するとソースに書いたとおりにファイルがメモリへ読まれたり書かれたりする。

368 :デフォルトの名無しさん:2006/10/29(日) 01:38:54
>>366
質問する前に調べたか?
自分で作ってみたか?

369 :デフォルトの名無しさん:2006/10/29(日) 01:44:29
>>367
ということは、実行ファイルに書き込まれると言う事なのでしょうか?

>>368
実行してみても、実感が湧きません。
コピーファイル(出力ファイル?「_」)ができるのですが・・・・
それが何に使うのか、何故できたのかがわかりません。
入門書を読んでいます。

370 :デフォルトの名無しさん:2006/10/29(日) 02:21:39
授業風景を思い浮かべろ
黒板が読み込んだファイルで
お前が記憶領域で
ノートが出力ファイルだ

371 :デフォルトの名無しさん:2006/10/29(日) 02:39:22
先生!出力ファイルに何も出力されてません!

372 :デフォルトの名無しさん:2006/10/29(日) 02:44:31
>>370-371
それは中央演算処理装置が無いのが鯨飲(←なぜか誤変換される)


373 :デフォルトの名無しさん:2006/10/29(日) 02:53:46
何この漫才

374 :デフォルトの名無しさん:2006/10/29(日) 03:10:34
C言語の勉強用の課題を集めたwikiがあったと思うのですが、
検索をしても見つかりません
もうなくなってしまったのでしょうか?


どこに書き込めばいいか分からず書き込ましていただきました。
スレ違いでいしたら、誘導お願いします。

375 :デフォルトの名無しさん:2006/10/29(日) 03:30:58
>>370
ありがとうございました、イメージは掴めました
要するに「_」が付いてできたファイルが僕のノートと
考えてみます。

376 :側近中の側近 ◆0351148456 :2006/10/29(日) 09:24:33
>>359
(っ´▽`)っ
関数Aの中のmallocで確保した領域が、
関数Bで定義されているポインタによって指されていれば
関数Bの中では確保されている状態です。
mallocがどこで行われようが、
問題はそれを指すポインタの有効範囲(スコープ)なんです。

(っ´▽`)っ
そもそもfreeをかけなければずっと確保し続けるというのが
C言語の仕様なのではなかろうか?

(っ´▽`)っ???
どうなんだろう?
ポインタのスコープを抜けると自動的にfreeをかけてくれる
ガーベジコレクションみたいな機能って
C言語のコンパイラにあるのかな?

377 :デフォルトの名無しさん:2006/10/29(日) 09:42:02
>>376
初心者スレへどうぞ。

378 :デフォルトの名無しさん:2006/10/29(日) 09:50:25
>>369
> それが何に使うのか
ここでは、ファイルができるということを学ぶのであろうから、
正しく出力されてさえいれば、ファイルの中身そのものはどうでも良い。

> 何故できたのか
ソースコードにそう書いたから。

379 :デフォルトの名無しさん:2006/10/29(日) 10:32:35
>>378
>ソースコードにそう書いたから
またミもフタもない言い方を。
一千年の時を経て今再び奇跡が起こったのだ、とか、
PCが君を勇者だと認めたのだ、とか、
初心者にはそういうソフトでかつドラマチックな演出が
必要とされているのではないのかね。

…コンパイラとか実行形式とかOSとかCPUとかノイマン型とかブール代数とか、
はたまたMOSFETの動作原理とか、
何から何まで説明しなければ、何故出来たのかの質問に答えていることにはならないだろう。
そこまで答えるだけの体力も知力も時の運も自分には既に無い。

380 :デフォルトの名無しさん:2006/10/29(日) 10:38:45
>>379
愚痴はチラシの裏にかいとけ

381 :デフォルトの名無しさん:2006/10/29(日) 20:33:48
このスレがチラシの裏ですよ^^

382 :デフォルトの名無しさん:2006/10/30(月) 02:58:04
急速にスレの質が低下してまいりました


ってのを最近見なくなった

383 :デフォルトの名無しさん:2006/10/30(月) 08:10:21
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました
急速にスレの質が低下してまいりました



384 :デフォルトの名無しさん:2006/10/30(月) 22:43:31
int tmp,i,z,a[4],b[4];
b[0]=1;b[1]=1;b[2]=1;b[3]=1;b[4]=0;

printf("配列に値を格納してください。\n");
for(i=0;i<=4;i++)
{
printf("a[%d] = ",i);
scanf("%d",&a[i]);
}

for(i=0;i<=5;i++)
{
for(z=0;z<=4;z++)
{
if(a[i] > a[z])
{
b[i]=b[i]+1;
}
}
}

printf("配列のデータと順位\n");
for(i=0;i<=4;i++)
{
printf("a[%d] = %d%d番目\n",i,a[i],b[i]);
}
数値をキーボード入力して
入力した数値を降順に順位をつけて出力したかったのですが
なぜか最期の数値がおかしくなります
サンプルで入力した数値は12,10,32,14,8です


385 :デフォルトの名無しさん:2006/10/30(月) 22:51:53
>>384
int a[4]];
と定義したら、有効な配列要素はa[0],a[1],a[2],a[3]の4つ
a[4]は参照すると誤動作をする(コンパイラはチェックをしない)

a[4]を使いたければint a[5];と定義すること。


386 :384:2006/10/30(月) 22:58:55
>>385
ありがとうございます

387 :デフォルトの名無しさん:2006/10/31(火) 12:02:47
enum week { SUN, MON, TUE, WED, THU, FRI, SAT };
とした時、要素が7個あることをプログラムの中で知る方法は
ありますか?

388 :デフォルトの名無しさん:2006/10/31(火) 12:16:33
enum week { SUN=0, MON, TUE, WED, THU, FRI, SAT, NUM_WEEK };
として NUM_WEEK で我慢する

389 :デフォルトの名無しさん:2006/10/31(火) 12:29:18
>388
ありがとうございます。
プリプロセッサか何かを駆使して、どうにかできないかなあと
考えてみましたが、無理みたいですね。

390 :デフォルトの名無しさん:2006/10/31(火) 17:30:46
int main(void){
・・・
return 0 ;
}

void main(void){
・・・
return ;
}
は何が違うの?


391 :デフォルトの名無しさん:2006/10/31(火) 18:18:37
>>390
前者は規格(ISO/ANSI/JIS)で認められている形式。
後者はそうではなく、(コンパイルできるとしたらそれは)各コンパイラが独自拡張として受け付ける形式。

392 :デフォルトの名無しさん:2006/10/31(火) 18:47:38
だれか馬鹿な俺に、ポインタを教えてくれ。
char str[][100]={"JAPAN","USA","CANADA"};
char (*p)[];
p[0]=str[0];

にすると、
(*p)には文字列の先頭アドレスが入る
pにも文字列の先頭アドレスが入る

この違いは何!?


393 :デフォルトの名無しさん:2006/10/31(火) 19:00:25
すみませ〜ん
#include <stdio.h>

int main(int argc,char *argv[]){
printf("command name\t: %s\n",argv[0]);
printf("contents of argument\t: %s\n",argv[1]);

return 0;
}
これがエラーになるのは何でですか?

394 :側近中の側近 ◆0351148456 :2006/10/31(火) 21:07:40
>>393
(っ´▽`)っ
実行時にパラメータを設定してるか?
指定しないとargv[1]はNULLとなり、
%sで異常終了するだろうね。

395 :デフォルトの名無しさん:2006/10/31(火) 21:07:49
実行時のエラーですか?
コンパイル時のエラーですか?
エラーメッセージは何ですか?
意図する動作は何ですか?
引数には何を渡しましたか?

396 :デフォルトの名無しさん:2006/10/31(火) 21:12:29
Cで数値計算というとLAPACKあたりできまり?
統計計算は、どれがお勧め?


397 :デフォルトの名無しさん:2006/10/31(火) 21:16:24
>>392
>char (*p)[];
「p は、char の配列 (= 文字列) の先頭を指すポインタ」という宣言。
因みにこれが char *p だと
「p は、char (それが配列かどうかは別として) を指すポインタ」だが
実質、大差ない。

ただ、いずれにしろ宣言部分の書式なので
>(*p)には文字列の先頭アドレスが入る
わけではない。

398 :側近中の側近 ◆0351148456 :2006/10/31(火) 21:33:16
>>392
(っ´▽`)っ ポインタを考える時にはメモリの状態を考えると良い☆

番地: 中身
1001: 'J'  ←strが確保した領域(1001〜1300)
1002: 'A'
1003: 'P'
1004: 'A'
1005: 'N'
1006: '\0'
(略)
2101: 1001 ←pが確保した領域

str[0][0] = 'J'
&str[0][0] = str[0] = 1001
p[0] = 1001
&p[0] = p = 2101
*p = 1001


399 :デフォルトの名無しさん:2006/10/31(火) 22:00:04
いい加減、どうでもいいことはこっちでやって下さい

C言語なら俺に聞け(入門篇) Part 3
http://pc8.2ch.net/test/read.cgi/tech/1160682950/

400 :デフォルトの名無しさん:2006/10/31(火) 22:51:51
>>392 C++になっちまったが、このソースの結果を考えてみてくれ。
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
char str[][100]={"JAPAN","USA","CANADA"};
char (*p)[100];
p = &str[0];
printf("%p\n%p\n", p, *p);
printf("%s\n%s\n", typeid(p).name(), typeid(*p).name());
return 0;
}
要するに、「たとえアドレスが同じでも、型が違う」ということ。

401 :デフォルトの名無しさん:2006/11/01(水) 00:11:31
>>392
「本州の最北端」と「青森県の最北端」は同じアドレス

402 :393:2006/11/01(水) 10:22:51
>>394,395
コンパイル時のエラーです。
/lib/なんちゃらなんちゃらが読み取りエラーみたいな
メッセージがでます。

403 :デフォルトの名無しさん:2006/11/01(水) 11:04:51
>>402
「/lib/なんちゃら」 が出てくるならコンパイル時じゃなくてリンク時だと思うけど
それ多分ディスク壊れてるよ

404 :393:2006/11/01(水) 13:33:57
>>403
ガ━━(゚Д゚;)━━ン!
どうも…。

405 :デフォルトの名無しさん:2006/11/01(水) 17:22:18
過去ログ置き場ってなんでパート123で止まってしまったんですか?

406 :デフォルトの名無しさん:2006/11/01(水) 19:32:32
>>405
これでもどうぞ
http://makimo.to/cgi-bin/search/search.cgi?q=C%8C%BE%8C%EA%82%C8%82%E7&andor=AND&sf=0&H=&view=table&shw=100&D=tech

407 :デフォルトの名無しさん:2006/11/01(水) 21:21:44
>>405
管理人が飽きたとか逃げたとか失踪したとか死んだとか

408 :デフォルトの名無しさん:2006/11/02(木) 00:26:27
すいません、哲学的な質問です。

古いPowerMac上のMPWコンパイラでプログラミングしているのですが、素朴な疑問です。
MacにはToolBoxなるAPIみたいな関数があり、画面への
文字列の描画やリソースへのアクセス、デバイス操作、ファイル操作などは
すべてToolBoxの関数を使って実現されます。

Windowsでも同様と思いますが(MFC/Windows API等)、Unix互換OS上では
gccによりANSI規格準拠のファイル生成作業が行なわれますが、GCCが移植された
DOSやWindows(2k/XP/98/NT)でも同様にfopenやfputs、fcloseで
ファイルが生成されたりします。

当然fopen/fputs/fcloseでファイル生成はMacでも可能ですが、
Unixは別として、WindowsプログラミングやMacプログラミングから見た場合、
こういった生っぽい関数をいじるような低レベルなプログラミングはあまりして欲しくないんでしょうか。

ファイル操作ですが、MacではStandardGetFileというルーチンで
OS標準のファイル選択ダイアログを出して、ファイルの操作を統括しています。
Windowsも同様にエクスプローラのサブセット?を表示してやりますよね。

どう思いますか?

409 :408:2006/11/02(木) 00:32:16
こういうコードです。完全ANSI準拠ですけど。
Mac/Windows(DJGPP; GCC)/DOS/NetBSDで動作確認済み

#include <stdio.h> /* for file I/O */
#include <stdlib.h> /* for exit func */

int main(void)
{
 char str[80] = "This is a test string to be written onto a new text file.";
 FILE *fp;

 if((fp = fopen("NewFile.txt", "w+")) == NULL){
  fprintf(stderr, "File open failed.\n");
  exit (1);
 }
 if((fputs(str, fp)) == EOF){
  fprintf(stderr, "Write error!\n");
  exit (1);
 }
 if(fclose(fp) == EOF){
  fprintf(stderr, "File close failed!\n");
  exit (1);
 }
 return (0);
}


410 :デフォルトの名無しさん:2006/11/02(木) 00:34:18
>>408
他の環境に移植する予定がないなら便利な方で
移植する予定があれば標準で

っていうよりも、依存部分をなるべくまとめて
対応する部分の差し替えで済むなら便利な方で

古いMacなら早晩買い替えそうだしね
でも、その時もそのコードを必要とするかというと・・・どうだかね?

411 :408:2006/11/02(木) 00:40:06
>>410
なるほど。ありがとうございます。
そうすると、たとえばベクターとかにWindows用のアプリケーション・ソフトが
たくさんありますが、これはもうWin32の環境に注力しているのであって、
MacやDOS、Unix互換OSへの移植はほぼ考えていない、と。
ちょっと考えただけでも、タイムスタンプ変更ツールなど。
もろにOS依存ですけど。

常識的に考えてそうですよね。けれども、fopen/fputs/fcloseみたいな
生っぽい関数ってCの中でも(とりわけANSI C)異色ですよね?

412 :デフォルトの名無しさん:2006/11/02(木) 01:05:17
>>408

Windows用のソフト作者が皆、他環境への移植を考えていないというわけでもないだろう。
例えばテキストエディタでも、グラフィカルな部分はOSごとに全く異なる処理が必要かもしれないけど、
内部的なデータ管理などは環境に依存せずに流用できると思う。
(実際にどう作られているのかは知らないが。)
単に個人レベルでやっていると各種プラットフォームをカバーするほどのマンパワーがないとか、
機能を充実させることが楽しいのであって他環境への移植には技術者的な興味が沸かないとか、
そういう部分も大きいのかも。

fopen等が生っぽくて異色ということは無いだろう。
ファイルという概念はかなり多くのコンピュータで基本的な概念だし、
ANSI準拠の標準ライブラリなのだから、特殊な環境への移植を考えているのでなければ
使用を躊躇う理由はあまりないんじゃない?
むしろ、OS固有のシステムコール等を隠してくれるのだから、移植性を考えるなら
積極的に使っていいと思う。

ユーザにファイルを選択させるなら、そのOSで標準的なデザインのダイアログを開いたほうが便利だから、
その場合は各OS固有の便利なライブラリを使用すればよいし、
内部的な処理でファイルI/Oするならfopen系でも十分なはず。
要は適材適所ということで。

ところで、
>すいません、哲学的な質問です。
これはかなり感覚がずれてないかい? 哲学ってそんなもんじゃないだろう。

413 :408:2006/11/02(木) 01:38:18
>>412
大部分は同意なんだけど、fopen/fclose/fseekなどが
生っぽいという感触は間違ってないと思うけどな。

だいたい、それぞれの出自をたどればUnixのopen/close/writeとかの
システムコールに行き着くわけでしょ?そもそもUnixを書くために
Cが生まれたくらいだし。

Windows上のVCとかでコンソールアプリ作ってさ、printfやら
fputsやらも使えるけどさ、やっぱコンソールアプリいきなりでてきたら
フツーの人はビビるでしょ。Macでもコンソールアプリつくれるけど、
通常のWindows/Macのプログラミングのゴールはやっぱさ、
こうウインドウが出てさ、ダイアログが出てマウスでポチっとな、ってやつでしょ。

そういう、エクスプローラダイアログ出して、文字入力ボックス出すんじゃなくて、
fputs/fwriteしちゃうのが生っぽい、と思ったわけ。

これ、哲学でしょ、プログラミングの、依存・非依存のハナシとしては。

414 :デフォルトの名無しさん:2006/11/02(木) 02:44:59
哲学でもなんでもなくって単なる主観の垂れ流しな気がするんだが。

415 :デフォルトの名無しさん:2006/11/02(木) 04:15:41
そういう哲学考えて生産性なんかあんの?

416 :デフォルトの名無しさん:2006/11/02(木) 05:25:22
つーか、スレ違い。

417 :デフォルトの名無しさん:2006/11/02(木) 13:17:43
生っぽく見えるのは見た目がそうだからだろう。
それはOSのアーキテクチャの問題であって言語の問題じゃない。

思えば自分も工房の頃はなんちゃって哲学に目覚めたことがあったな…

418 :デフォルトの名無しさん:2006/11/02(木) 17:47:39
すみません…
C言語でWinXP上にJavaみたいなウインドウ出したいんですけど、
それって出来ます?
LINUX上でもいいんですけど…

419 :デフォルトの名無しさん:2006/11/02(木) 19:09:17
>>418
>>1 の「標準C」の意味が解らなかったのか
>>1 の日本語が読めなかったのか
そもそも >>1 なんか読んでないのか知らんが
>>416 を心に刻め。

420 :デフォルトの名無しさん:2006/11/02(木) 20:59:28
C言語で一文字の変数って非常識?
forに限った使用だったんだが...

421 :デフォルトの名無しさん:2006/11/02(木) 21:00:55
Javaで出来ることはC言語でも出来る。Javaのコア部分はC言語だから。

422 :デフォルトの名無しさん:2006/11/02(木) 21:05:39 ?2BP(204)
>>421
意味分からん。
VMやらコンパイラがCで書かれてるってことか?

423 :デフォルトの名無しさん:2006/11/02(木) 21:43:50
>>420
整数にi, j, k, l, n, mを使うのは非常識ではない
FORTRANのなごりか

424 :423:2006/11/02(木) 21:55:51
あと、ポインタにp. qを使ったり
for文の制御変数に一文字の変数はごく普通

425 :デフォルトの名無しさん:2006/11/02(木) 22:15:33
無理してlfXとかつけると返って分かりにくくなることがある

426 :デフォルトの名無しさん:2006/11/02(木) 22:50:55
Deleteキーのキーコードって幾つですか?
また、CTRL+H でバックスペースみたいに、
CTRL+○ でどのキーを押せばDeleteになりますか?

427 :デフォルトの名無しさん:2006/11/02(木) 23:02:03
そうですよね。使い方さえ間違わなければ一文字変数有りですょね。(´∀`)
非常識って言われてちょっとキョドってしまった。w
楽になりました。ありがd♪

428 :デフォルトの名無しさん:2006/11/03(金) 00:32:12
C言語と関係ないけど。
>>426 
>Deleteキーのキーコードって幾つですか?
ASCIIコード表を読め。
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html

キーコード調査プログラム。
#include <stdio.h>
#include <conio.h>
int main()
{
int c;
c = getch();
printf("%x\n", c);
return 0;
}
ただしconio.hはDOS依存。UNIXは知らん。
あとキーコードには2バイトのケースもあるので、
その場合はkbhit関数等を駆使して調べる。

429 :デフォルトの名無しさん:2006/11/03(金) 01:14:43
>>427
私のコーディング規約では非推奨としている。
特にiは検索しにくいので個人的には好かん。
尚、可読性の点からlは却下。

430 :デフォルトの名無しさん:2006/11/03(金) 01:17:45
forは何でまわしてるの?

431 :デフォルトの名無しさん:2006/11/03(金) 01:19:54
dwLoopCounter

432 :デフォルトの名無しさん:2006/11/03(金) 01:26:46 ?2BP(204)
> dwLoopCounter

素人くさい。。。

433 :429:2006/11/03(金) 01:32:29
>>430
icとかix, iyとかitとか状況により色々。
最近はC++でstl使うことが多いからそもそもループ制御に整数変数を使うこと自体減ってるが。

434 :デフォルトの名無しさん:2006/11/03(金) 01:57:12
短い変数が嫌いな人への皮肉を込めて書いてみますた
もっと長大な名前にしたかったんだが

435 :デフォルトの名無しさん:2006/11/03(金) 02:01:17
プログラム書く時間の2割ぐらいは変数とか関数の名前を考えるのに使われてる気がする

436 :デフォルトの名無しさん:2006/11/03(金) 02:01:37
釣りにもならんわ。

しかし短い変数が嫌いってのもなんだかな。
言語屋や論理屋がCやC++みたいな実務優先の汚れ言語に付き合うのは
疲れるばかりだと思うんだが。

437 :429:2006/11/03(金) 02:11:52
漏れのことか?
漏れならばりばりの実務屋だが。
エディタで変数を追うのに、i一文字だと一々ifにぶちあたって面倒だとは思わないか?
この板に貼られているコードの断片の制御変数にicを使っているのは漏れだけじゃないようだし、
一文字変数嫌いはそれなりにいそうだが。

438 :デフォルトの名無しさん:2006/11/03(金) 02:18:22
えーと外部結合の識別子の長さ制限はC99で撤廃されたんだっけ?
と無理やりタイトルに沿った話題に戻してみる

439 :デフォルトの名無しさん:2006/11/03(金) 02:19:50
カーニハン&パイク両氏のプログラミング作法では、
一文字変数をループに普通に使ってるけどな。

440 :デフォルトの名無しさん:2006/11/03(金) 02:50:57
まさに自転車置場の議論

441 :デフォルトの名無しさん:2006/11/03(金) 02:52:32
>エディタで変数を追うのに、i一文字だと一々ifにぶちあたって面倒だとは思わないか?

ぜんっぜん思わんわ。
どんな状況でも俺流を押し通せるのはマの資質の一つかもしらんが
慣習的なものとはいえ、これだけ広く普及してるモツにあえて牙剥くだけアホらしい。
まあ、好きにすれば。

442 :デフォルトの名無しさん:2006/11/03(金) 02:54:55
>>437
レギュラ検索すればいいんじゃね?

443 :429:2006/11/03(金) 03:38:12
>>442
インクリメンタルサーチで事足りるときに、一々そこまでするかという問題。
#マウスがないとカーソル移動できなかったりカーソルキーを連打するような使い方に馴れてると面倒を感じないだろうなぁ。

>>441
いや、モツは鍋にしても苦手なんで牙むくことはないがw
冗談さておき、なにをむきになっている?
iは好かんと言うことがそんなに気に入らないのかねぇ……

444 :デフォルトの名無しさん:2006/11/03(金) 04:21:55
Cを勉強しててソースコード読んでたら
far ポインタ っていうのがあって・・・
char * far lp;
とかあったんですよ。
手元ANSIの辞典には項目がなく
調べてみると、大雑把にはメモリが大きくなったから
セグメントやらオフセットやらがどうのこうのと・・・

それはおいておいて、このfarっていうのが
bcc32だと変数名と認識されるのかエラーなんです

farとかnearとかって廃止された予約語なんですか?
それとも非標準のC?
調べた印象だと普通にあるみたいなのですが、
そのへんの経緯を教えてください

PS 32bit系ならfarをはずすだけでとりあえずそこはおk?

445 :デフォルトの名無しさん:2006/11/03(金) 04:44:21
16ビット時代の遺物の予約語だな。
BCC5.0.2当たりならまだ現役で残ってるけど

446 :デフォルトの名無しさん:2006/11/03(金) 04:56:56
#define far
って書いときゃOK

447 :デフォルトの名無しさん:2006/11/03(金) 05:07:30
((((;゚Д゚)))ガクガクガクブルブルブル
8086セグメントの悪夢を思い出した・・・・・

448 :デフォルトの名無しさん:2006/11/03(金) 06:08:48
もう、あれだよな
C99とかどうでもいいな
それに厳密にしたがってるコンパイラは
どれだけ普及してるんだってな

449 :デフォルトの名無しさん:2006/11/03(金) 06:12:26
>>445
>>446
ありがとうございました
型修飾子だった時代もあったんですね

450 :デフォルトの名無しさん:2006/11/03(金) 07:57:45
>>431
それfor内で何度も出てくると見にくくね?

451 :デフォルトの名無しさん:2006/11/03(金) 08:05:07
>>450
>>434

452 :デフォルトの名無しさん:2006/11/03(金) 08:24:14
ループカウンタ変数を検索するような必要性に迫られるシーンが思い浮かばない orz

453 :デフォルトの名無しさん:2006/11/03(金) 08:59:05
想像力欠如

454 :デフォルトの名無しさん:2006/11/03(金) 09:22:46
俺も452と同意見だが、仮にそのような機会があったとしても、
正規表現を持ち出すまではなくても、いわゆる単語検索でi1文字の検索はできるだろうと思う。

455 :デフォルトの名無しさん:2006/11/03(金) 09:24:59
まぁ変数名ごときで悩むような奴はたいていハゲてる

456 :デフォルトの名無しさん:2006/11/03(金) 09:29:09
吹いたw

457 :デフォルトの名無しさん:2006/11/03(金) 09:29:52 ?2BP(204)
iの検索でifが引っかかるって問題は、単語単位の検索を使えばいい。

>>452
何百行もあるような関数を書いて、そのなかでアチコチで使いまわしてるとか、
そんなんじゃないの?


458 :デフォルトの名無しさん:2006/11/03(金) 09:32:08
そんな子供レベルの悩みに拘泥してる奴が実務屋名乗ってたら吹くな。
いくらなんでもそんなこたないだろう。

459 :429:ゴメン、そろそろ終わりにしよう:2006/11/03(金) 10:20:13
だからね、2行先の30カラム手前のループ制御変数に移動したかったらどうするか想像してご覧よ。
そんなことで一々マウスに手を出すほど暇じゃないんで、viなら/ic、emacsならC-sicで検索するわけだ。
これなら順に、nで移動したりC-sで移動したりできると言う寸法。
#WindowsのエディタならAlt+Fでicと入力しておいてF3で移動かな?
そんなときに、i一文字だとifに一々引っ掛かるでしょってことくらい判って欲しいなぁ。
#まぁ、本当に2行先の30カラム手前と判っているなら素直にviではjj30h、emacsでC-nC-nC-u30C-bするが。

だから、正規表現を持ち出すまでもないし同様に単語検索を持ち出すまでもないんだけど。

>>455
大丈夫、悩んでないから禿げてない。
つーか、誰か悩んでいるのか?
#あぁ、>458が随分とご執心のようで。

460 :デフォルトの名無しさん:2006/11/03(金) 10:49:11
> 2行先の30カラム手前のループ制御変数に移動したかったら
幸いにもそういう状況に出くわしたことはないので想像できないよ

素朴な疑問だけど間にClickみたいなicを含む単語があったらどうするの?

461 :429:2006/11/03(金) 11:06:01
だからぁ、そんなときは(頭の中で「はいはいClickClick」と唱えでもしてから)nなりC-sなりをもう一回押すだけだって。
#少なくとも、i一文字で引っ掛かる確率に比べればicが引っ掛かる確率は低いぞ。

それよか素朴な疑問なんだが、移動のアンカーに変数名を使いたくならないのか?
#そもそもただのコーダーなら(理論的には)修正の必要が生じることもないのかも知らんが。

462 :デフォルトの名無しさん:2006/11/03(金) 11:06:30 ?2BP(204)
> そんなことで一々マウスに手を出すほど暇じゃないんで、viなら/ic、

for (i = 0; i < ... みたいな行のiに飛びたいなら「/i 」でもいけるけどね。


463 :デフォルトの名無しさん:2006/11/03(金) 11:17:11
結局俺ルールの話じゃないか。
多かれ少なかれその手のルールは皆持ってるもんだが、
それが普遍的なものであるか、真に有用なものであるかは
大抵の場合疑わしく、使ってる本人も大抵「手に馴染んでるから」以上の理由が無いことを
自覚して使ってるもんだ。

本人ペンディングしたがってるみたいだからこの辺でシメでいいとは思うが、
とりあえずこれだけ。
サンプル持ち出すまでも無く、それはそれなりのマイノリティ。

つーか大体にしてスレ違いもいいところだしな。

464 :デフォルトの名無しさん:2006/11/03(金) 11:23:59
スタイルの話は刷れ痴害

465 :452:2006/11/03(金) 13:22:00
>>461
一般的な変数アンカーは使うよ。
ただ、ループカウンタをターゲットにすることは稀 ってことで
参照されない回るだけのためのカウンタ or 配列等の引数に渡されるカウンタ

スタイルフリーな言語での宗教論争はしかたないよなぁ…

466 :デフォルトの名無しさん:2006/11/03(金) 15:58:46
ま、ソースコードを読む上では
別にicだからってそこまで見にくくなるわけじゃないし
他人の性癖にどうこう言う必要はないんだよね

プロジェクトで強要されても痴漢(あれ?)で一発だし

467 :デフォルトの名無しさん:2006/11/03(金) 16:07:35
置換じゃなくてリファクタリング機能を使おう。
短い変数名ならなおさら

468 :デフォルトの名無しさん:2006/11/03(金) 23:26:22
質問です。

char *moji[] = {
  "aaa",
  "bbb",
  "ccc",
  NULL
};
このような文字列を
while ( *moji ) {
  printf("%s\n", *moji);
  *moji〜
}
上のようにwhileで表示し、文字列NULLが来るまでアドレスを進めて表示したいのですが
*moji〜のアドレスを進める部分が分かりません。
どのようにすればいいのでしょうか?

469 :デフォルトの名無しさん:2006/11/03(金) 23:27:30
++moji;

470 :469:2006/11/03(金) 23:28:41
あ、mojiは配列か

char**p;
for(p=moji;*p;++p){
   printf("%\n",*p);
}

471 :デフォルトの名無しさん:2006/11/03(金) 23:31:21
氏ね

472 :468:2006/11/03(金) 23:39:43
>>470
ありがとうございますm(_ _)m
このようなやり方は思いつきませんでした。
別の変数用意しないとダメでしたね・・・。

473 :デフォルトの名無しさん:2006/11/03(金) 23:43:28
>>486
>>1

474 :デフォルトの名無しさん:2006/11/04(土) 04:06:36
>486
耳かっぽじってよく聞けよ
>1だからな>1
ちゃんと>1を見ろよなっ!!

475 :デフォルトの名無しさん:2006/11/04(土) 10:16:27
聞いたか>>486
これが最後だぞ!
>>1だからな!>>!

476 :デフォルトの名無しさん:2006/11/04(土) 10:26:17
>>486
どうしてこんなところに迷い込んだんだ…

477 :saga:2006/11/04(土) 11:58:47
>>486
佐賀ばっか

478 :デフォルトの名無しさん:2006/11/04(土) 14:29:32
>>486
もう来なくていいよ・・・

479 :デフォルトの名無しさん:2006/11/04(土) 15:01:36
最近趣味でsin()とかlog()とかの基本的な関数を自分で書き直して遊んでいるのですが、
ANSI Cでこれらの関数がどう定義されているのか載っている本・サイトはないでしょうか?
どのくらいまで誤差を許容しているのか知りたいのです

RAND()やRND()は「C言語による最新アルゴリズム事典」に載っているのを見つけたのですが
その他は見つけることが出来ませんでした

480 :デフォルトの名無しさん:2006/11/04(土) 15:02:39
>>479
規格書見れば?

481 :デフォルトの名無しさん:2006/11/04(土) 15:07:05 ?2BP(204)
>>479
三角関数のアルゴリズムは、その本に載ってなかった?
(規格でどう規定されてるかは知らないけど)

482 :デフォルトの名無しさん:2006/11/04(土) 15:12:40
>>486は雑音だったんだよ!

483 :デフォルトの名無しさん:2006/11/04(土) 15:15:09
>>479
「C言語の規格としての定義」なら、例えばJIS X 3010 では

7.12.4.6 sin 関数群
形式
 #include <math.h>
 double sin(double x);
 float sinf(float x);
 long double sinl(long double);

機能   sin関数群は、x(ラジアン値)の正弦を計算する。
返却値 sin関数群は、正弦値を返す。

と書いてあるだけ。

JIS検索
ttp://www.jisc.go.jp/

484 :デフォルトの名無しさん:2006/11/04(土) 15:17:16
>>480
ググってみました
…高っ

>>481
三角関数はtan()を連分数展開で求めて、sin()cos()はタンジェントから求めるという方法が載っていたのですが
ANSI Cの規格についてはノータッチでした。

完成したらANSI Cの関数と性能比較をしたいのですが、誤差を大体同じくらいにしないと比較にならないので
困っています。

485 :デフォルトの名無しさん:2006/11/04(土) 15:21:37
ダウンロードできるぜ。↓の N1124
http://www.open-std.org/jtc1/sc22/wg14/

486 :デフォルトの名無しさん:2006/11/04(土) 15:32:06
>>485
わざわざありがとうございます。
まだ斜め読みですが、483さんが書いてくださったようなことしか書いてなくて
実装についてはノータッチみたいですね。
結局細かい実装については各コンパイラにおまかせということ、なんですかねえ

ともあれお二方ともありがとうございました。

487 :479:2006/11/04(土) 15:40:00
数字コテつけておけばよかった

ざっと流して読んだところ>>485さんの教えてくださったpdfには実装例について書いている関数もあれば
定義だけ書いてある関数もあるようです。
RAND()は実装例についても載っていました。

488 :デフォルトの名無しさん:2006/11/04(土) 17:12:58
>>484
483のサイトからただでPDFが得られる。

ところで数学関数の実装はテイラー展開などの近似式を使う場合もあるが、、
CPUがそういう計算の命令を持っている場合には(アセンブリ言語などで)それを使うこともある。

489 :479:2006/11/04(土) 17:25:53
>>488
一応マクローリン展開による方法と連分数展開による方法で実装して
速度比較するつもりです

CPUが持ってることもあるんですか、知りませんでした
もし持ってれば大分高速化できそうですね
x86のアセンブリの仕様も読んでおきます

490 :デフォルトの名無しさん:2006/11/04(土) 18:52:20
コンパイル後に、lint というツールを使用するのは基本なんでしょうか。
lintで構文チェックするのは常識ですか。

491 :デフォルトの名無しさん:2006/11/04(土) 20:17:49
C言語の規格とは関係ないな

492 :デフォルトの名無しさん:2006/11/04(土) 20:40:57
>> 491
どのあたりの板になりますか?

493 :デフォルトの名無しさん:2006/11/04(土) 21:16:36
http://pc8.2ch.net/test/read.cgi/tech/1160893851/
かなあ。

494 :デフォルトの名無しさん:2006/11/04(土) 21:31:31
>> 493
そちらに行きます。ありがとうございます。

495 :デフォルトの名無しさん:2006/11/04(土) 21:37:56
fprintf(gp,"plot \"%s\" using 1:3 with lines \n",fourier);

gnuplotをパイプで使うプログラム内のこの記述でエラーが出ます。
fourierはn行3列のデータです。

どなたかエラーの理由が分かる方教えて下さい。

496 :デフォルトの名無しさん:2006/11/04(土) 21:46:14
どなたかエラーメッセージが分かる方教えて下さい。エスパーでもいいので

497 :495:2006/11/04(土) 21:49:10
すいません。自己解決しました。

498 :479:2006/11/04(土) 22:07:03
>>488
読んできました
x86の命令セットにもサイン・コサイン・タンジェント・アークタンジェント・平方根等の命令がありました

これで悩む必要がなくなって嬉しいような残念なような複雑な気分です
ありがとうございました

499 :デフォルトの名無しさん:2006/11/04(土) 22:23:38
精度を犠牲にすればCPU組み込みの命令よりさらに早くできるけどな

500 :デフォルトの名無しさん:2006/11/04(土) 22:28:36
まあソフトウェア実装のほうがいろいろ融通が利くのは当然だわな

501 :479:2006/11/04(土) 22:32:57
速度出したかったら表作っておいて補間がオーソドックスな方法でしょうか?
FSINのクロック数調べたら60〜100くらいかかる上にペアリングできなくてちょっと驚きました

502 :デフォルトの名無しさん:2006/11/04(土) 22:49:09
前半はアルゴリズムや計算量の話だし後半はCPU依存だし
このスレで答えていいのか微妙

503 :デフォルトの名無しさん:2006/11/04(土) 22:57:52
>>502
確かに ISO も ANSI も JIS も関係がないな。
ぶっちゃけ自分の欲しい答えが手軽に手に入ればみんなどこでもいいんだ。
やっぱゆとり教育世代の自己中な性格がこんなところにまで影響してきているということか。

504 :デフォルトの名無しさん:2006/11/04(土) 23:10:26
まあとりあえず規格から探してみるって姿勢はいいんじゃねーの

505 :デフォルトの名無しさん:2006/11/05(日) 03:05:49
で、君たち、年はいくつだ?

506 :デフォルトの名無しさん:2006/11/05(日) 10:47:07
俺33。
嫁なし子供なし。

507 :デフォルトの名無しさん:2006/11/05(日) 13:39:15
構造体の配列のソート処理について教えてください。
例えば、メンバ a, b, c を持つ構造体の配列を、少なくともひとつの列を選び
その列についてソートします。
ただし、複数の列を選択した場合は、優先度を付けてソートしたいのです。
具体的には、メンバ a, c について、この順の優先度でソートする場合は
配列全体で見た場合、メンバ a でソートされていて、メンバ a の同値ごとに
メンバ c でソートしたいのです。
簡単にやりたいことを言うと SQL の ORDER BY a, c を実装したいのです。

とりあえず、優先度の低いメンバから順々にソートをしていけば目的の結果を得ることができました。
※ 上記の例だと、まずメンバ c でソートして、その後にメンバ a でソートしました。

ただ、ソート処理を何回も繰り返すのが、どうも気に入らないのですが
一度のソート処理で同じような結果を得られる方法ってあるのですか?

508 :デフォルトの名無しさん:2006/11/05(日) 14:21:12
>>507
qsort() に適当な辞書順比較関数を渡せ。

509 :デフォルトの名無しさん:2006/11/05(日) 14:31:53
//こんなんかなぁ
#include <stdio.h>
#include <stdlib.h>

typedef struct hoge {
  int a,b,c;
} hoge;

int hogecomp(const hoge* lhs, const hoge* rhs)
{
  int dst = lhs->a - rhs->a;
  if(dst) {
    return dst;
  } else {
    return lhs->c - rhs->c;
  }
}

int main(void)
{
  int i;
  hoge array[] = {{5,1,3},{2,3,1},{3,3,3},{5,2,1},{13,11,4}};
  qsort(array,5,sizeof(hoge),&hogecomp);
  for(i=0;i<5;i++) {
    printf("%d : a->%d,b->%d,c->%d\n",i,array[i].a,array[i].b,array[i].c);
  }
  return 0;
}


510 :507:2006/11/05(日) 14:59:12
レスありがとうございます。

2つのメンバについて比較する関数を用意すればいいのはわかりました。
ということは>>507のように、3 個のメンバを持つ構造体の配列をソートする時
任意の数のメンバを選択して、かつ優先度も任意でつけられる場合は

・メンバ 1 個についてのソート
 3個のメンバから1個を選ぶ・・・3通り
・メンバ 2 個についてのソート
 3個のメンバから2個を選んで優先度で並べる・・・3P2 = 6通り
・メンバ 3 個についてのソート
 3個のメンバから3個を選んで優先度で並べる・・・3! = 6通り

のように、15通りの比較関数を容易しておかないといけないのですか?
それとも、今回のような要件の場合は、ソートを複数回行う方がよいのですか?

511 :デフォルトの名無しさん:2006/11/05(日) 15:08:31
規格に全然関係ない質問に嬉々として答えてる馬鹿はなんでここにいるの?

512 :デフォルトの名無しさん:2006/11/05(日) 15:09:54
>509には問題があるので要注意。

>>510
15通りの比較関数の代わりに、一つの比較関数でやれば宜しい。
そのためには、比較関数で参照できるようなフラグを用意すればいい。
Ex.
struct {
enum {CompColNone, CompColA, CompColB, CompColC} Col1st, Col2nd, Col3rd;
} gComp;
int hogeComp(const void * a, const void * b)
{
const hoge * lhs = (const hoge *) a;
const hoge * rhs = (const hoge *) b;
switch (gComp.Col1st) {
case CompColA:
if (lhs->a > rhs->a) return 1;
if (lhs->a < rhs->a) return -1;
break;
case CompColB:
if (lhs->b > rhs->b) return 1;
if (lhs->b < rhs->b) return -1;
break;
case CompColC:
if (lhs->c > rhs->c) return 1;
if (lhs->c < rhs->c) return -1;
break;
}
// 以下同様に2nd、3rdも処理
return 0;
}
// こういう泥臭い実装が嫌ならC++に移行してしまえ

513 :デフォルトの名無しさん:2006/11/05(日) 15:09:57
>>510
要件がほんとにあんたの言うとおりなら、比較関数の動作はそれだけの種類が必要だろう。
ソートを複数回するのは速度的に不利だが、比較関数は用意しなくていい。
それが「よい」かどうかはあんたが決めること。

複数回ソートでうまく動作させるためには安定ソートじゃないとだめだから、
qsort() が使えないのもデメリットだな。

514 :デフォルトの名無しさん:2006/11/05(日) 15:10:30
>>511
そりゃあんた、ここは企画のみを云々するスレじゃないからね。

515 :デフォルトの名無しさん:2006/11/05(日) 15:12:13
>>511
>>1 を読む限り、規格に関連した話題のみという縛りはないからだろう。
嫌ならさっさと誘導しろよ。そして次スレの >>1 を提案するんだ。

516 :デフォルトの名無しさん:2006/11/05(日) 15:30:52
どうみても宿題丸投げ行きです

517 :507:2006/11/05(日) 16:27:10
色々とありがとうございました。
>>512さんのをベースにやってみようと思います。

それと、実装する言語がC言語であること、宿題ではなく個人的な疑問だったため
あえて宿題スレではなく、こちらで質問させてもらいました。
不愉快に思われた方、すみませんでした。

518 :デフォルトの名無しさん:2006/11/05(日) 16:29:58
>>507
これでは不満かい?
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

char *atoffset(const void* s, size_t offset) {
    return (char*)s + offset;
}
size_t comp2configure1, comp2configure2;
#define comp2configure(s,a,b) do{comp2configure1=offsetof(s,a);comp2configure2=offsetof(s,b);}while(0)
int comp2(const void* lhs, const void* rhs) {
    int first = *(int*)atoffset(lhs, comp2configure1) - *(int*)atoffset(rhs, comp2configure1);
    if (first)
        return first;
    else
        return *(int*)atoffset(lhs, comp2configure2) - *(int*)atoffset(rhs, comp2configure2);
}

typedef struct hoge {
    int a, b, c;
} hoge;
int main(void) {
    int i;
    hoge x[] = {{5,1,3},{2,3,1},{3,3,3},{5,2,1},{13,11,4}};
    comp2configure(hoge, a, c);
    qsort(x, sizeof(x) / sizeof(hoge), sizeof(hoge), &comp2);
    for(i = 0; i < 5; i++)
        printf("%d : a->%2d, b->%2d, c->%2d\n", i, x[i].a, x[i].b, x[i].c);
    return 0;
}

519 :例えば0x7fffffffと-1:2006/11/05(日) 16:55:37
だから整数値を比較のために引くのは(アンダーフローの可能性があるから)拙いってばさ。

520 :デフォルトの名無しさん:2006/11/05(日) 17:02:10
差の最大値が INT_MAX 以下(未満?) でないと、引き算で代用できないっとことだな。

521 :518:2006/11/05(日) 17:05:32
んじゃ書き直しで。
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

char *atoffset(const void* s, size_t offset) {
    return (char*)s + offset;
}
size_t comp2configure1, comp2configure2;
#define comp2configure(s,a,b) do{comp2configure1=offsetof(s,a);comp2configure2=offsetof(s,b);}while(0)
int comp2(const void* lhs, const void* rhs) {
    return *(int*)atoffset(lhs, comp2configure1) > *(int*)atoffset(rhs, comp2configure1) ||
        *(int*)atoffset(lhs, comp2configure1) == *(int*)atoffset(rhs, comp2configure1) &&
        *(int*)atoffset(lhs, comp2configure2) > *(int*)atoffset(rhs, comp2configure2);
}

typedef struct hoge {
    int a, b, c;
} hoge;
int main(void) {
    int i;
    hoge x[] = {{5,1,3},{2,3,1},{3,3,3},{5,2,1},{13,11,4}};
    comp2configure(hoge, a, c);
    qsort(x, sizeof(x) / sizeof(hoge), sizeof(hoge), &comp2);
    for(i = 0; i < 5; i++)
        printf("%d : a->%2d, b->%2d, c->%2d\n", i, x[i].a, x[i].b, x[i].c);
    return 0;
}

522 :デフォルトの名無しさん:2006/11/05(日) 17:08:52
>>521
qsort() の仕様を読み直せ。

523 :デフォルトの名無しさん:2006/11/05(日) 17:11:55
何この盛り上がり
今ごろ>>511>>516は顔真っ赤にしてるんだろうな

524 :デフォルトの名無しさん:2006/11/05(日) 17:13:32
>>522
ISO/IEC 9899:1999の7.20.5.2 The qsort functionを読んだけど、どのあたりを
意図しているのか分からなかった。教えて♥

525 :デフォルトの名無しさん:2006/11/05(日) 17:15:44
>>524
比較関数の戻り値。
>>521 コードじゃ論理比較の結果だから 正(または負)か0しか返さない。

526 :デフォルトの名無しさん:2006/11/05(日) 17:16:47
1 か 0 しか返らないよ。

527 :デフォルトの名無しさん:2006/11/05(日) 17:17:25
C++ の sort() と勘違いしてるんだろう。

528 :デフォルトの名無しさん:2006/11/05(日) 17:20:31
>>525-526
relational operatorsも読んでみた。確かに!

>>527
ご名答。面目ない。

529 :デフォルトの名無しさん:2006/11/05(日) 17:21:06
つか 0 と 1 しか返せない関数だと qsort で止まるか落ちるぞ?

530 :デフォルトの名無しさん:2006/11/05(日) 17:23:52
>>529
え?なんで? 0 も 1 も戻り値としては有効だろ?

531 :デフォルトの名無しさん:2006/11/05(日) 17:25:18
負の戻りも必要だー。

532 :デフォルトの名無しさん:2006/11/05(日) 17:25:19
>>530
qsort() 内部の要素比較再帰/ループで矛盾が生じるから。

533 :デフォルトの名無しさん:2006/11/05(日) 17:28:30
つか、みんなイロイロ考えつくな。俺は↓しか思いつかんかった。

int hogecompA(const hoge* lhs, const hoge* rhs){
 return (rhs->a < lhs->a) - (lhs->a < rhs->a);
}
int hogecompB(const hoge* lhs, const hoge* rhs){
 return (rhs->b < lhs->b) - (lhs->b < rhs->b);
}
int hogecompC(const hoge* lhs, const hoge* rhs){
 return (rhs->c < lhs->c) - (lhs->c < rhs->c);
}
int (*hoge_comp1)(const hoge*, const hoge*)=0;
int (*hoge_comp2)(const hoge*, const hoge*)=0;
int (*hoge_comp3)(const hoge*, const hoge*)=0;
int hogecomp(const void* lhs, const void* rhs){
 int dst = hoge_comp1((const hoge*)lhs,(const hoge*)rhs);
 if(!dst && hoge_comp2) dst = hoge_comp2((const hoge*)lhs,(const hoge*)rhs);
 if(!dst && hoge_comp3) dst = hoge_comp3((const hoge*)lhs,(const hoge*)rhs);
 return dst;
}


534 :デフォルトの名無しさん:2006/11/05(日) 17:55:32
具体的な例を示すことができなくてすいません。
これまで、コンパイルできた古いソースが、コンパイラのバージョンを
上げたり、他のOS上でポーティングしようとした場合、エラーになること
があるのは当り前と考えるべきでしょうか。
ポーティングで気をつけるべき点があれば、ご教示ください。

535 :デフォルトの名無しさん:2006/11/05(日) 18:06:59
>>534
↓含めて C FAQ に一通り目を通し、規格に沿ったコーディングを心がけろ。
http://www.kouno.jp/home/c_faq/c16.html

536 :デフォルトの名無しさん:2006/11/05(日) 18:12:42
>> 535
どうも、ありがとうございます。
でもね、誰が作ったわからない巨大なプログラムをポーティングするのは
つらいと思いませんか。コンパイラ以外でチェックする方法はないですかね。
ないでしょうね。

537 :デフォルトの名無しさん:2006/11/05(日) 18:38:51
>>536
ありませんね。だからこそ世界中で多数の人間が苦労しているわけで。

538 :デフォルトの名無しさん:2006/11/05(日) 18:43:24
>> 537
なるほど、そうですよね。理解しました。

539 :デフォルトの名無しさん:2006/11/05(日) 18:48:45
>>と数字の間にスペース入れるなやカス

540 :デフォルトの名無しさん:2006/11/05(日) 18:51:54
>>539 すまんです。

541 :デフォルトの名無しさん:2006/11/05(日) 23:22:45
規格ではビットシフトはデリミタを入れてもいいはずだが・・・

542 :デフォルトの名無しさん:2006/11/05(日) 23:40:04
アンカだろw

543 :デフォルトの名無しさん:2006/11/06(月) 01:29:08
釣りだろw

544 :デフォルトの名無しさん:2006/11/06(月) 06:50:44
コマンドからいくつか引数を取って
一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
(動的メモリ割り当て)

誰か教えて下さい
お願いします

545 :デフォルトの名無しさん:2006/11/06(月) 06:55:02
>>544
スレ違い。宿題スレ逝け。
http://pc8.2ch.net/test/read.cgi/tech/1161257941/

546 :デフォルトの名無しさん:2006/11/06(月) 13:09:33
bsearchを用いてlist1を探索するプログラムを以下の様に書いたのですが、
list2を探索する時にはbsearchの引数やcomparをどの様に書き直せば良いのでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N_ELEMENTS      3
#define MAX_STRLEN      16
int compar(const char **str1, const char **str2) { return strcmp(*str1, *str2); }
int main(void)
{
  void **p;
  char *key = "orange", *list1[N_ELEMENTS], list2[N_ELEMENTS][MAX_STRLEN] = {
    "apple", "banana", "orange"
  };
  list1[0] = "apple";
  list1[1] = "banana";
  list1[2] = "orange";
  if((p = bsearch(&key, list1, N_ELEMENTS, sizeof(char *), (int (*)(const void *, const \void *))compar)) != NULL) {
    printf("%d\n", ((unsigned int)p - (unsigned int)list1) / sizeof(char *));
  }
  return 0;
}

547 :デフォルトの名無しさん:2006/11/06(月) 14:05:32
>>546
一つ前のレスに手がかりがあるよ!

548 :546:2006/11/06(月) 14:35:58
自己解決しました。

>>547
課題とかでは無かったんですが、アドバイスありがとうございます。

549 :デフォルトの名無しさん:2006/11/06(月) 14:41:39
callback はキャストして渡さずに(bsearch 呼び出し部)、
要求されている通りの型で関数宣言して、その内部で自前の型にキャストして使ったほうが良いよ。

適合していない形式のものを無理矢理渡してしまう可能性があるからね。

550 :デフォルトの名無しさん:2006/11/06(月) 22:22:00
設問
入力された単語の長さを横棒グラフにして表示するプログラムを作成せよ。
横棒グラフは単語の長さだけ'*'を表示する。ctrl + Z が入力されると処理を終了する。

551 :デフォルトの名無しさん:2006/11/06(月) 22:51:13
ま た お ま え か

552 :デフォルトの名無しさん:2006/11/06(月) 23:06:08
int main() {
 char buff[200];
 printf("単語を入力しろ\n");
 scanf("%s", buff);
 printf("単語の長さ分の*を入力しろ\n");
 scanf("%s", buff);
 prinf("%s\nおわり\n", buff);
 return 0;
}

553 :デフォルトの名無しさん:2006/11/06(月) 23:08:07
>>550 >>545

554 :デフォルトの名無しさん:2006/11/07(火) 13:50:58
うんこをしたいんですが、どうしたらいいですか?

555 :デフォルトの名無しさん:2006/11/07(火) 16:57:34
>>554
まずトイレへ行き、

556 :デフォルトの名無しさん:2006/11/07(火) 17:51:08
靴下をはけ

557 :デフォルトの名無しさん:2006/11/07(火) 18:28:35
パンツを脱ぐ

558 :デフォルトの名無しさん:2006/11/07(火) 18:45:07
玄関に行き、


559 :デフォルトの名無しさん:2006/11/07(火) 18:45:52
仰向けになる

560 :デフォルトの名無しさん:2006/11/07(火) 18:48:45
大きな声で 「ぬるぽ」 と叫ぶ

561 :デフォルトの名無しさん:2006/11/07(火) 18:58:27
その後、

562 :デフォルトの名無しさん:2006/11/07(火) 19:34:55
デパートへ行って店員に要求を丸投げするのだ。
終わり。

563 :デフォルトの名無しさん:2006/11/07(火) 19:53:39
規格によると、
排便はコメントか文字列の中でしないとエラーになったと思うが・・・


564 :デフォルトの名無しさん:2006/11/07(火) 20:30:14
お前ら・・・w

565 :デフォルトの名無しさん:2006/11/07(火) 21:08:41
規格厨氏ね

566 :デフォルトの名無しさん:2006/11/07(火) 21:14:57
んじゃなんだ?コンパイラのバックエンドから独自拡張しろとでも?

567 :デフォルトの名無しさん:2006/11/08(水) 01:20:54
>>554-566
ここまでをまとめると、
Q:うんこがしたい
A:トイレへ行き 〜 中略 〜 後ろの穴を拡張しろ。

そろそろC言語の話をしようじゃないか。

568 :デフォルトの名無しさん:2006/11/08(水) 02:23:57
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

569 :デフォルトの名無しさん:2006/11/08(水) 02:26:39
データをビット単位でずらしたい気分になったときに役立つ。

570 :デフォルトの名無しさん:2006/11/08(水) 02:39:52
char kk[5]="baka"; として
printf("%s",kk); でも出力されなく、
for(i=0; i>5; i++){printf("%c",kk); でも出力されません。
何がいけないんでしょう?

571 :デフォルトの名無しさん:2006/11/08(水) 05:00:41
前者は不明ですが、後者は明らかにループが回っていません。

572 :デフォルトの名無しさん:2006/11/08(水) 05:32:04
とりあえず、"%s\n"、"%c\n"に変えてみてくれ。
話はそれからだ。

573 :デフォルトの名無しさん:2006/11/08(水) 05:45:37
>>572
それなんか意味あるの? このスレ的に。

574 :デフォルトの名無しさん:2006/11/08(水) 13:58:15
>>570
環境。

575 :デフォルトの名無しさん:2006/11/08(水) 17:05:47
for(i=0; i<5; i++)

576 :デフォルトの名無しさん:2006/11/09(木) 05:44:11
>>570
むしろコンパイル通ったのがすごい・・・

577 :デフォルトの名無しさん:2006/11/09(木) 17:25:15
typedef struct {
    int pc;
    struct PCS *next;
} PCS;

void push(PCS** top,int pc)
{
    PCS* np;
    np = (PCS *) malloc(sizeof(*np));

    np->next = *top;
    np->pc = pc;
    *top = np;
}

このコードで、np->next = *topが
warning: assignment from incompatible pointer type
となる理由教えてくだしゃい

578 :デフォルトの名無しさん:2006/11/09(木) 17:30:10
typedefするとしてもめんどくさがらずにちゃんと構造体に名前つけたほうがいいと思うよ。

579 :デフォルトの名無しさん:2006/11/09(木) 17:40:14
つけたけどwarning消えないッス

580 :デフォルトの名無しさん:2006/11/09(木) 17:47:08
>>579
3行目 struct PCS *next;
って、それ以前を見てもなんなのかわかんな〜い><

581 :デフォルトの名無しさん:2006/11/09(木) 17:50:11
>>578,580
こういうことか!ありがとうございました
typedef struct PCS PCS;
struct PCS {
    int pc;
    struct PCS *next;
};


ちなみにこうしてたから>>579書きました
struct PCS {
    int pc;
    struct PCS *next;
};
typedef struct PCS PCS;
何がしたかったんだ、、、。


582 :デフォルトの名無しさん:2006/11/09(木) 18:07:47
ha?

583 :デフォルトの名無しさん:2006/11/09(木) 18:30:05
だめだ・・・

584 :デフォルトの名無しさん:2006/11/09(木) 20:16:34
typedef struct pcs {
int pc;
PCS *next;
} PCS;
のほうが良くない?


585 :デフォルトの名無しさん:2006/11/09(木) 20:23:10
良くなくない?

586 :デフォルトの名無しさん:2006/11/09(木) 20:48:04
プログラム(foobar)とsharedライブラリ(libhoge.so)があって、foobarのグローバル変数をlibhoge.soから参照したいのですが、どういう風に書けばいいでしょうか。
header.hにグローバル変数を書いて、両方でインクルードしてみたのですが、同名の別の変数になってしまいました。
何かいい方法はないでしょうか。
よろしくお願いします。

587 :デフォルトの名無しさん:2006/11/09(木) 20:48:24
typedef struct PCS_t {
int pc;
struct PCS_t *next;
} PCS;
のが良いな俺的には

588 :デフォルトの名無しさん:2006/11/09(木) 20:54:01
typedef struct _PCS {
 int pc;
 struct _PCS *next;
} PCS;

589 :デフォルトの名無しさん:2006/11/09(木) 21:03:25
タグ名と typedef 名を別にするメリット、あるいは同じにしたときのデメリットって何?

わざわざ別の名前つけて、しかもタグ名のほうは実装向けっぽい名前にするのは、
ヘッダの依存関係を減らすための前方宣言が使いにくくなるんでやめてほしい。
ひどいときには >>588 みたいに平気で予約名使う奴までいるし。

590 :デフォルトの名無しさん:2006/11/09(木) 21:06:28
opaque でない構造体を typedef するのはあまりお勧めできない


591 :デフォルトの名無しさん:2006/11/09(木) 21:08:24 ?2BP(204)
予約名?

592 :デフォルトの名無しさん:2006/11/09(木) 21:11:13
予約名って予約語のこと?

593 :デフォルトの名無しさん:2006/11/09(木) 21:14:06
予約された識別子のことだろう。
先頭アンダースコアで英大文字続く識別子はすべて予約されている。
ユーザープログラムで使用した場合の結果は未定義となる。

594 :593:2006/11/09(木) 21:15:30
使用した場合じゃなくて、宣言(マクロ定義含む)した場合だな。

595 :デフォルトの名無しさん:2006/11/09(木) 21:17:40
>>590
opaque な構造体と区別する理由は何?

596 :デフォルトの名無しさん:2006/11/09(木) 21:19:13
>>595
Typedefs are problematic
because they do not properly hide their underlying type; for example you
need to know if the typedef is the structure itself or a pointer to the
structure. In addition they must be declared exactly once, whereas an
incomplete structure type can be mentioned as many times as necessary.
Typedefs are difficult to use in stand-alone header files: the header
that defines the typedef must be included before the header that uses it,
or by the header that uses it (which causes namespace pollution), or
there must be a back-door mechanism for obtaining the typedef.


597 :デフォルトの名無しさん:2006/11/09(木) 21:22:27
>>596
その理由なら typedef 全部お勧めできないだろ。 goto >>595

598 :デフォルトの名無しさん:2006/11/09(木) 21:25:16 ?2BP(204)
「opaque でない構造体」って、どんなの?

599 :デフォルトの名無しさん:2006/11/09(木) 21:27:38
>>598
ヘッダ(公開インターフェース)で定義(宣言だけじゃなくて)されている構造体。

600 :デフォルトの名無しさん:2006/11/09(木) 21:31:51
>>597
opaqueな状態だと詳細はパッケージの外からは見えないわけだから
許してやってもいいかなとおもっただけ.
パッケージ内ではtypedefされていない方でプログラムするって原則で...


601 :デフォルトの名無しさん:2006/11/09(木) 21:32:38 ?2BP(204)
>>599
サンキュー。

602 :デフォルトの名無しさん:2006/11/09(木) 21:37:47
>>600
詳細が見えなくても、 typedef は一度しか宣言できないのは変わらなくて、
typedef したヘッダを include しないと使えなくなるのも変わらない。
やっぱり全部やめたほうがいいと思うよ。

603 :デフォルトの名無しさん:2006/11/09(木) 21:58:14
FILE*を見習えばいいんじゃね

604 :デフォルトの名無しさん:2006/11/09(木) 23:36:58
>>602
いあ, まぁ, そなんだけどね…
っか, 前後の流れが…

おまえらなんで構造体をtypedefするんだよぉorz


605 :デフォルトの名無しさん:2006/11/10(金) 00:04:09
構造体の typedef 普通にするけど何か文句あるの?
これぐらい慣れとかないと C++ でのーみそ破裂するぞ。

606 :デフォルトの名無しさん:2006/11/10(金) 00:06:26
>>605 >>596 (要約 >>600

607 :デフォルトの名無しさん:2006/11/10(金) 00:16:25
C++ならenumもstructもtypedefなんかせんわい。

608 :デフォルトの名無しさん:2006/11/10(金) 00:22:36
オバキューって何だよ

609 :デフォルトの名無しさん:2006/11/10(金) 00:29:44
>>607
C++ は使う時に struct 省略できるし、class だってあるだろ。

610 :デフォルトの名無しさん:2006/11/10(金) 00:30:12
処で、main()の再帰呼び出しって認められてたっけ?

611 :デフォルトの名無しさん:2006/11/10(金) 00:36:00
>>610
C では許容されてる。
C++ では禁止されてるはずだけど何故か VC6 では動く。

612 :610:2006/11/10(金) 00:39:13
>>611
情報THX。
ふむ、禁止はされてないのか。じゃ、ほっとくか。


613 :デフォルトの名無しさん:2006/11/11(土) 00:18:55
>>593
Win32 APIヘッダって規格の視点から見たら「ユーザープログラム」だよな。
何とかしてくれ
>>610
C++で禁止されてるのには理由もあるけどスレ違いな理由なのでここには書かない

614 :デフォルトの名無しさん:2006/11/11(土) 00:52:43
CやC++のISO標準仕様を手に入れたいのですが、お金払わないと無理なんでしょうか。

615 :デフォルトの名無しさん:2006/11/11(土) 00:54:25
すみません。あげさせせて頂きます。

616 :デフォルトの名無しさん:2006/11/11(土) 00:57:37
>>614
基本的には、買うもの。英語のドラフトでいいならダウンロード可能。
C なら >>485 。 C++ なら、 C++相談室のテンプレに同様のリンクが張ってあったはず。

617 :610:2006/11/11(土) 08:14:19
>>613
うん、C++の方は理由を含めて知ってた。Cの場合を確認したかったのよ。

618 :デフォルトの名無しさん:2006/11/11(土) 09:10:26
さんくす616

619 :デフォルトの名無しさん:2006/11/11(土) 09:20:43
>>614
http://www.jisc.or.jp/
JIS検索→規格番号X 3010

ただしC99相当

620 :デフォルトの名無しさん:2006/11/12(日) 21:54:32
制限時間を指定して、数字を入力。
制限時間がきたら入力中止。
というプログラムを作りたいのですが
並列処理が必要なので手に余っています。

どなたかアドバイスおねがいします

621 :デフォルトの名無しさん:2006/11/12(日) 22:17:17
>>620
環境もGUIorCUIかも何も提示せずにそれだけで何か答えがもらえるか?

622 :デフォルトの名無しさん:2006/11/13(月) 01:02:10
このスレでは標準関数のみ & CUIと決め付けて回答していいだろ。
どっちにしろ宿題スレ行きだとは思うが

623 :デフォルトの名無しさん:2006/11/13(月) 01:14:29
Cの標準で並列処理は無理だからさようなら。

624 :デフォルトの名無しさん:2006/11/19(日) 14:13:23
http://mixi.jp/view_bbs.pl?id=12516056&comment_count=150
晒し

625 :デフォルトの名無しさん:2006/11/19(日) 21:27:47
>>624
笑いどころは void が暴れてるところ?


626 :デフォルトの名無しさん:2006/11/20(月) 22:27:24
ファイルを開いた後で、モードを変換することって出来ますか?
具体的には
"r"で開いてscanfで読み込んだ後、"rb"にモードを変更して残りをfreadしたいのです

627 :デフォルトの名無しさん:2006/11/20(月) 22:52:19
環境依存。

628 :デフォルトの名無しさん:2006/11/20(月) 22:53:44
>>626
freopen()

629 :デフォルトの名無しさん:2006/11/20(月) 23:32:10
freopenは標準関数に含まれてるな。
なんでもかんでも環境依存で片付けるなよ

630 :デフォルトの名無しさん:2006/11/21(火) 01:24:12
そもそも"rb"と"r"のモードが違うという発想そのものが環境依存だ。
POSIXでは全く同じ動作とされている。

631 :デフォルトの名無しさん:2006/11/21(火) 01:28:48
誰も"rb"と"r"が違うと決めつけてはいない。
ただモードを変えたい、それだけだろ。動作は同じかどうかは
それこそ環境依存だが。相変わらずピンボケレスだな。

632 :デフォルトの名無しさん:2006/11/21(火) 01:29:13
>>630
アホか。逆だろ。「POSIXでは〜」ってのが環境依存って言うんだよ。

633 :デフォルトの名無しさん:2006/11/21(火) 02:32:20
>>631
お前が正しい。変なやつにマジレスするな。

634 :デフォルトの名無しさん:2006/11/21(火) 10:56:24
要は、ISOでは"rb"の動作を規定していないが、"r"と"rb"が違う環境ではそれを切り替える目的にfreopen()が使える、
と言う話だろ。
Linuxのマニュアルでも"rb"を使うことは否定されていないのだし、>630の勇み足だな。

635 :デフォルトの名無しさん:2006/11/21(火) 12:20:49
"r" → "rb" が出来ない環境があるやもよ?あるやもよ?

636 :デフォルトの名無しさん:2006/11/21(火) 12:24:30
>>635
634ちゃんと理解した?

637 :デフォルトの名無しさん:2006/11/21(火) 12:27:30
>>635
それはそうだが、標準でモードを切り替える方法は freopen() しかない。
使うんなら戻り値見てエラー処理しとけってことでいいだろ。

モード切り替えなくても良いようにできればそれがベストではあるんだけど。

638 :デフォルトの名無しさん:2006/11/21(火) 12:53:26
処で、freopen()ではシークしなおさなければならないわけで、それが果たして>626の遣りたいことなのだろうか。

639 :デフォルトの名無しさん:2006/11/21(火) 13:02:00
>>638
> freopen()ではシークしなおさなければならない

そんな制限あったっけ?
手元の MSDN にはそんなコト一切書いてないよ。

640 :デフォルトの名無しさん:2006/11/21(火) 13:06:37
ごめん一切書いてないよは嘘だった。
でも、それは read と write を切り替える時は、と書いてある。

> "r+"、"w+"、または "a+" のアクセス種別を指定すると、読み出しと書き込みの
> 両方を行えます (ファイルは "更新" モードで開きます)。ただし、読み出しと
> 書き込みを切り替えるには、fsetpos、fseek、rewind のいずれかの関数を実行
> しなければなりません。fsetpos 関数または fseek 関数には、現在位置を指定
> できます。

641 :デフォルトの名無しさん:2006/11/21(火) 13:42:53
お前ら余程原理主義者だな
圧迫したぜ

642 :デフォルトの名無しさん:2006/11/21(火) 14:46:28
>>636
>、"r"と"rb"が違う環境ではそれを切り替える目的にfreopen()が使える
なんて何処にも記述されていない。
記述されているのは、
>どのようなモード変更を許すか、及びどのような状況での変更を許すかは、処理系定義とする。
だと言ってるんだが。

643 :デフォルトの名無しさん:2006/11/21(火) 15:01:21
どうでもいいが、「ISOでは」はその読点の前までに掛かっているのだろうよ。

644 :デフォルトの名無しさん:2006/11/21(火) 19:57:33
>>641
とりあえずスレタイ見たら?
仕様どおりに実装していない処理系の話とかは各々のスレでよろしく

645 :デフォルトの名無しさん:2006/11/21(火) 23:22:41
負の整数をunsignedにキャストした結果は不定ですか?それとも未定義ですか?

646 :デフォルトの名無しさん:2006/11/22(水) 00:27:49
>>645
6.3.1.3 により、キャスト先の型の範囲に収まるまでその型の
最大値 +1 の数値が足される(または引かれる)。

型の最大値が処理系定義なんで、厳密には処理系定義なんだろうけど、
結果は十分予測できる。

647 :デフォルトの名無しさん:2006/11/22(水) 13:15:56
すいません、ANSIってなんて読むんですか?

アンシ?アンサイ?アンスィイ?
それともエインスィイ?

648 :デフォルトの名無しさん:2006/11/22(水) 13:19:50
>>647
アンジー

649 :デフォルトの名無しさん:2006/11/22(水) 13:41:47
>>647
えーえぬえすあい

650 :デフォルトの名無しさん:2006/11/22(水) 23:44:17
>>647
ぬるぽ

651 :デフォルトの名無しさん:2006/11/22(水) 23:45:11
>>650
ありガとうございます!!

652 :デフォルトの名無しさん:2006/11/23(木) 20:14:49
>>650
ガッンジー

653 :デフォルトの名無しさん:2006/11/24(金) 01:22:01
>>650
ガッツリ

654 :650:2006/11/25(土) 00:46:06
それ以上続けると嫉妬されるのでやめてくれ。

655 :デフォルトの名無しさん:2006/11/25(土) 00:58:40
>>655の人気に嫉妬

656 :デフォルトの名無しさん:2006/11/28(火) 21:32:10
入力された文字列にa〜zとA〜Zと0〜9しか含まれていないかどうかを調べる関数を
if ( (*c >= '0' && *c <= '9') || (*c >= 'a' && *c <= 'z') || (*c >= 'A' && *c <= 'Z') )
という条件で実装しようと思ったんですが、例えば0〜9が連続していない文字コード体系ではこの条件は破綻するかなと思い
結局全ての文字について調べるように実装しました。

C言語においては文字コードはどうなってるのでしょうか?
if ( (*c >= '0' && *c <= '9') || (*c >= 'a' && *c <= 'z') || (*c >= 'A' && *c <= 'Z') )
この条件を使ってしまっていいのでしょうか。

657 :デフォルトの名無しさん:2006/11/28(火) 21:43:16
>>656
#include<ctype.h>
isalnum(c)

あーまぁわざわざ車輪をもう一度作りたいなら一応アドバイスしておくと、
0-9の連続は規格で保障されている。
でもa-z,A-Zは保障されていないから厳密には駄目。

658 :656:2006/11/28(火) 22:18:27
>>657
isalnum(c)

ぬわあああああ
ありがとうございました。

659 :416:2006/11/30(木) 01:56:33
>658
こういう関数って、どういうふうに実装されているんでしょうか?
if( c=='0'||c=='1'||c=='2'|| ・・・
 ||c=='a'||c=='b'||c=='c'|| ・・・
みたいに、一個ずつ比較するんでしょうか?

660 :デフォルトの名無しさん:2006/11/30(木) 01:58:41
>>659
つーか、スレ違い。

661 :デフォルトの名無しさん:2006/11/30(木) 04:34:21
>>659
普通はテーブル参照。
一度ctype.hを眺めてみそ。

662 :デフォルトの名無しさん:2006/11/30(木) 05:40:40
>>660
マクロで実装されている場合副作用がある式を渡しても誤動作してはならないとか
規定されてなかったっけ? その場合>>659はありえないという程度のことは
言えそうだけど

663 :デフォルトの名無しさん:2006/12/01(金) 23:05:57
C99って識別子に日本語使えるのな。

664 :デフォルトの名無しさん:2006/12/02(土) 00:04:19
C89のときから、識別子に使える文字は処理系による拡張が認められていましたが。

665 :デフォルトの名無しさん:2006/12/05(火) 23:56:50
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

666 :デフォルトの名無しさん:2006/12/06(水) 04:02:06
主に高速化・ビットフラグの操作辺り
WindowsAPIではWORD型(2byte)を二つ合わせてDWORD型(4byte)を作るのとかに使われている

あとCPUの内部でも幾つかの命令を実装するのに使われているとか
例えば掛け算・割り算にもビットシフトを使っているらしい

まあ、始めたばかりなら当分使うことは無い
というか、最初はあまり高速化を意識しない方が良いから使い方は知らないでいい

ある程度自力で調べられるようになってサンプルコードとか見て回るようになると色々面白いコードが見つかったりする
ビット演算のスレもあるから、そのうち興味が湧いたらそっちも参考に

667 :デフォルトの名無しさん:2006/12/06(水) 11:23:57
>>665 のコピペはまだまだ釣れるんだなあ。

668 :デフォルトの名無しさん:2006/12/06(水) 15:39:28
コピペ!?

669 :デフォルトの名無しさん:2006/12/06(水) 15:51:18
フラッシュ・ゴードン
あーあ〜

670 :デフォルトの名無しさん:2006/12/07(木) 04:50:45
俺のターン!
メモリマップドIOを攻撃表示に!

671 :デフォルトの名無しさん:2006/12/08(金) 17:55:30
mallocでの取得可能サイズってdefine定義ってされていますか?
あるのでしたら教えてもらいたいのですが・・・

672 :デフォルトの名無しさん:2006/12/08(金) 18:07:40
>>671
処理系が許す限り。

673 :デフォルトの名無しさん:2006/12/08(金) 21:33:56
int piyo(hoge1, hoge2, hoge3)
int hoge1=0;
int hoge2=0;
double hoge3=0.0;
{
// 関数の実装
}

みたいな形って最近のC言語の教科書ではあんまり見ないんですけど、古い仕様?

int piyo(int hoge1, int hoge2, int hoge3)
{
// 関数の実装
}

みたいに書くのと本質的な違いはあるんでしょうか?

674 :デフォルトの名無しさん:2006/12/08(金) 21:44:22
前者は古い仕様、K&Rスタイルとも。
後者が新しい仕様、ANSIスタイルとも。もっともANSI Cは後方互換で前者も認めている。

前者だとプロトタイプ宣言で仮引数の型を指定しないことになる。
そのため前者だとfloat型引数はdouble型で渡されるが、後者だとfloat型で渡されるなどの違いが出てくる。

675 :デフォルトの名無しさん:2006/12/08(金) 21:45:51
>>671
size_tで表せる大きさ

676 :デフォルトの名無しさん:2006/12/09(土) 15:55:11
>>671
malloc実行時の環境依存


677 :デフォルトの名無しさん:2006/12/09(土) 17:07:05
>>674
dクス

678 :デフォルトの名無しさん:2006/12/10(日) 21:30:27
JISから観覧できる規格、pdf内の単語の検索
が出来ないのですが、そうなっているのですか?
Adobe Reader 8

679 :デフォルトの名無しさん:2006/12/10(日) 21:33:36
>>678
画像形式になってる奴だろ。金払って買えってこと。

680 :デフォルトの名無しさん:2006/12/10(日) 22:01:37
電子データがなくて
紙スキャンでお茶を濁してるんじゃないのか


681 :デフォルトの名無しさん:2006/12/11(月) 06:38:28
JIS X 3010じゃないけど買ったらちゃんとテキストを含んだPDFがダウンロードできた。
でも表の中の文字はアウトライン化されてて検索できないという意味不明ぶり

682 :デフォルトの名無しさん:2006/12/12(火) 20:56:21
所詮JIS

683 :デフォルトの名無しさん:2006/12/12(火) 21:12:17
そりゃないよ・・・

684 :デフォルトの名無しさん:2006/12/13(水) 00:39:13
あくまでも紙の規格票が正式ということになってるから
電子データ版のほうが「高機能」だと困るんだろ。

685 :デフォルトの名無しさん:2006/12/13(水) 01:20:09
文字とコードを結びつける表は"字形"で書いてないと駄目なのでは。

それにしてもJIS規格とかには税金を投入して
もっと自由に便利に使えるようにして欲しい。


686 :デフォルトの名無しさん:2006/12/13(水) 11:22:24
C++ の方は、なぜかテキストが含まれているのに。いるのに。

687 :デフォルトの名無しさん:2006/12/14(木) 22:33:17
>>685
まあ確かにその買った規格票はJIS X 0213:2004だったから
例示字形がアウトラインでなければならないのは当然なんだが
なぜかそれ以外の部分まで無意味にアウトライン化されてる。
http://www.itscj.ipsj.or.jp/ISO-IR/233.pdf
に付いているものにはちゃんとテキストデータが入ってるので
わざと削ってることは明白で、もうJISCは死んでくれとしか

688 :デフォルトの名無しさん:2006/12/17(日) 16:28:31
プロセス間通信、共有メモリ について初学者でも
理解できるページがあればurlを教えて欲しいのです。
実際に動かせるソースファイル例等があればうれしいです。
お勧めの書籍等があればそれも是非お願いします。
forkとかwaitを理解する上で気をつけたほうがいいポイントとかがあったらそれも是非。。
私は、構造体とポインタをやっと理解した程度の初学者です、どうぞよろしくです。

689 :デフォルトの名無しさん:2006/12/17(日) 16:38:56
>forkとかwaitを理解する上で気をつけたほうがいいポイントとかがあったらそれも是非。。
forkやwaitはOS固有のシステムコールであって、C言語標準のライブラリ関数ではないということ。

他のスレで聞けば親切に教えてくれる人がいると思うよ。

690 :デフォルトの名無しさん:2006/12/19(火) 20:05:18
689さん、レスありがとうございますー^^

聞くところを間違えたようですね、また改めて他所で聞いてみます。

691 :デフォルトの名無しさん:2006/12/26(火) 12:53:19
こんなコードかいてますが復元された平文には謎の^@マークが大量に入って
しまいます。どうしていいのかわからないのでどなたか教えてくださいませ。

int main(){
Integer a,b,c,d,e,bb,key,k2,I;
f=fopen("an.cc","rb");
ff=fopen("an.cyp","wb");
fg=fopen("an.txt","wb");
while(feof(f)!=1){
b= fread(s,sizeof(unsigned char),15,f);
if(b<15 && b!=0){ for(i=atoi(Itoa(b));i<15;i++) s[i]=0;}
bb=0;
for(i=14;i>-1;i--) bb=(bb<<8)^s[i];
b= key*bb;
while(1){if((a=random())<key){ break; } }
while(1){ if(bit(d=random())<256){ break;}}
c=(b+a)^d;
I=c;
cout << "c=" << c <<"\n";
for(i=0;i<8;i++){ m[i]=atoi(Itoa((I&atoI("11111111111111111111111111111111",2)))); I=(I>>32); }
fwrite(m,sizeof(unsigned int),16,ff);
e=((c^d)-((c^d)%key))/key;
I=e;
for(i=0;i<16;i++){ k[i]=atoi(Itoa((I&atoI("1111111111111111",2)))); I=(I>>16); }
fwrite(k,sizeof(unsigned short),16,fg);
if(e!=bb) cout << "e=" << e << "\n";
}
fclose(f);
fclose(ff);
}

692 :デフォルトの名無しさん:2006/12/26(火) 12:55:06
>>691
> Integer
> Integer
> Integer
> Integer
ほほぅ…

693 :デフォルトの名無しさん:2006/12/26(火) 12:59:44
>>691
色々と論外だけど、せめてコンパイル通るようにしてから出直してください。

694 :デフォルトの名無しさん:2006/12/26(火) 13:31:28
コンパイルは通ってます。長すぎるのでメインの変換部分だけです。
バイナリでデータを読んで、書き出す間に0x00が混じってしまうようです。
どこでそうなるのかがわかりません。数値的には読み込んだ状態と
同じことを確認してから書き込んでいます。読み出しのときにすでに
エラーが発生しているのでしょうか?

695 :デフォルトの名無しさん:2006/12/26(火) 13:33:46
馬鹿じゃないの?初心者未満は他所行ってくれ。
>for(i=0;i<8;i++){ m[i]=atoi(Itoa((I&atoI("11111111111111111111111111111111",2)))); I=(I>>32); }
                ~~~~  ~~~~

696 :デフォルトの名無しさん:2006/12/26(火) 13:35:47
>>694
そうかもね
そうじゃないかもしれないけど、型が分からないから正確なことは何一ついえないね
憶測だけどどこかアルゴリズム間違ってるか、ビット演算子を勘違いしていないかなと思うよ
気のせいかもしれないけど
(もしかしたら他に原因があるかもしれない)


みたいな感じ

697 :デフォルトの名無しさん:2006/12/26(火) 13:37:04
ItoaとかatoIって自作関数?

698 :デフォルトの名無しさん:2006/12/26(火) 13:41:17
coutに誰も突っ込みをいれないあたり優しいな

699 :デフォルトの名無しさん:2006/12/26(火) 13:48:05
random,Itoa,atoI,bitは自作関数か
Integerはtypedefとかされてんのかな
ファイルポインタが宣言されてないがグローバル変数とかなのだろうか
あとreturnがない

700 :デフォルトの名無しさん:2006/12/26(火) 13:53:33
unicode吐いてるんじゃない? とESPしてみる。

701 :デフォルトの名無しさん:2006/12/26(火) 14:04:29
>>random,Itoa,atoI,bitは自作関数か
そうです
>>Integerはtypedefとかされてんのかな
昔のC++に付いて来た多倍長整数型です。
読み込みデータに問題はありませんでした。しかし演算の途中で0x00が
混じっていることは確かなようです。

702 :デフォルトの名無しさん:2006/12/26(火) 14:20:43
>>701
>そうです
…は?
>昔のC++に付いて来た多倍長整数型です。
…へ?

atoI() の第2引数は strtol() 同様、基数を与えているんだろう、くらいが
俺の超能力の限界。

703 :デフォルトの名無しさん:2006/12/26(火) 14:21:09
奇跡で解決しました。
ありがとうございました。

704 :デフォルトの名無しさん:2006/12/26(火) 14:22:14
昔のC++ではなく、お前使っているC++処理系についてきた、だろ。

705 :デフォルトの名無しさん:2006/12/26(火) 14:26:44
gccの2.95.3のG++ですけど・・・

706 :デフォルトの名無しさん:2006/12/26(火) 14:30:52
今は読み込むファイルのサイズに合わせてパディングが発生しない
様にしているんですが、もし発生した場合、復号のときの逆関数で
0の部分を除去しなければならないはずなんですがいい方法が思い
つきません。何かいいアイデアがあったらよろしくお願いします。

707 :デフォルトの名無しさん:2006/12/26(火) 14:40:45
ここは 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 ですよ

708 :デフォルトの名無しさん:2006/12/26(火) 14:45:21
どこに質問すればいいですか?

709 :デフォルトの名無しさん:2006/12/26(火) 14:47:30
>>708
俺の知っている限り少なくともココ以外で、使っている"Integer"やらatoI()などを知っている環境依存なスレ/掲示板
だろうな

710 :デフォルトの名無しさん:2006/12/26(火) 15:40:45
パディング解決しました〜。

711 :デフォルトの名無しさん:2006/12/28(木) 16:47:45
WEB上で日本語のc言語リファレンスってありますか?
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/
の日本語版とか

712 :デフォルトの名無しさん:2006/12/28(木) 19:29:25
便利かどうかはともかく本家本元。
JIS X 3010 プログラム言語C、ISO/IEC 9899 : 1999(標準C99)の翻訳。

ttp://www.jisc.go.jp
JIS検索→規格番号 X3010



165 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)