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

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

レス数が1000を超えています。これ以上書き込みはできません。
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/
0002デフォルトの名無しさん2006/08/27(日) 15:47:10
C言語って将来性ありますか?
0003デフォルトの名無しさん2006/08/27(日) 15:55:32
C言語弄ってたら美人とセックスできますか?
0004デフォルトの名無しさん2006/08/27(日) 16:05:15
C言語でエロゲー作れますか?
0005デフォルトの名無しさん2006/08/27(日) 16:09:28
>>2
ない

>>3
ちんこ弄ってるだけよりは可能性がある

>>4
エロいのは無理
0006デフォルトの名無しさん2006/08/27(日) 16:16:23
>>5
じゃあ、将来性のある言語ってなんですか?
0007デフォルトの名無しさん2006/08/27(日) 16:23:38
業務やるならJava使っとけ。
WindowsならC#使っとけ。
ゲームとか組み込みとか貧弱なOSで生バイナリ使う必要あるならC++一択。
C99はプロのCプログラマが使う上で有利な多数の拡張が施されているが、
C++とかなりの機能がダブっており、生粋のC屋以外には半ば無用の言語。
そしてスレ違い。
0008デフォルトの名無しさん2006/08/27(日) 16:42:34
わかりますた
0009デフォルトの名無しさん2006/08/27(日) 16:56:03
業務でWindowsの場合は?
0010デフォルトの名無しさん2006/08/27(日) 17:24:35
void func(char str[]){
static int num=strlen(str);
     :
     :

このような事をやろうと考えていたんだが、static属性の付いた変数に定数以外の値を代入しようとするとコンパイルエラーになる。
かと言ってそれだけの為に毎回値を渡したり計算させたりするというのもスマートじゃない。
知恵を貸してくれないか?
0011デフォルトの名無しさん2006/08/27(日) 17:31:42
>>10
いやです。
0012デフォルトの名無しさん2006/08/27(日) 17:37:57
>>10
そりゃ初期化子に書くからいかんのだ。
static int num;
     :
num=strlen(str);

と書けば問題なかろうが。
ところで、staticの意味はわかっておろうな?
0013デフォルトの名無しさん2006/08/27(日) 17:52:42
int main( int argc, char **argv){
printf("%d\n", sizeof(argv[argc - 1]));

return 0;
}

と言うコードをコンパイルして、
./a.out 12としても、./a.out 123456としても
4が出力されます。 実行時の引数に渡した値(上記の場合12, 123456)
のサイズを調べたい場合はそうすればいいのでしょうか?
0014デフォルトの名無しさん2006/08/27(日) 17:54:30
>>13
strlen
0015デフォルトの名無しさん2006/08/27(日) 17:55:42
sizeofとstrlenと一緒だと思うか?
0016132006/08/27(日) 17:56:45
>>14
早速有難うございます。
できればsizeofでやりたいのですが、
sizeofでする方法はございませんでしょうか?
0017デフォルトの名無しさん2006/08/27(日) 17:57:46
ない。
求めたいのは「文字列の長さ」なのか「charへのポインタのサイズ」なのかどっちだ?
0018デフォルトの名無しさん2006/08/27(日) 18:02:18
sizeofはコンパイル時に評価されるから引数で渡された文字列の長さなんて求められない。
0019デフォルトの名無しさん2006/08/27(日) 18:30:12
ひょっとして、入力された数値を求めたいだけだったりして
0020デフォルトの名無しさん2006/08/27(日) 18:37:34
そもそも>>13が調べたい「サイズ」が不明なうちは、考えても無駄なので、シカト
0021デフォルトの名無しさん2006/08/27(日) 18:42:21
>>12
2度目の呼び出し時以降は宣言しないため初期化しないと思っていた、勘違いだった。
激しくサンクス。
0022デフォルトの名無しさん2006/08/27(日) 19:52:38
char* foo(void){
  char*hoge="hogehoge";
  return hoge;
}

int main(void){
  char *piyo;
  piyo=foo();
  printf("%s",piyo);
}

このようにプログラムを書いたとき、関数fooを抜けた時点で"hogehoge"へのポインタを参照いることに問題はありませんか?
0023デフォルトの名無しさん2006/08/27(日) 19:53:15
問題ないよ。
0024デフォルトの名無しさん2006/08/27(日) 19:53:24
>>22
実行してみた?
0025デフォルトの名無しさん2006/08/27(日) 19:55:01
>参照いること
日本語でおk
0026デフォルトの名無しさん2006/08/27(日) 20:03:57
>>22
文字列リテラルのアドレスだから問題ないが、同じ調子でローカル変数のアドレスなんか返すんじゃないぞ。
0027デフォルトの名無しさん2006/08/27(日) 20:04:28
>>22
正常に動作していても、それはたまたま動いているだけで、問題はあるよ
0028デフォルトの名無しさん2006/08/27(日) 20:07:56
この場合に限っては問題ない。
0029デフォルトの名無しさん2006/08/27(日) 20:11:42
この場合に限ってと限定するか、本来はどう考える事なのかまで踏み込むか。

どっちでもいいか。
別にどうでもいいし。
0030デフォルトの名無しさん2006/08/27(日) 20:13:59
K&Rで文字列リテラルの扱いを確認してみるべし。
0031デフォルトの名無しさん2006/08/27(日) 20:17:00
main関数から以下のような感じの関数(Henkan)を呼んで、main関数で変換後の文字列とバイト数を表示したいんだけどやりかたがわかりません。
どなたかわかるかたいませんか?

int Henkan (変換の文字列,変換後の文字列,変換後のバイト数)
0032デフォルトの名無しさん2006/08/27(日) 20:20:13
>>9
なかなか言うねえW
0033デフォルトの名無しさん2006/08/27(日) 20:35:58
>>31
日本語でおk
0034デフォルトの名無しさん2006/08/27(日) 21:53:24
>>29
限定しておるわけではない。
ANSI-Cの規格に従う限り、このプログラムは正しく動くはずだと言っておるのだ。
0035デフォルトの名無しさん2006/08/27(日) 22:26:36
>>31
変換関数から変換後の文字列とバイト数を戻してもらいたいと言うことかな?
まぁ、初心者スレにでも逝ってくれ。
0036デフォルトの名無しさん2006/08/27(日) 23:08:40
>31
変換って何に変換するんだ。
何の文字列をなんに変換するんだ?
ひらがなから漢字に変換するのか?
0037デフォルトの名無しさん2006/08/28(月) 00:29:04
>31
printf("%s %d\n",変換後の文字列,変換後のバイト数);
0038デフォルトの名無しさん2006/08/28(月) 16:09:22
#include<stdio.h>
int main(){
  char *str="test";
  str[0]='b';
}

このようなコードを書いて実行すると「STATUS_ACCESS_VIOLATION」というエラーがでて強制終了してしまいます。
Googleで検索してみたのですが難しい事が書いてあってよくわからず、かろうじて領域破壊が発生している可能性があることだけ読み取れました。
ですが上記コードのstr[0]を出力してみるとtが入っている事が確認でき、ますますわからなくなってしまった次第です。
よろしければこれの原因と解決策を教えてください。
0039デフォルトの名無しさん2006/08/28(月) 16:19:34
文字列リテラル書き換えようとしたらコケて当然じゃ。
0040デフォルトの名無しさん2006/08/28(月) 16:20:21
return 0;
0041デフォルトの名無しさん2006/08/28(月) 16:26:50
>>38
文字列リテラルが書き換え可能な領域に置かれる事は一切保証されない。
書き換え不可の領域に置かれた状態で書き換えようとすればエラーが出て当然だわな。
0042デフォルトの名無しさん2006/08/28(月) 16:29:55
#include<stdio.h>
int main(){
  char str[]="test"; /* 書き換え可能な場所にコピーする */
  str[0]='b';
  return 0;
}
0043デフォルトの名無しさん2006/08/28(月) 21:54:20
>>42
実装に踏み込んだ怪しいコメントだな。
「書き換え可能な配列として初期化する」のほうがいいだろう。
0044デフォルトの名無しさん2006/08/29(火) 03:49:16
「配列を用意してリテラルで初期化する」かな
0045デフォルトの名無しさん2006/08/29(火) 17:50:42
・文字列が定数でないなら、char*ではなく配列にする
・文字列が定数ならconstを付けてバグを防ぐ
0046デフォルトの名無しさん2006/08/29(火) 17:54:45
・必要なときにキャストでconstを外すニダ<丶`∀´>
0047デフォルトの名無しさん2006/08/29(火) 17:55:46
>>46
意味ねーだろーが
0048デフォルトの名無しさん2006/08/29(火) 20:50:25
ネタにマジレス…
0049デフォルトの名無しさん2006/08/29(火) 21:01:07
(・∀・)カコイイ!!
0050デフォルトの名無しさん2006/08/29(火) 23:51:44
stdin からの入力を scanf で受け取るときに scanf は改行\nまで
読み取ってくれず連続して scanf を使うとき上手く動作しないトラ
ブルで、これの解決パターンは何通りもあるけど、このまとめサ
イトとか、このイディオムというかいろいろな解法を扱っているとこ
ろ知ってる人いますか?

少しCから離れてしまうと、このイディオム忘れちゃって…
0051デフォルトの名無しさん2006/08/29(火) 23:56:05
俺はバッファサイズに一行の長さが縛られることになるから
あんまり好きな書き方じゃないけど
fgets + sscanfとかが代表的な逃げ方だな。

あとはscanf("%*[^\n]");scanf("%*c");でも叩き込んで改行まで殺すとか.
0052デフォルトの名無しさん2006/08/30(水) 00:01:16
そうそう、そういうCの良く使うイディオムをまとめてあるサイトとかです。
>>51少しCから離れると、そういうの忘れちゃいませんか?
0053デフォルトの名無しさん2006/08/30(水) 00:03:08
辞書買えば?
0054デフォルトの名無しさん2006/08/30(水) 00:37:47
>>53
突然に、辞書って何のこと
英語の辞書??
0055デフォルトの名無しさん2006/08/30(水) 00:59:40
C言語の辞書
0056デフォルトの名無しさん2006/08/30(水) 01:10:56
>>53=55
m9(^Д^)プギャー
0057デフォルトの名無しさん2006/08/30(水) 01:12:59
オレは>>52じゃないんだが、>>55はC言語辞典(平林)とかのことか
それとも上で言っているイディオムとか、痒いところに手が届くようなお勧め辞書があるということ?

そんな辞書あったらオレにも教えてくれよー
0058デフォルトの名無しさん2006/08/30(水) 01:34:51
このスレではまったくスレ違いじゃないんだろうけど、
とりあえず時代には逆行してるよね。
0059デフォルトの名無しさん2006/08/30(水) 02:01:21
>>58
C99が流行らずにC#,java,スクリプト言語全盛なのは
C99が時代に取り残されそして逆行していると解釈してOKね
0060デフォルトの名無しさん2006/08/30(水) 02:06:37
>>59
いやいや、C99はC++との互換性を無視したので、これから新しい
プログラムをC99で書いた物をC++に移植する時に大変な手間が
必要になるのも一因でしょう。

CPUに例えれば、x86がセグメント方式という8086当初の汚点を
未だに引きずっても互換性を重視した結果バカ売れしたのに対し、
Motorolaの流れはColdfireのような組み込み系に変わって行って
しまったのに似てますね。まあ制御系はCPUの数だけから言えば
PCで使われている数よりもずっと多いんですけども。
0061デフォルトの名無しさん2006/08/30(水) 02:09:40
C99は何であんな方向に枝を伸ばしたのかね。
C++との住み分けのつもりなのかな。
0062デフォルトの名無しさん2006/08/30(水) 02:12:13
棲み分けの割にはD言語みたいな立場になってますよね。
ベンダーもなかなかC99対応のコンパイラ出さないし。ICCとかは
完全対応してるんだっけ。

まあD言語みたいにマニア向けの色が強くなってると思う。
0063デフォルトの名無しさん2006/08/30(水) 02:16:12
今更C99に対応するくらいなら、それまでのC++伸ばす方に注力しそうなもんだよね、ベンダ側も。
つーかあと5年は早く出しとけよって感じだ。
0064デフォルトの名無しさん2006/08/30(水) 02:21:40
>>63
いやあと8年早く出て欲しかった。そしてC99の上位互換性を持つC++が
作られるという流れにして欲しかったなあ。

C99の致命的な欠点はクラスが作れないという事です。OOPをするのに
C言語と同じ苦労をしなければいけない。これは生産性に重大に関わります。
0065デフォルトの名無しさん2006/08/30(水) 02:24:35
ベンダーとか言うけど、C++,C#,javaの方に目がいっていて無理してC99はまったく対応するつもりないんじゃない?

必要な人はgccあるし、あえてCに戻ってもらっても困るしさ。

そして、言語仕様をいっぺんに拡張してまったく別物のようになってしまって、対応コンパイラも普及してないからマニア向けな感じがするのかな。
どのあたりをターゲットと見据えて言語拡張したんだろ。
0066デフォルトの名無しさん2006/08/30(水) 02:28:24
>>64 Cがクラス作れない(というかオブジェクト指向ではない)のは自明の事なので、そういうことを期待すること事態ナンセンスだと思うのですが・・
生産性とかも、CにはCのよさがあって、クラスとかなら他の言語でゴニョゴニョ・・
0067デフォルトの名無しさん2006/08/30(水) 02:31:02
>>64
OOPに関して問題を感じるなら、
C++を推進するとか、他のOOPLを推進するとか、
どっちにせよCを離れるが吉だと思われ。w
0068デフォルトの名無しさん2006/08/30(水) 02:31:49
構造体とポインタがあるから満足してます
0069デフォルトの名無しさん2006/08/30(水) 02:31:57
まあ組み込みや制御系には吐き出すバイナリが小さくなる傾向が
あるCやC99を使うでしょうね。友人がC++の組み込みプログラムを
書いてるんですけど、STLはばっさりけずられてるし、言語仕様も
結構縮小されて、出来るだけバイナリを小さくするようにしてるそうです。
0070デフォルトの名無しさん2006/08/30(水) 02:35:00
>>69
Embedded C++ だな。日本の企業が実装の難しい機能をばっさり削って
「Embedded C++ 準拠」と宣伝したいがために策定した規格。

作成意図がほんとでこんなんじゃないかと信じてしまうほどの糞規格。
0071デフォルトの名無しさん2006/08/30(水) 02:41:15
>>70
はい、それですまさに。プログラムの保守性と生産性を保つために
クラスだけは残したような。
0072デフォルトの名無しさん2006/08/30(水) 02:42:50
Cは、PCでアプリケーション全体を記述するよりも
組み込みとか、速度重視とか、バイナリ小さくとか、描画速くとか
そういったかゆいところで本領発揮する、実によくきく薬なんで
しょう。
C99の拡張も特にPC向けを考慮しているわけではないと思うけど
0073デフォルトの名無しさん2006/08/30(水) 02:43:32
まさか組み込み最強の力の一翼たるテンプレート類も使えないとか?
そんなことないよね?
0074デフォルトの名無しさん2006/08/30(水) 02:54:25
>>73
http://ja.wikipedia.org/wiki/Embedded_C++
0075デフォルトの名無しさん2006/08/30(水) 02:58:27
>>74
読んだ。

固まった。
顎が落ちた。
なんだこりゃ。
C++じゃねえじゃん。

マジで>>70が言うとおりコンパイラ実装側が手を抜くためとしか思えんな!
誰が使うんだ、こんな糞規格って

>>71が可哀想すぎる…
こんなのってないよ…
0076デフォルトの名無しさん2006/08/30(水) 06:59:23
Cへのトランスレータが当たり前だった極初期のC++を思い出すな。
今更名前にC++が入ってるのは詐欺だな。
0077デフォルトの名無しさん2006/08/30(水) 07:32:38
http://www.caravan.net/ec2plus/committee.html
委員会のメンバが胡散臭すぎる。
0078デフォルトの名無しさん2006/08/30(水) 10:02:29
void a () {
return;
}

void b () {
return a ();
}

これとくに警告とか出ないんですけどこういう書き方正しいんでしたっけ?
return a ();のところ
0079デフォルトの名無しさん2006/08/30(水) 10:04:55
>>78
C++ では有効。それが無いと template 書くときに困る。
0080デフォルトの名無しさん2006/08/30(水) 10:10:08
そうでしたよね確かCだとダメだと記憶してたんで
gcc使ってたんですけど今-pedanticというオプションつけたら警告出ました
それつけわすれてました
0081だいころ2006/08/30(水) 11:45:16
みなさん、C++ソースのドキュメント作成で、
何か良いフリーのソフトを配布しているサイトをご存知でしたら、
教えて貰えないでしょうか。
宜しくお願いします。
0082デフォルトの名無しさん2006/08/30(水) 11:53:21
>>81
    へ          へ|\ へ     √ ̄|        へ
   ( レ⌒)  |\   ( |\)| |/~|  ノ ,__√    /7 ∠、 \ .  丶\      _ __
|\_/  /へ_ \)   | |   | |∠  | |__   | /   !  |     | |_〜、  レ' レ'
\_./| |/   \     .| |( ̄  _) |     )  | |    i  |  へ_,/    ノ   ,へ
  /  / ̄~ヽ ヽ.   | | フ  ヽ、 ノ √| |   ! レノ  |  !. \_  ー ̄_,ー~'  )
 / /| |   | |   | |( ノ| |`、) i ノ  | |   \_ノ  ノ /    フ ! (~~_,,,,/ノ/
 | |  | |   / /    | | .  し'  ノ ノ   | |       / /     | |   ̄
 \\ノ |  / /      | |___∠-".   | |      ノ /       ノ |  /(
  \_ノ_/ /     (____)     し'      ノ/      / /  | 〜-,,,__
     ∠-''~                        ノ/         (_ノ   〜ー、、__)
0083取り敢えずdoxygen2006/08/30(水) 11:54:13
>>81
スレタイ読めますか?
0084デフォルトの名無しさん2006/08/30(水) 12:45:52
「C言語によるアルゴリズム辞典」
「明解C言語入門編」
「解きながら学ぶC言語」
「プログラミング言語C」
で勉強していこうと思います。
これらで効率よくプログラミングを学んでいける方法、
読み方を教えてください。
0085デフォルトの名無しさん2006/08/30(水) 12:47:11
>>84
1ページ目から始めて、最終ページまで読めばいいと思うよ。
0086デフォルトの名無しさん2006/08/30(水) 12:52:22
目次と索引は飛ばして読んだ方が効率いいと思うよ。
0087デフォルトの名無しさん2006/08/30(水) 13:07:39
>>81
doxygenでも使え。
0088デフォルトの名無しさん2006/08/30(水) 13:14:14
>>84
最近の初心者は最初からやるべき参考書を沢山ピックアップしすぎ。
1冊何か読んでちゃんと理解すれば次に何を読むべきかわかるから、
その時に2冊目を買えばいい。何にもわからないうちに買い置きするのは危険。

解きながら学ぶC言語って、明解C言語入門編例解演習の改定本だろ?
明解C言語入門編と相当内容が被っているから両方買った時点で効率悪すぎ。
0089デフォルトの名無しさん2006/08/30(水) 13:22:02
>>88
そうです。明解Cは少しずつ読み進めていて、
問題もたくさん解いたほうがいいのかなと思って購入してしまいました。
明解だけに絞って進めていこうと思います。

最初問題を解くときなどは、問題を見たら
すぐに回答を見て理解しながら自分で写すいった方法でいいのでしょうか?と
それとも時間をかけまず1から自分で全部考えてみてから回答を見て、
こういう方法でやるんだ、と納得して次に進む方法がいいのでしょうか。
後者だと時間が結構かかってしまいます。
0090デフォルトの名無しさん2006/08/30(水) 13:28:39
例えばさ、俺の友人は数学を勉強する時、問題を読んで答えをみて、それだけで人に教えられるほど理解できていた。
しかし俺はそんな超人的なことは無理で、問題をよく考えて解説を何度も読んで、それでなんとか理解できる程度。

何が言いたいかというとだ、こんな所で聞く時間があったら1ページでも多く読め
0091デフォルトの名無しさん2006/08/30(水) 13:30:18
「効率よく」という言葉はちょっと違ったかもしれません。
大学受験勉強は、問題を見てすぐ答えを見てその流れを理解して覚える、
といったような方法を取ってきていたのですが、
プログラミングとなるとどう勉強していったら分からないといったところが
率直なところです。
大学では、ちょこちょこと説明した後課題が出されて、
それについて自分でいろいろ調べといていくといったやりかたでやってますが
自習となるとちょっと・・・
0092デフォルトの名無しさん2006/08/30(水) 13:33:25
自分でやりたいことを記述できるようになる為の勉強に効率なぞない

テストで良い点を取るための勉強とは違うのだよ
0093842006/08/30(水) 13:35:32
>>90
わかりました。
>>92
重みのある言葉ですね。何か心に響きました。
ありがとうございます。
0094デフォルトの名無しさん2006/08/30(水) 13:49:51
>>91
>大学受験勉強は、問題を見てすぐ答えを見てその流れを理解して覚える、

なにその非効率な勉強方法
解きもしないで身につくわけがない
C言語も同じ
0095デフォルトの名無しさん2006/08/30(水) 13:52:27
>>94
宿題を提出したり、テスト当日漬けには物凄く効率はいいがな。
ただ、指摘どおり身に付かないので追えなくなったらニート確定w
0096デフォルトの名無しさん2006/08/30(水) 13:53:52
もひとつ追加すると、周りから実力を過大評価され過ぎて
落ちたときにつらいw
0097デフォルトの名無しさん2006/08/30(水) 14:02:19
大学受験であれば>>91の方法は時と場合によっては効率的。
一概に非効率だとは言い切れない。
だがプログラミングの勉強においてその方法は何の役にも立たない。
0098デフォルトの名無しさん2006/08/30(水) 14:18:16
プログラム言語なんてものは、自分で書いて、コンパイルエラー出して、
実行させて思う通りに動かなくて悩んで・・・そうやって憶えるもんだ
0099842006/08/30(水) 14:39:53
>>94-95
大学受験でこの勉強方法が効率的だった(というか自分に合っていた)というのは
実体験も含めて分かってます。ここでそれは特に説明はしません。
>>94>>97>>98で言われているように
プログラミングに関しては効率的ではないことは分かりました。
ただ、初歩の部分というのは覚えだけのことが多くありますよね。
それにも>>98の方法が本当に効率的なのかというのは疑問でもあります。
もうちょっと参考書の使い方の部分まで考えていきたいのです。
例えば、
まずその章の説明を読んで例題を読む。
次にそれを自分で書き写しながら理解していく。
そこから同じことを使う練習問題を何題か解いてみる。

というような感じで。
0100デフォルトの名無しさん2006/08/30(水) 14:42:39
なぜそこで効率を問う?
早く理解すること より 正しく理解すること のほうが重要な分野だぞ?
0101842006/08/30(水) 14:46:36
>>100
なるほど。としか言い様がありません。
プログラムの経験が極浅いために、
イマイチ受験的な考えから抜け出せない感じです。
0102デフォルトの名無しさん2006/08/30(水) 14:48:55
固定的概念から抜け出せない奴も(ry
0103デフォルトの名無しさん2006/08/30(水) 15:09:50
>>99
人にアドバイスを貰っておいて、今度はそれを疑いだすとか基地外か?
第一、今のお前には、どんなアドバイスを貰っても
それが本当に効率的かどうかを判断できる能力が備わってないだろ。

本当は自分の中である程度勉強法が固まっていたものの、
不安だったので背中を押してもらおうとスレ住民に聞いたが、
反発されたのでうだうだ言っている。そんな風にしか見えない。
0104デフォルトの名無しさん2006/08/30(水) 15:15:52
文法の学習だけなら受験と同じ勉強法でもできるかも知れんがな。
実際に使ってみないと判らない事がい〜〜〜〜ぱいあるのだと思い知る事になるだろう。
0105842006/08/30(水) 15:16:35
>>103
全く自分の意に反しているレスです。
>それが本当に効率的かどうかを判断できる能力が備わってないだろ
判断できる能力とはどのような能力でしょうか。
>>98で書かれた方のやり方は一般的で最もいい方法だとは思いますが、
「初歩の段階で」というのを付け足して差し出がましく意見したまでですが。
下の3行も全く違いますね。

これ以上書くと荒れると思うので、では。
0106デフォルトの名無しさん2006/08/30(水) 15:20:54
初歩の段階でもいちいち書き写さないと覚えられないようなことなんてないんだが。
0107デフォルトの名無しさん2006/08/30(水) 15:23:52
>>105
そうやって知識も無いくせに自分が一番正しいと思っていればいい。
0108デフォルトの名無しさん2006/08/30(水) 15:27:39
今頃84は忠告を無視してせっせとノートに何か書き写している
0109デフォルトの名無しさん2006/08/30(水) 15:29:27
1) 早くゴミコードを生産する奴 しかも、正しく動かない
2) 早くゴミコードを生産する奴 しかし、なんとなく正しく動いてるっぽい
3) 時間はかかるが安心できるコードを生産する奴 しかし、正しく動かない
4) 時間はかかるが安心できるコードを生産する奴 正しく動作している

