[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:52 / Filesize : 232 KB / Number-of Response : 957
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 18



1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 17
pc11.2ch.net/test/read.cgi/tech/1185286631/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 94代目
pc11.2ch.net/test/read.cgi/tech/1185452895/

52 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 04:24:30 ]
www9.plala.or.jp/sgwr-t/c/sec07.html
> scanf()で読み込み不一致が起こる問題では、上記 「atoi()、atol()、atof()」を使って回避します。
> 読み込み不一致は、scanf()を for や while などのループの中で用いた場合、入力バッファに
> 残されたデータを永遠に受け付けないため無限ループになってしまい意外に深刻な問題となります。
> そのためデータを一旦、scanf("%s", ○)や gets()を用いて文字列として入力し、それから上記の
> 変換関数を用いて期待するデータ型に変換するのです。

int i = 0;
char a[20];

while(i != -1) {
printf("整数値を入力してください(終了条件:-1)\n");
scanf("%s", a);
i = atoi(a);
}





53 名前:デフォルトの名無しさん [2007/08/18(土) 04:30:09 ]
>>52
超すばやいお返事&回答ありがとうございます(@w@

なるほど・・これをすると入力を永久に受け付けなるのですね
しかもサイトまで教えていただいてありがとうございます!
このサイトいいですねw勉強してきます

54 名前:デフォルトの名無しさん [2007/08/18(土) 06:22:06 ]
乱数に関しての質問なのですが、教科書には

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int i;
srand((unsigned)time(NULL));

for(i = 0; i < 10; i++){
printf("%d\n", rand() % 100);
}

return 0;
}
でおkと書いてるんです。
コンパイルは通ったのですがこの部分の
printf("%d\n", rand() % 100);
これってもし 0 がきたら0割りで無限ループになるんでしょうか?
0がくることはないですか?
自分は
printf("%d\n", (rand() +1 % 100);
のほうがいいんじゃないかと思ったのですがどうなのでしょうか?




55 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:22:34 ]
>>52
だからそのサイトは地雷だって。果てしなく間違いが見つかる。

56 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:25:29 ]
>>54
馬鹿もん、0割る100は0だ。

57 名前:51 [2007/08/18(土) 06:28:18 ]
すいません^^; >>54 は 51です。名前入れ忘れました。 

58 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:29:06 ]
>>57
別に誰でもいいから自分宛のレスを読んでレスしてから言い訳しろ。

59 名前:51 [2007/08/18(土) 06:33:35 ]
あぅ・・すいません。言い訳じゃなかったのですが つw;)
今 0/100やっても大丈夫でした^^;申し訳ありません。
学校でCOBOLとC、同時にやってるのでごっちゃになってしまいました。。
(COBOLは0を割ると無限ループになっちゃうので・・)
一回試してから聞くようにします^^;ごめんなさい

60 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:41:01 ]
>COBOLは0を割ると無限ループ
そうだっけ? どうでもいいけど常識的には有り得ないんだけど。



