- 1 名前:デフォルトの名無しさん [2008/04/29(火) 09:44:57 ]
- 言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 26 pc11.2ch.net/test/read.cgi/tech/1206196600/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 105代目 pc11.2ch.net/test/read.cgi/tech/1208268461/
- 641 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 02:46:41 ]
- 数学板ってあんなんでも回答側になれんの?
- 642 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 05:18:50 ]
- わざわざ自称している時点で…
- 643 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 06:01:05 ]
- ↓聖徳太子知ってる?知らない?
- 644 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 06:28:38 ]
- 乗算合同法や線形合同法の利点ってメモリ使わないことなのに、
配列に保存してどうすんだよw
- 645 名前:↑ mailto:sage [2008/05/12(月) 06:56:00 ]
- ttp://jp.youtube.com/watch?v=RIL28wqOQGA
- 646 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 07:36:33 ]
- >>626
staticを付けるといい。 ついでにconstも付けるとさらにいい。
- 647 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 07:49:12 ]
- >>612
%nの仕様は調べた? >>626 static const char * const youbi[] = {"sunday", "monday", ...}
- 648 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 09:15:06 ]
- リテラル参照はこっちのほうがいいかも?
char *youbi[7] = {"日曜日", "月曜日",....} 好みの問題ですかねぇ・・・
- 649 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 11:15:18 ]
- >>648
それだと毎回youbiを更新するコストが発生するし、constによる保護ができない。 ついでに言えば、態々7という定数を埋め込む意義が全くない。
- 650 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 12:37:55 ]
- 確かにスタックに積む場合にはその分の手間がかかるけど、staticのほうがデータ参照は遅くなるんじゃないかったっけ?
- 651 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 12:44:16 ]
- const だけつけとけばコンパイラが何とかしてくれそうな気がするんですがどうなんですか?
- 652 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 12:50:33 ]
- 抽象的な質問しないで、具体的に質問してくれ。
つーか、入門者がパフォーマンスを気にするな。
- 653 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:07:40 ]
- 曜日文字列を使うような関数が、パフォーマンス気にするほど頻繁に呼ばれてるとは思えないねぇ
そうだとしても実測してみなきゃわかんないしね
- 654 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:11:25 ]
- >>653
もし頻繁に呼んでるとしたら、いっそ廃止して その上の(おそらくループの本体がある)関数で文字列をautoに積んで インラインで処理させたほうが速いだろうね
- 655 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:19:00 ]
- >>629で終わった話をいつまでグダグダやってるんだ
- 656 名前:デフォルトの名無しさん [2008/05/12(月) 13:22:59 ]
- TEST.Cをコマンドプロンプトで指名してコンパイルする時、拡張子が.Cだとコンパイルできなくて.cだとコンパイルできたんだけど、.Cと.cって違うの?
- 657 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 13:26:35 ]
- >>656
少なくともそのコンパイラにとっては違うからコンパイルできなかったのだろう。
- 658 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:05:58 ]
- ファイル名の指定を間違ってたんじゃないの
ファイル名の大文字小文字を区別する環境としない環境があるから、それも書いてくれ
- 659 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:16:09 ]
- Sun辺りは.CはC++の拡張子だった希ガス。
- 660 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:24:22 ]
- 上の
static const char * const youbi[] って何でconst2つも付けるのかが分からないんですが static const char * youbi[] じゃあダメなんですか? あと、普通の変数でも static const int const とかやる必要はあるんですか?
- 661 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:30:52 ]
- static const char *youbi[]
youbiの先の文字列が書き換え不可能 static char * const youbi[] youbiが書き換え不可能 static const char * const youbi[] 両方
- 662 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:36:31 ]
- static const char *youbi[]
は "火曜日" って文字列を "火曜"
- 663 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:38:16 ]
- 途中で書いてしまった
static const char *youbi[] は "火曜日" って文字列を "火曜" に変えたりするのが不可能で static char * const youbi[] は youbi[1] に別の文字列のポインタを渡すのが不可能になる って事なんですか?
- 664 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:54:23 ]
- const char *youbi[] は
const char 型のポインタ(文字列定数)を入れる youbi配列で、新たに文字列定数のポインタを入れることは出来て、 char * const youbi[] は youbiの中のポインタ変数固定だから、文字列そのものは書き変えられてもポインタの指す先は変えられないって事なんですね やっと理解出来ました ありがとうございます
- 665 名前:デフォルトの名無しさん [2008/05/12(月) 16:40:42 ]
- #include<stdio.h>
double f(double x) { double y; y=(((3.1*x-1.8)*x+5.7)*x+1.0)*x-6.2; return (y); } main() { double x,y; int i; for(i=-20;i<=20;i++){ x=0.5*i; y=f(x); printf("x=%7.3f y=%12.3f\n",x,y); } } このプログラムのyの値の総和を計算するプログラムを作れ。 これをだれかお願いします。
- 666 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:42:08 ]
- >>665
わかりましたちょっとまっててください
- 667 名前:デフォルトの名無しさん [2008/05/12(月) 16:46:32 ]
- >>657 なるほど〜 コンパイラの仕様か〜
>>658 指定の仕方は大丈夫なはず コンパイラはMinGW これでいいのかな? >>659 Sunってコンパイラ名・・? コンパイラによって違うってこと?
- 668 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:55:13 ]
- 宿題丸投げは宿題スレへ
- 669 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 17:15:43 ]
- >>667
>>>659 Sunってコンパイラ名・・? コンパイラによって違うってこと? Javaを開発し、OpenOfficeを提供している世界最大級のコンピュータソフト・ハード兼業企業。 古くから、SunOSというUnix系のOSを作っている。
- 670 名前:デフォルトの名無しさん [2008/05/12(月) 17:55:41 ]
- あ〜 なるほど OSによって違うってことか〜
勉強になりました
- 671 名前:デフォルトの名無しさん [2008/05/12(月) 19:47:16 ]
- 配列に配列を足すことってできないの?
a += b; みたいな
- 672 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 19:58:27 ]
- Linux上では問題なく動作したのですが、
windows(BCC Developer)だと、ファイルをオープンする事ができなくなりました ファイルパスを絶対パスにしたりと、試行錯誤しましたが解決しません どうか、解決法をお願いします ソース void read_area(struct prefecture *are) { int i; FILE *fpa; if(( fpa = fopen("menseki.txt" , "rw")) == NULL) { printf("ファイルが見つかりませんでした\n"); exit(1); } for(i=0;i<47;i++) { fscanf(fpa,"%s %d",are->name,&are->area); are++; } } txtファイルは、Debugフォルダとその上のファルダに置いています
- 673 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:00:38 ]
- >>672
ソースファイルと同じ場所に置けばいけるはずだけど
- 674 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:01:55 ]
- exeと同じ場所
- 675 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:05:20 ]
- >>673
日本語読めますか? >>672 それが原因かどうかは判らんが、"rw"は間違い。 実装によってはファイルが空になってもおかしくない。 >>671 できません。配列の要素ごとの足し算ならループから書くことになります。 配列の連結と言うことなら、malloc(), realloc()を使うことになるのでその辺りを先ず勉強する必要あり。
- 676 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:06:59 ]
- >>671
それだけの日本語ではさっぱりですよ。 たぶんこういうこと? for ( int i = 0; i < SIZE; i++ ) { a[ i ] += b[ i ]; }
- 677 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:07:58 ]
- >>673-674
ファイルの置き場所に問題があるのかと思い、ソースがある場所を含め、 プログラムに関係ありそうなフォルダ全てに置いたのですが、解決しませんでした… これは、BCCの環境設定?を変更・追加する必要があるのでしょうか? >>675 Linuxで動いたのは運が良かったからかもしれません… 指摘していただいた点について、もう一度解決法を探してみます
- 678 名前:677 mailto:sage [2008/05/12(月) 20:16:39 ]
- "rw"を"r"にした所、正常に動作しました!
よく考えてみれば、書き込みする必要がないので、"w"は不要ですね… >>673-675 つまらない質問にも関わらず、素早い対応して頂き、 本当にありがとうございます
- 679 名前:デフォルトの名無しさん [2008/05/12(月) 20:27:05 ]
- >>676
そうだけど 構造体のときは不便だなって思った
- 680 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:28:31 ]
- そう思ったんならC++へ旅立ってしまえ
- 681 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:54:06 ]
- >>679
そんなのラッパー関数かいときゃ次からは楽じゃないか。
- 682 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:25:44 ]
- >>641
なれるよ 数学なんて実に簡単なことだ
- 683 名前:デフォルトの名無しさん [2008/05/12(月) 22:34:04 ]
- C言語勉強したいのですがフリーソフトはないんでしょうか?
- 684 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:34:47 ]
- >>683
ぐぐれ
- 685 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:39:47 ]
- >>683
マイクロソフトが無料で配布してるよ
- 686 名前:デフォルトの名無しさん [2008/05/12(月) 22:52:43 ]
- www.microsoft.com/japan/msdn/vstudio/express/default.aspx
これですか?どれをダウンロードすればいいんでしょうか
- 687 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:53:37 ]
- >>686
visualC++だ そしてとっととうせろ
- 688 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:54:42 ]
- >>686
登録とかめんどくさいからBCC使うといいよ 俺はvisual C++使ってるけど
- 689 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:01:50 ]
- BCC もメルアド登録必要じゃね?
- 690 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:02:36 ]
- デバッガは登録必要だったような気がするけど
コンパイラは要らなかったような…
- 691 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:03:17 ]
- >>689
いらない
- 692 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:06:20 ]
- あれ? メルアド変わるまでスパムのように来てたんだが。
- 693 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:12:22 ]
- VC++も登録いらんだろ
isoを落とせば
- 694 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:13:13 ]
- それめんどい
- 695 名前:デフォルトの名無しさん [2008/05/13(火) 08:04:28 ]
- C++のプログラム作ろうと思ったらVBの作成画面みたいなんですけど
単純にC言語のプログラムを作りたい時はどうしたらいいんですか?
- 696 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:08:04 ]
- >>695
お使いのソフトウェアのスレへどうぞ。
- 697 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:14:19 ]
- >>695
誤 C++のプログラム作ろうと思ったらVBの作成画面みたいなんですけど 正 VisualC++でC++プログラム作ろうと思ったらVBの作成画面みたいなんですけど Win32コンソールアプリケーションを選べ
- 698 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:19:27 ]
- >>697
それだとスレ違い。ここはCスレ。
- 699 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:56:55 ]
- 実行時に与えられる条件により異なる値で初期化して、
以後はconstに扱われるような変数を宣言することはできますか?
- 700 名前:699 mailto:sage [2008/05/13(火) 13:59:49 ]
- 追記 環境変数のような働きをするグローバル変数です
- 701 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:34:04 ]
- >>699
実装によっては可能かもしれないが、直接に行うことは一般的にはできない。 constな変数はそれが作成されたときに(関数の外で宣言される変数ならプログラムの開始時、あらゆる関数の外で)初期化されて 以後のコード中では変更できなくなるため、実質的にコンパイル時に解決可能な式でしか初期化できない。 ポインタを間にはさめば、以下のような方法で似たようなものを間接的に宣言することができる。 value.c) static int value; const int * const vp=&value; value.h) extern const int * const vp; #define VALUE (*vp) このようにしておけば、グローバル変数(のふりをしているマクロ)VALUEの実体であるvalueは、少なくともvalue.c以外で変更されることはない。
- 702 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:17:07 ]
- あとは、取得用の関数を公開する形にして
当該の変数をstaticにしてほかのファイルからは見えないようにするとか、 const変数を動的初期化できるC++へ移ってしまうとかが考え付く。
- 703 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:32:16 ]
- int GetValue()
{ static int value=-1; if(value < 0){ /* 最初に呼び出されたときに初期化される */ : : } return value; } #define VALUE GetValue() な手か
- 704 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:14:38 ]
- 失礼します。
void hoge(double** matrix) {} 等として受け取ったdouble**の配列の要素数をその関数内で知るすべがあったらご教授願います。
- 705 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:24:57 ]
- ありません
- 706 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:33:22 ]
- 配列matrixの終端要素になにか特別な値が格納されていれば
それを検出することで長さを知ることができる そうでなければ無理
- 707 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:00:51 ]
- char name[100];
name="hoge.txt"; みたいに代入したいんですが、エラーになります。 *name="hoge.txt"; でもできません。どうやるんでしたっけ?
- 708 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:04:40 ]
- 何で駄目なのかはわかる?
strcpy(name, "hoge.txt") とか? strncpy(name, sizeof(name) - 1, "hoge.txt")か
- 709 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:07:16 ]
- >>708
すいません。わからないので教えていただけるとありがたいです
- 710 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:24:03 ]
- >>709
Cでは配列は二級オブジェクト(メモリ上に存在するが演算の対象にならない)で、 配列名は大抵の場合配列そのものではなく配列の先頭要素のアドレスを意味する。 アドレスに代入することはできないので、name="hoge.txt"; のような文は無効になる。 配列名に対して直接=演算子が使えるのは、宣言時に初期化するときだけである。 配列に対して任意の配列をコピーするにはmemcpyやmemmove、 あるいは配列が'\0'で終わるcharの配列(文字列)である場合にはstr〜系の関数を使う。
- 711 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:43:39 ]
- 1)
strcpy(name, "hoge.txt"); 2) strncpy(name, sizeof(name)-1, "hoge.txt"); name[sizeof(name)-1]='\0'; 3) name[0]='\0'; strncat(name, sizeof(name)-1, "hoge.txt"); 1)はもっとも単純明快だが、もしnameに割り当てられている領域が コピーしようとしている文字列より小さかったらたぶん問題がおきる そのような場合に文字列を切り詰めて安全を保証したいなら2)または3)を使う
- 712 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:51:33 ]
- わかりました!どもうありがとうございました
- 713 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:00:36 ]
- >>711
横見だが 2 および 3 の引数の並びちがうぢゃろ。 strncpy(name, "hoge.txt", sizeof(name) - 1); name[sizeof(name) - 1] = 0;
- 714 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:24:12 ]
- 文字列リテラルをコピーするのにstrn*()を使うのか……
- 715 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:24:59 ]
- 当然だろ
- 716 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:26:55 ]
- sprintfでおk
- 717 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:18:04 ]
- だからオーバーフローが・・・
- 718 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:20:16 ]
- オーバーランじゃねーの?
それともオーバーフローでもおkなの?
- 719 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:21:04 ]
- おk
- 720 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:22:55 ]
- ttp://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%83%B3
ラン姉ちゃんの方でした、すまそ
- 721 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:25:09 ]
- >>717
桁数勘定して sprintf(b, "%100s", s); って, 書けば OK なんじゃないの?
- 722 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:32:56 ]
- >>720
バーロー
- 723 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:55:15 ]
- 自分の言語/文法理解が間違ってるのかも、と思って駆け込んできた
--- #include<stdio.h> int ary_[]={1,2,4,8}; int main(int argc,char** argv){ int* ary=ary_; int i=(*ary++) ^ (*ary++); printf("%d\n",i); return 0; } --- これの実行結果がゼロになるのはなんでだぜ? VC9EE v15.00.21022.08 最適化無指定、/O1 で発現 VC9SP1βはまだ試してない
- 724 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:57:31 ]
- >>723
未定義動作だからどうなっても文句は言えない むしろどうなると思ったんだよ・・・
- 725 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:59:10 ]
- 副作用完了点
- 726 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:01:58 ]
- >>721
いや、そういう意味じゃなくて・・・それらの問題点は プログラムそのものがトラブルを起こしてしまう仕組みを持っていることであって 問題の無い範囲内でユーザが使う分にはなんら不具合には気づかない、起こらないわけで・・・
- 727 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:06:18 ]
- >>724
え。一発目の*ary++が1に、二発目の**ary++が2に、… …いや、最適化で順序がどうなっても、i==3にはなると思ったんだ /Fa によると、どちらも*aryになり、そのあとで2回ary++が発生してた どこで未定義なんだろう…。 // ここでリロード >>725 ヒントありがとう ぐぐったら一発 必ずしも都度都度副作用が発生するわけじゃないのか アマだが、聞かねば一生のバグ撒き散らしになるところだったよ 恥晒してよかった
- 728 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:21:13 ]
- ary = ary++;
- 729 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:22:15 ]
- >>728
いやそれを書き込む意味が和漢ね
- 730 名前:723 mailto:sage [2008/05/14(水) 00:28:52 ]
- >>729
これを考えてみろ。ってことだろう 実際にVC9EEにつっこんで結果を見てみた ary = ary; ary++; になった 俺には示唆に富んでると思う
- 731 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:29:43 ]
- >>723
未定義だけど、1^1で0になってる気がする
- 732 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:38:23 ]
- ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
調べたら色々書いてあった
- 733 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:24:07 ]
- 直前の副作用完了点と次の副作用完了点までの間に、
式の評価によってオブジェクトに格納された値を変更する回数は 高々一度だけでなければならない。更に、変更前の値は、 格納される値を決定するためだけにアクセスしなければならない。
- 734 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:25:37 ]
- pc11.2ch.net/test/read.cgi/tech/1201153965/157
- 735 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:32:45 ]
- 初心者なんですが、お願いします
文字列を式として扱って計算結果を出力する というような便利な関数ってあるのでしょうか?
- 736 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 07:26:22 ]
- 標準ではありません。頑張って作ってください。
まぁ、unix系ならシェルで計算すれば済むけどね。
- 737 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 07:30:10 ]
- Java、JavaScriptだと eval というものがあるんだが、自分で実装するっきゃないね。
- 738 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 09:05:47 ]
- 簡単な計算させる程度なら、bison/flexあたりでどうにか。
変数が入るようなやつなら、いろいろあるけど、いっぺんPerlとか使うといいと思うよ Perlで書く。のではなくて、perl*.dllをつつくように書く あれはインタフェースがCだから。 セキュリティの確保とか結局いろいろ大変になるだろうけど、示唆に富んでていいと思う
- 739 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 10:10:26 ]
- >>735
ttp://www.google.com/codesearch?hl=ja&q=+lang:c+eval+show:LKM9fPKCrz0:r3iT8J84R1w:wri6GBkgM20&sa=N&cd=1&ct=rc&cs_p=ftp.gnu.org/gnu/glibc/glibc-2.3.6.tar.bz2&cs_f=glibc-2.3.6/dlfcn/eval.c#l121 LGPLだけど、Google Code Searchで検索すると60行程度で実装している例がある。
- 740 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:49:08 ]
- 学校の課題で
「関数の中で宣言した値は、関数の実行が終わった後どうなるのか?たとえば二度目に関数を呼んだとき値を読んでみたら どうなるのか?」 って問題が出たんだけど答えどころか質問の意味すらわかりません。よかったら教えてください。
- 741 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:53:49 ]
- ローカル(自動)変数とか、静的(スタティック)変数とかを教える意図の質問じゃないのかな?
- 742 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:54:37 ]
- >>740
void hoge(void) { int a; ← A a = 2; a = a * 2; } ←@ void main (void) { hoge(); hoge(); } @関数終わったらaはどうなる? A2回目のhoge呼び出しの時、このaに4が入っていると思うか?
- 743 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 13:56:53 ]
- ローカル変数には初期値入れることになるんだし
なんだかなぁって思う問題
- 744 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:32:20 ]
- >>741-743
こんな早く答え返ってくるとは思ってませんでした。 有難う、みんな優しいですね。 >>742 @無くなる? A…4じゃないんですか?
- 745 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:35:20 ]
- aに何も入れない状態で出力させるのさ。
できれば、hoge()を呼び出す階層を変えて試すのもやってみて (別の関数を呼び出しその中からhoge()を呼ぶ)
- 746 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:48:58 ]
- 成程!試してみますね。
ご丁寧に有難うございました。
- 747 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:16:09 ]
- 試してみる、はよくない
たまたま4が入ってたらどうするんだ
- 748 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:25:10 ]
- 高確率で入ってるだろ。
だから深さも変えるといいかな、と。 アドレス表示させる手もあるが。 最適化されてると混乱しそう。
- 749 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:41:12 ]
- ちゃんとCの仕様を示して理解させるのが正しい姿勢
とりあえず試してうまくいったから、なんてのを放置すると そのうち必ずなにかやらかす
- 750 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:42:09 ]
- >>744
@無くなる A何が入っているかわからない
- 751 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:50:04 ]
- >>740
関数の中でstaticをつけずに宣言した変数は、その関数の呼び出し中にのみ存在する変数(auto変数)となる。 宣言した関数から抜けた時点で、変数のために使われていた記憶領域は解放されて意味のないものになる。 このような変数は、明示的に int a=2; などのように初期化しないかぎり、 その宣言時における値は常に不定(何が入っているかわからない)である。 このような変数の中身を、明示的に値を与える前に使ってはいけない。
- 752 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:50:57 ]
- 学校の課題なんだから、そんなのは教わるんだろう。
今知りたいのはこの質問の意図するところだべ。
- 753 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:55:28 ]
- 仕様を理解してりゃ意図はわかるだろ
意図がわかんないってのは理解してないからだ
- 754 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:00:37 ]
- >>740
なお、staticをつけて宣言した変数は、プログラムが実行を開始してから終了するまで存在し、 その開始時に一度だけ、明示的な初期化式があればその値に、なければ「=0;」とか「={0};」と 書いたかのように初期化される。
- 755 名前:740 mailto:sage [2008/05/14(水) 23:45:33 ]
- >>753
その通りです。 まだ講義で習ってない範囲(質問する前は習ってない範囲 かすらもわかりませんでした)で何も知りませんでした。 今回皆さんに教えて頂いたお陰でまだ何となくですが、 わかるようになりました。 あとは講義で理解していこうと思います。 補足してくださった方々もわかりやすい説明有難うございました! ここ勉強になりますね。
- 756 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 01:50:36 ]
- >>735
宿題スレで頻繁に見られる課題です。実装したくなったときに参考にしてください。 基本形 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6550.txt 逆ポーランド電卓で(基本形の応用) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6551.txt 他にもいろいろ回答されていましたが、私の手元ににはありません。
- 757 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:16:27 ]
- >755
忠告だが その講義の教官の言うことは眉唾して聞いたほうがいい 教えてないことを聞くとかありえねー
- 758 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:56:17 ]
- 課題自体はすげー授業のそのまんま復習くせーし
話聞いてなかったんだろどうせ
- 759 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:56:17 ]
- >>757
両方の言い分を聞かないと分からないぞ ここで教官の言い分を聞く事はまずないだろうけど
- 760 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:57:06 ]
- >>757
前半と後半が支離滅裂なんだがw
- 761 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:58:18 ]
- >>760
日本語は難しいです
- 762 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:03:26 ]
- >>760
日本語読めない人?
- 763 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:06:17 ]
- 課題なら別に教えてないことが出てきてもいいと思うけどな
小学校じゃあるまいし
- 764 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:08:53 ]
- 横槍だが 眉唾する という使い方がないんです、辞書を引いても分かるように。
- 765 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:11:29 ]
- >>764
「眉に唾する」ならいいのかな?
- 766 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:13:52 ]
- ttp://www.geocities.jp/tomomi965/kotowaza11/11-54-4.html
- 767 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:27:57 ]
- 下記の場合volatileがあるためValueを外部から書き換えるまでループを続けると思うのですが、
volatile ULONG Value; // レジスタ(外部から書き換えられる) void main(void) { Value = 0; while(Value == 0){ ←これ ; } } これを下記のようにポインタを経由すると最適化対象になってしまうのでしょうか? (このポインタもvolatileをつける必要がある?) volatile ULONG Value; // レジスタ(外部から書き換えられる) void main(void) { Value = 0; ULONG* pV = &Value; while(*pV == 0){ ←これ ; } }
- 768 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:29:31 ]
- >>767
volatile 修飾する必要があります
- 769 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 10:13:29 ]
- >>767
volatileをつけなければ最適化対象になります。 が、最適化対象になるとValueを外部から書き換えるまでループを続けるという動作を必ずしなくなるわけではありません。 つまり、volatileをつけなくてもあなたの希望する動作をする可能性はあります。 つまり、volatileをつける必要があるとは言い切れません。
- 770 名前:「言い切れない」は詭弁だ mailto:sage [2008/05/15(木) 12:16:11 ]
- >つまり、volatileをつけなくてもあなたの希望する動作をする可能性はあります。
それは普通、つける必要があると言いますね。
- 771 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 12:22:57 ]
- ↓必要条件とか十分条件とか言い出すヤツ
- 772 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 13:40:39 ]
- |↑
++ ビルド毎に出力を確認すればおk てか、Cの話でなくなるが、テストで引っ掛けろ
- 773 名前:デフォルトの名無しさん [2008/05/15(木) 22:38:30 ]
- プログラム知識0の俺がCを勉強しようと思うんだが
解説サイトと本どっちがいいの? 色々な掲示板みてたら両方とも良いって書いてたからわからなかった。
- 774 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:39:35 ]
- じゃあ、とりあえずお金のかからない方法でやってみて
それで不満に感じたら本を買えば良いんじゃないかな
- 775 名前:デフォルトの名無しさん [2008/05/15(木) 22:49:12 ]
- レスありがとう
その方法が一番いいかな〜 とりあえずググってサイトさがしてみる。 サイトって「C言語 入門」でググって上らへんのなら大丈夫だよね?
- 776 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:32:03 ]
- 本はだめな本があるから、本の紹介サイトを見たほうがいいぞ。
- 777 名前:デフォルトの名無しさん [2008/05/15(木) 23:39:22 ]
- そうなんだ
まだ買わなくてよかった〜 ありがとう それみて本選ぶよ
- 778 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 05:49:52 ]
- 本もそうだがサイトは特に多くのところを回った方がいい。
嘘を書いている、情報が古すぎる、環境依存なコード、誉められないコーディングスタイルetc... あと、サイトにすることで有利な点は、疑問点があればここにアドレス張り付ければ一応質問できることかな? 書籍だと同じ本持ってる人間以外には内容をいちいち書いてもらわないと質問できないから。
- 779 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 09:21:08 ]
- 何を学ぶか?で選ぶ資料も違ってくる。
ソートに関しては、すでにどの手法が高速か分かりきっているが 教本によって記述が違っているものも。中には、あれ?って思うものも。
- 780 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 09:31:06 ]
- 宿題スレでHit and Blowのソースコードを書いてもらったものですが、
頭が悪いせいか理解しようとしても意味がよくわかりません。 誰か詳しい解説をお願いします。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6540.txt
- 781 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 09:32:00 ]
- っつか、コードが悪い
- 782 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 10:38:15 ]
- 宿題スレはとりあえず提出できればいいやーって人向けで、
自分で理解するには向いてないと思う つか>>780のソースは宿題スレではかなり親切な方だと思うけどな 一応コメントついてるし
- 783 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 11:46:34 ]
- 数当てだからといって、4桁の整数にこだわらずに
数字の文字4個の配列を使ってる。そこだろう 数字 + '0' <-> 数字の文字 理解するところまで宿題なんなら、ヒントだと思って考えてみるよろし
- 784 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 13:24:00 ]
- >>780
何がわからないのか具体的に説明してくれないと解説のしようもない。
- 785 名前:デフォルトの名無しさん [2008/05/16(金) 14:41:36 ]
- すみません。いきなりですが、本当に初心者なので分かりません。C言語では基本的に全て数値としてデータを格納すると聞きました。
ただ逆に数値(1〜9)を””で囲んで文字列とする場合、内部データは本来の数字にNullが付いた物でなく、ASCUコードで あれば文字の1なら10進数の49(16進数の10X3)に変換されるという認識でよいのでしょうか? 又、普通の文字ならは該当する10進数・16進数に変更はなくNuLLが付くだけなのでしょうか?数値ま場合だけデータそのものが 例えば1なら実質先程言った49に変換されるという認識でよろしいのでしょうか?どうかご教授願います。
- 786 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 14:44:37 ]
- 16進ダンプとかって最近は見る機会無いのかな
- 787 名前:デフォルトの名無しさん [2008/05/16(金) 14:48:13 ]
- >>786
Windowsでは見る機会がないでしょうねぇ〜〜〜禿藁 だからLinuxを使えとあれほどry
- 788 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:08:13 ]
- >>785
C言語では(エスケープシーケンスを除き) ど ん な 文 字 も そのマシン上での文字集合に対応するデジタルな値として扱われる。 ASCII文字集合を使用しているすべてのマシンで、"1"は0x31 0x00で、" "は0x20 0x00である。 数字であろうと何であろうと扱いに差はない。
- 789 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:09:34 ]
- linuxだと強制的に見なきゃいけない機会でもあんの?
- 790 名前:デフォルトの名無しさん [2008/05/16(金) 15:11:01 ]
- ありがとうございました。Cはそなのですね。
- 791 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:11:26 ]
- ntsd使うなり、IDEの16進メモリ表示モード使うなり
さすがにgdbに張り合ううつもりはないが、ntsdは結構遊べる
- 792 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:12:46 ]
- なお、Cの話をする際において安易にNULLという単語を使うべきではない。
CにおいてNULLと書いた場合通常はヌルポインタ定数を表すマクロNULLのことをさす。 ASCIIのNULのことを言う場合にはNULまたはヌル文字と表記するべきである。 ついでに、ASCIIは A.S.C.I.I.(American Standard Code for Information Interchange) であってASCUではない。
- 793 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:14:25 ]
- >>789
mpeg とかかまってると, Windows でも強制的に見なきゃいけない機会は結構あるが…
- 794 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:14:32 ]
- >>792
お前が出直して来い
- 795 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:35:15 ]
- 俺がNULって書いたらナルだろーが!
とおっしゃりたいのですか? どっちでもいいじゃん
- 796 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:42:56 ]
- 呼び方なんてどうでもいいよ
区別がついてないのはお前の方じゃねーかって話
- 797 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:44:35 ]
- 何を指摘したいのかを明確に挙げずに文句つけても話が混乱するだけだぞ
煽りたいだけならよそでやれ
- 798 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:46:11 ]
- >ASCIIのNUL
……
- 799 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:46:33 ]
- なんかまた変な奴が沸いたな。
相手すんなよ、つけあがるから
- 800 名前:デフォルトの名無しさん [2008/05/16(金) 15:47:50 ]
- Windows使ってるとNULLとNULの違いすら分からないようだな。
駄目だこりゃ。
- 801 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:49:15 ]
- なんだ
またいつものアレか
- 802 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 15:54:28 ]
- >>800
違いですかwww
- 803 名前:デフォルトの名無しさん [2008/05/16(金) 16:06:33 ]
- ニート・ヒキは金どうしてる?
yutori.2ch.net/test/read.cgi/news4vip/1210919591/ 1 以下、名無しにかわりましてVIPがお送りします。 [] 2008/05/16(金) 15:33:11.35 ID:2pPh1TlA0 自分でソフト作って株の売買自動でやらせてる 種が50万しかなかったし初めて2月目だから 一日三万がいいとこだし金おろせないけど まあ親元だし食ってくのには困らんので満足してる しかし欝だ・・・やることなくて寝てばっかり・・
- 804 名前:雷 [2008/05/16(金) 16:28:57 ]
- microsoft visuar studioで
*印を出力するプログラムを作成してください 整数型の変数nに7〜15の値を設定する 変数nの値により,以下のような表示を行う(n=7の場合) for文(またはwhile文)とif文の組合せである カウンタ変数が偶数か奇数かで判断 printf文は printf(“n=%d\n”,n); // nの値を出力 printf(“ “); // 空白を出力 printf(“*”); // *印を出力 printf(“\n”); // 改行する だけを使用する n=7 * * * * * * * * * * * * * * * * * * * * * * * * * 上の条件でこういう風に表示するプログラムを書いてください
- 805 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 16:37:31 ]
- 宿題なら宿題スレへ
- 806 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 16:38:00 ]
- >>804
>>1
- 807 名前:780 mailto:sage [2008/05/16(金) 18:32:38 ]
- >>782
>>783 >>784 ありがとうございました。
- 808 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 10:33:01 ]
- float型やdouble型の内部構造がいまいちよく理解できないんだが、どっかわかりやすいとこない?
最上位ビットが符号で使われるのはわかるんだけど、それ以外がよくわからない。 小数点以下の数値をどうやって保持してるの?
- 809 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 10:42:45 ]
- >>808
ja.wikipedia.org/wiki/IEEE_754 実装がこれに準拠しているかどうかは別問題
- 810 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:12:45 ]
- >>809
ありがとう。指数表記を使ってるのがわかって疑問が解けました。
- 811 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:40:19 ]
- typedef struct{
double x, y; }vector_t; typedef struct{ vector_t vector; double length; }edge_t; edge_t *edge_alloc(char *filename, int *edge_num) { int i, point_num; vector_t *point; edge_t *edge_area, *edge; FILE *fp; 途中略 edge_area=malloc(sizeof(*edge)*(point_num+1)); edge=&edge_area[1]; edge[-1]=edge[point_num-1]; *edge_num=point_num; return edge; } このソースなんですが、edge[-1]とかいう場所に代入していいんですか?
- 812 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 12:17:49 ]
- edge[-1] == (&edge_area[1])[-1]
- 813 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 12:32:03 ]
- えっと〜
?
- 814 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 12:36:28 ]
- edge[-1] == edge_area[0]
- 815 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:01:27 ]
- edge[n]と書くと、配列edgeのn番目、みたいに読める。
しかし、配列の中(最初かもしれないし、最後かもしれないし、途中かもしれない)を 指し示すポインタedgeの、そっからn番目、とも読める。 もちろん、edge[-1]の存在は、ちゃんと担保されてないといけないけど、 文法的にというか、読み方的には、そういう意味 てことで、>>814
- 816 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:07:28 ]
- edge[-1] == *(egde - 1)
なので文法的に問題は無い 大丈夫かどうかは指してる先がちゃんとあるのかの問題になる
- 817 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:10:36 ]
- 値を代入してるわけではないんですか?
- 818 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:14:13 ]
- 代入してる場所は代入しても問題ない場所。
上の数レス読んで理解できないならあきらめろ。
- 819 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:14:29 ]
- ああそうだ もしかしてと思ってエスパーしてみるが、
edge=&edge_area[1]; の部分で、配列のコピーが発生したりは、してないからね 強いて言うなら、位置情報を代入している。それも、「一個先の位置」ね。
- 820 名前:デフォルトの名無しさん [2008/05/17(土) 13:18:52 ]
- 4,5,6進数の九九を作ってください。
4進数なら 1 2 3 1 1 2 3 2 2 10 12 3 3 12 21 こんな感じです。お願いします。
- 821 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:19:31 ]
- >>820
宿題スレへどうぞ
- 822 名前:デフォルトの名無しさん [2008/05/17(土) 13:20:36 ]
- 4,5,6進数の九九を作ってください。
4進数なら 1 2 3 1 1 2 3 2 2 10 12 3 3 12 21 こんな感じです。お願いします。
- 823 名前:デフォルトの名無しさん [2008/05/17(土) 13:22:05 ]
- なんか九九表がうまくできないですけど
- 824 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:22:10 ]
- 1 2 3
1 1 2 3 2 2 10 12 3 3 12 21 こうしたいんだろ? それはともかくとっとと消えろよ
- 825 名前:デフォルトの名無しさん [2008/05/17(土) 13:22:36 ]
- 今日から、パッケージソフトを作るための勉強をします。
何の言語を勉強すれば、よろしいでしょうか? 個人的には、C++がいいかと。 求人案件などを見ると、求人が多いから。 (ちなみに、どんなソフトを作ろうとしているかというと。 動画編集ソフトを作ろうとしています。)
- 826 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:23:43 ]
- >>825
スレタイを百回音読して涙を流しながら去れ
- 827 名前:デフォルトの名無しさん [2008/05/17(土) 13:25:41 ]
- >>826
さーせn
- 828 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 15:46:46 ]
- Borland BCC32(フリー版)を使ってますが、リアルタイムキー入力を使いたいのですが
その関数名を教えて下さい (BasicのINKEY$見たいな物)
- 829 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 16:29:04 ]
- >>828
GetAsyncKeyState
|

|