俺は 2) が一番やっかいだ
0110デフォルトの名無しさん2006/08/30(水) 15:30:25
時間をかけてゴミコードを生産する奴は無視ですか?
0111842006/08/30(水) 15:30:53
>>108
写すというのはノートにじゃなくて
実際にそれを入力(写)して実行してみるということです。
誤解があったようなので最後に一言だけ。
0112デフォルトの名無しさん2006/08/30(水) 15:31:22
C言語勉強するのに一番重要な本が抜けてるしな
0113デフォルトの名無しさん2006/08/30(水) 15:35:59
>>110
ケースバイケースだな。 全く別の仕事まわすとかして対処してたりする。
0114デフォルトの名無しさん2006/08/30(水) 15:36:19
効率を求めて>>84〜>>111分の時間を潰したとは何たる皮肉
0115デフォルトの名無しさん2006/08/30(水) 15:39:37
>>84が↓の63と同一人物くさい件
http://pc8.2ch.net/test/read.cgi/tech/1153542424/63-
0116デフォルトの名無しさん2006/08/30(水) 15:39:46
>>110
部長でもやらせとけ
0117デフォルトの名無しさん2006/08/30(水) 15:49:06
この時期に初心者の質問が多いのが謎だ
0118デフォルトの名無しさん2006/08/30(水) 15:51:42
まー夏休みだし、情報処理技術者試験も締め切られたしな
0119デフォルトの名無しさん2006/08/30(水) 15:54:58
確かに基本情報合格目的でCをやる人は
効率を過剰に求めて自爆してもおかしくはないな
0120デフォルトの名無しさん2006/08/30(水) 16:01:20
まー、今からやっても無理じゃない?
最近のCの問題って自己参照型構造体まで出まくりだぞ。
0121デフォルトの名無しさん2006/08/30(水) 17:24:30
遅レスだけど

>>74
「Embeded C++」というより、「!C++」の方がしっくり来る
0122デフォルトの名無しさん2006/08/30(水) 21:40:21
良く思うんだけどさ。
お勉強でコード書き始める香具師は期待薄だよな。

これって、面白くてはまりこんでいる香具師の方が、
結果的に自分でなんでもやってみて、先々伸びるじゃん?

>>84
無知の知ってしってるか?
おまえは今のままでは絶対にまともには成長しない。
自分が無知だと本当に思っては居ないからだ。
0123デフォルトの名無しさん2006/08/30(水) 22:25:45
素朴な疑問なんだけどさぁ…
俺にとって C ってのはアーキテクチャに依存しない(と言っても限界はあるが)
アセンブラなんだけど、おまえさんたちの位置付けってどぉよ。
0124デフォルトの名無しさん2006/08/30(水) 22:30:33
アセンブラより上で C++ より下。
0125デフォルトの名無しさん2006/08/30(水) 22:41:47
「Cは高水準言語」というのに、狂ったように噛み付いてた奴を、なぜだか思い出した。
0126デフォルトの名無しさん2006/08/30(水) 22:59:42
Cは高級アセンブラかどうかの話題は、

struct String_T {
int length;
char value[1];
};

当人が、可変長オブジェクトについて、
この型の使い方に意義を出すか、許容するかの問題と同じに感じる。
0127デフォルトの名無しさん2006/08/30(水) 23:39:47
俺には単に相対的かどうかの問題に見える
あ、議論に意味が無いってことか?
0128デフォルトの名無しさん2006/08/30(水) 23:47:53
char value[];と書きたくなるC99使い。
0129デフォルトの名無しさん2006/08/31(木) 01:41:52
実務のC99使いを見た事が無いんだ。
都市伝説の類かとすら思ってた。

変な書き方しなけりゃ吐かれるコードの質はCと大差ないC++は
超級覇王アセンブラですか?
0130デフォルトの名無しさん2006/08/31(木) 02:06:12
>>129
時は流れても、C++は永遠にCのトランスレーターでしょ?
0131デフォルトの名無しさん2006/08/31(木) 02:13:26
>>130
現在実用されてる C++ コンパイラのうちで、
C のトランスレータと言えるものは一つも知らん。
0132デフォルトの名無しさん2006/08/31(木) 02:24:03
上に同じ。
0133デフォルトの名無しさん2006/08/31(木) 02:24:37
>>131
MIWA-C++というのがトランスレータでした。しかし、例外処理が
取り入れられると、どうしてもトランスレータでは機能を実現でき
なくなり、また一度にコンパイルできるコンパイラの方が速度が
速いので、トランスレータは消えて行った。
0134デフォルトの名無しさん2006/08/31(木) 02:32:31
C++登場初期はともかく、例外とテンプレートの出現で駆逐されたよな
0135デフォルトの名無しさん2006/08/31(木) 02:38:52
>>130なんだが、ちょっと気に障ったようで追記しておくと、
Cへのトランスレーターがあるかないかじゃなくて、
せいぜいC++ができることは(と言うかC++の思想自体が)
その程度といいたかっただけだ。

一応別言語なのに、printf("\n");はないでしょ。
cout <<endl; じゃないのか?ということ。

Cと文法(構文)が似ているJavaはまったく別言語として捉え
られているけど、Cの文法を拡張したC++はなんかCと同じ
ように見られている。これじゃC++はいつまでたってもCの
ゴニョゴニョと言われても仕方ないんじゃないの?

ということ。誤解なきよう。
0136デフォルトの名無しさん2006/08/31(木) 02:46:56
>>135
Cの文法を拡張したのがC++、という時代はとっくに過ぎ去って、
今ではCの上位互換性を保ちつつも全く異なる言語になってしまって
いると思う。
0137デフォルトの名無しさん2006/08/31(木) 02:51:11
>>136 いや、だから気にしないで>>135はスルーしてくれ。
0138デフォルトの名無しさん2006/08/31(木) 02:56:01
まあ、それがC++のいいところではあるのだし。
そうは言ってもBetterCのためだけにC++使う奴なんて
いい加減絶滅したとも思うけど。
0139デフォルトの名無しさん2006/08/31(木) 02:58:03
>>136
まったく別言語になったのかよりも、
それを言うならC++のクラスライブラリーによって
別言語になったように感じているだけじゃないのか?
最近で、C++は言語自体の更新というか拡張とかあったの?
0140デフォルトの名無しさん2006/08/31(木) 03:02:49
このところの言語仕様の変更はテンプレートの解釈回りに集中してるな。
それ以前の仕様については、今更変える必要も無いってとこだろうし。
0141デフォルトの名無しさん2006/08/31(木) 05:15:01
ローカル変数を戻り値にすることについて質問です
下の2つの関数でabesi()が 「たわば!」になるのはわかるのですが
hidebu()のほうは一応実行できます
これは、偶然うまくいっているだけで実は「ひでぶ!」なのか
それともこれで大丈夫なのでしょうか
どなたか教えてもらえませんか?
まだ、無残に飛び散る訳にはいかないのです


...
#include <stdio.h>
char* abesi(){
char rin[80]="ke-n";
return rin;
}

int hidebu(){
int you_ha_shock=4649;
return you_ha_shock;
}

int main(){
//abesi();
printf("%d",hidebu());
return 0;
}
0142デフォルトの名無しさん2006/08/31(木) 06:14:49
>>141
ひでぶはいいがあべしは駄目。

ひでぶは値を返すのに対し、あべしはポインタを返す。rin[]はあべし関数
終了後消滅するので、どこか変なアドレスを指す事になる。
0143デフォルトの名無しさん2006/08/31(木) 06:53:41
>>139-140
C++0x
http://pc8.2ch.net/test/read.cgi/tech/1149440647/
0144デフォルトの名無しさん2006/08/31(木) 13:32:52
>>135
じゃあ、Visual Basicは何のゴニョゴニョだ?
0145デフォルトの名無しさん2006/08/31(木) 16:40:07
>>142
愛を失ってさ迷っていましたが
血渡しだと大丈夫だと知って安心しました
次の殿商社を求めて旅立つことにします
お世話になりました
0146デフォルトの名無しさん2006/08/31(木) 23:44:52
まさかとは思うが、「値渡し」を「ちわたし」と読んでいたりするのだろうか。
0147デフォルトの名無しさん2006/08/31(木) 23:56:39
戻り値を返り血というとか、よくある。
0148デフォルトの名無しさん2006/09/01(金) 05:05:19
頭が頭痛で痛いんだけど、どうすればいいんですか?
0149デフォルトの名無しさん2006/09/01(金) 09:48:59
お前のいま感じている感情は精神的疾患の一種だ。
しずめる方法は俺が知っている。俺に任せろ。
0150デフォルトの名無しさん2006/09/01(金) 18:59:32
C/C++にて数値をC文字列に変換したいとおもったときに
sprintfでやるには、バッファをあらかじめ用意し置く必要がある。
このバッファサイズを決めるにはどうすればよいでしょうか?

やっぱり十分なサイズを確保しとけ!ですか??
0151デフォルトの名無しさん2006/09/01(金) 19:03:28
それで何か問題ある?
0152デフォルトの名無しさん2006/09/01(金) 19:17:02
「充分なサイズ」を自分で決定するのが嫌なら
CHAR_BITとsizeof(int)を使って、最大の桁数を算出すりゃいい。

俺はやらないけどな。
0153デフォルトの名無しさん2006/09/01(金) 19:18:12
>>150
C99なら、snprintfで最初の引数をNULLにすれば必要なバッファの大きさが戻り値として得られたと思う。
また、処理系によってはバッファの大きさを得るための関数が独自に用意されていることもある。
0154デフォルトの名無しさん2006/09/01(金) 19:22:25
しかし明確に規定される以前のsnprintfは
バッファが足りないと-1を返したりしてややこしい。

VC++の_snprintfもそうだった気がする。
0155デフォルトの名無しさん2006/09/01(金) 20:53:25
tmpfile + fprintf + ftell でいいんじゃね。
これで必要なバッファサイズがわかる。
0156デフォルトの名無しさん2006/09/01(金) 21:55:20
>>155 手の内がANSIしかないならそれがいい。
0157デフォルトの名無しさん2006/09/01(金) 22:31:00
最近、どのようにプログラムを構築するか悩んでいます。
ある処理を行うためのサブルーチンはできて、あとはそれの組み合わせなのですが
今までは何も考えず、様々なところでグローバル変数を使ってました。

もう少し、わかりやすく移植しやすいプログラムを作りたいのですが
何かよい方法はありますか?
引数で渡す方法ですと、インプットはそれで良いですがアウトプットでは
返り値だけだと足りません。(だから今まではグローバル変数を多用していた)

特にC言語だと色々とやりたいようにできるのがメリットでもありデメリットでもあるんですよね・・・
0158デフォルトの名無しさん2006/09/01(金) 22:36:46
>>157
構造体、もしくは構造体へのポインタを使えばよいだろ。
0159デフォルトの名無しさん2006/09/01(金) 22:39:21
>>157
> 返り値だけだと足りません。(だから今まではグローバル変数を多用していた)
呼ぶ側で引数にアドレス入れて、関数側でそのアドレスに値を入れてあげるように
つくれば、引数で値のやりとりができるよ
0160デフォルトの名無しさん2006/09/01(金) 22:51:40
>159
でも、そのやり方だと引数が多くなるよね。

まあ俺も、色々と良い方法がないか思案している。157もがんばってくれ。
0161デフォルトの名無しさん2006/09/01(金) 22:55:03
>>160
その関数が処理するデータを構造体にまとめて、そのポインタを引数とする。
この方法を発展させると C++ でのクラスに行き着く。
0162デフォルトの名無しさん2006/09/01(金) 22:57:15
>>161
唐突に何かを理解した気がする。
質問者じゃないがありがとう。
0163デフォルトの名無しさん2006/09/01(金) 23:03:05
>161
でもそうすると、お互いきちんとその構造体を理解し管理しないとだめですよね。
あと、構築するときは

メイン処理
|
|−中ぐらいの処理
|
|−中ぐらいの処理
|     |
|     |−実際の処理を行う小さなサブルーチン
|     |−実際の処理を行う小さなサブルーチン
|     |−実際の処理を行う小さなサブルーチン

こんな感じ?
0164デフォルトの名無しさん2006/09/01(金) 23:07:45
>>163
構造体を理解し管理するのも、関数を提供する側にするのが望ましい。
そこでコンストラクタ、デストラクタという考え方に至る。
0165デフォルトの名無しさん2006/09/02(土) 01:01:12
FILE * file=fopen(a1,a2);
fprintf(file,b1,b2);
fclose(file);
の手続きと同じなんだよ。
構造体とかクラスとかでオブジェクトへのアクセスの原点は。
0166デフォルトの名無しさん2006/09/02(土) 07:39:04
すいません。割り込みます。教えてください。
文字コードを出力させるようなプログラムで
printfの出力がおかしくなります。その理由が
よくわかりません。

#include <stdio.h>
#define MAX 8

int main()
{
int i;
unsigned short CODE;
unsigned char hi,lo;
CODE=0x8888;

for (i=1; i<=MAX; i++)
{
lo = CODE & 0xFF;
hi = CODE >> 8 & 0xFF;

printf("0x%x:%c%c ",CODE,hi,lo);
if ( (i % 4) == 0 )
printf("\n");
CODE++;
}
printf("\n");
}
0167デフォルトの名無しさん2006/09/02(土) 07:44:24
> よくわかりません。

そうですか。
0168デフォルトの名無しさん2006/09/02(土) 08:20:06
>>166
>printfの出力がおかしくなります。その理由が
いいえ、printf()の出力がおかしいのではなく、あなたがおかしいのです。
初心者スレにでも逝ってください。
01691502006/09/02(土) 14:50:53
VBからこっちきたんだけど
VBでは十分なサイズを事前に用意するっていう
行為なんてやらないので「自分できめる」ことに抵抗あった。

Cならそんな無駄なことはしないと思ってたけど、
一般的なら適当なサイズを指定しときます。
0170デフォルトの名無しさん2006/09/02(土) 16:36:01
VBって(VB6でも)微妙にOOPだから、Cとは思想が違うんだよね
型は適当に相互変換できるし、下手すると変数すら事前に宣言しなくてもいいし>VB
0171デフォルトの名無しさん2006/09/02(土) 16:42:02
VB を C より OOP って言う奴もいるんだ…
0172デフォルトの名無しさん2006/09/02(土) 17:32:09
COM/ActiveXがオブジェクト指向になっているから、
それにべったり依存しているVBをOOPだというのも俺は違和感を感じない。
0173デフォルトの名無しさん2006/09/02(土) 17:40:36
ププ
0174デフォルトの名無しさん2006/09/02(土) 17:45:25
Cでよりよいプログラム構成方法を考えると
頭が痛くなる。

オブジェクト指向とかをCでやろうと思ったけど
他人(職場の人)が見てもわかりやすく、使いやすいようにと思うと
結局そこまで踏み込めない。そう思うとシンプルなつくりがベストなのかな?

せいぜい、関数ポインタと構造体をうまく組み合わせて
なるべくわかりやすく作るしかないのか・・・

ちなみに仕事はファームウェアの設計で、今はLANドライバを担当しています。
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は使ったことはない?
0275デフォルトの名無しさん2006/09/06(水) 00:00:45
普通はスルーでしょ。こういうのは?
0276デフォルトの名無しさん2006/09/06(水) 00:42:49
C言語ならググるか本で調べろ、ってことになりましたので、
このスレは終了します。
0277>>263 じゃないけど。2006/09/06(水) 01:17:18
>>269
なんで、>>263 をスルーしてるの?

せっかくまともに答えてるのにさ。
0278デフォルトの名無しさん2006/09/06(水) 01:52:07
個人的に知りたいだけで、あんまりどうでもいいことだからじゃないの?しつこいようだし・・
0279デフォルトの名無しさん2006/09/06(水) 03:15:29
struct Point {
int x;
int y;
};
の大小関係を y 座標が大きいほど大きくて
y 座標が同じ時は x 座標の大小で比較するとき、
struct Point pt1, pt2, pt3;
が pt1 < pt2 < pt3 になっているかどうかを
チェックする簡単な書き方ないですか?
0280デフォルトの名無しさん2006/09/06(水) 03:24:04
>>279
まずは自分はどうやって簡単に書いたかを出さないとね…
02812792006/09/06(水) 03:41:47
とりあえず、pt1 < pt3 を仮定して、

#define MY_CMP(a, b) (((a) == (b)) ? 0 : ((a) < (b)) ? -1 : 1)
#define MY_CMP_PT(a, b) ((MY_CMP((a).y, (b).y)) ? MY_CMP((a).y, (b).y) : MY_CMP((a).x, (b).x))