61 名前:51 [2007/08/18(土) 06:42:56 ]
>>60
あぅ、うちの学校のホストだけなのか´ω`;
GS−8200って富士通のホストです


62 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:46:09 ]
うぁはは、COBOLってすげー。
--
COBOL アプリケーションプログラムを強制終了するには、2 通りの方法がありま
す。
方法 1
0 で 0 を割る COBOL アプリケーションプログラムを作成します。

63 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:46:36 ]
例外ベクタの飛んだ先にHLTが埋め込まれてるんじゃないの。
古代の処理系ならありがちだよ。

64 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:50:28 ]
ゼロで除算する事が問題になるのはよく聞くけど
ゼロを除算する事が問題になるなんて聞いたこと無いな

65 名前:51 [2007/08/18(土) 06:54:47 ]
あ!ほんとだ
100/0にしたらコンパイルエラーになった。
完全に私の覚え間違いでした・・ちょっとROMって勉強しなおします・・

66 名前:デフォルトの名無しさん [2007/08/18(土) 10:31:49 ]
C言語を勉強する前に身につけておかなければならないことは?

67 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:35:22 ]
>>66
そういう頭でっかちの考え方を捨てること

68 名前:デフォルトの名無しさん [2007/08/18(土) 10:37:58 ]
基本スペックは中卒+パソコンオタクです

69 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:46:27 ]
なんだかんだ言っても、コンピュータの仕組みを知ることも重要だよね。
人によってはコード、文字列を入力しているようにしか思えないだろうけど
汎用電子計算機に処理してもらっていること、どのように処理されているのかとか。
そういうのを知ると、より適切なプログラミングが出来るようになる。

70 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 11:12:26 ]
>>55
なんか、そのサイトの作者が自作自演で宣伝してるんじゃないかってかんぐりたくなるな。



71 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 11:19:22 ]
だとしたらかなり高度な自演だなw

72 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:06:55 ]
〇∧〃 初心者からの質問?
 / >  でもそんなの関係ねぇ!
 < \  そんなの関係ねぇ!

  〇/ はい!
 /|    オッパッピー!!
 />

全部わすれておっぱっぴー!

73 名前:デフォルトの名無しさん [2007/08/18(土) 20:29:38 ]
一つ質問があります。よろしくお願いします。

realloc()についてなんですが、このメモリ領域拡大縮小関数の
P186の定義を見てあきれたんですが、
新規にメモリを確保して、memcpy()で内容をコピーしてるんですが
領域を縮小するときはともかく、領域を拡大した場合、
元のメモリ領域の外までコピーしていますよね。
これってエラーにならないんですか?
確かに書き換えているわけではないので
問題ないのかもしれませんが、これじゃメモリを別アプリから覗き見放題じゃ
ないですか。本当のところどうなんでしょうか。単にわたしの資料が古いだけかな。

それと今、C++でrenew()みたいな関数作ろうと思ったんですが、
元のメモリ領域のサイズがわからないので難儀しています。
何かよい解決策がありましたらご教授ください。


74 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:31:22 ]
P186って、なんのページ?

75 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:37:50 ]
こっちが呆れた。

76 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:40:54 ]
標準ライブラリって仕様は統一されてても実装は処理系依存じゃ?

77 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:58:29 ]
>>76
標準の話じゃなくて、なにかの本のP186に載ってる実装例の話でしょ。

78 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:03:54 ]
P-186号文書

79 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:04:23 ]
文字列がABCDEFG・・・みたいに続いていて
2文字目だけコピーするまたは3文字目から5文字目をコピーするといった方法ありますか?
strcpy()だとできない・・・

80 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:07:36 ]
memmove, memcpy, strncpyとか



81 名前:デフォルトの名無しさん [2007/08/18(土) 21:11:28 ]
>>74
ANCI C言語辞典です。
ちなみに、XPでBCCのC++でnew使って同様にmemcpyしてみましたがエラーにならないようですね。

char* p1;
char* p2;
p1 = new char[10];
memset(p1, 'A', sizeof(char)*10);
p2 = new char[1000000];
memcpy(p2, p1, sizeof(char)*1000000);
delete p1;
delete p2;


82 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:14:25 ]
>>81
そりゃエラーにならんだろう
範囲外を書き換えているわけじゃないし

83 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:26:36 ]
>>74
オッパッピーのピーだよ、きっと

84 名前:デフォルトの名無しさん [2007/08/18(土) 21:27:46 ]
>>79
こんなんでどうでしょう

const int siz = 3;
char s[] = "ABCDEFG";
char* p;

p = new char[siz];
memset(p, '\0', siz);
p[0] = s[1];
printf("2文字目:[%s]\n", p);
memset(p, '\0', siz);
memcpy(p, &s[2], sizeof(char)*3);
printf("3文字目から5文字目:[%s]\n", p);
memcpy(p, &s[2], &s[5] - &s[2]);
printf("3文字目から5文字目:[%s]\n", p);
delete p;


85 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:29:43 ]
>>82
やっぱりそうですか。了解しました

86 名前:79 mailto:sage [2007/08/18(土) 22:00:39 ]
>>84
サンクス!なんとかできた

87 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:18:53 ]
>>86
間違っても>84を真似してはいけません。それはCではありません。
--
bool strExtract(char * dest, const char * str, unsigned from, unsigned to)
{
if (str == NULL || dest == NULL) return false;
unsigned length = strlen(str);
if (from - 1 >= length || from < to) return false;
length = to - from + 1;
sprintf(dest, "%*.*s", length, length, str + from - 1);
return true;
}

char buf[100];
char str[] = "ABCDEFG";

// 2文字目をコピーした文字列を得る
strExtract(buf, str, 2, 2);
// 3-5文字目をコピーした文字列を得る
strExtract(buf, str, 3, 5);

88 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:30:44 ]
84、87は初心者か、悪意のある上級者だろうな。

89 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:36:04 ]
>>88
84が初心者(というか、自称初級者)で87が悪意のある(というか、臍曲がりの)上級者かと。

90 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:36:13 ]
#include <stdio.h>
#include <string.h>

int main(){
char a[]="ABCDEFG";
char b[10];

/* 3文字目から5文字目こぴー */
strncpy(b, a+2 ,3);
b[3]='\0';

/*確認*/
printf("%s.%s\n", a, b);

return 0;
}



91 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:43:04 ]
>>73
realloc()の返り値は、渡した引数と必ずしも一致していない。
必要なら、別の領域を探してきてそちらに移す。

というか、
>>これじゃメモリを別アプリから覗き見放題じゃないですか。

物理アドレスと論理アドレスの違いを勉強してくれ。





92 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:49:34 ]
>>79
90が普通の書き方だけど、Windows環境なら、windows.hをインクルードして、
lstrcpyn()を使う方法も。

93 名前:87 mailto:sage [2007/08/18(土) 23:57:12 ]
一部訂正。
--
- if (from - 1 >= length || from < to) return false;
+ if (to - 1 >= length || from < to) return false;
--
toで制限しておけばfromは必然的に制限の必要がないのを逆にしてしまった。
toで制限するなら、%*.*sも冗長と言えば冗長か。%.*sにすれば引数のlengthが一つですむ。

>>88>>89
何さ。
>>90>>92
strncpy()の仕様を覚えるくらいならsprintf()を使いこなした方が潰しが利きそうな気がするが。

94 名前:90 mailto:sage [2007/08/19(日) 00:07:12 ]
>>93
>strncpy()の仕様を覚えるくらいならsprintf()を使いこなした方が
両方覚えるのが良いかと思います。後回しにするのならまだしも、
少なくともこの時点で切り捨てる必要は無いでしょう。
両方知れば、使い分ける事ができますから...

95 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:07:46 ]
>>93
覚えるのは「strcpy()の長さ制限のあるバージョンがあったな」ってくらいでいいでしょ。
使うときは、仕様を確認すればいい。

96 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:15:29 ]
strncpyはstrcpyに比べて異常終了しにくいので、まあともかく早く
動かしたいときには、よさそうな気もするけど、データの異常に気づかない
可能性があるのでおすすめではないです。
sprintは普通に重い処理だからスピードとか気にするところでは
避けたいですが、まぁ使いやすいっちゃ使いやすいですね。
memsetで初期化するのも褒められたやり方じゃないよな。

97 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:20:53 ]
>>96
strncpy()でデータ異常に気づかないって、どういうケースで?

98 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:22:24 ]
sprintfは「書式を指定する」てところに、特徴があるので、
その様な状況ではsprintfが適切でしょ。
対して,strcpy,strncpyは文字列のコピーが目的の関数ってことで、
>>79の様なケースでは、関数本来の目的にあってるかと思う。

99 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:26:17 ]
strncpy()は、コピー先の後ろを0で埋めるという仕様があるので、
strncat()を使ったほうが速度的には有利だけど、書き方が直感的ではなくなる。

dst[0] = '\0';
strncat(dst, src, n);



100 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:26:50 ]
>>97
文字列終端の'\0'を忘れるケースがありますね。



101 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:29:28 ]
>>100
コピー元の文字列が、0がついてないような場合でも、長さ制限があるから無事に処理ができてしまうということ?
それは(この文脈では)sprintf()でも同じことでは?

102 名前:100 mailto:sage [2007/08/19(日) 00:49:40 ]
>>101
送り側の文字列に0が無ければそうですが、送り側に0があった場合でも、
strncpyの場合、送り側が受け側の長さ(与えた長さ制限)以上の場合、付きません。
対して、sprintfならば0は自動的につきます。受け側に起きる問題ですね。

ちなみに >>100 != >>96 ですので、
>>96さんのいう異常が同じ事を言ってるのかは、わかりませんが。


103 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:50:34 ]
指定した長さでコピーがカットされた時、
\0終端してくれないってことだろ

104 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:14:06 ]
char s[] = "12345678", d[4];
strncpy(d, s, sizeof(d));

ってやったときにdは0終端されないっす。
こういう挙動なのでとっても使いづらいっす。

使いどころはないこともないんだけど、
まず使うことはないですね。

105 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:34:21 ]
フリーの統合開発環境でいいのありますか

106 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:35:46 ]
Visual Studio

107 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:39:40 ]
>>104
strncpyの返り値が d じゃなくて、コピー後の末尾だったら良かった。
と思ったことがある。そうすれば、次々に連結する処理が楽かなーと。
まあ、それくらいなら自作出来るけど。

108 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 02:01:33 ]
>>105
いいのかどうか分からないけど
少し重いが
同じツールでJavaも開発できるエクリプスなんかどうでしょう?
コマンドプロンプトしかありませんが


109 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 04:40:42 ]
学生なら迷わずVS 2005 academic

110 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:05:01 ]
学生で今はちょっとCをやった所だけど、やっぱりCよりC++の方がすごいソフトができるの?
なでしことかドリトルでは限界があるの?プログラマーは生涯にたくさんの言語を使うらしいけど
DとかJavaとかいろいろありすぎてどれをやればいいのか分からない、とりあえずCからやってるけど



111 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:08:05 ]
初めはJavaかC#からやるのがいいんじゃないかな
Cはその次がいいと思うよ

112 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:20:16 ]
マジで? ちょっとVisual C# Express Edition落としてきます

113 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:24:36 ]
Cからやるべきだろ

114 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:27:17 ]
俺もCからがいいと思うよ

115 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:33:57 ]
C#かJavaあたりだろうね。

116 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:38:28 ]
俺も初めはバグを作りにくく直しやすい言語がいいと思うからC#やJavaをすすめる。
Cより型付けが強いし何かあれば例外投げて原因に気づきやすい。
あとGCがあるからメモリ周りは比較的無頓着にできる。
もちろんその後もCはやらないでいいって言ってるわけじゃないよ。

117 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:23:01 ]
strncpy みたいな使いにくい関数じゃなくて、
strlcpy が標準になればいいのに。


118 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:34:54 ]
NULLターミネイト位やっといてくれよとは思う
結局ラッパー関数書くハメになるし

119 名前:デフォルトの名無しさん [2007/08/19(日) 18:11:09 ]
void PhysicsDraw(){

for(int x=40; x<640; x=x+40) DrawLine(x,0,x,480,GetColor(64,64,64));
for(int y=40; y<480; y=y+40) DrawLine(0,y,640,y,GetColor(64,64,64));
DrawCircle(320,240,30, GetColor(255,0,0),TRUE);
}
ていうプログラムが本に載ってたんですがそのままやっても

> C:\borland\bcc55\Bin\make.exe -fDebug\dxtest.mak TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -L..\DxLib -DDEBUG -nDebug -I..\DxLib;C:\Users\shiro\Desktop\MyC\プロジェクトに追加すべきファイル_BCC用\DxLib -c C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp:
エラー E2268 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 3: 未定義の関数 'DrawLine' を呼び出した(関数 PhysicsDraw() )
エラー E2268 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 3: 未定義の関数 'GetColor' を呼び出した(関数 PhysicsDraw() )
エラー E2268 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 未定義の関数 'GetColor' を呼び出した(関数 PhysicsDraw() )
エラー E2268 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 未定義の関数 'DrawLine' を呼び出した(関数 PhysicsDraw() )
エラー E2268 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 未定義の関数 'DrawCircle' を呼び出した(関数 PhysicsDraw() )
エラー E2268 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 未定義の関数 'GetColor' を呼び出した(関数 PhysicsDraw() )
エラー E2451 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 未定義のシンボル TRUE(関数 PhysicsDraw() )
*** 7 errors in Compile ***

** error 1 ** deleting Debug\dxtest.obj

Make End !! (Elapsed time 0:00.296)
ってエラーが出るんです。どうしてでしょうか?
ちなみに今日プログラム始めたばかりです。

120 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:40:01 ]
>>119
それはコードの一部だからコンパイルできないよ。

どっかにコードの全部が掲載してあるんじゃね。
もしくはCDに入ってるか。

つか、本文も読めばいいのに。



121 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/20(月) 02:31:35 ]
質問なのですが家でc言語使えるようにしようと思って
microsoft.net Framework version 2.0 再頒布可能パッケージ
microsoft.net Framework version 2.0 SDK 日本語版
をダウンロードしたのですが友達の話によると
microsoft.net Framework version 2.0 日本語版 language pack
が必要らしいのですがmicrosoftの公式サイトに行っても見つからないのですが
どうやったら手に入るのでしょうか?
すごい初歩的な質問ですいません

122 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 02:38:44 ]
>>121
悪いことは言わんから Visual C++ 2005 Express Edition 使っとけ。

123 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 10:45:33 ]
C言語で.NET?

124 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 10:47:25 ]
.NETが必要なら導入すべきだが、C言語ってだけだと別に必要ってわけでもないガナ

125 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 11:10:49 ]
>>107
あー、それ俺も思った。
strncpy(d, s, sizeof(d))[sizeof(d)] = '\0';
           ↑   ↑
           ここがなんかクドイ

126 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 11:39:29 ]
>>125
くどいかどうか以前に、いろんな意味で間違いすぎ。

127 名前:51 [2007/08/20(月) 12:41:28 ]
低レベルな質問なのですが・・
こないだ友人と話してたのですが(どちらも現場経験なし)、
if文に{}っていりますか?
ifのあと文が1つなら{}は省略してよし、と書いてあるので友人はいらないといいます。
けど私は読みやすいから{}つけたい人間です。
こんな感じです。
if(ia==0){
printf("HelloWorld\n");
}
{}はつけないほうがいいのでしょうか?



128 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 12:48:48 ]
>>127
宗教論だな。正直どっちでもいい。

いろいろな人がソースコードを編集するなら
インデントとか括弧とかはツールで一括変換するようにすればおk
GreatCode とか

129 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 12:53:52 ]
if(foo)
 if(boo) zoo=0;
else // !fooのつもり
 zoo=1;
みたいなのをやらかしそうなら、付けといた方がいいかな、程度のもんだと思う。

130 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 12:58:20 ]
私のところのコーディングガイドでは、1行に収める場合のみ省略化としている。
つまり、
if (foo) bar();
はOKだけど
if (foo)
  bar();
はダメ。
勿論、
if (foo) {bar();}

if (foo) {
  bar();
}
もOK。



131 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 12:58:51 ]
>>127
>if文に{}っていりますか?
つけてもつけなくても文法上間違いではない。
>{}はつけないほうがいいのでしょうか?
つけたほうがいい。

132 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:07:31 ]
>>126
>いろんな意味
kwsk

133 名前:132 mailto:sage [2007/08/20(月) 13:10:15 ]
あ、ありえないミス…
× sizeof(d)
○ sizeof(d)-1

134 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:11:37 ]
俺は逆にカンマ演算子を使ってまで中括弧は使わないようにしてる
えへへ

135 名前:51 [2007/08/20(月) 13:11:45 ]
>>128>>131
回答ありがとうございます。
どちらでもいいし、つけたほうがいいっぽいですね^^
やはりつけるようにします。

136 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:18:09 ]
>>125
dが配列だと思っていいのかな?
だったら
sprintf(d, "%.*s", sizeof(d) - 1, s)
でいいじゃん。

137 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:25:54 ]
>>136
0終端の為だけに態々そんな余計な文字列パースさせるの?

138 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:31:17 ]
>>137
余計なメンテナンスに時間取られるくらいならありじゃね?
パフォーマンスが問題になるようなら入れ替えればいいことだし。
# まさかMS-DOSの時代みたいにprintf()系をリンクしないでサイズ節約なんて考えないだろうし。

139 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 18:58:08 ]
>>135
文がひとつのケースでも括弧をつけたほうがミスがなくなる。

140 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 20:58:52 ]
宗教論争になるからそろそろやめようぜ。



141 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:18:10 ]
という指摘は既に >>128 でなされているわけですが
どーしても自分語りがしたい阿呆が多くてなかなか収束しません。

142 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:19:17 ]
なに仕切ってんのコイツ

143 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:35:48 ]
 ヽ○     小学校のころから、学級委員してました♪
  |>    
  ((

 〇∧〃 
 / >  でもそんなの関係ねぇ!
 < \  そんなの関係ねぇ!


  〇/ はい!
 /|    オッパッピー!!
 />

チントンシャンテントン♪
チントンシャンテントン♪


144 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:10:27 ]
いろんな意味で終わったネタを引っ張るなよ

145 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:57:39 ]
>>135
一行のときは{}は無いほうがいいよ。
10年に一度もしないようなミスのために、読みやすさを損なうことはない。

コードを大量に書いてる人は、省略する派が多いし。



146 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:21:38 ]
笑わせてくれるぜ

147 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:39:51 ]
>>145
コードを大量に書いてる人ってだれ?

148 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:54:27 ]
読みやすさを考えたらコードを大量に書くとか・・・

149 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:56:52 ]
>>147
linux書いてる人とか、apache書いてる人とか、postgres書いてる人とか、その他いろいろ。

150 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 00:01:02 ]
「一行でも{}をつけた方が良いか」とかの、
くだらない事を質問するような奴なら、つけた方が良いと思う。
俺はつけないが



151 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 00:42:31 ]
>>149
その人たちは本当に読みやすさのために省略してるのか?

152 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 00:44:55 ]
そもそも「コードを大量に書く人」のソースをlinuxやapache書いてる人として
その人たちの中じゃこっち派が多いよってのは無理があるだろう。
そこらへんのプログラマだって大量にコードは書いてる。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef