トップページ⇒tech
1001コメント286KB

【ANSI-C】 C言語なら俺に聞け!  Part 129

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/08/27(日) 15:43:44
このスレは標準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 128
http://pc8.2ch.net/test/read.cgi/tech/1151282084/


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

【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145524/
C/C++の宿題を片付けます 73代目
http://pc8.2ch.net/test/read.cgi/tech/1155355501/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0175デフォルトの名無しさん2006/09/02(土) 18:09:01
>>174
これなんかどうだ。結構キテるぞ。
http://www.planetpdf.com/developer/article.asp?ContentID=6635
0176デフォルトの名無しさん2006/09/02(土) 18:21:52
>>174
C++ 使えないの?
0177デフォルトの名無しさん2006/09/02(土) 18:35:01
>>174
Embedded C++使え。
0178デフォルトの名無しさん2006/09/02(土) 18:37:51
>>176
ファームウェアの内容にもよるが、
組み込み系はなかなか新しいことがしづらい
新規開発ならまだしも、正常に動作している=修正しないスタンスだからな
それともうちだけか?
だから俺の職場ではCしか使っていない。174はどうか知らないけど
0179デフォルトの名無しさん2006/09/02(土) 18:44:33
☆
☆☆
☆☆☆
☆☆☆☆
☆☆☆☆☆
☆☆☆☆☆☆
という風に表示したいんだが・・・






0180デフォルトの名無しさん2006/09/02(土) 18:46:04
#include<stdio.h>
main()
{
int i,j,n;

printf("星の数を入力");
scanf("%d",&n);
printf("パターン1         \n");
for(i=1; i<=n; i++){
for(j=1; j<=i; j++){
printf("☆");
}
printf()
}
printf("\n");
}

のprintf()の中になんて書けばいい?
0181デフォルトの名無しさん2006/09/02(土) 19:17:16
>>180
"\n"

後スレ違い。
0182デフォルトの名無しさん2006/09/02(土) 21:33:48
>>168
レス遅れました。
厳しいコメントありがとうございました。

0183デフォルトの名無しさん2006/09/03(日) 01:38:44
>>178
安定性を免罪符に、とっちゃん達が勉強をサボってるだけってのが実感かなあ。
信頼性の面において同列に語っちゃいかんのだろうが、求められるところは似てる
ゲーム開発なんかだと、GBA時代で既にC++を使ってる奴はいくらもいたし、
DSなんかでもC++に移行してる奴は少なくない。

もちろんRTTIや例外なんかは自主的に封印される傾向だし、動的メモリ確保も
避けられる限りは避けるわけだが、C++イコール性能が落ちるってわけじゃなし、
未だに移行を渋ってるのは、やむにやまれぬ事情による本当に一部の例外を除けば
マジで宗教上の理由以外考えられん希ガス。
0184デフォルトの名無しさん2006/09/03(日) 01:42:30
それはファームなのか?
0185デフォルトの名無しさん2006/09/03(日) 01:44:27
普通にアプリケーションの話だと思う。
0186デフォルトの名無しさん2006/09/03(日) 01:45:26
>>183
つーかC++教が、その魅力や必然性の布教活動をできてないだけだな

つーかGBAやDSは組み込み系とするのは、ちょっと組み込み系を
拡大解釈しすぎなんじゃねえかとは思う
0187デフォルトの名無しさん2006/09/03(日) 02:33:55
>>183それだけ封印すると単なるCと何ら変わらない気がするけど、宗教でんでんよりも、どうしてそこまで封印してまでC++なのか理解に苦しむ。Cでもいいけど、例外はどうしても欲しい。
0188デフォルトの名無しさん2006/09/03(日) 03:13:41
>つーかGBAやDSは組み込み系とするのは、ちょっと組み込み系を
>拡大解釈しすぎなんじゃねえかとは思う

自分で言ってて俺もそう思った。
つーより本当の意味での組み込み系ってどうもピンとこないんだわ。
すまん。


>>187
最低でもテンプレート、名前空間、仮想関数、クラス、継承、明示的なinline関数、
タイプセーフは普通に使えるんだから、保守性の面では生Cとは比較にならんがな。