if (MY_CMP_PT(pt1, pt2) != MY_CMP_PT(pt2, pt3)) { ...

って書いてます。
02822792006/09/06(水) 03:45:22
あー、ちがう。こうだ。
if (MY_CMP_PT(pt2, pt1) != MY_CMP_PT(pt2, pt3)) { ...

#define MY_CMP(a, b) (((a) == (b)) ? 0 : ((a) < (b)) ? -1 : 1)
は
#define MY_CMP(a, b) (a - b)
で十分かな。
0283デフォルトの名無しさん2006/09/06(水) 07:25:59
変に凝るより、素直に書いたほうが良いと思った。
#define MY_CMP_PT(a,b) (((a).y == (b).y) ? ((a).x - (b).x) : ((a).y - (b).y))
if ( MY_CMP_PT(pt1, pt2) < 0 && MY_CMP_PT(pt2, pt3) < 0 ) {
こんな感じで。
0284デフォルトの名無しさん2006/09/06(水) 11:53:25
ふだん、if文は良く使うのですが、
switch-caseはあまり使わないので、たまに使うと、
   case 定数式:    //正解
   case: 定数式    //間違い
なのかよく混乱します。何か良い覚え方ありますか?
0285デフォルトの名無しさん2006/09/06(水) 12:31:55
>>284
手の甲にマジックで大きく、かつ目立つように
case 定数式:
と書いておく。
0286デフォルトの名無しさん2006/09/06(水) 12:35:54
定数式を括弧でくくる。
0287デフォルトの名無しさん2006/09/06(水) 13:53:13
手の甲じゃなくて、もうおもいきってディスプレイの隅に
書いといたら?
0288デフォルトの名無しさん2006/09/06(水) 14:31:40
>>284
最後に : 付けないと明らかにおかしいだろ。
case: だったら case: 1 return 0; とかなって、1 return 0; って何だよって感じ。
0289デフォルトの名無しさん2006/09/06(水) 15:32:59
なるほど。長年の疑問が解消しました。
ありがとうございました。
0290デフォルトの名無しさん2006/09/07(木) 17:38:13
グローバル変数で

int a = 0;
int *b = &a;
int c = a;

c の初期化は当然エラーなんだけど、b の初期化が何も言われないのは
なんでですかね?
こんなの普通しないってのは分かるんだけど、
どんな仕組みになってるのか気になって。
よかったら教えてくだせえ。
0291デフォルトの名無しさんNGNG?2BP(200)
>>290
bの何が問題なのか分からない。
というかどうしてbがダメだと思うのかが分からない。
そういう初期化は普通にやる。
0292デフォルトの名無しさん2006/09/07(木) 18:04:57
あれ、そうなのか。
定数じゃないから駄目かと思ってたよ。
0293デフォルトの名無しさん2006/09/07(木) 18:05:54
というかカスは試してから書け
0294デフォルトの名無しさんNGNG?2BP(200)
>>292
「既知のグローバル変数へのポインタ」は定数だろ。
02952902006/09/07(木) 22:15:38
>>294
なるほど。
何かすっきりしたよ。ありがと。
0296デフォルトの名無しさん2006/09/08(金) 06:40:38
既知のグローバル変数というか、
グローバル変数の内容はいつ初期化されるか分かんないし、
そのタイミングによって結果が変わる可能性があるけど、
アドレスにはそういった問題が無いっつー話。
0297デフォルトの名無しさん2006/09/08(金) 12:11:11
アルファベットの文字列を 大文字・小文字変換する関数はありますか?
tolower(c)とかtoupper(c)だと一文字しか変換できないので、困ります。
0298デフォルトの名無しさん2006/09/08(金) 12:35:49
for で回せば
0299デフォルトの名無しさんNGNG?2BP(200)
>>297
無ければ作れ。
0300デフォルトの名無しさん2006/09/08(金) 18:05:25
forで回して作れ!
0301デフォルトの名無しさん2006/09/08(金) 22:19:42
昔はstrlwrとかあったけど、あれ非標準だったかな。
0302デフォルトの名無しさん2006/09/09(土) 09:00:41
ありがと
0303デフォルトの名無しさん2006/09/09(土) 09:12:27
>>296
> グローバル変数の内容はいつ初期化されるか分かんないし、
> そのタイミングによって結果が変わる可能性があるけど、

おいおい大丈夫か?
0304デフォルトの名無しさん2006/09/09(土) 10:19:50
>>303
おいおい大丈夫か?
0305デフォルトの名無しさん2006/09/09(土) 12:27:12
>>303
残念ながらお前の方が大丈夫でない。
0306デフォルトの名無しさん2006/09/09(土) 13:00:01
皆に心配される>>303に嫉妬
0307デフォルトの名無しさん2006/09/09(土) 13:04:38
>>304-306
kwsk
0308デフォルトの名無しさん2006/09/09(土) 13:07:23
>>307
おいおい大丈夫か?
0309デフォルトの名無しさん2006/09/09(土) 13:07:27
既知のグローバル変数というか、
グローバル変数の内容はいつ初期化されるか分かんないし、
(もし int c = a; みたいなことができてしまうと)
その(a と c の初期化の)タイミングによって結果が変わる可能性があるけど、
アドレスにはそういった問題が無いっつー話。


でも、C++ だとエラーにならないんだよね。
0310デフォルトの名無しさん2006/09/09(土) 14:55:58
>>309
ああ、
> (もし int c = a; みたいなことができてしまうと)
っていう仮定の話ね。なら、納得。お騒がせスマソ。
0311デフォルトの名無しさん2006/09/09(土) 20:47:16
質問です
#include <stdio.h>
main()
{
printf("Hello");
}
って入力してBccでコンパイルしようとしたんですがいくらやっても
「エラー E2209 hello.c 1:インクルードファイル "stdio.h"をオープンできない」
と出てうまくいきません
どうしたらいいでしょうか?
0312デフォルトの名無しさん2006/09/09(土) 21:09:35
インクルードファイルへのパスの設定とか確認
0313デフォルトの名無しさん2006/09/09(土) 21:23:59
それはどうすればいいですか?
0314デフォルトの名無しさん2006/09/09(土) 21:36:31
>>313
インストール手順をよく読みなおすといい。
0315デフォルトの名無しさん2006/09/09(土) 22:10:15
>>311-314
お前等纏めてスレ違い。
0316デフォルトの名無しさん2006/09/09(土) 22:11:57
コンパイルオプションの-I
0317デフォルトの名無しさん2006/09/09(土) 22:27:33
>>311
return 0;
0318デフォルトの名無しさん2006/09/09(土) 22:53:24
>>311
それはあなたが馬鹿だからです。
0319デフォルトの名無しさん2006/09/09(土) 23:08:25
>>317で答えでてんじゃん?おみゃーらプギャー
0320デフォルトの名無しさん2006/09/09(土) 23:20:01
うわ、またバカが一人。日本語も読めないらしい。
0321デフォルトの名無しさん2006/09/10(日) 00:04:59
#include文を消せばいいのに。
0322デフォルトの名無しさん2006/09/10(日) 00:12:20
お客様、死ねばいいのに。
0323デフォルトの名無しさん2006/09/10(日) 15:14:25
printfなどで表示される文字数を、標準出力や標準エラー出力など画面に
文字を出力せずにカウントするにはどうすればいいでしょうか?
gccじゃないコンパイラで、asprintfを使いたいので、それらしい動きをするも
のを作るために使おうと思ってます。(下のような)

今は出力を捨てるようにファイルを開いているんですが、スマートじゃないかなぁ
と感じているので、何か対処法がありましたら教えてください。お願いします。

int
_asprintf(char **path, char *fmt, ...)
{
va_list ap;
int size;
FILE *gomi;

/* gomi = fopen("/dev/null", "w"); */
gomi = fopen("gomi.txt", "w");
va_start(ap, fmt);
size = vfprintf(gomi, fmt, ap);
fclose(gomi);

printf("get memory %d + 1\n", size);
*path = (char *)malloc((sizeof (char) * size) + 1);

if (*path == NULL) {
return -1;
}

vsprintf(*path, fmt, ap);
va_end(ap);
return 0;
}
0324デフォルトの名無しさん2006/09/10(日) 15:42:18
>>323
C99になるけどvsnprintfとか
03253232006/09/10(日) 16:45:34
>>324
size = vfprintf(gomi, fmt, ap);
↓
size = vsnprintf(NULL, 0, fmt, ap);
に変更してみました。

出力捨てるためにファイル開くよりは、こっちのほうが良いですね。

C99でもいいかな…?
ありがとうございました。
0326デフォルトの名無しさん2006/09/10(日) 17:09:19
C99のそういうところは素直に羨ましい。
0327デフォルトの名無しさん2006/09/10(日) 18:01:49
>>323
ライセンスの問題がなければ gcc (glib?) から asprintf() とやらの
ソースぱくってくればいいんじゃない?
0328デフォルトの名無しさん2006/09/10(日) 18:41:16
初心なら車輪の再発明もまた学習の一環になるだろうさ
出来ないよりは出来る方がいい
経験を積めば、大抵はやらなくなるw
0329デフォルトの名無しさん2006/09/10(日) 20:12:19
K&Rのやさしい入門を読みはじめました。P.27のコードを自分なりに打ちこんだのですが、「その他すべての文字」(nOther)を入力すると、
アプリが落ちます。また、空白文字のみを入力してEOF(Ctrl+Z)を入力してもwhileループを出ません。
アドバイスをいただけませんか。
void arrayTest(){
int c,i;
int nWhite=0,nOther=0;
int nDigit[10];//添え字は0から9まで

for (i=0;i<10;i++){
nDigit[i]=0;
}

while((c=getchar())!=EOF){
if(c==' '||c=='\t'||c=='\n'){
++nWhite;
}else if('0' <= c <= '9'){
++nDigit[c-'0'];//文字コードを添え字に変換
}else{
++nOther;
}
}

printf("***数字別入力回数***\n");
for(i=0;i<10;i++)
printf("%2d::%2d",i,nDigit[i]);
printf("\n");

printf("空白入力回数::%2d\n",nWhite);
printf("その他::%2d\n",nOther);
}
0330デフォルトの名無しさん2006/09/10(日) 20:26:24
'0' <= c <= '9'
( ´_ゝ`)
0331デフォルトの名無しさん2006/09/10(日) 20:28:45
('a') ('0') ('c') ('x') ('_') ('-') ('o')

を見た後で、

('0') <= (c) <= ('9')

を見る。
0332デフォルトの名無しさん2006/09/10(日) 20:29:01
>else if('0' <= c <= '9')
どうもこの書き方が拙かったようです。失礼しました...。
0333デフォルトの名無しさん2006/09/10(日) 20:32:03
みんなAAに見える
0334デフォルトの名無しさん2006/09/10(日) 20:42:01
('a') ('0') ('c') ('x') ('_') ('-') ('o')

こいつらは、全部オレのお友達!
0335デフォルトの名無しさん2006/09/10(日) 20:44:51
if ( ; ; ) {}
0336デフォルトの名無しさん2006/09/10(日) 20:45:45
>>334
しょうかいしてけれ。
0337デフォルトの名無しさん2006/09/10(日) 20:59:24
ANSI-ASCIIだと、127人もいるけどみんなの顔を覚えられるの?
0338デフォルトの名無しさん2006/09/10(日) 21:06:17
('ワ')

漏れの友達の半角加奈子さんとかまで入ると、延べ何人になることだろう
0339デフォルトの名無しさん2006/09/10(日) 21:10:23
>>329
> 空白文字のみを入力してEOF(Ctrl+Z)を入力してもwhileループを出ません。

行の頭で Control-Z 入力しないと EOF にならない仕様だった気がする。
0340デフォルトの名無しさん2006/09/11(月) 04:41:19
桃子! 桃子じゃないか!
0341デフォルトの名無しさん2006/09/11(月) 14:59:30
時間系の関数なのですが、
strftime() で %z %Z の値がそれぞれ +0000 GMT で固定されていまいます。
環境変数でTZを正しく設定し、tzset() を事前に呼び出しても同じです。

strftime() に結果を反映させるためには、どうすればよいでしょうか?
期待する値としては、+0900 JST あたりが帰って来て欲しいところなのですが…
0342デフォルトの名無しさん2006/09/11(月) 15:27:10
ひたすら西に向かうといい。
0343デフォルトの名無しさん2006/09/11(月) 15:31:57
>>341
その辺は、環境依存だなぁ。言語仕様的な問題ではないのでこのスレ的には何ともし様がない。
03443412006/09/11(月) 22:40:43
>>343
そうですか。他を当たってみます。
ありがとうございました。
0345デフォルトの名無しさん2006/09/12(火) 01:34:09
do〜while文の最後なんでセミコロンが必要なんですか?なんでこういう言語仕様になったんですか?
0346デフォルトの名無しさん2006/09/12(火) 01:40:07
>>345
do〜while文の終わりだから。
0347デフォルトの名無しさん2006/09/12(火) 01:41:11
文の最後には;が必要だから。
0348デフォルトの名無しさん2006/09/12(火) 01:50:48
>>345
確かに気になるな;
0349デフォルトの名無しさん2006/09/12(火) 02:03:50
複文以外の文の最後には必ず ; がいるから、あるのは当たり前。
0350デフォルトの名無しさん2006/09/12(火) 12:55:02
関数atoiを使用するとどうしても警告が出るので、試しに下記のような
最小限のプログラムを書いたのですが、やはり警告が出ます。

---ソース---
#include <stdio.h>
#include <stdlib.h>

int main(void){
int c_int = 0;
char c_char[] = "1234";

c_int = atoi(c_char);
printf("%d\n",c_int);

return 0;
}

---警告の内容---
警告 W8004 atoitest.c 5: 'c_int' に代入した値は使われていない(関数 main )

この警告はどうやったら無くなるのでしょうか?
変数c_intがprintfにしか使用されない場合、この警告を気にしなくとも良いのでしょうか?
よろしくお願いします。
0351デフォルトの名無しさんNGNG?2BP(200)
>>350
せっかく行番号出てるのにどうしてそこを見ないのか…
ゼロで初期化しているがその値が使われる前にc_intに上書きされているっつー警告。
0352デフォルトの名無しさん2006/09/13(水) 01:48:29
char aa[5];
sprintf(aa, "abcdefghijklmn");
なんて書いた場合aaの中身はabcdefghijklmnになるんですけど、これってsprintfが適切にメモリ確保してるって事ですか?
0353デフォルトの名無しさん2006/09/13(水) 01:51:35
>>352
いいえ。未定義動作です。
そしてバッファオーバーフローと呼ばれるバグです。
0354デフォルトの名無しさん2006/09/13(水) 01:52:23
>>352
「偶然」そうなっただけ
03553522006/09/13(水) 01:56:29
>>353-354
そうなのですか。わかりました、ありがとうございます。
気をつけます。
0356デフォルトの名無しさん2006/09/13(水) 02:51:48
今更Cで仕事する羽目になったのですが、OOの癖が抜けなくてつらいです。
Cで使うOO風のライブラリってありませんか?
String *str = new_String("abc");
str->add("def");
みたいに書きたいんです。文字列の処理はString.hを見ればわかるっていう感じで
楽がしたいんです。Cではグローバルな関数群から目的のモノを探すだけで時間がかかります。

客(Solaris8)にコンパイルしてもらわなきゃいけないので、
大きくてトラブル対応できないライブラリは不可です。
見あたらなかったんでlinkMapとかloggerとか自分で作ってみたのですが、めんどくさく
なってきました。存在しないなら自作の奴をさらすので意見して欲しいなあと
思ってるんですがいかがでしょうか
0357デフォルトの名無しさん2006/09/13(水) 04:34:11
VB6→C#を経由して、教養の為にCをはじめました。
で、>>356さんと似たようなことを感じてます。

若輩者ゆえ役立つコメントなどできませぬが、「自作のやつ」をさらして欲しいです。
0358デフォルトの名無しさん2006/09/13(水) 04:36:03
Cで自作・・・聞いただけでゾッとした。C++(OOP)に一度慣れてしまうと
Cのあのベニヤ板に貼り付けたような平面的なプログラムが見にくくて
たまらない。
0359デフォルトの名無しさん2006/09/13(水) 05:28:19
>>356
郷に入れば郷に従え。
strcatでいいじゃん。
0360デフォルトの名無しさん2006/09/13(水) 05:36:38
OO風っても、例に出した部分にOOっぽさなんか全然無いように見える。
単にJavaから入って、それ以外への適応能力が不足しているだけじゃん。
0361デフォルトの名無しさん2006/09/13(水) 06:14:22
>>356
よくわかんないけど、コンテナが欲しいの?
ググれば腐るほどあるでしょ。
0362デフォルトの名無しさん2006/09/13(水) 06:57:19
>>356
今自作しちゃえば、次の仕事の時に多少汎用なコードが残ることになるぞ


とか唆してみるテストw
03633562006/09/13(水) 08:29:31
10年以上前はCプログラマだった。 郷に入れば郷に従えだとは思うので、
c++で無理矢理Java風に書くのとかは嫌い。でも非OOで書くのはもうキツイ。
複数のインスタンスが生成できるコンテナあるのなら教えて。正直ググったけど
Hashtableのサンプルくらいしか見つからなかった。

Cで仕事することはもうほとんどないし、自作ライブラリよりもちゃんとメンテナの
いるライブラリを利用する方が効率いいからなあと思ったんだけど、
ちょっと別スレ建ててみますわ。まあスレが伸びなきゃ伸びないで終了ということで
0364デフォルトの名無しさん2006/09/13(水) 08:35:42
>>363
>複数のインスタンスが生成できるコンテナあるのなら教えて。正直ググったけど
>Hashtableのサンプルくらいしか見つからなかった。

プログラミング能力(基礎力)が決定的に不足してるな。

>ちょっと別スレ建ててみますわ。まあスレが伸びなきゃ伸びないで終了ということで

糞スレ立てんな。
0365デフォルトの名無しさん2006/09/13(水) 08:54:40
356は今、世界中で誰も思いつかなかったライブラリに着手しようとしてるのだ。
0366デフォルトの名無しさん2006/09/13(水) 09:01:58
ライブラリで問題が解決できるんなら C++ なんか作られなかっただろうにな。
0367デフォルトの名無しさん2006/09/13(水) 09:45:51
10年以上前でなくて、10か月前の間違えだろ
お前、嘘ついてまで甘えるなよ
03683502006/09/13(水) 10:05:29
>>351
ありがとうございます。初期化が無駄だって事ですね。

ちなみに最小限のプログラムを書く前の、元のプログラムでは
"}"の消し忘れという更にorzな理由でエラーが出てました。
0369デフォルトの名無しさん2006/09/13(水) 10:09:23
プリプロセッサの展開が起こるタイミングが分かりません。

#define A #include "aiueo.h"

そもそもこんなことっておk?
0370デフォルトの名無しさん2006/09/13(水) 10:10:28
インスタンスとかHashtableとか言って、バリバリのJava使いだろ。
ちょっとだけCが必要になったからといって、そういうつまんねーウソついてばかりで
お前は相当嫌われてるんだろうな。
それもこのスレで聞いているし、お前相当バカだ。

そしてお前らもこういうウソぐらい見抜けよな。
ネタ以下なのにいつまでも気がつかないから、お前らカモられてるんじゃねーのか?
ケケケ
0371デフォルトの名無しさん2006/09/13(水) 10:10:54
>>368
それは本当に初心の頃なら誰でも辿る道だ。
キニスンナ

プログラマはバグを出して大きくなるのさ。w
0372デフォルトの名無しさん2006/09/13(水) 10:18:52
C++ならともかく、今時Cのライブラリなんて見つからない。
たとえば「c コンテナ ライブラリ」でググるとC++のライブラリばかり。

もし有用なサイトを知っているならURLだけでも教えてください。
このスレに聞いたのはCのライブラリ知ってる人がいると思ったから。
俺最初は「Cのライブラリありませんか?」って質問しにきたんだけど、
元発言読んでる?

今Java使いなのはその通りだけど、10年以上前はHP-UX上で
Motif使ったCプログラム書いてたよ。1年くらいでC++に行ったし、
当時はぺーぺーだったからC使いとは言えない感じだけど。
C++ではStringとかコンテナの汎用ライブラリを使ってた。
0373デフォルトの名無しさん2006/09/13(水) 10:21:40
>>370
オレには、文系で口が上手い奴に見える。
Javaしか使えなくて、Cは教養程度しか知らないんだろうよ。
setjmp.hとか知らなそうだ。
0374デフォルトの名無しさん2006/09/13(水) 10:57:42
作るのはめんどくさいので何か無いか
と
自分で作った奴が既にある

という矛盾。
自分で作ったならそれ使えばいいじゃん。
0375デフォルトの名無しさん2006/09/13(水) 11:48:01
>>373
お前もかなりのステレオタイプである事が推察されるw
0376デフォルトの名無しさん2006/09/13(水) 11:53:16
続きはこちらでお楽しみください。

[今さら]C言語でクラスライブラリを作る[Cかよ]
http://pc8.2ch.net/test/read.cgi/tech/1158108311/
0377デフォルトの名無しさん2006/09/13(水) 13:19:36
ポインタで悩んでいます。

void test(char *data2){

 *data2++;
 printf("addres_2:%d\n", data2);

};

int main(){

 char data[10] = "zxcvbnm";
 printf("addres_1:%d\n", data);
 test(data);
 printf("addres_3:%d\n", data);

 return 0;
};

実行した後、addres_2とaddres_3の値が一緒になると思っていたらaddres_1とaddres_3の値が同じになってしまいました。関数内のポインタ加算は初期化されるのでしょうか?それとも関数のdata2はdataと別物?なのでしょうか?
0378デフォルトの名無しさん2006/09/13(水) 13:39:53
'を文字にしたいのですが
char c = ''';
とするとエラーが出るのですが、他に方法があるのでしょうか?

0379デフォルトの名無しさん2006/09/13(水) 13:41:34
\でエスケ-プするよろし
char c = '\'';
0380デフォルトの名無しさん2006/09/13(水) 14:11:09
>>377
ポインタ表示したいなら、%p指定すべき

引数に渡した時点で、指している場所は同じだが別物
関数内でどうしてもポインタを加算したいなら、
戻り値で加算後のポインタを返せばよい
0381デフォルトの名無しさん2006/09/13(水) 14:29:35
そもそも
>*data2++;
がおかしい。
0382デフォルトの名無しさんNGNG?2BP(200)
>>377
ツッコミどころ多すぎ。

>void test(char *data2){

ここで渡される引数data2をいくらいじろうとも、呼び出し元のdataには何の影響もない。

>*data2++;

しかも、これはdata2に対する操作ではない。
mainの最後に printf("%s\n",data);を入れてみると何が悪いのか分かるはず。

>char data[10] = "zxcvbnm";

呼び出し先でポインタをいじるのに配列渡しちゃダメ。
03833772006/09/13(水) 16:18:32
今さっきわかりました。あはは、馬鹿だ俺。
ポインタに限らず引数は「初期値がセットしてあるかもしれないローカル変数」なんですよね。
addres_2を変更してもaddres_3が変わらないのは当たり前でした。
別のソースではtest関数でdataの内容をポインタでアクセスして変更してた(できてた)のが混乱の元でした…。

>>380-382
ご指摘ありがとうございました。
0384デフォルトの名無しさん2006/09/13(水) 16:39:53
Z を 32 ビット整数型と仮定して Z を二の補数表現で解釈したとするなら
(0xFFFFFFFF ^ Z) + 1 (この演算に限っては 1 + ~Z でもかまわない)
の演算を実行すれば -Z と解釈されますか?
プログラムを実行した結果 -32768 を除き正しい事は確かめられたのですが、考え方は間違ってませんよね?
どこかの教科書に ^Z + 1 のことについて書かれていたので初めは混乱したのですが。
0385デフォルトの名無しさん2006/09/13(水) 17:06:22
unsigned char*の文字列をsigned char*に間接的に移す方法はないでしょうか?
何故わざわざunsignedを取り扱うのかというのは
自分が使っているツールの処理系に依存しているからです。
unsigned charだと、Cの関数であるstrcmpやstrcpyが使用できません。
やり方が全く思い浮かばず困っています。どうかご教授お願いしますm(_ _)m。
0386デフォルトの名無しさん2006/09/13(水) 17:07:04
よくわからんがキャストすればいいんじゃね
0387デフォルトの名無しさん2006/09/13(水) 18:25:53
「間接的」ってどんなだろう?
0388デフォルトの名無しさん2006/09/13(水) 18:26:43
#Error: lvalue expected
#Warning 6: value of expression is not used

試しに(includeとかmainは表記省略)
unsigned char a[] = "てすと";
a = (char)a;
とやってみたらエラーが出ました・・・
charのキャストは出来ないっぽいです。
0389デフォルトの名無しさん2006/09/13(水) 18:28:14
直接でも間接でも出来たら構いません。
特に条件はなく、どんな方法でもいいのでやり方教えて下さいm(_ _)m
0390デフォルトの名無しさん2006/09/13(水) 18:29:45
それ以前に a は定数ポインタだから変更できませんよ。
0391デフォルトの名無しさん2006/09/13(水) 18:32:02
↑のミスりました。
char a[];
unsigned char b[] = "てすと";

a = (char)b;
と書くつもりでした。(できないのは同じ事です)
0392デフォルトの名無しさん2006/09/13(水) 18:32:38
>>388
unsigned char a[] = "てすと";
char *b;
b = (char *)a;
0393デフォルトの名無しさん2006/09/13(水) 18:34:06
char *a;
unsigned char b[] = "てすと";
a = (char*)b;
0394デフォルトの名無しさん2006/09/13(水) 18:34:30
言っている意味が良く把握できませんが
unsigned char *str = "hello" ;
signed char *pstr ;
pstr = (signed char *) str ;
それと使えないのではなくて警告が出るだけではないのですか?
0395デフォルトの名無しさん2006/09/13(水) 18:34:41
>>391
その場合もaは変数じゃなくて定数だってば。
Javaじゃないんだから。
0396デフォルトの名無しさん2006/09/13(水) 18:34:47
リロードしてなかった。
ゴミレスすまそ。
0397デフォルトの名無しさん2006/09/13(水) 18:39:44
とりあえずポインタをもう一回勉強した方が
0398デフォルトの名無しさん2006/09/13(水) 18:41:53
そもそも char a[]; なんてコンパイル通らない気が。
0399デフォルトの名無しさん2006/09/13(水) 18:44:16
できました!!!!!!!!!!!
ずっとこの事が分からなくてスランプに陥ってましたが
皆さんのおかげでやっと解決しました!(^_^)/
キャストの際ポインターをつけたらちゃんと出来ました!
このやり方だとエラーも警告も出ませんでした。
本当に有り難うございましたm(_ _)m!
0400デフォルトの名無しさん2006/09/13(水) 18:49:43
>>398
実際には char a[] = "てす";
と書いていたのですが、テンパって省略してしまったのでw
*と[]は違うのはある程度知っていましたが、ポインターを勉強し直した方がいいというのは事実です・・・
なんにせよ、本当になんとお礼を言っていいのかm(_ _)m!
0401デフォルトの名無しさん2006/09/13(水) 19:23:10
例えば、下のような文字をファイルから読み込みます。
(実際は、何十万文字あるとして)
改行をなくして、1行にして、
X文字目からY文字目までの文字列を、そのつどXとYを入力して文字列を取り出すには、
どの関数を使えばよいのでしょうか?


TIAUAOTUAOITUAOITAOTUAOTUATUAO
TOAUTOAITUAOTUAOSITUAOTUAOITUA
AOTUAOTUAOTUAOTUAOTUAOTUAOTUAO
TYOAUTOATUAOTUAOTUAOTUAOTUAOTA
0402デフォルトの名無しさん2006/09/13(水) 19:26:22
>>401
fopen()
fgets()
strlen()
printf() or putc()
0403デフォルトの名無しさん2006/09/13(水) 19:57:38
>>382
お前もツッコミどころ多すぎ。
0404デフォルトの名無しさん2006/09/13(水) 20:00:40
>>402
まじでそれでいけますか?
for文使うやつって、凄いなんか処理重くなりそうと思ったんす
つまり、XとYの長さをstlenで測って それを
substrなりするのかな

改行はfgetsできえましたか?
0405デフォルトの名無しさん2006/09/13(水) 20:07:33
>>404
行の長さが固定長なら、fseekでいける。

> 改行はfgetsできえましたか?
試すかマニュアル読めよ。
0406デフォルトの名無しさん2006/09/13(水) 20:07:52
>>404
1行ずつ読み込んでから、1つに連結していけばよい。
あと、重いかどうかは、創造する前にまず試してみろ。
案外率直な方法でも気にするほど遅くなかったりその逆だったりすることは良くあることだ。
04074042006/09/13(水) 20:19:19
ありがとうございます。
しかし、何十万、何百万文字を1行にして
charで保存できましたっけ

とりあえず、strcatで連結して
1行で出力してそこを、x〜yまで抽出して
charに格納かな。
0408デフォルトの名無しさん2006/09/13(水) 20:22:58
>>407
いやいや、Xを超えるまでは読み捨て。
Xを超えたら、そこから連結しながらX+Yを超えるまで読み込む。
0409デフォルトの名無しさん2006/09/13(水) 22:03:57
何百万文字でもメモリ確保が失敗しない限りいけるんじゃない?
まぁ読んでは捨ててを繰り返したほうが効率いいだろうけどさ。
0410デフォルトの名無しさん2006/09/13(水) 22:14:29
百万文字なんてたったの1MBですよ(シングルバイトで)
0411デフォルトの名無しさん2006/09/14(木) 00:33:41
#define PRINTF(MOJI) printf("->MOJI<-\n");

#include <stdio.h>
main()
{
  PRINTF(文字);
}

として、

->文字<-

と表示されることを期待したのですが、だめでした。
#defineの部分を直せば、こういうことできますか?
0412デフォルトの名無しさん2006/09/14(木) 00:46:41
#define PRINTF(MOJI) printf("->" #MOJI "<-\n")
0413デフォルトの名無しさん2006/09/14(木) 01:06:58
>412
ありがとうございました。できました!
0414デフォルトの名無しさん2006/09/14(木) 07:35:02
>>411-413
「文字」に \ や不正な文字が混ざるとまずい事になるから、普通にダブルクォート使え。

#define PRINTF(MOJI) printf("->" MOJI "<-\n")
PRINTF("文字")
0415デフォルトの名無しさん2006/09/14(木) 09:14:17
カーソルキーの入力って標準Cでできますか?
scanf()系の関数やgetche()ではうまくいきませんでした。
これは環境依存になってしまうのでしょうか?
0416デフォルトの名無しさん2006/09/14(木) 09:18:47
>>415
コンソールの中でカーソル位置を任意に動かすのは多分環境依存
行頭に復帰させるだけなら \r で出来るかどうか忘れた
0417デフォルトの名無しさん2006/09/14(木) 10:40:08
>>415
標準 C ではコンソールの概念が無いのでカーソルキーを監視することは出来ない。
あと getche() は非標準。
>>416
「カーソル位置を任意に動かす」とはどこにも書いてない。
0418デフォルトの名無しさん2006/09/14(木) 10:41:50
ncurses つかえ。
とほざいてみる。
0419デフォルトの名無しさん2006/09/14(木) 17:22:02
>>415
http://msdn2.microsoft.com/ja-JP/library/kswce429.aspx
http://msdn2.microsoft.com/ja-JP/library/078sfkak.aspx
こんなの書いてあった。やったことは無いけど二回呼ぶらしい。

ところでカーソルキーを読んでそのあと何しようとしてたの?
読んで終わりってことは無いと思うけど、カーソルの点滅位置
を動かしたかったの?
0420デフォルトの名無しさん2006/09/14(木) 19:21:46
ファイルの中に100億文字あるファイルがあるとします

そこから、100〜200、10万〜1億とか 70億から70億1000文字
取り出すにはどうすればよいのでしょうか?

char array[10000000000]
なんてできませんよね

それに、100〜200とかしか取り出さないのなら、10000000000も領域確保する
必要がない気もするのですが
どうすれば効率的になるのでしょうか?

1000000000領域確保したとして、すぐに消さばいいのかな
0421デフォルトの名無しさん2006/09/14(木) 19:28:00
ファイルの中にファイルがある、という構造はあまり一般的ではありませんね。
でもたぶん、中にあるほうのファイルは通常のファイルとして扱っていいでしょう。
04224202006/09/14(木) 19:29:15
すみません。ファイルの中に100億文字があるの間違いでした・・・
0423デフォルトの名無しさん2006/09/14(木) 19:32:51
で、とても大きなファイルでも、必要になるのはそのうち一部な事が多いです。
そういうときは必要な一部を読み込んで処理すればいいです。

最初から順番に処理するような場合も、最初からちょっとづつメモリに読んで
処理するのがいいでしょう。

メモリマップド+仮想記憶のような仕組みを使うときはメモリを確保したかのよな
処理の仕方も可能です。
0424デフォルトの名無しさん2006/09/14(木) 19:37:56
簡単にいうと

fseekでぐぐって末吉
0425デフォルトの名無しさん2006/09/14(木) 19:40:55
>>420
単なるテキストファイルと見ても、
最低10GBのサイズになるわけだが。

チェックしなきゃいかんなら、
先頭から順番に一定範囲だけ読んで、
そこに開始条件を満たすものがなければ読み捨てて次、と
繰り返せば良し。
単に位置しかみないなら、開いてからそこまでseekして、
目的の位置から終了位置まで別ファイルに切り出すとか。

コード自体はごく単純に済ませることが可能。
04264202006/09/14(木) 20:25:29
でもやっぱり、
必要な範囲だけのこすにしても

とりあえず100億文字なら100億文字の配列を最初に確保しなきゃいけないのですよね
20億〜30億文字や10億〜15億文字 70億〜80億文字と任意の間を読むにしろ

この最初に確保する配列を任意の文字にできないのでしょうか?
開始条件が位置なので、fseekでも最初に膨大な配列のメモリ領域を確保しないといけませんよね
0427デフォルトの名無しさん2006/09/14(木) 20:38:18
おまえの使っているPCが、100億バイトを記憶できるアドレス空間を持っているか
まずそれから考えてみろ
0428_2006/09/14(木) 20:44:45
>427
ページング
0429デフォルトの名無しさん2006/09/14(木) 20:55:51
fgetsでファイルの中身を1行ずつ読み込んでいくとき

最初の1行はスルーする もしくは、 ? など特定の文字が先頭にある行を
スルーするときは、
どうすればよいのでしょうか?
if文でしょうか?
0430デフォルトの名無しさん2006/09/14(木) 20:55:58
↑
知ったかぶりしたいだけのバカ
0431デフォルトの名無しさん2006/09/14(木) 20:58:28
あーん、>>429ごめん。
俺は>>428向けに書いたんだ。
ページングで物理メモリの不足は補えるけど
アドレス空間の不足はどうしようもないんだよ。
だから、64bitという話が出てくる。

>>429
読んでから確かめるしかないでしょ。
最初の一文字なりで簡単に判定出来るじゃん。
0432デフォルトの名無しさん2006/09/14(木) 21:05:21
>>426
>fseekでも最初に膨大な配列のメモリ領域を確保しないといけませんよね
 ・そのファイルがテキストファイルかどうか
 ・文字コードは何か
 ・改行コードは何か
 ・「何文字目」は文字単位なのかバイト単位なのか
によって変わるが、それにしたって
読み飛ばした分全部覚えておく必要なんかないだろうに。
0433デフォルトの名無しさん2006/09/14(木) 21:07:56
32bit環境だと物理的に2^32以上のアドレス空間は認識できないからな。
メモリだけがアドレス空間を使用してるわけでもないし
04344292006/09/14(木) 21:20:20
while(fgets(string 50 fp))
{
if( string[0] != ?){
sscanf(string,%c,mojikakunou)
}
}

こんな感じで判定でしょうか?
0435デフォルトの名無しさん2006/09/14(木) 21:24:58
文法的には滅茶苦茶だが
考え方としてはそんな感じでいいんじゃないか。
04364292006/09/14(木) 21:29:33
最初の1行だけ飛ばすってのは・・・
1行目だけ違うとこに格納みたいなことかな
しかし1行目の判定はどこですれば
0437デフォルトの名無しさん2006/09/14(木) 21:38:41
「一行を読み飛ばす」ってのは「読むだけで何もしない」ってことでしょ。
違うの?
04384292006/09/14(木) 21:39:48
>>437
ファイルの中を出力しようとしたら
fgets、while文で全行読んでいくから、1行読み飛ばすってのは・・・
0439デフォルトの名無しさん2006/09/14(木) 21:43:18
何を悩んでるのかが全然わからん。
本当に「最初の一行」で良いなら
ループに入る前に空読みすりゃ良いし。

まあファイル中で特定の行が現れた次の行ってなら
フラグ使うか、ifの内部でもう一度読むとかで
多少面倒にはなるが。
04404292006/09/14(木) 21:54:25
むむ

fegets( string 20 fp)
while(fgets(string 20 fp)
{
}

こんな感じかな・・・
0441デフォルトの名無しさん2006/09/14(木) 22:00:10
>fegets
釣りですか
0442デフォルトの名無しさん2006/09/14(木) 22:02:48
ファイルパスの \ 区切りの位置を取得するのに
下のようなソースコードがあったんですけど、
少しだけいじって、SJISに対応させることはできませんか。

#define DIRSEP '\\'
...
filepart=strrchr(realfilename, DIRSEP);
0443デフォルトの名無しさん2006/09/14(木) 22:04:59
mixiでKusakabe暴走ワロス
0444デフォルトの名無しさん2006/09/14(木) 22:10:08
誰だよw たっきーことXCODE?
0445デフォルトの名無しさん2006/09/14(木) 22:14:53
>>442
環境依存で、SJISの2byte目かを判定する関数が用意されているはず。
0446デフォルトの名無しさん2006/09/14(木) 22:17:10
たとえばVC++なら_mbsrchrとかね。
0447デフォルトの名無しさん2006/09/14(木) 22:26:31
>>445-446
ありがとうございます。
_mbsrchrでばっちり動作しました。
04484292006/09/14(木) 23:09:26
>>440
fgetsです。
こんな感じで1行とばしは合ってますでしょうか?
0449デフォルトの名無しさん2006/09/14(木) 23:30:05
>>448
まず、やりたいことを日本語で詳しく書いてみたらどうだろう?
読みたいファイルのサイズも含めて。
04504292006/09/14(木) 23:40:10
>>449
はい。すみません。

ファイル名 file.name

作者:ねずみ講
猫がねこんだアナコンダ
あめんぼあかいなあいうえお
空と君との間には
紫の薔薇の人
・・・

とまぁ、こんな感じのファイルを
最初の先頭行(作者)の行以外を別の配列にセットして
出力したいのです。
0451デフォルトの名無しさん2006/09/15(金) 02:23:01
上のほうのsigned char*をunsigned cahr*にキャストする話で疑問に思って

#include <stdio.h>
int main(){

int i=-1;
int *ip = &i;
unsigned int *ip2 = (unsigned int *)ip;

printf("i = %d\n",i);
printf("*ip = %d\n",*ip);
printf("*ip2 = %d\n",*ip2);

if (*ip2 > 0) printf("*ip2 は正です");

return 0;
}

と書いて実行してみたら

i = -1
*ip = -1
*ip2 = -1
*ip2 は正です

となってしまったのですが、*ip2 は正と負、どちらなんでしょうか?
0452デフォルトの名無しさん2006/09/15(金) 02:43:42
>>451
printfの書式指定の中で %d とやっているが、これは int用の指定。
unsigned用にするには %uとしなければならない。

そしてunsignedなんだから、0でなければ必ず正。
04534512006/09/15(金) 02:59:38
>>452
%uというのがあったんですね、ありがとうございます
*ip2は正で、iは負のままだから、*で参照される度にiがunsigned intにキャストされてるってことなんですね
0454デフォルトの名無しさん2006/09/15(金) 03:10:09
>>453
正確には解釈が微妙に間違っているのだが・・・・まあそれでいいだろ。
勉強を進めていくうちに別な見方にも気づく事だろう。
0455デフォルトの名無しさん2006/09/15(金) 03:26:54
>>454
ありゃ微妙に違うんですか…精進します
0456デフォルトの名無しさん2006/09/15(金) 03:38:00
微妙にどころか思いっきり違ってるんだが、少し勉強が進めばわかるこったし、気にスンナ。
0457デフォルトの名無しさん2006/09/15(金) 04:25:55
http://portable-c.jugem.jp/?eid=22
> 今回のテーマであるNULLですが、このマクロで表される空ポインタ定数というのは、実は関数へのポインタには代入することができません。

これマジ?
0458デフォルトの名無しさん2006/09/15(金) 16:32:58
cygwin上でfopenするとFILE*が正常に取得できるのに
errno=29(ESPIPE)が設定されてしまいます。気にしなくていいのでしょうか。
open()&lseek()使った方がいいですか?
その後ファイルへの書き込みはできます。

errno=0;
printf("%s:%d:errno[%d]\n", __FILE__, __LINE__, errno);
fp = fopen(filename, "ab");
printf("%s:%d:errno[%d]\n", __FILE__, __LINE__, errno);

04594582006/09/15(金) 16:52:27
すいません、FAQにこうありました。気にしないことにします。

>プログラムがerrnoの中身を調べることは、エラーが報告されたときだけ意味があることに注意
0460デフォルトの名無しさん2006/09/15(金) 22:07:02
データファイルがいくつもあるフォルダ下で
プログラムを実行し、ファイルを読みとるため、
データファイル名を入力するとき、入力補完機能をつけるにはどうすればよいのでようか?
長いファイル名をイチイチうつのが面倒なのですが
UNIX環境みたいにscanfで文字を入力する際に補完とかできないかと思いまして
0461デフォルトの名無しさん2006/09/15(金) 22:17:36
シェルのソースでも読めば?

まあ補完機能の部分だけなら別に読む必要も無いだろうが。
0462デフォルトの名無しさん2006/09/16(土) 00:59:37
ワイルドカードを使えるようにしたら?
0463デフォルトの名無しさん2006/09/16(土) 02:30:08
>>457
つうか厳密には比較もダメみたいに書いてあるね

今まで
if(f!=NULL){
f();
}

とかさんざんやってきたんだけど・・・
0464デフォルトの名無しさん2006/09/16(土) 03:55:35
>>463
いや、比較は大丈夫らしいぞ。
それで代入がダメってのは、なんかおかしい気がするが。
0465デフォルトの名無しさん2006/09/16(土) 16:13:09
NULLポインタのビットパターンがすべて0とは限らないが、
0とNULLポインタを比較すると真になる。

http://www.kouno.jp/home/c_faq/c5.html#2
0466デフォルトの名無しさん2006/09/16(土) 21:16:00
質問です。

条件
AさんとBさんがいます。AさんとBさんは通信ができます。
AさんとBさんが通信を開始し、終了すると、その間の記録がログファイルとして
記録されます。
通信の開始は、キーボードからスタートと入力することにより開始されます。
終了は、キーボードからエンドと入力することにより、開始されます。

言語はC++。コンパイラはVisual C++

要求
通信を自動的に1時間ごと切り、1時間ごとのログファイルを作成したい。


よろしくお願いいたします。
0467デフォルトの名無しさん2006/09/16(土) 21:16:14
ぬるぽ代入できないのにぬるぽと比較して意味あるのかな
0468デフォルトの名無しさん2006/09/16(土) 21:20:06
          _
      ミ ∠_)
         /
         /   \\
 ウイーン  Γ/了     | |
  ウイーン  |.@|    | | ガッガッガッ
       | / | .     人
       |/ |    <  >_Λ∩
      _/  | //. V`Д´)/←>>467
      (_フ彡           /
0469デフォルトの名無しさん2006/09/16(土) 21:21:09
>>466
宿題は宿題スレへ行け。
C++のことはC++スレへ行け。
0470デフォルトの名無しさん2006/09/16(土) 21:21:25
とりあえずぬるぽと言ってる香具師は該当スレにカエレ(・∀・)
0471デフォルトの名無しさん2006/09/16(土) 22:13:51
>終了は、キーボードからエンドと入力することにより、開始されます。
難しいな、いつになったら終わるんだ?
0472デフォルトの名無しさん2006/09/17(日) 19:11:10
ビット演算についてなんですけど、
unsigned char型で11111011みたいな一つだけ0で残り1にしたいのですがどうすればいいのでしょうか?
上の場合だと255を入れてやれば全部1になりますが、その状態でシフトさせると0が入ってしまうと思います。
アルゴリズムだけでもいいので御願いします。
0473デフォルトの名無しさん2006/09/17(日) 19:12:26
ANDとかORとか
0474デフォルトの名無しさん2006/09/17(日) 19:26:16
>>472
~(1 << n)
04754722006/09/17(日) 19:34:36
>>474
あ、反転がありましたか
反転はあまり使った事がなかったので思いつきませんでした。
ありがとうございます。
0476デフォルトの名無しさん2006/09/17(日) 19:58:22
なんだかさっぱり分からないんだけど、質問の意味分かった人いるの?
0477デフォルトの名無しさん2006/09/17(日) 19:59:45
馬鹿には分からないだろ
0478デフォルトの名無しさん2006/09/17(日) 20:14:36
俺もわからんかった。
nビット目を0その他を1にする方法を教えてくれということなのか>>472の質問は?

>>474の回答で納得したからそうなんだろうな。
0479デフォルトの名無しさん2006/09/17(日) 20:51:13
なーんだそうだったのか。最初からそう言ってくれよ
0480デフォルトの名無しさん2006/09/18(月) 02:25:43
ライブラリの質問もこちらでしょうか?
先日無償公開された某TurboC++でコンソールアプリを入門しています。

読み込んだバイナリを1バイトずつ頭に0xを付けて16進数で書き出す・・・と言うのを作ろうとしているのですが、ヘルプで見付かりません。
atol()やstrtol()みたいに文字列からの数値変換は見付かったのですが。
ltoa()やltostr()みたいな、変数を指定基数で文字列化する関数は無いのでしょうか。

無ければ自作するし、見落としていたら関数名を御教授下さい。
0481デフォルトの名無しさん2006/09/18(月) 02:30:37
sprintf()
04824802006/09/18(月) 02:38:40
>>481
あああああ、そうですね!
応用の利かない自分が恥ずかしい。
速攻返答、有難う御座いました。
0483デフォルトの名無しさん2006/09/18(月) 07:45:50
質問です(学習者ではなく、一応本職です)。

ANSI Cの原典に当たろうかとansi.orgを調べてみたけど、
どうも見つからない。
調べ方が悪いのか、そもそもWebからは閲覧できないのか教えてください。
0484デフォルトの名無しさん2006/09/18(月) 12:56:28
現在のCの国際規格は、ISO/IEC 9899:1999
0485デフォルトの名無しさん2006/09/18(月) 13:29:28
>483
ANSIやJISは規格書で利益(財源)を確保しているので無理だったようなきがする。
0486デフォルトの名無しさん2006/09/18(月) 14:04:24
>>483
ISO のドラフトがダウンロードできるぜ。
http://www.open-std.org/jtc1/sc22/wg14/
0487デフォルトの名無しさん2006/09/18(月) 16:30:35
>>484-486
サンクス!
「ANSI C」っていうのは近年では「国際規格に則ったC」くらいの意味になってるのかな。

提示してもらった先にあるC99RationaleV5.10 あたり(C99の方針まとめ?)、
俺の求めてたものに雰囲気が近くて良い感じです。
0488デフォルトの名無しさん2006/09/18(月) 17:01:27
スレタイにISOとJISも入れようぜってずっと言ってるんだけどなあ
0489デフォルトの名無しさん2006/09/18(月) 17:02:25
>488
なんで却下され続けてるんだろうな?
単に忘れられてるだけなのか?
0490デフォルトの名無しさん2006/09/18(月) 17:12:12
>>489
いや、入れたら、C99についてのFAQスレになっちまうからだろ。
C99を完全サポートした処理系がもっと一般化するまでは非現実的だ。
0491デフォルトの名無しさん2006/09/18(月) 17:18:32
>>490
なんでそうなるの?関連がわからん。
0492デフォルトの名無しさん2006/09/18(月) 17:19:59
ISO/IEC 9899:1999ってのはつまりC99のことだけど
「ANSI C」である限りC99は含まないから?
0493デフォルトの名無しさん2006/09/18(月) 17:25:32
実際問題、C99のFAQスレになって何が悪いのかって気がするが。
0494デフォルトの名無しさん2006/09/18(月) 17:26:37
restrictとか_Complexとかコンパウンド・リテラルとかを見るのがウザイ。
0495デフォルトの名無しさん2006/09/18(月) 17:27:33
また随分と私的な。
文句はC99に言ってやれ。
0496デフォルトの名無しさん2006/09/18(月) 17:28:24
だって俺C99を使える処理系持ってないもん。
安く手に入る完全準拠の処理系はどっかにないの?
0497デフォルトの名無しさん2006/09/18(月) 17:29:52
完全準拠かどうかは知らんが、CodeWarriorあたりなら安いだろ。
つーか学生の私怨なのかよorz
0498デフォルトの名無しさん2006/09/18(月) 17:31:36
完全準拠のC99処理系を持っている人の絶対数が少ない現状、
C99のFAQスレになる事にどんな意義があるのだろう。ただのオナニースレに
なるのでは。
0499デフォルトの名無しさん2006/09/18(月) 17:42:39
別に完全である必要はないだろう
VCみたいなメジャーどころも
C++完全互換じゃなくてもC++として扱ってたんだし
0500デフォルトの名無しさん2006/09/18(月) 18:02:00
VC6はメジャーだったからね。
C99部分準拠でメジャーというとgcc位か?今の所。
0501デフォルトの名無しさん2006/09/18(月) 18:41:30
C90ことISO/IEC 9899 : 1990のことも忘れないで。
0502デフォルトの名無しさん2006/09/18(月) 21:27:57
iccもSunのccもc99準拠。
0503デフォルトの名無しさん2006/09/18(月) 21:29:25
今のところC99の新機能は__func__しか使ってない俺が来ましたよ
0504デフォルトの名無しさん2006/09/18(月) 21:36:16
俺はブロック先頭以外の変数の宣言と//を使っているぜ。
というか意識していないと気が付くと入ってるw
0505デフォルトの名無しさん2006/09/18(月) 21:48:07
>>504
c99ってgoto でローカル変数宣言を飛び越えられるの?(C++だとエラー)
0506デフォルトの名無しさん2006/09/19(火) 01:06:21
>>503
vsnprintfも使ってる俺の勝ち。
0507デフォルトの名無しさん2006/09/19(火) 01:08:15
C99の拡張の何割かは、それまでもベンダーが独自拡張で対応してた機能が
仕様に取り込まれた様なもんだったりするし、各処理系の対応も需要の割には早めだよな。
つーことで次スレからはISOとJISもスレタイに入れるってことで。
0508デフォルトの名無しさん2006/09/19(火) 01:47:48
こんなかんじ?
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 【C89/C90/C99】
0509デフォルトの名無しさん2006/09/19(火) 01:50:03
永杉
BBS_SUBJECT_COUNT=48
0510デフォルトの名無しさん2006/09/19(火) 01:55:14
じゃ後ろいらないや。こんな感じ?
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
0511デフォルトの名無しさん2006/09/19(火) 10:23:13
C99のFAQや話題を取り扱ったスレを新たに作ればいいだけじゃん。
スレ進行は亀かも知れんけど。
0512デフォルトの名無しさん2006/09/19(火) 10:24:58
>>510 それでいいんじゃないか?
C99のたいていの機能が使えるコンパイラは、dmc, gccぐらいしか知らない。
ほかに、無料なのあるの?
0513デフォルトの名無しさん2006/09/19(火) 10:50:16
なんで、ビットローテートが無いんだ!
あと、整数演算でキャリーとかボローが発生したときの
振る舞いについて、言語としての既定がないのが痛い。
結局はキャリーフラグとか調べなきゃならんじゃないか。
0514デフォルトの名無しさん2006/09/19(火) 10:55:11
>>513
多分機械固有に依存する面が多いからだろう。極端な場合、キャリーフラグが
存在しない機械も考えられる。それに、いざとなったらインラインアセンブラなど
を利用すればいいし。
0515デフォルトの名無しさん2006/09/19(火) 11:00:13
まぁそういうプロセッサの場合は事前に二項の値を調べるしかないよな。
しかし言語としての既定がないとポータブルに書けないのがつらいな。
C++ でも整数演算クラスがあって例外を投げてくれるとかもないしな。
0516デフォルトの名無しさん2006/09/19(火) 12:08:38
for (i=0;i<10;i++) {
fp = fopen( "i.txt", "w" );
}

上のようなニュアンスで、
0.txt, 1.txt, 2.txt, ・・・
ファイルを書き出したいのですが、どうすれば良いでしょうか?
よろしくお願いいたします。
0517デフォルトの名無しさん2006/09/19(火) 12:20:10
char buf[100];
...............
for (i=......... {
sprintf(buf, "%d.txt", i);
fp = fopen(buf, "w");
}
0518デフォルトの名無しさん2006/09/19(火) 12:25:35
ニュアンスコンパイラ・・・
究極のコンパイラか。
0519デフォルトの名無しさん2006/09/19(火) 16:12:19
ソースファイルAで
foo[]={a,b,c};
のように初期化されてる配列を別のファイルBでextern参照し
sizeof(foo);
のようにするとincomplete type と言われていまいます。
同一ファイルだと上手くいくのですが、どうしても分割したいです。
どのようにすれば良いのでしょうか
0520デフォルトの名無しさん2006/09/19(火) 16:20:44
extern foo[3];
0521デフォルトの名無しさん2006/09/19(火) 16:21:12
Aの中でsizeofして得た値も一緒にextern
0522デフォルトの名無しさん2006/09/20(水) 00:27:21
>>513
それは思った事がある。
もしかして、PDP-11にはローテート命令とかCフラグがなかったのか?
あと、010進/0x10進表現があって0b10進数表現がないのも腑に落ちないなあ。
0523デフォルトの名無しさん2006/09/20(水) 02:22:13
>>522
昔ッから言われてるけど、こりゃ一生放置プレイだろうな。
遅きに失したというか、入れるタイミングを見失ってる感じだ。
05245222006/09/20(水) 05:05:38
>>523
そうなのですか。
コミュニティなどとは疎遠なので知りませんでした。
C99の次に更新があるとも思いにくいし、一生放置かぁ。
自分で代替関数書いていて空しくなる(^^;
0525デフォルトの名無しさん2006/09/20(水) 08:34:59
コンパイラ内部の文字コードがASCIIではないCコンパイラって結構あるものなんですか?
0526デフォルトの名無しさん2006/09/20(水) 08:54:32
トライグラフ文字
0527デフォルトの名無しさん2006/09/20(水) 09:29:40
>>513
RISC型プロセッサだとローテート命令がなかったりするし。
0528デフォルトの名無しさん2006/09/20(水) 09:57:31
ねえんだよなー。
まあ、困らないんだけどさ。
0529デフォルトの名無しさん2006/09/20(水) 10:58:36
ローテートはあってもどのみちレジスタの幅に依存した使い方になるからな
0530デフォルトの名無しさん2006/09/20(水) 11:09:12
シフト命令だってプロセッサによっては固定長でしか
動かすことが出来ず、変数でシフト数を指定したら何行かの
命令コードで対応するようなコンパイラもあるから、ローテート
だって、C言語で演算子と動作を決めてやればコンパイラが
がんばったと思う。

<> でローテートとかあっても良かったなあ。
0531デフォルトの名無しさん2006/09/20(水) 11:30:09
インラインアセンブラじゃ役不足なのか?
ローテート・シフト・ビット演算なんてどうせカリカリにチューンしたい
時だけだろ。
0532デフォルトの名無しさん2006/09/20(水) 12:06:37
Cで書ける方がスマート。機能を削ろうって議論じゃないんだから、
使う側からすれば反対する理由はないでしょ。
まあ搭載されることは無いとは思うが。
0533デフォルトの名無しさん2006/09/20(水) 16:25:38
ファイルがいつ(年月日と時刻)作成されたかを取得する方法はありますか?
0534デフォルトの名無しさん2006/09/20(水) 16:36:17
>>533
スレ違い。環境を明記してこっちで。
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
0535デフォルトの名無しさん2006/09/20(水) 18:48:07
質問させてください。

構造体
typedef struct {
  int x;
} TEST;

void set( TEST **test )
{
  *test = ( TEST * )malloc( sizeof( TEST ) * 2 );

   // ここは代入できる
  test[0]->x = 1;

  // ここが出来ない
test[1]->x = 2;
}

int main()
{
  TEST *test = NULL;

  set( &test );

  return 0;
}

// ここが出来ない
で書き込み違反エラーが出てしまいます
これはやはり領域の確保が出来ていないという事でしょうか?
どうすればいいのか、よろしく御願いします。
0536デフォルトの名無しさん2006/09/20(水) 20:09:18
>>535
よく見直せ。
set関数ではtest[0]に確保したポインタを入れてるが
test[1]には何も入れてないじゃないか。アクセス違反が
出て当たり前。
0537デフォルトの名無しさんNGNG?2BP(200)
これでどうか。
test = ( TEST ** )malloc( sizeof( TEST ) * 2 );
0538デフォルトの名無しさん2006/09/20(水) 20:53:14
それだとtest[0]->xからして吹っ飛ぶ気がする
0539デフォルトの名無しさん2006/09/20(水) 22:10:01
このソースだけだとTESTをポインタのポインタにする意味が無いんだけど、
void set( TEST *test )
{
  test = ( TEST )malloc( sizeof( TEST ) * 2 );
  test[0]->x = 1;
  test[1]->x = 2;
}

int main()
{
  TEST *test = NULL;
  set( test );
}
これじゃ駄目なの?
0540デフォルトの名無しさん2006/09/20(水) 23:23:53
それだと、引数自体必要無くなるな。書くとしたらこうか?
(*test)[0].x = 1;
(*test)[1].x = 2;
0541デフォルトの名無しさん2006/09/20(水) 23:27:33
>>537
>>539
せめてポインタくらい理解して書けや
それならローカル変数でいいだろボケが
0542デフォルトの名無しさん2006/09/20(水) 23:30:57
基礎が足りてない。

図を描いて箱の中にアドレスが入っている場合と
実体が入っている場合を明確に区別して、今回の
ケースに割り当てれば何が悪いのかすぐに分る。
0543デフォルトの名無しさん2006/09/20(水) 23:54:30
いちいち、毎回、図を書かないと分からない低脳の集まりはここですか?
0544デフォルトの名無しさん2006/09/21(木) 00:41:58
図を描いて理解するのと
図を描かないと理解できないのは違うわけだが
0545デフォルトの名無しさん2006/09/21(木) 00:52:45
図を書かずに理解できる程度のおもちゃコードしか書いてないカスに低脳よばわりされるおまえらって・・・w
0546デフォルトの名無しさん2006/09/21(木) 01:06:49
それはやはり、図を書かないと理解できないコードこそが本物だと思い込む方が阿呆だな。
0547デフォルトの名無しさん2006/09/21(木) 01:23:03
ここか、噂の世界一レベルが低いスレは
0548デフォルトの名無しさん2006/09/21(木) 01:38:44
すぐ、世界一だとか宇宙一と言う、厨がいる低脳スレはここですか?
0549デフォルトの名無しさん2006/09/21(木) 01:48:19
>>548
お前精神病院の閉鎖病棟を抜け出すなよ。病院に連絡しといたぞ。
0550デフォルトの名無しさん2006/09/21(木) 01:50:39
>>543-549
お前ら全員この板から出てけ。
0551デフォルトの名無しさん2006/09/21(木) 02:12:47
>>550
(゚Д゚ )ハァ?お前が出てけ。
0552デフォルトの名無しさん2006/09/21(木) 03:55:44
わかったじゃあ俺が出ていく
0553デフォルトの名無しさん2006/09/21(木) 04:22:44
いや、俺が出て行く
0554デフォルトの名無しさん2006/09/21(木) 04:30:06
いや、ここは俺の名に免じて。
0555デフォルトの名無しさん2006/09/21(木) 05:11:44
麻呂も麻呂も
0556デフォルトの名無しさん2006/09/21(木) 06:28:41
朕も朕も
0557デフォルトの名無しさん2006/09/21(木) 13:46:06
長い文字列をprintfで出力しようと思っています。
文字列が長く右スクロールが必要なので、ソースを見やすくするため
pritnf("%s%s%s%s",
     "aaaaa",
     "bbbbb",
     "ccccc",
     "ddddd");
このように%sを使って文字列を分割しました。ところが上のprintfと同じ結果が
pritnf("aaaaa"
     "bbbbb"
     "ccccc"
     "ddddd");
のような書き方で出来るそうですが、"aaaa""bbbb" のような書き方で文字列の連結をしても問題はないのでしょうか?
出来るとしたらK&Rのどのあたりに書いてありますか?ちょっと上手く見つけれませんでしたorz
0558デフォルトの名無しさん2006/09/21(木) 13:50:29
どの辺に書いてるのか知らないけど絶対大丈夫だと言っておこう
駄目だった場合の責任は取れないけどね
05595572006/09/21(木) 14:07:58
サンクス>>558
今見直したらP47に書いてあった。
#なぜ質問した後に答えが見つかるのだろうか・・・
0560デフォルトの名無しさん2006/09/21(木) 14:20:37
fopen_s 等のMS拡張は、今後標準化していくのでしょうか?
マニュアルにはセキュアだと書かれていますが、
どちらかというとMSの政治的な意図が感じられるのですが。
0561デフォルトの名無しさん2006/09/21(木) 14:25:27
>>560
次回のCの新規格に正式に取り入れられる。
0562デフォルトの名無しさん2006/09/21(木) 14:42:53
そういえば、自らの国家や民族に固執する右翼系の若者が
世界的に増えているという事実も、多少気になるところだが。

とか書きたくなるレスだな。
標準化については、一応提案はしている様子。
05635622006/09/21(木) 14:45:44
既に確定してたのか。すまん。
0564デフォルトの名無しさん2006/09/21(木) 21:08:47
セキュア化を気に統一性のない引数の順番を直して欲しいところだけど
互換性重視でそのままなんだろうな・・・
0565デフォルトの名無しさん2006/09/21(木) 21:12:53
統一性が無い?
0566デフォルトの名無しさん2006/09/21(木) 21:18:00
fp が最初にあったらい最後にあったりってことじゃない?
0567デフォルトの名無しさん2006/09/21(木) 21:57:03
可変引数のヤツ以外はみんな最後尾に統一されてるだろ。
全部前にしろってこと?
0568デフォルトの名無しさん2006/09/21(木) 23:17:42
引数内でやろうとしないで、一文づつやればいいだけじゃん。
どうでもいいんじゃない?
0569デフォルトの名無しさん2006/09/22(金) 02:17:39
>>568
引数内で何をやるって?
0570デフォルトの名無しさん2006/09/22(金) 04:18:13
いいじゃないか、API くらい気に入るように

                   ツクレカス
0571デフォルトの名無しさん2006/09/22(金) 04:22:58
今禿って言った香具師ちょっとこっち来い
0572デフォルトの名無しさん2006/09/22(金) 04:25:42
 \ivi/
゚・-=☆=-・ +
 /∩\      +。            こういうことかい?♪
 _| | +
〈〈(_,.i ヽ  +./ ̄ ̄ ̄ ̄ ̄ ̄\
〈ヾ と ,}  /。o〇         \
 |二二| /                ヽ
 |   | i;;;:              :::::::;;;;;!
 !    !彡彡  (●)     (●) 彡彡
 ヽ ≧ 彡彡彡  \___/  彡彡彡
  \  .ゞ 彡彡彡彡\/彡彡彡彡彡
     \ /ヾ丿,|ド、 ┃ 〃jレ \ー-┐
     /  イ .|/¬ r-.─/ ___\イヘ
      ̄ ̄く \毛毛毛/ /  / ̄\ ヽ
         \ ヾ ,,)(,,//ノ  丿 /≦ 丿
         ∠,.ゞ\V/ノ 〔o_;;{ ( ヾ、/     …《⊂ SATURDAY NIGHT ⊃》…
         {____ノ´\__\ ̄\.ヽ)        ─=-z☆ FEVER ☆z-=─
         / ,,./⌒ヽ  く ̄ ̄                 (1977)
         \_ゝ    \_\
         (___〕   (___〕
0573デフォルトの名無しさん2006/09/22(金) 05:46:33
>>569-572関数呼び出し時の、引数における評価順が処理系によって順不同という事だと思うけど。違うのか?
0574デフォルトの名無しさん2006/09/22(金) 06:29:08
まあコールに限らず副作用完了点までのオペランドの評価順は未規定だけどな
0575デフォルトの名無しさん2006/09/22(金) 06:36:03
>>568-574
おまえら、K&R読んだことないだろ?
0576デフォルトの名無しさん2006/09/22(金) 07:19:57
>>572
AA で吹いたの初めて
0577デフォルトの名無しさん2006/09/22(金) 11:15:26
>>573
違うだろ。
0578デフォルトの名無しさん2006/09/22(金) 23:04:55
mallocの引数にはsize_tが指定できるのですが、
そのサイズがptrdiff_tで表現できる値を超える場合、
例:size_t(unsigned int),ptrdiff_t(int)
一回でポインタを移動できない気がするのですが
どうなってしまうのでしょうか?
0579デフォルトの名無しさん2006/09/22(金) 23:09:34
>>578
ポインタを移動できないとはどういうことか?
0580デフォルトの名無しさん2006/09/23(土) 02:29:32
>>578
unsigned だから signed でカバー仕切れないと?
差分なんて、わざわざ専用の型使わずテキトーに
int なり long 使ってたなあ。
0581デフォルトの名無しさん2006/09/23(土) 05:39:57
専用の型を使うの自体は普通にいいことだと思うが、
>>578の心配は杞憂を通り越してぬるぽい。
32Bitの系なら31Bitで約1GB、そんな規模の移動が本当に必要なのかと。
0582デフォルトの名無しさん2006/09/23(土) 05:42:04
と、なめきった末のinteger overflowですよ
0583デフォルトの名無しさん2006/09/23(土) 06:01:06
いや、その前に仮想メモリマネージャ様にお出まし願えよw
0584デフォルトの名無しさん2006/09/23(土) 07:53:34
そもそもCの規格では一つのオブジェクトがそんなに大きくなることを許していたか?
0585デフォルトの名無しさん2006/09/23(土) 15:38:34
includeが開けないとなるんだがどうしたらいいですかね?
0586デフォルトの名無しさん2006/09/23(土) 15:44:03
>>585
このスレから出て行くといいよ。
0587デフォルトの名無しさん2006/09/23(土) 15:45:11
>>586
うはwwwwwwwwwwwおまちょwwwwwwwwwwwwww待てよwwwwwwwww
0588デフォルトの名無しさん2006/09/23(土) 15:50:57
>585
includeパスが見えていないんだろうから、 -Iで指定するとか
FAQもいいところだなw
0589デフォルトの名無しさん2006/09/23(土) 16:27:58
#include <studio.h>
0590デフォルトの名無しさん2006/09/23(土) 17:34:56
>>585
FILE *fp = fopen("include", "r");
がエラーになると言っているなら、
includeというファイルが無いんだろ?
0591デフォルトの名無しさん2006/09/23(土) 17:43:10
sprintf_s() とかはまだ解るんだけど
fopen_s() って意味無くね?
何がセキュアになってるの?
0592デフォルトの名無しさん2006/09/23(土) 17:59:00
char a[] = "abcdef";
と言う文字列があるとして、
char b[64]にaのbcdeだけを入れたい場合(前1文字後ろ1文字を消す)どうすればいいのでしょうか?
0593デフォルトの名無しさん2006/09/23(土) 18:01:47
b[0] = a[1];
b[1] = a[2];
b[2] = a[3];
b[3] = a[4];
b[4] = '\0';
0594デフォルトの名無しさん2006/09/23(土) 18:16:08
char a[] = {"abcdef"};
って書かないと気持ち悪くね?
0595デフォルトの名無しさん2006/09/23(土) 18:25:56
>>592
脳内コンパイルしか通していないけど。
size_t newLen = strlen(a) - 2;
memcpy(b, a + 1, newLen);
b[newLen] = '\0';
0596デフォルトの名無しさん2006/09/23(土) 18:29:42
>>593 の方が良いな。
0597(^-^) ◆MONSOON/qo 2006/09/23(土) 18:36:24
>>592

#include <stdio.h>

main(){
char i,a[]="abcdef",b[64];
for(i=0;a[i+1]!='\0';i++)b[i]=a[i+1];b[i-1]='\0';
printf("%s\n",b);}
0598デフォルトの名無しさん2006/09/23(土) 18:42:22
*(*a?strcpy(b,a)+strlen(b)-1:b)=0;
0599(^-^) ◆MONSOON/qo 2006/09/23(土) 18:47:18
なるべく(標準)関数を使わない方がいいとおもうよ
速度と安定性が下がる
06005922006/09/23(土) 18:47:53
みなさんいろいろな方法ありがとうございます。
一通り試してみて使いやすいのにしようと思います。
0601デフォルトの名無しさん2006/09/23(土) 18:53:17
おーい、598 つっこめよ
0602(^-^) ◆MONSOON/qo 2006/09/23(土) 18:59:50
>>600
597よりこっちのほうが簡単

char a[10]="abcdef",b[64];
for(int i=0;a[i+2]!='\0';i++)b[i]=a[i+1];

0603デフォルトの名無しさん2006/09/23(土) 19:52:56
>>599
自分でコピーするよりランタイム関数の方がアセンブラレベルで
最適化されてるから、高速と聞いたぞ。
0604デフォルトの名無しさん2006/09/23(土) 19:58:53
>>603 ところで、おまえは口だけのようだが、それを比較できるのか?
0605デフォルトの名無しさん2006/09/23(土) 20:02:30
文字列処理ごときで速度云々するなよ
スパムメールのフィルタでも書いてるわけじゃあるまいし
0606(^-^) ◆MONSOON/qo 2006/09/23(土) 20:13:15
>>603
strcpyの方が75倍ほど時間がかかるよ
ボーランドc++(速度最適化オプション付き)では

#include <stdio.h>
#include <time.h>
#include <string.h>
#define N 20000000

main(){
int i,j;
clock_t s,t;
char a[100]="agregvei04b12lfknb0100122l5fgn8648bhliftbcdef",b[100];

s=clock();for(i=0;i<N;i++)for(j=0;a[j]=='\0';j++)b[j]=a[j];s=clock()-s;

t=clock();for(i=0;i<N;i++)strcpy(b,a);t=clock()-t;

printf("関数を使った方が時間が%f倍かかる\n",(double)t/s);}
0607デフォルトの名無しさん2006/09/23(土) 20:21:08
これはひどい
0608デフォルトの名無しさん2006/09/23(土) 20:22:01
安定性が下がるってのはどういうこっちゃ?
新しくコード書くより、動く物を使った方が安定性上がるんじゃないの?
0609デフォルトの名無しさん2006/09/23(土) 20:22:47
一応ツッコミ入れとくかな

>s=clock();for(i=0;i<N;i++)for(j=0;a[j]=='\0';j++)b[j]=a[j];s=clock()-s;
0610デフォルトの名無しさん2006/09/23(土) 20:23:11
>>606
それ、1回あたり、実時間でどれくらい違うの?
0611(^-^) ◆MONSOON/qo 2006/09/23(土) 20:27:36
標準関数なしと有りの速度はそれぞれ次のとおり

vc++2005だと30 1000
vc++6.0だと30 2900
ボーランドc++5.5だと50 3900

呼び出しのオーバーヘッドがかかるからね
いくら最適化されても外部関数は手間がかかる
0612(^-^) ◆MONSOON/qo 2006/09/23(土) 20:29:35
>>609
スマン
計測し直してくる
0613デフォルトの名無しさん2006/09/23(土) 20:31:19
恥ずかしすぎる。

その糞コテハン、一生使うな。
0614デフォルトの名無しさん2006/09/23(土) 20:32:33
痛いコテハンだなぁ
0615(^-^) ◆MONSOON/qo 2006/09/23(土) 20:33:42
>>611は間違い

vc++2005だと1000 1000
vc++6.0だと1400 2900
ボーランドc++5.5だと2300 3900

くらいだな
0616デフォルトの名無しさん2006/09/23(土) 20:36:06
痛いコテハンだなぁ
0617デフォルトの名無しさん2006/09/23(土) 20:49:15
先生、a[j]!='\0'に直して試すと

最適化有り:
関数を使った方が時間が0.651599倍かかる
最適化無し:
関数を使った方が時間が0.143331倍かかる

とか表示されるんですが、これは一体・・・?
0618デフォルトの名無しさん2006/09/23(土) 20:54:40
VC6での実行結果。
>関数を使った方が時間が0.137271倍かかる
ちなみにs=6265, t=860
0619デフォルトの名無しさん2006/09/23(土) 20:59:50
gcc バージョン 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125

最適化なし:s=6750 t=969
-O3:s=1453 t=969
0620デフォルトの名無しさん2006/09/23(土) 21:04:27
>>613
いや、一生使い続けて欲しい。
0621デフォルトの名無しさん2006/09/23(土) 21:05:40
      _.,_ 
   __r'⌒   =ミ`ー-、_ 
   _ゝ´'' ,�=@  ミ  i =', 
   〉   ノ〃 彡m、ィリ>'彡 
  _シリツ ノノリイシl }ニヾミ、;;) 
   〉::::rイ ッ'モテヽ}レtテ jイ´ 
   ゙):::lt|:l、. ‐ / ; |`¨ ,リ    「逆に考えるんだ」
   ソ:l゙(:}     ツ  / 
   ヾ! :l  〈,r~云゙) j 
   /´\ \  .彡 ,イ_ 
  / ヽ  \ `ー‐'/l|゙l、`ヽ、__ 
     \  `ー、_///:} 
      \ /´ ヽ/:::| 
        ` ソTヾ 
0622(^-^) ◆MONSOON/qo 2006/09/23(土) 21:05:53
文字列が100文字以上だとstrcpyの方が速いみたいだ
文字列長かえましたか?
0623デフォルトの名無しさん2006/09/23(土) 21:10:27
かえてませんが。
0624デフォルトの名無しさん2006/09/23(土) 21:12:13
最適化すればあまり変わらなさそうなのにね。
0625デフォルトの名無しさん2006/09/23(土) 21:15:50
つまり、いつでもstrcpyを使えということだな。
0626(^-^) ◆MONSOON/qo 2006/09/23(土) 21:16:40
最適化で
for(i=0;i<N;i++)strcpy(b,a); → strcpy(b,a);
になっている可能性有り
0627デフォルトの名無しさん2006/09/23(土) 21:20:09
>>626
そんな馬鹿な。
0628デフォルトの名無しさん2006/09/23(土) 21:21:36
それはないな。非関数の方ならありえるが。
0629(^-^) ◆MONSOON/qo 2006/09/23(土) 21:22:04
一回のコピーだけより時間かかっているからそれはないな
0630デフォルトの名無しさん2006/09/23(土) 21:23:14
つまり、いつでもstrcpyを使えということだな。

はい、この話題終了。
0631(^-^) ◆MONSOON/qo 2006/09/23(土) 21:25:09
かんだけどstrcpyは32bit(4 char分)づつ転送してるんじゃないかな
0632デフォルトの名無しさん2006/09/23(土) 21:27:30
アセンブラ読めないなら静かにしとけよ
0633デフォルトの名無しさん2006/09/23(土) 21:39:07
いつまでもうるさいんだけど、結局それは、1秒以上違うのか?
頭丸めて出直してきた方がいいかもな!
0634(^-^) ◆MONSOON/qo 2006/09/23(土) 21:55:56
cレベルのアルゴリズムの工夫では辿りつけない領域があることを始めて知った
最新のコンパイラで標準関数を使う方がいいってこった
0635デフォルトの名無しさん2006/09/23(土) 21:59:15
お前はチューニング坊やなのか?
0636デフォルトの名無しさん2006/09/23(土) 22:07:54
読めといわれてるのですけど、
K&R(第2版日本)はANSI準拠のようですが、
今さらでもやっぱりお勧めの本ですか?
もしくは、これと同列かこれより良い本ありますか?
教えてください。よろしくお願いします!
0637デフォルトの名無しさん2006/09/23(土) 22:20:44
>>634
もっといい事を教えてあげよう。コンパイラによっては、等価の別の標準関数に置き換えることも、
標準関数のインライン展開もするぞ。
Ex.
char * str = "foo"; printf("%s\n", str);はputs("foo");と同じコードを出力する。
double dest, src = 1.1; memcpy(dest, src, sizeof(double));は単にdest = 1.1;と同じコードを出力する。
0638デフォルトの名無しさん2006/09/23(土) 22:29:03
sprintf_s(b, a);
0639デフォルトの名無しさん2006/09/23(土) 22:34:13
>>636
K&Rとはいっても邦訳版は訳がひどくて、とても読めたもんじゃないぞ。
読むなら原書だ。そうでないなら読まなくていい。全くの無駄。

これからきちんと学ぶつもりだったら、A Book on C 4th Editionを勧める。
たしか日経BPから邦訳版として「基本から学ぶC言語」って名前で出てたはず。
一生涯側に置いておける良書だ。見たら買うべし。
0640デフォルトの名無しさん2006/09/23(土) 22:41:29
>>639
とっても良さそうですね。
「実用的なコードを駆使しながら、」この部分がなんともK&Rっぽくてそそります。
C99解説もあるならとってもいい感じです。
0641デフォルトの名無しさん2006/09/23(土) 23:00:40
97年の本だからC99には対応してないなぁ。

C99対応のはオライリーの表紙に牛が書かれてる奴とか、
新・C言語入門 シニア編くらいしか買ってなかったり。
0642デフォルトの名無しさん2006/09/23(土) 23:22:45
ファイルがオープン状態かどうか調べる標準関数はありますか?
0643デフォルトの名無しさん2006/09/23(土) 23:35:02
>>642
ファイルがオープン状態にあるかどうかは、Cの扱う概念の範疇に無いので勿論標準関数にはありません。
#つーか、そもそもオープン状態を区別するOSばかりじゃないってば。
0644デフォルトの名無しさん2006/09/23(土) 23:40:43
void isopen( FILE *fp );
0645デフォルトの名無しさん2006/09/24(日) 00:14:06
>>644
ありがとうございます。
0646デフォルトの名無しさん2006/09/24(日) 00:17:39
>>645
一応言っておくが非標準だからな。
0647デフォルトの名無しさん2006/09/24(日) 00:20:02
>>644
iso pen ってどんなエンピツ?
0648デフォルトの名無しさん2006/09/24(日) 00:21:10
>>644
void でどうやって判別すんだよ。
0649(^-^) ◆MONSOON/qo 2006/09/24(日) 00:24:14
c言語って最適化されれば速度面ではアセンブラと変わらないもんだと思ってた
良い標準関数が入っているコンパイラが大事なことがわかり
インテルコンパイラも使うことにした
0650デフォルトの名無しさん2006/09/24(日) 00:26:10
そもそも FILE* fpを見てオープンしてるかどうかチェックするなら、
if (fp == NULL) とかでいいんじゃないか?
0651デフォルトの名無しさん2006/09/24(日) 00:35:26
>>648
if((*(int(*)(FILE*)))(fp)) goto hell;
0652デフォルトの名無しさん2006/09/24(日) 00:35:55
651 ですが吊ってきます
0653デフォルトの名無しさん2006/09/24(日) 00:38:26
>>649
それは・・・x86とかじゃ無茶だべ。
C言語を意識して開発されたMPUならともかく。
0654デフォルトの名無しさん2006/09/24(日) 00:39:10
>>649
なぜ実測せずに、ただ思う?
0655デフォルトの名無しさん2006/09/24(日) 00:40:02
>>649 せっかくCが好きになったのなら、c言語でなくてC言語と書いてくれ。
0656デフォルトの名無しさん2006/09/24(日) 00:41:39
「C言語」って書くやつも素人くさい。
Java言語とかも。
0657デフォルトの名無しさん2006/09/24(日) 00:43:19
>>653 C言語を意識して開発ってなんだよ?
0658デフォルトの名無しさん2006/09/24(日) 00:43:28
>>650
ファイル閉じた後は必ずNULLを代入するとか、ちゃんと自分で管理してればね。
0659デフォルトの名無しさん2006/09/24(日) 00:44:26
>>656
お前はここのスレタイを3回音読した後どこかに消えろ
0660デフォルトの名無しさん2006/09/24(日) 00:45:46
>>649
そもそもお前が作っているソフトは本当にそこまで速度が大事か?

もし大事ならまずロジック面での見直しを図るべき。
あとプログラムの使用者である人間に対して、
待たされているという印象をいかに少なく見せるかも大事。

こういうことも効果は大きいと俺は思うぞ。
0661デフォルトの名無しさん2006/09/24(日) 00:45:51
>>659
スレタイのANSI-Cのハイフンも激しくダサイよな。
新スレときには外して欲しい。
0662デフォルトの名無しさん2006/09/24(日) 00:46:46
>>659
俺は656ではないが、まあCで通じるときにはCと呼んでいる。
このスレタイは検索時の都合もあるだろうと思っている。
0663(^-^) ◆MONSOON/qo 2006/09/24(日) 00:48:01
>>654
>>603-634をみて
0664デフォルトの名無しさん2006/09/24(日) 00:48:34
>>657
MC68000の美しさは究極なのだよ。
わかるかね?
0665(^-^) ◆MONSOON/qo 2006/09/24(日) 00:53:21
コンパイラ付属の標準関数と自作ルーチンどっちの方が速いか検討するスレをたてようか
文字列のコピーだと標準関数strcpyをつかった方がいいとか
ソートとか複雑なやつだと自作の方が速い場合もあるとおもう
0666デフォルトの名無しさん2006/09/24(日) 00:54:54
x86でsetccが0/1になったのは
多少はCを意識してる気がする。

ちなみに32bit-x86登場以前に
68系にあった同様の命令は、0/-1をセットする、だったはず。
0667デフォルトの名無しさん2006/09/24(日) 00:56:01
>>665
C、C++の最適化について語るスレ
http://pc8.2ch.net/test/read.cgi/tech/1084676298/l50
0668デフォルトの名無しさん2006/09/24(日) 00:57:47
ていうか厨は放置しろよ。
週末なんだから、変なのが来るのはしょうがない。
0669デフォルトの名無しさん2006/09/24(日) 01:00:42
>>665 スレ立てるのはいいが、やる気あるならの話ね
0670デフォルトの名無しさん2006/09/24(日) 01:02:47
C言語を意識した設計というと、そのうちにJavaとかC#でもそんなのが出てくるのかな?
言いたい事はわかるんだけどさ・・
0671デフォルトの名無しさん2006/09/24(日) 02:41:10
J2MEとかは思いっくそバイトコード意識したコード書かされるな。
コンパイラ説得型のプログラミングは楽しいっちゃ楽しいが、楽しさが刹那的過ぎる。
0672デフォルトの名無しさん2006/09/24(日) 04:01:03
>>664
分かるよ。
俺も68000で育ったし。
でもなあ、今のパーソナルコンピューティングに68はないじゃないか。
0673デフォルトの名無しさん2006/09/24(日) 04:30:18
某Explorerだけど、約4倍差。
腐ってもライブラリなんだね(^^;

int i,j;
char*k ,*l;
clock_t s,t;
char a[100]="agregvei04b12lfknb0100122l5fgn8648bhliftbcdef",b[100];

s=clock();
/*
for(i=0;i<N;i++)
{
for(j=0;a[j]!='\0';j++) b[j]=a[j];
b[j]=a[j];
}
*/
for(i=0;i<N;i++) {for(k=a ,l=b; *k!='\0';l++,k++) *l = *k; *l = *k;}
s=clock()-s;

t=clock();
for(i=0;i<N;i++)strcpy(b,a);
t=clock()-t;

printf("関数を使った方が時間が%f倍かかる\n",(double)t/s);
printf("書き下ろした方が時間が%f倍かかる\n",(double)s/t);

getchar();
0674デフォルトの名無しさん2006/09/24(日) 04:36:05
何故*l=*kが二回ある。
そもそもおまいがやってるのはstrcpy()じゃなくてmemcpy()。
速度が違って当然。
strcpyのロジックは
while(*k++ = *l++){}で十分だ。
余計なことしすぎ。
テンプレート化してみろ。
組み込みランタイムとの比較もしてみろ。
その程度じゃ何も検証できてないのと同じだぞ。
出直して来い。
0675(^-^) ◆MONSOON/qo 2006/09/24(日) 05:08:16
これだとどうなる?どれも同じくらいなんだけど

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

#define N 800000
#define M 100000

main(){
int i,j;
clock_t s,t,u;
char a[M],b[M];
for(i=0;i<M;i++)a[i]=(int)rand()*127;

s=clock();for(i=0;i<N;i++)for(j=0;a[j]!='\0';j++) b[j]=a[j];
s=clock()-s;

t=clock();for(i=0;i<N;i++)for(j=0;*(a+j)!='\0';j++)*(b+j)=*(a+j);
t=clock()-t;

u=clock();for(i=0;i<N;i++)strcpy(b,a);
u=clock()-u;

printf("%d %d %d\n",s,t,u);
}
0676(^-^) ◆MONSOON/qo 2006/09/24(日) 05:31:39
修正して>>674サンのも入れてみたよ
特段strcpyが速くはないけど

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define N 8000000
#define M 100
main(){
int i,j;
clock_t s,t,u,v;
char a[M],b[M],*k,*l;
for(i=0;i<M;i++)a[i]=(int)rand()*127;a[M-1]='\0';

s=clock();for(i=0;i<N;i++)for(j=0;a[j]!='\0';j++) b[j]=a[j];
s=clock()-s;

t=clock();for(i=0;i<N;i++)for(j=0;*(a+j)!='\0';j++)*(b+j)=*(a+j);
t=clock()-t;

u=clock();for(i=0;i<N;i++)strcpy(b,a);u=clock()-u;

v=clock();for(i=0;i<N;i++){k=a;l=b;while(*l++=*k++);}v=clock()-v;

printf("%d %d %d %d\n",s,t,u,v);}
0677デフォルトの名無しさん2006/09/24(日) 06:36:29
>>674
memcpy...サイズ指定などしてませんが。

>何故*l=*kが二回ある。
\0までコピーする為です。

>while(*k++ = *l++){}で十分だ。
ああなるほど、\0まで代入してループを終わるのですか。
これを見ると、本当に色々と無駄がありましたね(^^;
精進します。
0678デフォルトの名無しさん2006/09/24(日) 06:38:23
またK&Rも読まないでCを語る奴が…
0679デフォルトの名無しさん2006/09/24(日) 07:08:31
>>674
ドシロウトが。
そこはセミコロンだ。
0680デフォルトの名無しさん2006/09/24(日) 07:21:21
セマンティクスは完全に同じだが
0681デフォルトの名無しさん2006/09/24(日) 08:59:59
>>675
ウザイ。自分で試せ。
スレ違い。 >>667 の誘導に従え。
0682デフォルトの名無しさん2006/09/24(日) 12:13:59
自身の書くコードの方が、標準ライブラリやネットに転がってる有名どころのコードよりも

・速い → プログラマとしての素質あり
・遅い → 凡人
0683デフォルトの名無しさん2006/09/24(日) 12:17:32
・速くてバグなし → 素質あり
・速くてバグあり → 凡人
・遅い → 論外
0684デフォルトの名無しさん2006/09/24(日) 12:34:13
釣りなら他所行ってやってくれ…
ここは初心者スレでも日記スレでも電波スレでもねーよ。
0685デフォルトの名無しさん2006/09/24(日) 13:15:34
そんなことよりおまえら、
なぜ C99 完全準拠のコンパイラが世の中には少ないのですか?
0686デフォルトの名無しさん2006/09/24(日) 13:40:11
>>685
必要性を感じない人が多いから。
0687デフォルトの名無しさん2006/09/24(日) 13:52:41
質問です。

void f( int size, void *p );

のような関数があったとして、void *p にポインタのポインタを渡すと言うのはどういう意味なんでしょうか?
関数 f で渡した値は、次の関数

void t( int args, void *argp )

の argp に収納されます。

使用例:

int i = 314;

f( sizeof(int), &i );

void t( int args, void *argp )
{
 int *p = (int*)argp;
}
0688デフォルトの名無しさん2006/09/24(日) 13:57:11
質問の意味がわからない
0689デフォルトの名無しさん2006/09/24(日) 14:08:06
使用例で f のプロトタイプ宣言をしているけど、
最初にあげてる f と引数の宣言が違うんだが・・・
0690デフォルトの名無しさん2006/09/24(日) 14:27:36
>>687
そういった質問はエスパースレへどうぞ
06916872006/09/24(日) 14:30:22
えーと…もっと具体的に説明すると。
先ほどのプログラムは、スレッド関連で利用するものでして。例えば…

static int Thread( int args, char *argp );
int main()
{
 int i = 314;
 // スレッド作成
 // 実際の CreateThread よりもかなり引数少ないですが…
 // 引数 : スレッドとして利用する関数 , 関数に渡すパラメータのサイズ , 関数に渡すパラメータ
 _CreateThread( Thread, sizeof(int), &i );
 // main スレッドを2秒間とめる( WINAPIの Sleep みたいな )
 _DelayThread( 2000 );
 i = 0;
 // スレッド終了まで待つ
 _WaitThreadEnd( /*中略*/ );
 // スレッド削除
 _DeleteThread( /* 中略 */ );
 return 0;
}
static int Thread( int args, void* argp )
{
 // main 関数の i をごにょごにょできる
 int *p = (int*)argp;
 while( *p != 0 ) { }
 return 0;
}
06926872006/09/24(日) 14:31:55
このようなプログラムを書いたとして。
この場合、CreateThread に i のポインタを渡しているいるんですが。
このままだと main の方で i に0が代入されても、渡した引数が作成したスレッドのスタックに入ってしまって
スレッドの方で反映されないんです。

で、そのためにCreateThread の部分のパラメータにポインタのポインタを渡す必要があるのですが
その渡し方が分からないのです。。。分かりにくい説明ですみません。
0693(^-^) ◆MONSOON/qo 2006/09/24(日) 14:47:25
>>687
面倒なことをせずにグローバル変数 iをつかおうぜ
0694デフォルトの名無しさん2006/09/24(日) 14:52:02
> このままだと main の方で i に0が代入されても、渡した引数が作成したスレッドのスタックに入ってしまって 
> スレッドの方で反映されないんです。 

スレッド使ったこと無いから識者さん、kwskおせーて
0695デフォルトの名無しさん2006/09/24(日) 14:55:22
>>693
そ ん な 危 険 な こ と を 勧 め る な !
0696(^-^) ◆MONSOON/qo 2006/09/24(日) 15:01:50
>>695
複数のスレッドに同一変数を参照渡ししようとする時点で危険だよ
スレッドが一つだけならスレッドにする必要ないし
0697デフォルトの名無しさん2006/09/24(日) 15:05:20
>>696
それは「スレッドの引数に、共有すべき変数の参照値を与える」というものが「グローバル変数」というものに置き換わっただけじゃないか?
本質的な部分は何も変わってないと思うが
0698デフォルトの名無しさん2006/09/24(日) 15:06:21
最近はポインタも理解してない奴がスレッド使うのか。
世も末だな。
0699(^-^) ◆MONSOON/qo 2006/09/24(日) 15:07:40
>>697
>>693のやりたいことはグローバル変数で解決でき
それが危険かそうでないかは知らない
0700デフォルトの名無しさん2006/09/24(日) 15:10:35
>>699
そうか・・・
どこかで「危険」という単語をみたのだが、それは幻覚だったんだな
0701デフォルトの名無しさん2006/09/24(日) 15:11:02
wchar_t の表現範囲は少なくとも -127〜+127 または 0〜255
char の表現範囲は少なくとも -128〜+127
と決められています。ここまでは分かるのですが、
-127〜+127 の範囲については安全に変換して良いという
ことまで保証されているのでしょうか?

string -> wstring の変換を書こうと思っていて、
安全に変換できない文字が含まれていたら
例外を投げるようにしようと思っています。
本当は boost::lexical_cast が用意されていたら便利なんですが。
0702デフォルトの名無しさん2006/09/24(日) 15:14:02
>>692
なんでポインタのポインタが出てくるの?
Thread の中の int *p を int volatile *p にしてみたら、どうなる?
0703デフォルトの名無しさん2006/09/24(日) 15:15:14
>>696 >>699
ダブルスタンダード死ね。
0704デフォルトの名無しさん2006/09/24(日) 15:16:45
>>701
このスレでは C++ は扱いません。
こっち逝け。

C++相談室 part52
http://pc8.2ch.net/test/read.cgi/tech/1156525695/
0705デフォルトの名無しさん2006/09/24(日) 15:17:39
>>704 後半はそうかもしれませんが、前半に関しては C の話です。
07066872006/09/24(日) 15:18:28
すみません、自己解決しました。
言葉の通りに、ポインタのポインタで渡すだけで普通に問題ありませんでした。

int i;
int *p = &i;
int **pp = &p;

// 691より
_CreateThread( Thread, sizeof(int**), pp );

>> 699
あと、結局このプログラムは C++ に直して利用する形にするので、
Cのグローバル変数として考えても問題ないと思います。

CHoge *p = new CHoge;
// ↑ CHoge *p = malloc(sizeof(CHoge));

結局みたいに利用する形になるので。。。

>> 696
生成するオブジェクトに個々にスレッドを持たせて、そのオブジェクトの持つ変数を利用する。
という事は、処理を複数に分けると言う意味でも重要なんです。

ありがとうございました。
0707デフォルトの名無しさん2006/09/24(日) 15:26:14
Wide character values 0 through 0177 are always identical
in meaning to the ASCII character codes. The wide character
value zero is often used to terminate a string of wide characters,
just as a single byte with value zero often terminates a string
of ordinary characters.
http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_6.html
0708デフォルトの名無しさん2006/09/24(日) 15:34:48
>>701
char の方の -128 は -127 の間違いか?
-127〜+127 なら整数としての値は保持したまま wchar_t と char を
相互変換できるだろう。同じ文字に対応するとは限らんのだろうけど。

マルチバイト文字列からワイドキャラクタ文字列への変換には、
エンコーディング(ロケール)など、別の要素が絡んでくる。
0709デフォルトの名無しさん2006/09/24(日) 15:39:47
>>708
>-127〜+127 なら整数としての値は保持したまま wchar_t と char を

-127〜+127 <- 255個
0710デフォルトの名無しさん2006/09/24(日) 15:41:15
>>709
それがどうしたの?
0711デフォルトの名無しさん2006/09/24(日) 15:41:22
>>708
ansiのcharは-127〜でおkのはず
しかしwcharが-128〜かどうかはわからん
0712デフォルトの名無しさん2006/09/24(日) 15:41:58
>>707
は GNU C Library の仕様なので、規格ではどうなっているのか知らないけど、
0 〜 128 までは保証されているみたいだね。ワイド文字列を扱うライブラリで
EOF をどう表現するのかは知らないけど、とりあえず EOF っていうマクロを
使っておけばいいんだろうな。

>>708
char って -128 まで表現できなかったっけ。
8ビット 2 の補数表現で 0xffffffff って -128 だし
0713デフォルトの名無しさん2006/09/24(日) 15:42:45
char と wchar_t で符号の有り無しが違うとまずいだろうな。
わざわざそんな実装にしないと思うけど。
0714デフォルトの名無しさん2006/09/24(日) 15:44:07
>>712
規格は符号ビットによる実装も考慮しているから、制限は -127 になってる。
0715デフォルトの名無しさん2006/09/24(日) 15:45:47
>>714
そんなん考慮したら規格として破綻しそうだ。
0716デフォルトの名無しさん2006/09/24(日) 15:47:53
つーことは、整数としては -127〜+127 までは
自明なマッピングができるけど、文字として保証されているのは
0〜+127 だけって事?でもそれは glibc 限定か?
0717デフォルトの名無しさん2006/09/24(日) 18:53:10
ボーランドで
c言語のプログラム組んだときに
ステートメンとにセミコロンがないとでましたどうすれば
いいんでしょうか?
0718デフォルトの名無しさん2006/09/24(日) 18:54:35
printf("hoge"); ←「;」がないんだろ。書き加えろ
0719デフォルトの名無しさん2006/09/24(日) 19:07:16
>>718
if(computer == player){
この行なんだが
if(computer == player);{
にしても同じエラーがでた
0720デフォルトの名無しさん2006/09/24(日) 19:09:12
>>719
根本的に間違ってる
0721デフォルトの名無しさん2006/09/24(日) 19:09:48
>>720
どういう意味?
0722デフォルトの名無しさん2006/09/24(日) 19:10:49
;if(computer == player){

これで
0723デフォルトの名無しさん2006/09/24(日) 19:14:20
>>722

C言語の入門書どうりに書いてたのにできなかったからあせったが
できた助かったありがと
0724デフォルトの名無しさん2006/09/24(日) 19:17:40
質問があります。
500*500の二次元配列を作ったら何にも表示されなくなりました。
(コンパイルは通ります。実行したら音沙汰なしで終了。)
コンパイラはbolandの無償版です。
原因不明で・・・よろしくお願いします。

↓

#include<stdio.h>

#define N 500

int main(void){
double w[N][N];
printf("OK!");
}
0725デフォルトの名無しさん2006/09/24(日) 19:20:12
>>724
コピペでcygwinのgccでコンパイルしたけど別に問題なし
0726デフォルトの名無しさん2006/09/24(日) 19:20:13
>>724
何もおかしくないし俺の環境だとOK!って出るよ
0727(^-^) ◆MONSOON/qo 2006/09/24(日) 19:23:35
>>724
bolandの無償版(5.51)だけど駄目だった
0728(^-^) ◆MONSOON/qo 2006/09/24(日) 19:25:11
>>724
bolandの無償版(5.51)だけど
static double w[N][N];ならいけた
0729(^-^) ◆MONSOON/qo 2006/09/24(日) 19:28:52
>>724
double **w = new double *[N];for (int i=0;i<N;i++)w[i]=new double [N];
でもいけた
0730(^-^) ◆MONSOON/qo 2006/09/24(日) 19:31:53
>>724
#define N 5000のとき
double w[N][N];とstatic double w[N][N];は駄目だけど

double **w = new double *[N];for (int i=0;i<N;i++)w[i]=new double [N];
はいけた
0731デフォルトの名無しさん2006/09/24(日) 19:32:54
>>729-730

>>704
0732デフォルトの名無しさん2006/09/24(日) 19:35:38
>>731
本当は、さびしいんだよ。
そして、スキルアップしたい。
若いってことじゃないか?
0733(^-^) ◆MONSOON/qo 2006/09/24(日) 20:18:33
配列の確保、初期化、解放にかかる時間を比べてみました
newも mallocも callocも変わらないようです
書式が簡明なnewを使うべきかな

#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000

main(){
int i,j,k;
clock_t s,t,u;

s=clock();for(k=0;k<200;k++){
double **w = new double *[N];for (i=0;i<N;i++)w[i]=new double [N];
for(i=0;i<N;i++)for(j=0;j<N;j++)w[i][j]=0.0;
for(i=0;i<N;i++)delete[] w[i];delete[] w;}
s=clock()-s;

t=clock();for(k=0;k<200;k++){
double **v = (double**)malloc(N * sizeof(double*));for(i=0;i<N;i++)v[i]=(double*)malloc(N * sizeof(double));
for(i=0;i<N;i++)for(j=0;j<N;j++)v[i][j]=0.0;
for(i=0;i<N;i++)free(v[i]);free(v);}
t=clock()-t;

u=clock();for(k=0;k<200;k++){
double **x = (double**)calloc(N,sizeof(double*));for(i=0;i<N;i++)x[i]=(double*)calloc(N,sizeof(double));
for(i=0;i<N;i++)free(x[i]);free(x);}
u=clock()-u;

printf("2次元配列の確保、初期化、解放にかかる時間\nnew=%d malloc=%d calloc=%d\n",s,t,u);}
0734デフォルトの名無しさん2006/09/24(日) 20:33:20
戻り値をチェックしないなんて信じられないよな
0735デフォルトの名無しさん2006/09/24(日) 20:36:41
>>733
ウザイ。チラシの裏にでも書いとけ。
0736デフォルトの名無しさん2006/09/24(日) 20:38:15
>>733
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
dqn730.c:
エラー E2451 dqn730.c 5: 未定義のシンボル new(関数 main )
エラー E2141 dqn730.c 5: 宣言の構文エラー(関数 main )
エラー E2188 dqn730.c 5: 式の構文エラー(関数 main )
エラー E2451 dqn730.c 5: 未定義のシンボル i(関数 main )
エラー E2379 dqn730.c 5: ステートメントにセミコロン(;)がない(関数 main )
警告 W8070 dqn730.c 6: 関数は値を返すべき(関数 main )
警告 W8004 dqn730.c 6: 'w' に代入した値は使われていない(関数 main )
*** 5 errors in Compile ***
↑
おまえさんの現地語ではこういうのを「簡明」と言うのか
0737デフォルトの名無しさん2006/09/24(日) 20:39:17
つ スルーの勉強をするスレはここですか?
0738デフォルトの名無しさん2006/09/24(日) 20:40:55
>>737
それすら出来ない君は。。。
0739(^-^) ◆MONSOON/qo 2006/09/24(日) 20:42:50
>>736
Borland C++ 5.5.1 for Win32 はドットcとドットcppでコンパイル方法が変わりますから
ご注意を
0740デフォルトの名無しさん2006/09/24(日) 20:48:20
>>739
スレタイ嫁
0741デフォルトの名無しさん2006/09/24(日) 20:50:24
>(^-^) ◆MONSOON/qo
お前死んだ方がいいよ
0742(^-^) ◆MONSOON/qo 2006/09/24(日) 20:50:38
>>740
巨大配列の確保という点ではcでもc++でも差がないことがわかったんだ
cのみでもなかなかやれるということだ
0743デフォルトの名無しさん2006/09/24(日) 21:05:07
とにかくC++の話がしたければよそへ行きなさい。
0744デフォルトの名無しさん2006/09/24(日) 22:38:15
えーと、マジもんの既知外さんですか?
0745デフォルトの名無しさん2006/09/24(日) 23:33:43
>>742
差はあるよ
おまえさんがそれを確認・検証できないだけ

処理系依存な話だがいっぱしの C 使いなら
処理系依存だから知らぬ存ぜぬでは済まされないことがあるのは知っておろう
0746デフォルトの名無しさん2006/09/24(日) 23:35:48
(^-^)かわいいよ(^-^)
いぢめられても投稿(登校)拒否しちゃダメよ♪
0747デフォルトの名無しさん2006/09/24(日) 23:50:52
物狂いか…
0748デフォルトの名無しさん2006/09/24(日) 23:56:23
>>742
おまえ、ここは初めてか?力抜けよ。
0749デフォルトの名無しさん2006/09/25(月) 00:03:30
>>745
望みのプログラムが書ければどうでもいいよ、そんなもん。
0750デフォルトの名無しさん2006/09/25(月) 00:04:50
>>749
望みって何だ? (答えでお里が知れる)
0751デフォルトの名無しさん2006/09/25(月) 00:08:57
アレじゃないか、たまに沸く
「俺の書いたソースは誰にも見せないし、移植なんてしないから動けばいい」
って奴じゃねーの?
0752デフォルトの名無しさん2006/09/25(月) 00:18:33
コテになる奴って変な奴多いな。
0753デフォルトの名無しさん2006/09/25(月) 00:20:12
つーか、コテで人望集められるほどの香具師がここにはいないってことだろ
0754デフォルトの名無しさん2006/09/25(月) 00:33:58
まあプログラミング言語なんて道具に過ぎないんだから
道具を使えることを自慢する奴ほど馬鹿なやつはないんだけどね
0755デフォルトの名無しさん2006/09/25(月) 00:37:45
使えん奴は論外だが
0756デフォルトの名無しさん2006/09/25(月) 00:44:49
使えない奴なんていないがな
使えないとしたら教え方が悪いか難しく考えすぎて覚え方が悪いか
必要性を感じず興味もないけど勉強してるとか、

それもないというなら知的障害か養護学級の生徒だったとか。
0757デフォルトの名無しさん2006/09/25(月) 00:49:22
↓ここで「普通の人は使えないと思いますが^^;」みたいなレス
0758デフォルトの名無しさん2006/09/25(月) 00:51:48
ここは使えん奴のすくつだろ
0759デフォルトの名無しさん2006/09/25(月) 00:56:32
IQ80の奴とか。
馬鹿はそこらにいるし。
0760デフォルトの名無しさん2006/09/25(月) 00:59:51
だな。
0761デフォルトの名無しさん2006/09/25(月) 01:01:40
>>757
普通の人は使えるようになると思いますが^^;
0762デフォルトの名無しさん2006/09/25(月) 01:01:54
IQ140くらいの奴がそこらにごろごろしているのを見ると、
IQ60くらいの奴もごろごろいるということなのだろうか。
0763デフォルトの名無しさん2006/09/25(月) 01:11:51
IQ120の奴は目つき悪そうで、
IQ140の奴は目つき優しそうだけどさ。
ところで、IQ80ってどんな奴なの?
0764デフォルトの名無しさん2006/09/25(月) 01:17:15
100超えてても目つき悪そうだなんて、そりゃ酷い話だ罠
0765デフォルトの名無しさん2006/09/25(月) 01:17:31
IQ100 の奴と話すと対話がぎくしゃくしてるのがなんとなくわかる程度
0766デフォルトの名無しさん2006/09/25(月) 01:22:42
で、IQ60とIQ80はどんな奴だと思う?
0767デフォルトの名無しさん2006/09/25(月) 01:25:49
IQ80 の奴と話すと対話がぎくしゃくしてるのがなんとなくわかる程度
0768デフォルトの名無しさん2006/09/25(月) 01:28:53
稀に、プログラミングがからしきダメなヤツがいるけど
IQとはあまり関係ないような気がする
0769デフォルトの名無しさん2006/09/25(月) 01:31:13
字の綺麗さと文章の上手さに相関が無いようなもんさ。
0770デフォルトの名無しさん2006/09/25(月) 01:34:23
>>769
字の綺麗さと文章の上手さ
プログラミングはどっちなの?
0771デフォルトの名無しさん2006/09/25(月) 01:55:25
コーディングセンスがあってもコーディングスタイルがヘンテコリンな奴はいるよな
0772デフォルトの名無しさん2006/09/25(月) 01:58:59
HP のあいつや sgi のそいつか?
0773デフォルトの名無しさん2006/09/25(月) 02:03:07
普通に考えたら文章の上手さだろうが、
ちょっとした手紙程度の定型文章なら
地の文の下手さは字の綺麗さに隠蔽されるかもしれん。

長くPGやって経験積んだ人だと、ある程度までのコードなら
脳みそ使わなくても判子をつくみたいに書けてしまうだろうし。

頭の良し悪しで優劣が決まらんわけだ罠。
0774デフォルトの名無しさん2006/09/25(月) 02:04:31
>コーディングセンスがあってもコーディングスタイルがヘンテコリン

いるいるいるいるいる
一人だとスーパープログラマ様だが、チームの仕事にはまったく使い物にならない人とか


しかし大概スレ違いだな
0775デフォルトの名無しさん2006/09/25(月) 09:39:53
おまいらスレ違いの議論も大概にしておけよ
0776デフォルトの名無しさん2006/09/26(火) 01:04:01
>>771
常に左手を机の下に入れてモソモソしてる奴とかな。
0777デフォルトの名無しさん2006/09/26(火) 02:00:04
>>776
あるあ・・・ねーよwww
0778デフォルトの名無しさん2006/09/26(火) 03:51:57
私の彼は左利きって
0779デフォルトの名無しさん2006/09/26(火) 04:02:01
ここは C スレ
A もまだな不細工君の入る膜・・・いや出る幕はない
0780デフォルトの名無しさん2006/09/27(水) 16:20:24
いまK&R読んでるんだが、
4.10 再帰のところすごかった。
3.6 itoa関数の実装例も良かったが、こっちの方がなんか悟った感じだった。

カーニハン・リッチーおじちゃんが神と思えた。
0781デフォルトの名無しさん2006/09/27(水) 23:26:49
ポインタについて質問させてください。

int hoge;
int *foo;
があったとき、hogeからfooにアドレスを渡すには普通
foo = &hoge;
としたと思います。

ですが別のサイトで見た時に
*foo = &hoge;
と書いていたので試しにビルドしてみたのですが正常に動きました。
*fooとした場合fooが示すアドレスの値を書き換えたと思うので、おかしいと思いました。

これは何故でしょうか?
0782デフォルトの名無しさん2006/09/27(水) 23:31:05
>>781
ポインタの初期化の段階で

type n;
type *p = &n;

という記述が可能。
また、

type n;
type *p[3];

*p = &n;

という文は、許されるのは見れば分かるだろう。
0783デフォルトの名無しさん2006/09/27(水) 23:55:33
>>780
カーニハン・リッチーでなくてカーニハン&リッチーな
二人だ
0784デフォルトの名無しさん2006/09/27(水) 23:58:21
無理矢理カッチーと呼んだらだめ?
0785デフォルトの名無しさん2006/09/28(木) 00:06:14
うんこお子様はおねむの時間ですよ。
0786デフォルトの名無しさん2006/09/28(木) 00:12:10
そうですね。
0787デフォルトの名無しさん2006/09/28(木) 00:15:37
>>785
どうして眠いとわかったんだ!?
0788デフォルトの名無しさん2006/09/28(木) 00:23:22
そうですね
0789デフォルトの名無しさん2006/09/28(木) 00:34:27
でんでん!
0790デフォルトの名無しさん2006/09/28(木) 00:44:36
指定キャラクターを指定回数文吐き出す関数みたいのはありますか?
0791デフォルトの名無しさん2006/09/28(木) 00:49:16
↓エスパー
0792デフォルトの名無しさん2006/09/28(木) 00:49:44
>>790
> 吐き出す
先ずココをどういうものか定義してね
0793デフォルトの名無しさん2006/09/28(木) 00:53:56
printfの書式指定に何かなかったか?*か何か。
0794デフォルトの名無しさん2006/09/28(木) 00:59:21
void charaRet(int kaisuu,char moji){

for(int i=0;i < kaisuu; kaisuu++){

printf("%c",moji);

}

}
0795デフォルトの名無しさん2006/09/28(木) 01:02:27
それだとオーバーワークじゃないか?

"charaRet"みたいな関数名で書かれると
char charaRet() を思い浮かべる

"textRet"とか"stringRet"ならまだいい
char* stringRet(char c, int count);
0796デフォルトの名無しさん2006/09/28(木) 02:47:16
極力汎用に作るならこんなもんかねぇ。
int putRepC(int rep, char chr, FILE * fp)
{
if (ret <= 0) return 0;
for (int ic = 0; ic < rep; ++ic) {
fputc(chr, fp);
}
return rep;
}
0797デフォルトの名無しさん2006/09/28(木) 03:34:29
> if (ret <= 0) return 0;

無駄なステップだと思う
0798デフォルトの名無しさん2006/09/28(木) 05:00:32
)*(

おまいらがコレをそんなに好きだっとはな
0799デフォルトの名無しさん2006/09/28(木) 08:39:30
無駄って言うか、repの間違いだな。
0800デフォルトの名無しさん2006/09/28(木) 17:17:08
int putRepC(int rep, char chr, FILE * fp)
{
int ic;
for (ic = 0; ic < rep; ++ic) {
fputc(chr, fp);
}
return ic;
}

これで分岐は消せる。
0801デフォルトの名無しさん2006/09/29(金) 01:10:29
C99 の使えない環境での論理値はどうしてますか?
typedef とか #define で bool を自作?
自作するけど Bool とか BOOL とか?
int, 0, 1 で全部代用?

stdbool.h を自作したら互換性の問題も、最小限になるかなー
とか思ってるんだけど、どうなんだろう?
0802デフォルトの名無しさん2006/09/29(金) 01:14:36
自作も結構なことだが <ctype.h> くらい嫁
0803デフォルトの名無しさん2006/09/29(金) 01:16:17
つ http://www.kouno.jp/home/c_faq/c9.html
0804デフォルトの名無しさん2006/09/29(金) 03:48:40
当初「C/C++の宿題を片付けます 74代目」で質問をさせて頂いたのですが、
私のは宿題ではなく、個人的に勉強をしており、ご指導を頂こうと思って
おりましたので、私の完全なスレ間違いでしたので、改めて、こちらで質問
させて頂きます。「C/C++の宿題を片付けます 74代目」ではその旨(261番目
の発言でスレ板移動の旨)書かせて頂いております。


私が悩んでいるプログラムは、Cで作成したexeファイルをRLを引数に
実行したら、そのURLがインターネットエクスプローラーで開く、と
いうものを作成しようとしております。

イメージは例えば、test.exeという名前のCのexeファイルであれば、
ヤフーのページを見たいのであれば、test.exe http://www.yahoo.co.jp
を実行したら、インターネットエクスプローラーで
http://www.yahoo.co.jpのページが開くということを目指しております。

(改行が多いというエラーになりましたので、下に「続き」を記入いたします)
0805デフォルトの名無しさん2006/09/29(金) 03:49:26
804の続きです。

また、「C/C++の宿題を片付けます 74代目」で上記プログラムについて2つのコメントを頂きました。

 204 :デフォルトの名無しさん :2006/09/28(木) 01:55:51
  >203
 そのURLで、ダミーの .urlファイルを作成し、ShellExecuteすれば開ける
 215 :デフォルトの名無しさん :2006/09/28(木) 08:52:24
>>203-204
WindowsならShellExecuteに直接URLを渡せば動く。
ShellExecute(0, TEXT("open"), TEXT("http://www.google.com/";), 0, 0, SW_SHOW);
IE以外を標準のブラウザにしている場合はそれで開かれる。
強制的にIEで開かせる(単純な)方法もあるが。

それらを参考にして、私が作成したプログラムは、
#include <stdio.h>
int main( char argc, char* argv[] ){
char URL[256];
scanf("%s",URL);
ShellExecute(NULL, _T("open"), _T(URL), NULL, NULL, SW_SHOWNORMAL);
return 0;
}
という幼稚なものですが、案の上エラーばっかりになってしまっています。
どなたか、色々教えて頂ければ幸いです。
どうぞ宜しくお願いいたします。
0806デフォルトの名無しさん2006/09/29(金) 03:55:05
>>804
※激しく環境依存なこと聞いてるのを自覚してね
環境不明だけど、Win9xかいまどきの若者風にWinXPかとおもうので

COMSPEC環境変数に対応するコマンドラインシェルのプログラムファイルをひっぱってきて
%COMSPEC% /c start http://www.google.co.jp
とでもsystem()しておけばいいと思うよ
0807デフォルトの名無しさん2006/09/29(金) 03:56:55
_T()は文字列リテラルの形を定めるものなので、
_T(URL)は間違い。

char URL[256]; -> TCHAR URL[256];

ShellExecute( ... ->
ShellExecute(NULL, _T("open"), URL, NULL, NULL, SW_SHOWNORMAL);

にすることで取り合えずは動くはず。
が、scanfを使用してる時点でTCHARを使用してる意義はほとんどない。
_tscanf を使用するか、TCHAR 及び _T、TEXTマクロの使用をやめてしまうべき。

そして本来これらは環境依存の問題なので、まとめてスレ違い。
VCスレに逝くべし。
0808デフォルトの名無しさん2006/09/29(金) 03:57:40
>>806
ちなみに、スタートメニューで
ファイル名を指定して実行のところで次のようにするのと同じことね

%COMSPEC% /c start http://yahoo.co.jp

一瞬黒窓でるけど、簡単だしおkだとおもう
08098012006/09/29(金) 04:01:05
>>802
ctype.h は int で代用ですね。それが最善ってこと?

>>803
そこにある定義を使うとして、どこに置くかってのも悩みどころ。
ソースごとに置いたらヘッダで使えないし、プロジェクト(ライブラリ)ごとに
違うヘッダに作ってたら別プロジェクト(ライブラリ)での再利用や
インターフェースで問題になるし。

気にしすぎ?
0810デフォルトの名無しさん2006/09/29(金) 04:13:05
>>809
>ctype.h は int で代用ですね。それが最善ってこと?
処理系依存。バイト単位が最善な場合だって有り得るし、
>>803に書いてある以上のことは無い。

ただ、処理系が最初から用意してるなら、それを使うのが
移植性の面でも恐らく最善の手になる。
何事も自作が一番よくない。

そして、移植や再利用の具体的な予定も無いのに移植性のことを考えて
手が止まるのは本末転倒。
そんなんで問題が出ても、最悪ifdefで片っ端から切り分ければいいだけのこと。
よほど経験豊富な奴でないかぎり、問題は問題が起きてからでないと把握できない。
忘れろ。
0811デフォルトの名無しさん2006/09/29(金) 04:31:56
>806〜808

本当に色々とありがとうございます。
環境依存なんですね。。。知りませんでした。申し訳ございません。自覚いたします。
私は、Windows2000 5.00.2195 Service Pack4
という環境ですが、こういうことでしょうか。。。
初心者なもので、何が環境というものかよく分かりません。。。
教えて頂ければ、是非ともお伝えしたいと思います。
Cで書こうと思っていたのですが、VC(Visual C)でないとダメということでしょうか。。
VCの環境は入っていないため、できればCで実現したいと考えています。

806様のコメントを受けて、以下のようなプログラムを
書いてみたのですが、やはりどうもうまくいきません。
追加でコメントを頂ければ大変助かります。
宜しくお願いいたします。

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

int system(const char *string);

int main(char argc, char* argv[]){
char URL[256];
scanf("%s",URL);
system(URL);
return 0;
}

int system(char URL){
%COMSPEC% /c start URL
return 0;
}
0812デフォルトの名無しさん2006/09/29(金) 04:41:54
>>811
はっきり言うと完全にスレ違いなんだが、どこに誘導したもんだか対処に困る。
順番に行こう。

>私は、Windows2000 5.00.2195 Service Pack4
>という環境ですが、こういうことでしょうか。。。

No.使っているコンパイラ系が何であるかということ。
恐らくBCCかgccあたりではないかと思われるが、何を使っている?
また、VCがCの変種の様に思えてるかもしれないが、それは違う。
あれもC言語処理系の実装例の一つでしかない。
一部の独自拡張やMSのライブラリを使用しない限りVC専用のコードとはならず、
他のコンパイラでも大抵コンパイル可能だし、そうでなければ困ってしまう。
しかしながら ShellExecute() を使ってる時点で Win32 依存なのは理解しておく必要がある。


int system(char URL){
%COMSPEC% /c start URL
return 0;
}

これはもう壊滅的に違う。
悪いけど、Cの文法からやり直すべき。
0813デフォルトの名無しさん2006/09/29(金) 05:28:15
> はっきり言うと完全にスレ違いなんだが、どこに誘導したもんだか対処に困る。
少なくともこのスレではsystem()を使いなさいとしか答えようがないし。
↓このへんかなあ
http://pc8.2ch.net/test/read.cgi/tech/1156145593/l50
> しかしながら ShellExecute() を使ってる時点で Win32 依存なのは理解しておく必要がある。
それはまったくその通りだけど
%COMSPEC% /c startが意図したとおりに使える環境も大差ないような。
0814デフォルトの名無しさん2006/09/29(金) 07:37:38
>>804
誰も指摘しないようなので一言

test.exe http://www.yahoo.co.jp のように
URL を program parameters で渡すつもりなら、
scanf ではなく argv[1] を使うべきだろう

Windows API についてはスレ違いなので
ここでは説明しないが、キーワードのみ示す
GetCommandLine
0815デフォルトの名無しさん2006/09/29(金) 08:30:07
いや、その前に・・・
エラー出るのならエラーメッセージ貼ってくれよ(;´Д`)
0816デフォルトの名無しさん2006/09/29(金) 08:32:12
ShellExecuteAでええやん。
0817デフォルトの名無しさん2006/09/29(金) 08:59:02
お前らまとめて出て行け
0818デフォルトの名無しさん2006/09/29(金) 18:51:18
GCCにexport機能が追加されるメドは立っているんでしょうか?
GNUの開発力なら比較的早くできそうな気がするんですが…
0819デフォルトの名無しさん2006/09/29(金) 20:07:39
特定のコンパイラの未来を語り始める始末。
0820デフォルトの名無しさん2006/09/29(金) 20:29:25
GCCがCの未来を握ってるんだと思うが?
0821デフォルトの名無しさん2006/09/29(金) 20:44:50
いや、それはどうだろう。
しかもそれC++の話だしな。
gccのC++対応はむしろ迷走してる歴史の方が長かったろう。
0822デフォルトの名無しさん2006/09/29(金) 21:26:28
C++は今でも迷走途中じゃないのか。
CはUNIXの歴史そのもので、Cの実体(実装)はGCCそのものだろう。
他のコンパイラを否定しているわけじゃないけど、
GCCで受け入れられないCの規格があったらどう思うのか?
0823デフォルトの名無しさん2006/09/29(金) 21:39:32
老兵は死なず、ただ消え行くのみよ!
0824デフォルトの名無しさん2006/09/29(金) 21:44:19
>>822
もともと GNU CC はクリーンインスコ直後の UNIX には含まれていないサードパーティ品だべさ
純正品だと思いこんでるのは犬厨だけだっぴょ
0825デフォルトの名無しさん2006/09/29(金) 21:46:03
cfront は開発止まっちゃってっかんなー

# スレ違いすまそ
0826(^-^) ◆MONSOON/qo 2006/09/29(金) 21:50:09
>>824
じゃUNIXは何Cで作ったんだよ?
0827デフォルトの名無しさん2006/09/29(金) 22:02:34
GNUのC以外のC。
いやマジで。
0828デフォルトの名無しさん2006/09/29(金) 22:16:52
#include<stdio.h>

int main(){
char *str[]={"test"};
printf("%s",str);
return 0;
}
ではできないのに
#include<stdio.h>

int main(){
char *str[]={"test"};
printf("%s",str[0]);
return 0;
}
でできるのはなんでですか?
ポインタ配列での文字列表示においてstrはstr[0]と同じではないんでしょうか?
0829デフォルトの名無しさん2006/09/29(金) 22:22:27
*str ならできるけどな。
0830(^-^) ◆MONSOON/qo 2006/09/29(金) 22:33:18
>>828サン
char *str="test";
printf("%s",str);

と

char *(str[2])={"test","hello"};
printf("%s %s",str[0],str[1]);

を動かしてみてください
0831デフォルトの名無しさん2006/09/29(金) 22:40:38
>>830さん
ありがとうございます。
両方できました。
でも上のほうがいまいち理解できないので勉強し直します・・・

08328312006/09/29(金) 22:42:14
すみません、理解できました><
ありがとうございます!!
0833(^-^) ◆MONSOON/qo 2006/09/29(金) 22:42:46
>>831
単数形と複数形の違いしかないですよ
0834デフォルトの名無しさん2006/09/29(金) 22:46:46
>>831
Cの配列演算子"["、"]"はポインタの糖衣構文
(Pointer)[(will int)]
な項を受け取って
*((Pointer)+(will int))
という式に意味的に変換される

>>828の最初のプログラムでは、strはchar**を示している
本来char*を与えるべきところにstr(char**)を与えているのでダメ
次のプログラムでも同様にstrはchar**だが、str[0]は
*((str)+0)⇔char*
なのでおk

Cは型つき言語だから、型に注意しような
0835デフォルトの名無しさん2006/09/29(金) 22:50:28
>>833
単数形と複数形の違いって何ですか?
0836(^-^) ◆MONSOON/qo 2006/09/29(金) 22:50:44
>>834
配列とポインタは変換出来ない別物だよ
*(str[])とは書けるけど(*str)[]は不可でつよ?
0837デフォルトの名無しさん2006/09/29(金) 22:52:16
>>836
どっちも無理じゃんwwww
0838(^-^) ◆MONSOON/qo 2006/09/29(金) 22:54:17
>>835
ポインタ変数とポインタ配列です

変数=単数
配列=複数
0839(^-^) ◆MONSOON/qo 2006/09/29(金) 22:57:19
>>837
828の char *str[]={"test"};は
*(str[])={"test"};や*(str[1])={"test"};と等価でつよ
0840デフォルトの名無しさん2006/09/29(金) 22:59:09
そもそも>>828の
char *str[]={"test"};
[]をつけることがおかしいというこですかね?
"test"で[0]ということだからそうですよね
0841(^-^) ◆MONSOON/qo 2006/09/29(金) 23:07:22
int a=10;をint a[1]={10};と書くことと同じ
後者はいつも後に[0]を付けなくてはならず不便
0842デフォルトの名無しさん2006/09/29(金) 23:09:33
>>838
int a[1];

これは単数だからポインタですね!
0843デフォルトの名無しさん2006/09/29(金) 23:09:52
アセンブラで追ってくと、

printf("%s",str); の方は、
str[0]を積んであるスタックのアドレスをprintfに渡してて

printf("%s",str[0]); の方は、
スタックに積んであるstr[0]の中身を指すアドレスをprintfに渡してるね。
0844(^-^) ◆MONSOON/qo 2006/09/29(金) 23:14:37
>>842
意味がわかんないよ

*str1="test"
*str2="hello"
をまとめて書くと*str[]={"test","hello"}になるってことだよ
0845デフォルトの名無しさん2006/09/29(金) 23:25:37
なんか宣言部式と式式が混ざってないか?
0846デフォルトの名無しさん2006/09/29(金) 23:30:04
>>845だな。
834は式の話をしているのに、836/838では宣言の話にすり替えている。
0847デフォルトの名無しさん2006/09/29(金) 23:33:56
このコテ早く消えてくれないかなぁ。
0848(^-^) ◆MONSOON/qo 2006/09/29(金) 23:39:18
いや>>834は間違えてるよ
char *str[]={"test"};を
char **str={"test"};に変更してコンパイルして語ってくれ
0849デフォルトの名無しさん2006/09/29(金) 23:40:49
ポインタが指すアドレスだけみると

str == &str[0];
*str == *(str + 0) == str[0];

str != *str;
&str[0] != str[0];
なのだから

str != str[0]なのは仕方ない。
0850デフォルトの名無しさん2006/09/29(金) 23:40:56
>>848
だからそれ宣言式
0851デフォルトの名無しさん2006/09/29(金) 23:44:26
激しく同意。
初心者を狙い撃ちにして嘘ばっか教えやがる。
有害すぎ。
0852デフォルトの名無しさん2006/09/29(金) 23:49:19
>>848
宣言式の話をしてるのはおまえだけ
0853デフォルトの名無しさん2006/09/29(金) 23:57:53
ここは、できれば初心者お断りじゃないか?
0854デフォルトの名無しさん2006/09/29(金) 23:59:41
次スレでは 1 の初心者スレへの誘導に「初心者お断り」って明記してくれ。
0855デフォルトの名無しさん2006/09/30(土) 00:00:56
C言語なら俺に聞け!スレには入門編があるのか。
いま知ったよ。
0856デフォルトの名無しさん2006/09/30(土) 00:02:47
相手にすんなよ
0857(^-^) ◆MONSOON/qo 2006/09/30(土) 00:04:45
そうかわかったよ
しかし>>834は間違えてるよ
str[0]はもともとchar型のポインタなのであって
糖衣構文とは関係がない


> Cの配列演算子"["、"]"はポインタの糖衣構文
> (Pointer)[(will int)]な項を受け取って
> *((Pointer)+(will int))という式に意味的に変換される
>
> str[0]は*((str)+0)⇔char*なのでおk
0858デフォルトの名無しさん2006/09/30(土) 00:06:31
>>848
>>834は式の話をしていて(宣言式のことじゃないよ)、その内容は正しい.
正しい内容を間違えてると言うとなると....
で、>>834の言ってることは、C言語の初歩だよ....
0859デフォルトの名無しさん2006/09/30(土) 00:10:17
( ,,・д・)つ http://www.kouno.jp/home/c_faq/c6.html#11
0860デフォルトの名無しさん2006/09/30(土) 00:12:22
>>857
わかってない上に言っていることに論理的に同意できない
> str[0]はもともとchar型のポインタなのであって
> 糖衣構文とは関係がない
つまり「ポインタ」なら「糖衣構文とは関係ない」ってこと?
???
ごめん、何言いたいのかわかんない
0861(^-^) ◆MONSOON/qo 2006/09/30(土) 00:12:46
>>858
だから間違えてるっていってるだろが
str[0]と*(str+0)は等しいが常にstr[0]がchar *型とは限らない

例えばchar ***strと宣言されればstr[0]はchar **型だよ

0862(^-^) ◆MONSOON/qo 2006/09/30(土) 00:13:54
>>860
>>861をみてほしい
0863(^-^) ◆MONSOON/qo 2006/09/30(土) 00:15:31
ちょっと間違えてるかもしれん
***strは**str[]にしてくれ
0864デフォルトの名無しさん2006/09/30(土) 00:17:10
あれ、これって釣りでいいんだよね?
だんだん季節風がかわいそうに見えてきた…
0865デフォルトの名無しさん2006/09/30(土) 00:19:20
「strはchar**」って書いてあるのに、何言ってるんだ?
0866デフォルトの名無しさん2006/09/30(土) 00:19:58
いいえ、この板に登場した時からずっとかわいそうな奴です。
0867(^-^) ◆MONSOON/qo 2006/09/30(土) 00:23:36
だからさ〜

char* strと宣言すればstrはchar*型でしょ?
828は char* str[0]; str[0]="test"と等価ってことさ
0868デフォルトの名無しさん2006/09/30(土) 00:24:23
>>861
>例えばchar ***strと宣言されればstr[0]はchar **型だよ

str が char** の場合って書いてあるのが見えない?
何で肝心な場所を飛ばして読むの?
0869デフォルトの名無しさん2006/09/30(土) 00:25:27
>>867
まあなんだ、乙

そして今から透明あぼーんすることに決めたぉ ()^^ω
0870(^-^) ◆MONSOON/qo 2006/09/30(土) 00:25:55
間違えた訂正

char* strと宣言すればstrはchar*型でしょ?
828は char* str[1]; str[0]="test"と等価ってことさ

括弧が付いてるから糖衣構文で変換されてchar*型になる訳じゃないの
0871デフォルトの名無しさん2006/09/30(土) 00:27:57
>>870
>括弧が付いてるから糖衣構文で変換されてchar*型になる訳じゃないの

いつどこで誰がそんなこと言ったの?
何が言いたいのかわかんないです(><;)
0872(^-^) ◆MONSOON/qo 2006/09/30(土) 00:28:43
>>871
>>834がそういったんだよ
よく嫁
0873デフォルトの名無しさん2006/09/30(土) 00:30:55
言ってないな。
0874デフォルトの名無しさん2006/09/30(土) 00:32:16
もういいや(><;)
お前糖衣構文の意味知らないだろ(><;)
意味分からないからなんとなく否定してるだけだろ(><;)
0875デフォルトの名無しさん2006/09/30(土) 00:33:07
char *str[1]; str[0] = "test";
が
char *str; str = "test";
に暗黙のうちに変換されるわけない・・という主張?
0876デフォルトの名無しさん2006/09/30(土) 00:33:26
ここでコンパイラ的に意味解析するオレが登場
実際のコンパイラはもっと複雑だよ

int main() //宣言式-関数宣言
{ //ブロック-関数ブロック-開始
char *str[]={"test"}; //式-宣言式
printf("%s",str); //式-式
return 0; //式-式
} //ブロック-関数ブロック-終了

そして”式-式”中の
 (Pointer)[(will int)]
は
 *((Pointer)+(will int))
になるって>>834は言いたかったんだね!

でもMONSOONは”式-宣言式”の方で考えてたから話が食い違ったんだね!
もうね、アボガド
0877(^-^) ◆MONSOON/qo 2006/09/30(土) 00:33:50
char* str="test"; の複数形が
char* str[]={"test","hello","yahoo"};なわけ
だからもともとcharポインタなんだよ
0878(^-^) ◆MONSOON/qo 2006/09/30(土) 00:36:17
糖衣構文だからchar*型だという説明が
間違えてるっていってるだろがわかった?
0879デフォルトの名無しさん2006/09/30(土) 00:37:23
>>877-878
透明アボンして見えないが、とりあえずバカ言ってるんだと想像できる
…IEで見てくるかwwww
0880デフォルトの名無しさん2006/09/30(土) 00:39:52
見てきたス
撒餌が弱いけど

>>878自己否定も大概にしておけ

言ってみたかった。
0881デフォルトの名無しさん2006/09/30(土) 00:40:54
int* a; として

a[5] は元々 int なんだよ!
「a[5] は *(a+5) の糖衣構文だから int」 って説明は間違い!

って言ってるのかな?かな?
0882(^-^) ◆MONSOON/qo 2006/09/30(土) 00:44:46
>>881
>>834の説明だと
char str[10];だとしてstr[5]=*(str+5)だからstr[5]はchar*型だよ
というのと同じ
0883デフォルトの名無しさん2006/09/30(土) 00:48:02
>>882
まあ最後は char 型の誤植だとして、
それの何が間違ってるの?
0884デフォルトの名無しさん2006/09/30(土) 00:48:12
俺が>>834を読むと、
char str[10];だとしてstr[5]=*(str+5)だからstr[5]はchar型だよ 
に見えるのは何故だろう。
0885デフォルトの名無しさん2006/09/30(土) 00:49:40
コンパイラってどこで手に入りますか

急にすんません
0886デフォルトの名無しさん2006/09/30(土) 00:51:58
>>885
まずは環境を書こうな!な!
0887(^-^) ◆MONSOON/qo 2006/09/30(土) 00:52:23
おまいら物分かりわるすぎ

char* str="test"; だと糖衣構文と関係なくstrはchar*型だろ?

同様に char* str[]={"test","hello","yahoo"};も糖衣構文と関係なく
str[0]、str[1]、str[2]はchar*型なんだよ

文句ある?

0888デフォルトの名無しさん2006/09/30(土) 00:53:08
まとめ

MONS00nは
・宣言式と式式がわかってない
・ポインタ演算がわかってない
・3秒で読めない文章はあきらめて一部だけでがんばる

あるいみ紙
0889デフォルトの名無しさん2006/09/30(土) 00:53:41
釣られすぎだ、マヌケ
0890デフォルトの名無しさん2006/09/30(土) 00:53:53
環境ってなんですか
初心者なんで(´∵`)
0891デフォルトの名無しさん2006/09/30(土) 00:55:29
つ 追加

・自分と他人の区別がつかない


マジなら処方物だから障れないwwwww
0892デフォルトの名無しさん2006/09/30(土) 00:56:40
>>890
linux とか windowsXP とかそんなん
0893デフォルトの名無しさん2006/09/30(土) 00:56:57
>>890
せめてOS
0894デフォルトの名無しさん2006/09/30(土) 00:57:33
>>890
とりあえずOSと使用用途くらいでいいんでね?
0895デフォルトの名無しさん2006/09/30(土) 00:57:38
>>887
まずは >>883 に答えてもらおうか
話はそれからだ
0896デフォルトの名無しさん2006/09/30(土) 00:59:01
(^-^) ◆MONSOON/qo の複数形とかいう概念が誤解を生んでると予想。
大抵の場合、配列とポインタは同様に扱えるから
http://www.kouno.jp/home/c_faq/c6.html#3

char str[10];だとして
strはchar*型として扱えて
str[5] == *(str+5)だから
str[5]はchar型として扱えるよ 

同様に char* str[]={"test","hello","yahoo"};も
strはchar**型として扱えるし、 
str[0]、str[1]、str[2]はchar*型と扱えるよ 

もう秋田
0897デフォルトの名無しさん2006/09/30(土) 01:00:31
OSはXPで使用用途はテスト勉強です
0898デフォルトの名無しさん2006/09/30(土) 01:02:32
>>897
近頃はテスト勉強にコンパイラを使うようになってるのか…
高度すぎるのか、もしくは単純に言葉の意味をしらないだけなのか困る

Win系なら
Borland(?)C++ か cygwin か、.NET(微妙か)あたり

つ ぐぐった
http://www.google.co.jp/search?complete=1&hl=ja&q=%E3%83%95%E3%83%AA%E3%83%BC%E3%80%80%EF%BC%A3%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9&lr=
0899(^-^) ◆MONSOON/qo 2006/09/30(土) 01:02:42
>>895>>896
おまいら知能あるのかよ?
糖衣構文の変換の話と
今のstr[0]がchar*型だというのは
関係ないって繰り返し言ってるだろが
0900デフォルトの名無しさん2006/09/30(土) 01:04:12
いや、工業高校なんで情報技術っていう科目があってそこでC言語を勉強してるんですよ
0901デフォルトの名無しさん2006/09/30(土) 01:05:18
>>899
だから、少しはこっちの質問にも答えてくれよ

>>896 の言う前者は正しいのか?間違ってるのか?
0902(^-^) ◆MONSOON/qo 2006/09/30(土) 01:08:44
>>901
この場合も同じだよ
このstr[5]がchar型なのは糖衣構文とは全く関係がない
同じく〜だから〜何々が変

> str[5]=*(str+5)だから
> str[5]はchar型として扱える
0903デフォルトの名無しさん2006/09/30(土) 01:12:11
5[str] が char 型なのはどう説明するつもりなんだろう?
0904デフォルトの名無しさん2006/09/30(土) 01:13:26
ANSI-Cが推奨するプログラムの雛形は
#include<stdio.h>
int main(void){
reeturn (EXIT_SUCCESS);
}
だけど
main(){
}
のようにしないのはなんでか理由は?

っていわれたのですが、どなたかわかるかたはいますか?
0905デフォルトの名無しさん2006/09/30(土) 01:13:26
ああ、なるほど

>>896の
>char str[10];だとして 
>strはchar*型として扱えて 
>str[5] == *(str+5)だから   ←
>str[5]はchar型として扱えるよ  

この三行目なんか無くても、str[5]は定義からchar型じゃないか、
と言いたいのか。
0906デフォルトの名無しさん2006/09/30(土) 01:15:39
>>902
つまりあなたは、

str[5] → *(str+5) → char の流れを知らずに、
str[5] → char だと思ってるわけですね。

そして、前者が正しいよ後者は間違いだよと何度も言ってるのに、
お前らは馬鹿だ!後者が正しい!の一点張りなわけですね。

ようやく分かりました!めでたしめでたし!
0907デフォルトの名無しさん2006/09/30(土) 01:19:04
お前らいいかげんMONSOON=嵐ってことに気づけよ。
それに、7文字のtrip検索するような奴だぜ?
0908デフォルトの名無しさん2006/09/30(土) 01:21:21
K&Rの本買おうか迷ってるんですが初心者には向いてませんか?
それから始めても理解に苦しむことなければいいんですが・・・
お勧めの本等あれば教えてください。
0909デフォルトの名無しさん2006/09/30(土) 01:34:51
>>902
>str[5]がchar型なのは糖衣構文とは全く関係がない
喪前の言いたいことが、"str[5]の要素型は糖衣構文に関係なく宣言式で決まる"、
ならただしい。
>>834はstr[0]の結果がchar*型になぜなるかを間接参照演算子'*'を用いて説明したと思えばOK


0910デフォルトの名無しさん2006/09/30(土) 01:35:06
>>908
結城さんのは案外いい
CをhackしたいならKRかも
0911デフォルトの名無しさん2006/09/30(土) 01:37:00
乗り遅れるというか、取り残されるというか、古いんだよなぁ
0912デフォルトの名無しさん2006/09/30(土) 01:40:02
>>902
ちなみに、糖衣構文から型を推移するような意味合いを出したのは
誰が何と言おうと、お前が最初
自分で拗らせておいて困ってるようだから子供って呼ばれるんだよカスwwww
0913デフォルトの名無しさん2006/09/30(土) 01:43:49
K&Rは買っとけ、最初は無理だと思うけど、まぁお守りみたいなものだ。

最初の目標は「K&Rが読めるようになる」コレが最初の大目標。
おいらも結城さんの本はおすすめ
0914(^-^) ◆MONSOON/qo 2006/09/30(土) 01:45:17
糖衣構文は>>834が初めだ
>>834がいい出す前には>>830と>>833しかレスしてない
0915デフォルトの名無しさん2006/09/30(土) 01:50:35
>>914
やぁ!
>>833の単数形、複数形って表現にはワロタヨ
そんな表現の仕方があるのかって
0916デフォルトの名無しさん2006/09/30(土) 01:54:50
>>914
「糖衣構文」という単語だけで反応するの?
何度も言うけど
糖衣構文から型を推移するような意味合いを出したのは、おまえ
勝手に糖衣構文と型を結びつけて収集つかなくしたのに気づいてほしい


秋田うぇ
0917デフォルトの名無しさん2006/09/30(土) 01:58:24
取り合えず叩かれてるのは糞コテだからじゃなくって
嘘つくわ、勝手に話を捻じ曲げるわ、独りよがりだわで
極めてウザい存在になっちまってるからだってことに気づいて欲しい。
つーか釣りでやってるんだよな?
いずれにしてもウザいから消えて欲しいけど。
0918デフォルトの名無しさん2006/09/30(土) 02:05:57
>>896
str++;
0919デフォルトの名無しさん2006/09/30(土) 02:12:21
>>913
K&Rはもう大概古文書の類だと思ってたんだが、今でも普通に
本屋で平積みになってんのな。それも第2版のまま。びっくしりたよ。

俺の手元の奴は141刷なんだが、いまどのくらいまで行ってるのかね?
見とけばよかった。
0920デフォルトの名無しさん2006/09/30(土) 02:30:55
>>917
かまうのやめろよ
0921デフォルトの名無しさん2006/09/30(土) 02:32:02
中の人、沢村だろ?
0922デフォルトの名無しさん2006/09/30(土) 02:40:37
沢村って誰?
0923デフォルトの名無しさん2006/09/30(土) 02:55:42
おみゃ〜らよ、沢村を知らんのか!?
0924デフォルトの名無しさん2006/09/30(土) 02:56:34
参照: 過去ログの 47〜
0925デフォルトの名無しさん2006/09/30(土) 05:10:11
今「talk:」の人の次くらいに嫌いなコテ
0926デフォルトの名無しさん2006/09/30(土) 07:49:44
ANSI-Cが推奨するプログラムの雛形は
#include<stdio.h>
int main(void){
reeturn (EXIT_SUCCESS);
}
だけど
main(){
}
のようにしないのはなんでか理由は?

っていわれたのですが、どなたかわかるかたはいませんでしょうか?
板違いでしょうか?
0927デフォルトの名無しさん2006/09/30(土) 08:05:40
日本語で頼む。
0928デフォルトの名無しさん2006/09/30(土) 08:10:32
正式な文章は

ANSI-Cが推奨するプログラムの雛形は
#include<stdio.h>
int main(void){
reeturn (EXIT_SUCCESS);
}
である。
main(){
}
のようにしない理由を答えよ。

でした。これ問題文の意味不明ですか?
0929デフォルトの名無しさん2006/09/30(土) 08:53:08
通称C99では下のはコンパイルエラー
0930デフォルトの名無しさん2006/09/30(土) 09:10:34
UNIX 信者の傲慢がまかり通っただけの空疎な強制
0931デフォルトの名無しさん2006/09/30(土) 09:16:59
宿題ですね
0932デフォルトの名無しさん2006/09/30(土) 09:37:45
>reeturn (EXIT_SUCCESS);

これは推奨されてないっていうか、コンパイルできない
0933デフォルトの名無しさん2006/09/30(土) 09:42:08
EXIT_SUCCESSを使うなら
#include <stdlib.h>
これを忘れている。
0934デフォルトの名無しさん2006/09/30(土) 10:03:21
今さだけど、MONSOONもナンセンスだが、宣言式と式式という言葉を使う方もナンセンスだと思う。
0935デフォルトの名無しさん2006/09/30(土) 11:05:37
リィーーーーートゥァーン!!
0936デフォルトの名無しさん2006/09/30(土) 11:08:27
>>928
1.OSに対して終了状態を、正常終了したことを通告すべき。
2.main()とint main()は等価。ならばint型の値を返すべき。
3main()とmain(void)は等価ではない。C89ではint main(...)と同義であるし、C99では構文エラーである。

うろ覚えで答えてみる。
0937デフォルトの名無しさん2006/09/30(土) 11:16:38
OS がいるにも関わらず、あの規格によれば Freestanding Environment な環境はごまんとあって
そこでは全然意味をなしてないんだが・・・
0938デフォルトの名無しさん2006/09/30(土) 11:21:02
Environmentな環境って馬から落馬系?

まだ早いけど次スレ立てる人は>>487あたりを参照
と注意喚起しておく
0939デフォルトの名無しさん2006/09/30(土) 11:23:55
ねえガイジンさん、日本語が難しいのはわかるんだけどさー
0940デフォルトの名無しさん2006/09/30(土) 11:26:08
>>938
うだうだ言うんなら、お前がたてとけ
0941デフォルトの名無しさん2006/09/30(土) 11:41:12
どっかに書いてあった間抜けなコード
char *(str[2])={"test","hello"};

文節が読めてない誰かさんと似てるかもw
0942デフォルトの名無しさん2006/09/30(土) 11:45:12
>>941
スレ違い。
0943デフォルトの名無しさん2006/09/30(土) 11:46:17
"文節が読めない"に該当するページが見つかりませんでした。

検索のヒント
キーワードに誤字・脱字がないか確かめてください。
違うキーワードを使ってみてください。
より一般的な言葉を使ってみてください。
0944デフォルトの名無しさん2006/09/30(土) 12:11:21
構造体についての質問ですが
Aという型とBという型を作ったとします。メンバの数は同じで型もすべてintです
この型同士の変換はできるのでしょうか?
0945デフォルトの名無しさん2006/09/30(土) 12:13:20
>>940
> まだ早い
0946デフォルトの名無しさん2006/09/30(土) 12:14:49
できない。
0947デフォルトの名無しさん2006/09/30(土) 12:17:05
>>944
危険だからやめとめ。
0948デフォルトの名無しさん2006/09/30(土) 12:24:01
>>944
変換って何?
代用するってこと?構造体同士で代入したいってこと?構造体のメンバ同士で個別に代入できるかってこと?
それとも脳内変換?
0949デフォルトの名無しさん2006/09/30(土) 12:39:20
説明不足でした

A test1 ;
B test2 ;

関数の宣言で
void test(A test1)
このように仮引数をAという型にします

呼び出す側で
test(test2)
このように引数をBという型にしてtest2の内容をtest1にコピーしたいのですが
なにかいい方法はないでしょうか?
0950デフォルトの名無しさん2006/09/30(土) 12:44:43
そうしなければならなくなった時点で設計ミス確定。
0951デフォルトの名無しさん2006/09/30(土) 12:45:29
typedef A B;
0952デフォルトの名無しさん2006/09/30(土) 12:46:18
compatible typeじゃないからねぇ。。。
0953デフォルトの名無しさん2006/09/30(土) 12:48:31
test((A)test2);

動く保証は全くない。
0954デフォルトの名無しさん2006/09/30(土) 12:48:33
メンバを一つずつ代入すればいいだろ。
0955デフォルトの名無しさん2006/09/30(土) 12:49:28
というか>>953Cじゃ絶対無理だろ。組み込み型じゃないんだから。
0956デフォルトの名無しさん2006/09/30(土) 12:52:23
castはscalar typeじゃないと。
0957デフォルトの名無しさん2006/09/30(土) 12:58:24
おk
現状で最適なのは
・作り直す
・unionしちゃう
くらい
0958デフォルトの名無しさん2006/09/30(土) 13:00:28
それがいいんだよ。互換性が無い型同士でキャスト。
これほど刺激的な事もそうそうないだろ?
0959デフォルトの名無しさん2006/09/30(土) 13:05:08
何人張り付いてんだよw
0960デフォルトの名無しさん2006/09/30(土) 13:07:11
共用体にはしたくないので作り直すしかなさそうですね
ありがとうございました
0961デフォルトの名無しさん2006/09/30(土) 13:16:39
>>790
vbのspaceみたいなもんやろ?
0962デフォルトの名無しさん2006/09/30(土) 14:45:54
>>949
本当にメンバが完全に同一ならとりあえずはtest(*(A*)&test2);で行けると思う。
0963デフォルトの名無しさん2006/09/30(土) 15:07:31
>>962
なんでそんな面倒なキャストするの?
0964デフォルトの名無しさん2006/09/30(土) 15:23:44
>>962
親子関係のないクラスはこれぐらいしたらんと。
0965デフォルトの名無しさん2006/09/30(土) 15:36:51
>>964
スレ違い
0966デフォルトの名無しさん2006/09/30(土) 15:39:02
構造体のパディングの問題があるので、そんなキャストはしてはいけません。
0967デフォルトの名無しさん2006/09/30(土) 15:43:48
>966
>Aという型とBという型を作ったとします。メンバの数は同じで型もすべてintです

パディング?
0968デフォルトの名無しさん2006/09/30(土) 15:54:50
現実には問題が出にくそうだけど気持ち悪いな
0969デフォルトの名無しさん2006/09/30(土) 16:06:42
>>967
少なくともメンバの型の並びが同じなら、パディングもまた同じ場所。
0970デフォルトの名無しさん2006/09/30(土) 16:06:47
>>967
>Aという型とBという型を作ったとします。メンバの数は同じで型もすべてintです

よって、同じメモリの割り当てをされると結論づけられるとでも思ってるの?
そんなこと規格書のどこに書いてあるの?
0971デフォルトの名無しさん2006/09/30(土) 16:07:46
>>969
Cってメモリレイアウトまで規定してたっけ?
してなければそんなに強く言わないほうがいいよ
0972デフォルトの名無しさん2006/09/30(土) 16:09:03
配列は連続領域だ、とかそういうことじゃないか?
0973デフォルトの名無しさん2006/09/30(土) 16:13:00
Cの配列ですらメモリ上連続かどうか分からなかった希ガス…たしか、うん、たぶん?(ポインタ+nの位置を”指せば”いいだけだから連続じゃなくてもいいはず)
構造体の表記とメモリレイアウトが完全に一致するかどうかなんてコンパイラの気分次第かもしれないし

とりあえずトリッキーなことをするときは仕様書とにらめっこしてからじゃないと「こうだ」とは言えないから困る
0974デフォルトの名無しさん2006/09/30(土) 16:23:38
うざ
0975デフォルトの名無しさん2006/09/30(土) 16:30:04
MONSOONもウザいが、それ以外の奴の方がもっとウザいな
0976デフォルトの名無しさん2006/09/30(土) 16:39:20
>>975
あれ?コテ入れ忘れてるよ?
0977デフォルトの名無しさん2006/09/30(土) 16:52:30
>>970
今目の前にあるコンパイラがそうなら別に不満はないが。
0978デフォルトの名無しさん2006/09/30(土) 16:54:00
>よって、同じメモリの割り当てをされると結論づけられるとでも思ってるの?

じゃないと、

A a;
A b;

memcmp(&a,&b,sizeof(A));

とか出来なくなりますよね。
0979デフォルトの名無しさん2006/09/30(土) 16:57:16
>>978
それは駄目なんじゃね?とか言ってみる。
0980デフォルトの名無しさん2006/09/30(土) 17:04:10
>>979
そうなるとsizeof(A)の値が不定になっちゃいませんか?
09819792006/09/30(土) 17:04:29
嘘でした。
0982デフォルトの名無しさん2006/09/30(土) 17:32:32
取り敢えずうんこは苦い、まで読んだ。
0983デフォルトの名無しさん2006/09/30(土) 17:43:27
bcパッドでコンパイルコマンドのgccをしたいんですけど、どうやったらいいでしょうか?
0984デフォルトの名無しさん2006/09/30(土) 17:54:44
そんなことオレが知るかよ。
質問するスレを間違えてんじゃねえのか。
0985デフォルトの名無しさん2006/09/30(土) 18:07:11
>>978
いやmemcmpとかANSIで規定されてる関数だけど、そもそもCさんとは無関係でしょ?
(Cの思想が「必要なものは全てライブラリに」だから)
で、表記とそれのメモリレイアウトの関係を決めるのはCのコンパイラさんだけど、その決め方の規約みたいなのをちゃんと読んだ上での話なんだよね?
0986デフォルトの名無しさん2006/09/30(土) 18:27:10
コンパイラ屋さん以外は、Cの規約とかあんまり読まないんじゃない?
0987デフォルトの名無しさん2006/09/30(土) 18:46:51
そうでもないよ。
移植あるし。
0988デフォルトの名無しさん2006/09/30(土) 19:25:48
とりあえず978は平気なはず。
JIS X 3010:2003 6.2.6の註(42)に構造体の代入にmemcpyを使っても良いと書いてある。

C++だが、JIS X 3014:2003 9.2 14〜17節にて、
非静的データメンバが同一なC互換構造体・共用体 (POD)同士は配置適合であり、
962のようなことをしても平気というようなことが書かれてある。
たぶんCにも同じような規定があると思うんだけどな。
0989デフォルトの名無しさん2006/09/30(土) 19:58:09
次スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc8.2ch.net/test/read.cgi/tech/1159613789/
0990デフォルトの名無しさん2006/09/30(土) 20:03:50
よし、ものども移住だ!
0991デフォルトの名無しさん2006/09/30(土) 21:02:14
cpyはいいけどcmpはだめだろ
0992デフォルトの名無しさん2006/09/30(土) 21:44:14
何で盛り上がってるかと思えば・・・
0993デフォルトの名無しさん2006/10/01(日) 02:20:50
>>991
その理由は?

memcpyでコピーできるならメモリイメージは同じはずです。
0994デフォルトの名無しさん2006/10/01(日) 02:32:04
パディングのせいで途中に初期化されていない領域が
あるかもってことでしょう。きっと。
0995デフォルトの名無しさん2006/10/01(日) 02:44:15
>>994 yes

というわけで、個人個人のバカが見えてくるスレになってきました
0996デフォルトの名無しさん2006/10/01(日) 07:45:12
ん?構造体が宣言時に初期化されてる訳じゃないからmemsetでの0うめは当たり前でしょう。
0997デフォルトの名無しさん2006/10/01(日) 08:24:08
なにその後づけ設定。
つか、
struct tag
{
int a, b;
} A =
{
0
};

とかでもbん中は初期化されますぜ。
0998デフォルトの名無しさん2006/10/01(日) 08:32:01
>>996
それが義務付けられているわけではないのだから、当てにするのは間違い。
ましてそういう習慣のままC++に移行してどつぼにはまる原因になりかねない。
0999デフォルトの名無しさん 2006/10/01(日) 10:40:12
ぬるぽ
1000デフォルトの名無しさん2006/10/01(日) 10:42:23
はい次

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc8.2ch.net/test/read.cgi/tech/1159613789/l50
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。