例外が欲しい人の気持ちはわかるが、組み込み(一歩手前)の環境だと
まあなんつーか、無くても全然困らん。
0189デフォルトの名無しさん2006/09/03(日) 03:47:26
>>187
> でんでん
こないだマ板でみたばかりだが、流行ってるのか?
0190デフォルトの名無しさん2006/09/03(日) 03:53:39
云々のことかっー!
0191デフォルトの名無しさん2006/09/03(日) 03:56:07
巣窟をすくつと読むのと同じ手合いだな。
0192デフォルトの名無しさん2006/09/03(日) 04:03:01
メンタンピン三色ツモドラドラでんでん
倍満
0193デフォルトの名無しさん2006/09/03(日) 04:08:18
でんでんむし
かたつむり
0194デフォルトの名無しさん2006/09/03(日) 04:19:40
テンプレート
名前やクラス関係
インラインやタイプセーフ
これらと(可読・管理など)保守の関係がとても広く感じます
が、比較にならんほどなのでしょうか。

名前空間とクラスはC++でなくとも、面倒がらなければgtkのような
とても長い関数名も一つのアプローチと思ってます。

ところで、
「でんでん」はなんか可愛い感じで伝染してるじゃないですか。
0195デフォルトの名無しさん2006/09/03(日) 04:21:13
>>194
ANSI-Cは6文字までしか識別子の長さは保証されとらんよ。
0196デフォルトの名無しさん2006/09/03(日) 04:27:52
C99 では31文字となっている。6文字は C89 か?
0197デフォルトの名無しさん2006/09/03(日) 04:34:36
外部名に限ってはC89は6文字だな。
0198デフォルトの名無しさん2006/09/03(日) 04:36:21
>比較にならんほどなのでしょうか

いや、むしろそれが実感でわからないなら感覚腐ってると思うんだが、どうよ。
煽りでも何でもなしに。
ていうか何のためにC++が生まれたと思ってんだ。

確かにC++の機能の大半はCでもやってやれないわけじゃないんだが、
同じことをやって、かつそれを延々と保守していくためのコストは
マジ比較にならん。

俺が絶対にミスせず、一度にさばける情報量にも上限がない様な生き物ならCのままでもいいが、

inlineが無いばかりにだだ並ぶマクロ、
namespaceが使えないばかりに俺様会社ルールのプリフィックスサフィックスまみれになる関数名、
テンプレートが無いおかげでちょっと相手にする型が違うだけなのに大量に用意されてしまう関数、
仮想関数相当をさばくために用意されるswitch〜caseの嵐、ないしは著しく可読性を損なう関数テーブルの山、
タイプセーフがないせいでもって素通りしてしまうヒューマンエラー、

馬鹿の俺には悪夢そのものじゃねーか。
自分ひとりで小さく転がすなら何だっていいけど、大人数でそれなりのコード量回すのに
こんなのいちいち付き合ってらんない。
つーか有り得ん。
有り得んわ。
0199デフォルトの名無しさん2006/09/03(日) 07:06:08
>>198 煽るとかそういうつもりではなかったんですけど、ずいぶん苦労が溜まってるようですね。根本はC++とかCとかの問題じゃないのでは?腐ってるのは、行き当たりばっかりだからなのかな。
0200デフォルトの名無しさん2006/09/03(日) 11:49:25
C++使っても状況は変わらない希ガス
0201デフォルトの名無しさん2006/09/03(日) 13:08:45
いや、>>198 の言うことも一理あると思う。

ただ、Cでもきちんと組んだものは >>198 の言うほど差があるわけじゃない。

メンテとかでCで書かざる得ない時に C++ ならもっと楽できるのに… って
思うことがたまにある程度。
0202デフォルトの名無しさん2006/09/03(日) 13:11:22
>>198 のような違いがあるのは確かで、プログラムの性質や
メンテナンスの頻度によって感じ方が違うんだろう。
0203デフォルトの名無しさん2006/09/03(日) 16:35:25
んで、結局C言語でわかりやすく効率的で、しかも、昔ながらの人でも
理解しやすい組み方ってなんですかね?
やはり、グローバル変数をダイレクトに使ってでも、単純に、実直に組み立てるほうが
保守や移植はしづらいが、昔の人にはわかりやすいのか?
ちなみに移植といっても、結局同じようなシステムにしか移植できないんだよね。
0204デフォルトの名無しさん2006/09/03(日) 17:09:17
>>203
どこまでのロートルをターゲットとするかにも拠るけど、プロトタイプ以前の人を対象とするのだけはやめた方がいい。
関数ポインタでさえ、「難しいプログラム書きますね」って言われちゃうんだから。
#逆にその人が書いたものを見たが、まさかポインタ変数をフラグに使うとは夢想だにしなかったよ。
0205デフォルトの名無しさん2006/09/03(日) 17:10:57
>>204
ポインタのヌルチェックでフラグ的な働きをさせることがあるけど、まさかそのことじゃないよね?
0206デフォルトの名無しさん2006/09/03(日) 17:37:49
いや、例えばこんな感じ。
int longlongfunction(foo, bar, baz)
double baz, bar; // オールドスタイルだし、fooの型は省略するしbarとbazの順番も気にしない
{
int * hoge; // 兎に角頭で宣言する
/* この間数十行 */
hoge = malloc(...);
/* この関数十行 */
free(hoge);
hoge = 0; // NULLじゃないし
/*この間数行 */
if (...) {
hoge = (int *) 1; // 無理矢理フラグ的に使う
}
/* この間十数行 */
if (hoge == 1) { // 比較は0とするべきなんだけど...
return -hoge; // エラーは-1という仕様らしい。
}
/* この間数行 */
} // あれ? 最後のreturnがないぞ?

こんなソースのメンテナンスが回ってきた日にゃぁ、もうね。
#正直、新人に任せるわけにも行かないから結局漏れが見る羽目になるわけだが。
0207デフォルトの名無しさん2006/09/03(日) 18:16:34
Cにこだわる人がC++に移行しない主な理由は何なんですか?
はやさ?
0208デフォルトの名無しさん2006/09/03(日) 18:20:03
C--って名称だったら間違いなく移行してたな
0209デフォルトの名無しさん2006/09/03(日) 18:24:07
>>206
これは省スタックなコードですね。

>>207
移行しない、ではなく、
C++で面倒な事になりそうな環境ではCを使ってるだけ。
使える環境なら、C++に限らず何でも使う。
0210デフォルトの名無しさん2006/09/03(日) 19:19:40
>>204, >>206
単にお前の会社に DQN がいただけということだろ。

ロートルかどうかは関係ないと思うぞ。
0211デフォルトの名無しさん2006/09/03(日) 20:10:54
>>210
それがあなた、某大手と取り引きのある一端の会社の課長さんでございますよ。
#その会社のせいで我が社が噛めないってのにw
0212デフォルトの名無しさん2006/09/03(日) 20:23:36
>>207
組み込み系とかではC++のコンパイラなんてなかったりする。
あっても致命的に遅かったり。
Cのコンパイラもなかったりする。

>>211
>>210と同じくロートルかは問題じゃないんじゃ
じゃあUNIX初期のコードはひどかったんだw
0213デフォルトの名無しさん2006/09/03(日) 21:07:01
>>211
会社の規模や役職に関係なく DQN はいるだろ。

>>212
今時Cの開発環境がないチップなんかあるのか?

型名 plz.
0214デフォルトの名無しさん2006/09/03(日) 21:47:10
今の話をしたいの?過去の話をしているの?なんなの?
0215デフォルトの名無しさん2006/09/03(日) 22:07:25
唐突に「過去の話」とか出してきて、なんなのって言われても、
多分 10ns ぐらいじゃね としか答えられないな。
0216デフォルトの名無しさん2006/09/03(日) 23:22:20
>>206 始めは嘘っぽかったけど実際見ると時代を感じますね〜。
今のCやJavaなども何年もたつと、そういう感じがしてしまうのかと
思うとなんだか気持ちが切なくなります。
0217デフォルトの名無しさん2006/09/04(月) 01:58:54
>>212
gccとか使えんの?
0218デフォルトの名無しさん2006/09/04(月) 11:27:13
>>213
>今時Cの開発環境がないチップなんかあるのか?
「チップ」が何を指しているのか解らんのだが。
(因みにプロセッサ“だけ”の問題ではない)
0219デフォルトの名無しさん2006/09/04(月) 18:50:01
EEPROM2k、SRAM512バイトとかの石でC++はなぁ・・・
0220デフォルトの名無しさん2006/09/04(月) 18:58:29
memchr
memcmp
memset
memmove (memcpy)
を使ってもC標準ライブラリーにある関数で作れないのってあるの?
メモリー関係はこれだけ使えればOKってこと?

locale.h, time.h math.h とかはメモリ操作と性質が違うから除外ね。
0221デフォルトの名無しさん2006/09/04(月) 19:02:54
>>220
最悪手動的にループ書けば何でもできる。
0222デフォルトの名無しさん2006/09/04(月) 20:41:04
>>218
まずプロセサだけでも書けばいいじゃん。
その他に理由があるならそれも書けばいいだけだと思うけど。
コミュニケーション能力がないのか?

>>219
C++ はきついけど、C だったら大丈夫と思うけどね。
0223デフォルトの名無しさん2006/09/04(月) 21:11:20
激しくスレ違い
0224デフォルトの名無しさん2006/09/04(月) 22:35:11
>>219
C++ だと、どうなるって?
0225デフォルトの名無しさん2006/09/04(月) 23:07:39
>>219
>>EEPROM
もしかして EERPOM のことか?
0226デフォルトの名無しさん2006/09/04(月) 23:47:57
寧ろそのEERPOMがわからん。

EEPROMはElectricErasableProgramableReadOnlyMemoryかな。
0227デフォルトの名無しさん2006/09/05(火) 00:11:44
>>226 Electrically〜
0228デフォルトの名無しさん2006/09/05(火) 00:18:58
EERPOMとやらをググってみたが

・・・どうやら転職と関係あるらしい。
0229デフォルトの名無しさん2006/09/05(火) 01:10:25
>>228 ご苦労!
0230デフォルトの名無しさん2006/09/05(火) 04:38:29
EERPOM 日本語の 検索結果 1 - 32 件
これらすべてがEEPROMのtypoな件について
0231デフォルトの名無しさん2006/09/05(火) 04:52:35
>>230 ご苦労!
0232デフォルトの名無しさん2006/09/05(火) 20:16:36
質問させていただきます
int tmp[100][100];
という変数があり、それを全て0で初期化したいのですが
int tmp[100][100] = {0};
だと、ワーニングがでてしまいます。

これは間違っているのでしょうか?
0233842006/09/05(火) 20:18:42
ワーニング(笑)
0234デフォルトの名無しさん2006/09/05(火) 20:19:35
おっと失敬
0235デフォルトの名無しさん2006/09/05(火) 20:20:50
>>232
警告なんだから、お勧めではないというだけで、間違ってはいない。

たぶんこれなら警告が出なくなると思う。
int tmp[100][100] = {{0}};
0236デフォルトの名無しさん2006/09/05(火) 20:26:59
>>233
望洋信者乙
0237デフォルトの名無しさん2006/09/05(火) 20:29:00
ワーニングじゃなくてウォーニング。
ウォー(戦争)をワーなんて言ったらマヌケだろ?
0238デフォルトの名無しさん2006/09/05(火) 20:30:33
ワー!
0239デフォルトの名無しさん2006/09/05(火) 20:31:44
そんなこと言い出したら、英語を片仮名にしてる時点で間抜けだと思うぞ
そのつづりを指摘してる奴はあほとしか
0240デフォルトの名無しさん2006/09/05(火) 20:46:12
おい、おまいら

 ワーしようぜ!
0241デフォルトの名無しさん2006/09/05(火) 20:49:29
柴田望洋の書いたC入門書には
ワーニングについてのコラムがわざわざ設けられている。
「ワーニングという表記を見ると本当にぞっとします」
みたいなことが書かれていてキモイ。
そのスペースでもっと役に立つこと書けよ。
0242デフォルトの名無しさん2006/09/05(火) 20:50:58
仕事場で本気で望洋みたいな事言ってウルサイ奴がいたので
それ以降「警告」っていう様にしてます
0243デフォルトの名無しさん2006/09/05(火) 20:53:38
ゴミはゴミ同士集まると言う事じゃないの?
02442322006/09/05(火) 20:54:36
皆様有難うございました。
{{0}}; で、警告が出陋ことがなくなりました。

すいませんが、もう一つ質問させていただきます。
int tmp[100][100];
という変数を他の関数に渡したいのですが、
int test(int **tmp){return 0;}
int main(void){int tmp[100][100]; test( tmp); return 0;}
とすると、incompatible pointer typeになってしまいます。
int test(int tmp[100][100])にすると、でないのですが
この100というところは、数字を書かないとだめなのでしょうか?
defineで100を何かにしておけばいいのですが、他の方法があるのなら教えて欲しいです。
0245デフォルトの名無しさん2006/09/05(火) 20:55:34

なんか気持ち悪いオーラが出るからね。

教祖も信者も。

みんなで「ワー、ワー」とか叫んでそう。

もしくは、合言葉だったりして。
0246デフォルトの名無しさん2006/09/05(火) 20:56:58
>>244>>232 おまえ、なまいきで、しつこいんだよ!さっさとうせろ!
0247デフォルトの名無しさん2006/09/05(火) 20:58:47
>>244
もしかして、あなた、噂の信者?

そこに生えていた「タンポポ」あげるから、もうどこかにいってくれる?
0248デフォルトの名無しさん2006/09/05(火) 21:02:48
>>244
ポインタを分かってないようだね。柴田望洋でも読んだら?
0249デフォルトの名無しさん2006/09/05(火) 21:03:50
>>244
一番外側は省略できるので、int test(int tmp[][100])とすることはできる。
http://www.kouno.jp/home/c_faq/c6.html#18
0250デフォルトの名無しさん2006/09/05(火) 21:04:53
ここは俺のスレなんだから全員消えろ
まさにスレと自分の一体化だな
たんなるスレだろに
0251デフォルトの名無しさん2006/09/05(火) 21:24:03
む、上ででたEEPROMってのは、回路や基板つくってる方面の人用ね
0252デフォルトの名無しさん2006/09/05(火) 21:29:05
そんな事よりMRAMの話しようぜ
0253デフォルトの名無しさん2006/09/05(火) 21:33:25
♪アンマリ ソワソワ シナイデー
0254デフォルトの名無しさん2006/09/05(火) 21:42:19
そんな事よりムラムラしようぜ
0255デフォルトの名無しさん2006/09/05(火) 21:57:55
Cを始めてもう10年以上になるんですけど、実は、恥ずかしながら、
typedef と struct の使い方をよくわからないまま使っています。
だれか、解説してけろ。gccでコンパイルしてエラーしたら、g++で
コンパイルするとエラー無しとかあるでしょ?たしか。
そんないい加減な知識しかないんです。
02562322006/09/05(火) 22:02:28
入門書かマニュアル読んだら?
0257デフォルトの名無しさん2006/09/05(火) 22:05:50
>>255
元々意味が違う。使い分けって何だよ?
0258デフォルトの名無しさん2006/09/05(火) 22:09:43
>>232,>>256
おまえ、柴田望洋の入門書は読んだのか?
こんなところで油売ってないで、早く線香あげてこい。
0259デフォルトの名無しさん2006/09/05(火) 22:10:22
>>257
使い分けってなんですか?いやマジで
0260デフォルトの名無しさん2006/09/05(火) 22:10:34
232はやっぱりなまいきだったということでFA?
こういうのが、スルー?
0261デフォルトの名無しさん2006/09/05(火) 22:13:28
>>260
いやもう話に出さなくていいよw
俺の文章力不足だった
0262デフォルトの名無しさん2006/09/05(火) 22:17:21
>>260
Javaだったら
throw new 柴田望洋で例外発生()
でスローなんだけど・・
0263デフォルトの名無しさん2006/09/05(火) 22:20:35
>>255
structは構造体といって複数の変数をまとめた1つの型を作るものです。
typedefは既存の型を別の型として定義しなおすものです。
0264デフォルトの名無しさん2006/09/05(火) 22:22:09
>>261,232
そんなに柴田望洋さんがお好きなら
そちらの掲示板でお聞きになったらいがかかしら?
0265デフォルトの名無しさん2006/09/05(火) 22:26:36
>>264
微妙に乗り遅れたな
リアルで空気嫁とか言われないか?
0266デフォルトの名無しさん2006/09/05(火) 22:26:44
>structとtypedefを一緒に使うことが出来ると思うんですが、
その使い方がよく分からないんです。
みなさんどんな風に書かれていますか?
0267デフォルトの名無しさん2006/09/05(火) 22:33:05
お前はGoogleからアク禁でもくらってるのか?
0268エスパー候補2006/09/05(火) 22:34:47
>>266
ひょっとして
struct taghoge{
};
と
typedef struct{
}hoge;
の使い分けの事?
0269デフォルトの名無しさん2006/09/05(火) 22:36:03
そう、それです。何が違うんでしょうか?
0270デフォルトの名無しさん2006/09/05(火) 22:38:06
ああ、それと、
typedef struct HOGE {
}hoge;
なんていうのも有りでしょ??
0271デフォルトの名無しさん2006/09/05(火) 22:39:47
>>265
行動を監視してましたけど、あなたは結構はぐれ者なんですね。ばれてますよ。
0272デフォルトの名無しさん2006/09/05(火) 22:50:40
>>271
行動を監視してましたけど、あなたは結構ぬるぽ者なんですね。ばれてますよ。
0273デフォルトの名無しさん2006/09/05(火) 22:57:43
  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ     人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ >>272
 (_フ彡
0274デフォルトの名無しさん2006/09/05(火) 23:01:18
>>268
エスパー
よくわかったな

>>269
はCやC++の本、何も持ってない?
googleは使ったことはない?
■ このスレッドは過去ログ倉庫に格納されています