C言語なら俺に聞け(入門編)Part 80
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/03/09(水) 14:40:37.79★前スレ
C言語なら俺に聞け(入門編)Part 79
http://hibari.2ch.net/test/read.cgi/tech/1297728426/
★過去スレ
http://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++の宿題片付けます 146代目
http://hibari.2ch.net/test/read.cgi/tech/1296387672/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。
0002デフォルトの名無しさん
2011/03/09(水) 15:47:19.010003デフォルトの名無しさん
2011/03/09(水) 16:34:56.220004デフォルトの名無しさん
2011/03/09(水) 17:20:14.660005デフォルトの名無しさん
2011/03/09(水) 17:55:27.070006デフォルトの名無しさん
2011/03/09(水) 19:26:28.830007デフォルトの名無しさん
2011/03/09(水) 20:06:31.860008デフォルトの名無しさん
2011/03/09(水) 20:36:46.040009デフォルトの名無しさん
2011/03/09(水) 20:38:27.05そんなに渇望してるなら自分で立てろよw
0010デフォルトの名無しさん
2011/03/09(水) 20:55:07.360011デフォルトの名無しさん
2011/03/09(水) 20:59:16.830012デフォルトの名無しさん
2011/03/09(水) 21:05:42.350013デフォルトの名無しさん
2011/03/09(水) 21:29:13.67って言う感じ
0014デフォルトの名無しさん
2011/03/09(水) 21:32:58.150015デフォルトの名無しさん
2011/03/09(水) 21:33:25.79C を拡張した言語は沢山あって、C++ もそうだし、Objective-C とか D とか、
色んな言語が C を元にして生み出されてきました。C++ はそういった言語の
ひとつで、主に 1990 年代に隆盛した言語です。
0016デフォルトの名無しさん
2011/03/09(水) 21:50:35.17志村〜、未定義未定義
0017デフォルトの名無しさん
2011/03/09(水) 22:08:32.62不定じゃね?
0018デフォルトの名無しさん
2011/03/09(水) 22:23:15.500019デフォルトの名無しさん
2011/03/09(水) 22:34:17.72C++ == C; // 左辺と右辺の評価順が不定
0020デフォルトの名無しさん
2011/03/09(水) 22:37:25.95あれ?
左辺から右辺に評価かされるけど、左辺の副作の評価順が不定?
良く分からなくなってきた
0021デフォルトの名無しさん
2011/03/09(水) 22:44:12.850022デフォルトの名無しさん
2011/03/09(水) 23:05:07.06K&RのころとC99で変わってる気もするから、今度確認しておこう…
0023デフォルトの名無しさん
2011/03/09(水) 23:08:02.170024デフォルトの名無しさん
2011/03/09(水) 23:10:54.09あっちのほうが見やすい
0025デフォルトの名無しさん
2011/03/09(水) 23:11:28.37ANSIから下も未定義じゃね?
C FAQに何か書いてあるっぽい。
0026デフォルトの名無しさん
2011/03/09(水) 23:11:55.24C == C++ のほうはやりそうにないな。
0027デフォルトの名無しさん
2011/03/09(水) 23:15:12.00違う
副作用がある演算を行った変数は、その前後の副作用完了点の間の他の場所では参照するなってこと
>>25
FAQの頃は、参照(比較)だけなら不定で、演算すると未定義だったはず
0028デフォルトの名無しさん
2011/03/09(水) 23:18:19.38こんなことしないでくださいね
int i = ;
int *p = &i;
*p == i++;
0029デフォルトの名無しさん
2011/03/09(水) 23:46:17.28副作用完了点をつければいいということは
この場合は
C++ , C=C;
C++ , C==C;
ということですね(`・ω・´)シャキーン
0030デフォルトの名無しさん
2011/03/10(木) 01:43:11.96i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
ビットを数えていると思うんですが、動きがわかりません><
0031デフォルトの名無しさん
2011/03/10(木) 01:44:25.72>が三つになっているのはミスです
0032デフォルトの名無しさん
2011/03/10(木) 04:28:57.52最初に2ビットずつ何ビットあるか計算して、
次に4ビットずつ何ビットあるか計算して、
更に8ビットずつ何ビットあるか計算して、
今度は16ビットずつ何ビットあるか計算して、
最後に32ビットに何ビットあるか計算しています。
0033デフォルトの名無しさん
2011/03/10(木) 06:35:06.98i - ((i >> 1) & 0x55555555);
0x55555555ってのは0101010…以下略のビットが並んでる状態で
隣合う2ビット毎に、そこで立っているビット数を、その2ビット自身に格納
11 → 11 - 01 → 10
10 → 11 - 01 → 01
01 → 01 - 00 → 01
00 → 00 - 00 → 00
> (i & 0x33333333) + ((i >>> 2) & 0x33333333);
0x33333333ってのは00110011…以下略のビットが並んでる状態で
隣合う2ビット毎をペアにした計4ビット毎のビット数を、その4ビット自身に格納
xxyy → yy(下位2ビットのビット数) + xx(上位2ビットのビット数) → 0zzz(4ビットのビット数)
以降、同様に繰り返しているだけたが、最初のビットの数え方だけ違うのと
不要ビットの消し方も最適化してるから分かり辛いかも
以下、もともとの考え方
i = ((i & 0xaaaaaaaa) >> 1) + (i & 0x55555555);
i = ((i & 0xcccccccc) >> 2) + (i & 0x33333333);
i = ((i & 0xf0f0f0f0) >> 4) + (i & 0x0f0f0f0f);
i = ((i & 0xff00ff00) >> 8) + (i & 0x00ff00ff);
i = ((i & 0xffff0000) >> 16) + (i & 0x0000ffff);
return i;
で、これを最適化すると>>30になる
0034デフォルトの名無しさん
2011/03/10(木) 08:19:40.10どうしたらいいですか?
#include<stdio.h>
int main(void)
{return(0);}
このプログラムならどうなりますか?
0035デフォルトの名無しさん
2011/03/10(木) 08:33:15.99time コマンドとかプロファイラとか
0036デフォルトの名無しさん
2011/03/10(木) 08:33:19.480037デフォルトの名無しさん
2011/03/10(木) 08:34:41.00前提:
スレッドは2つ(スレッドA、スレッドB)
A、B間で、データを受け渡しするために、共有メモリを使用する。(構造体M)
しばり:
ソースを自由に変更できるのは、スレッドBのみ。(スレッドAのソースは現在の実装を変更できない、スレッドBのソースのみを変更して、B,M,A間のデータの整合性を実現させたい。)
0038デフォルトの名無しさん
2011/03/10(木) 08:36:19.58・データを格納する配列 : int a[L]; // L=1<<13
・配列 a[] への、現在の書き込み先頭インデックス : int write_index;
・配列 a[] への、現在の読み込み先頭インデックス : int read_index;
・write_index 〜 read_index 間の距離(配列個数) : int count;
・Mの操作作法:
write_index は 0 → L 方向に増加し、L 以上で 0 に戻り、循環する。 つまり、 write_index++ をする場合は、実際には
write_index = (write_index+1) % L; もしくは(Lが(1<<x)の場合に限り)、 write_index = (write_index+1) & ~(L-1)
read_index も write_index 同様。
count は、循環を考慮して計算する必要がある。(つまり単純に write_index - read_index では不正)
Aの動作:
まったく自由でランダムなタイミングで、a[read_index]からa[write_index]までのデータを参照する。 それに伴い、read_index と count の値も操作する。
Bの動作:
まったく自由でランダムなタイミングで、a[write_index]にデータを書き込む。 それに伴い、write_index の値を操作する。
質問:
B、M、Aの整合性を保つ方法。
つまり具体的に、 B の write_index (int)への書き込みは、スレッドセーフだと想定して良いのかどうか。(intel core2以降のCPUの動作として)
すなわち、仮に write_index が実際には struct write_index {int a, b;} だとすれば、 a, b への変更は、タイミングにズレが生じるので問題だが、
(int)への書き込みの場合にも、このようなズレ(タイムラグ)は発生するのだろうか?
つまりスレッドAが、(int)に0xFF を書く場合、スレッドA(CPU A)がLSB側3ビット目までしか書き終わってないタイミングで、 スレッドB(CPU B)がアクセスして、0x07として読み取る心配は不要なのかどうか。
0039謙虚フロンティア戦士
2011/03/10(木) 11:34:12.610040デフォルトの名無しさん
2011/03/10(木) 13:06:34.160041デフォルトの名無しさん
2011/03/10(木) 20:20:42.41質問の本質に対して話長杉w
現実世界でC言語で書かれた (write_index+1) % L や write_index = (write_index+1) & ~(L-1) が
アトミック性を持つ可能性はほぼ 0 なのでクリティカルセクションになる
0042謙虚フロンティア戦士
2011/03/10(木) 21:19:42.93書いてある前提が全て正しければ、整合性は取れる
0043デフォルトの名無しさん
2011/03/10(木) 21:48:11.120044謙虚フロンティア戦士
2011/03/10(木) 22:04:25.680045デフォルトの名無しさん
2011/03/10(木) 22:20:02.42volatileでコンパイラ最適化抑制をしておかないと場合によってはハマる予感
0046デフォルトの名無しさん
2011/03/10(木) 22:28:02.76他の行にも複数エラーありの表示が出るんですが・・・
ピンポイントでここが違うんじゃないかという予想のエラー表示を
して欲しいものです。
0047デフォルトの名無しさん
2011/03/10(木) 22:31:31.000048デフォルトの名無しさん
2011/03/10(木) 22:34:02.05無いより有ったほうが良い 少なくともそれ以前はエラーじゃないことがわかる
0049デフォルトの名無しさん
2011/03/10(木) 22:45:48.900050デフォルトの名無しさん
2011/03/10(木) 23:33:21.61ついでに予想して直してくれりゃ最高だなw
0051デフォルトの名無しさん
2011/03/11(金) 01:06:58.63非常に難しい分野
0052デフォルトの名無しさん
2011/03/11(金) 01:09:09.89うとしているのですがエラーがでます。どこがマズイんでしょうか?
エラー E2034 0311.cpp 10: 'int' 型は 'char *' 型に変換できない(関数 main() )
エラー E2034 0311.cpp 10: 'int' 型は 'char *' 型に変換できない(関数 main() )
#include <stdio.h>
int main(void)
{
char y[10];
printf( "1〜9999の間数字を入力してください \n" );
fgets( y, 10, stdin ); /* 標準入力から入力 */
while (1>y || 9999<y)
{
printf("1〜9999の間で入力してください。\n");
fgets( y, 10, stdin );
}
puts(y); /* 入力された文字列を表示 */
return 0;
}
0053デフォルトの名無しさん
2011/03/11(金) 01:51:33.830054デフォルトの名無しさん
2011/03/11(金) 03:42:20.02数字と配列を比較しているのがまずい。
GCCしか手元に無いので試せてなくて申し訳ないが、たぶんVC++とかでも動く……はず。
#include <stdio.h>
int main(void){
char y[10];
/* 1と入力してEnterキー押してみ。 */
fgets(y, 10, stdin);
/*「2673946」なり「1438764」なり、妙な数字が出ると思う。この数字は「メモリ上の番地」を指している。
yには確保したメモリ領域の先頭の番地(数字)が入っている。
char y[10]って書いたら「xxxxxx番地から10バイト(char10コ分)のメモリ領域を確保せよ」の意味。ちなみに
y[0] = 「メモリ上のxxxxxx番地に記載されたデータを出せ」の意味。
y[1] = 「メモリ上のxxxxxx番地から1バイト先に記載されたデータを出せ」の意味。*/
printf("y = %d\n", y);
if (y == 1) {
printf("%d = 1\n", y);
}
else {
printf("%d != 1\n", y);
}
/* オマケ。 文字列の"1"を数字に直すと49。数字の49を見たら"1"って文字に直しましょうという「ASCII」仕様に拠る。
ttp://e-words.jp/p/r-ascii.html を参照のこと*/
printf("%cって文字は数字の%d。\n", y[0], y[0]);
return 0;
}
試してみ。
0055デフォルトの名無しさん
2011/03/11(金) 03:51:28.01一個のテキストファイルしか扱わないならピンポイントでもいいんだわ。
1000コの.cファイルを扱うようなとき、「エラー一個見つけたら止まる」だと
直してコンパイルして直してコンパイルして……ってことになる。
そりゃ開発者側からすれば面倒なわけ。複数個のエラーがあるなら全部直した上でコンパイルしたいし、
エラーの箇所は大体知っておきたい。
だから大体のコンパイラは「他にもエラーが無いか探して、分かりえる限り全部のエラーを
プログラマーに示そうとする」ような作りになってる。
初心者から上級者まで全部を満足させるのは難しいわけね。仕様と思ってあきらめて。
初心者レベルなら一番初めのエラーだけ見ておけば済むと思う。
0056デフォルトの名無しさん
2011/03/11(金) 04:12:10.820057デフォルトの名無しさん
2011/03/11(金) 06:15:28.07>つまりスレッドAが、(int)に0xFF を書く場合、スレッドA(CPU A)がLSB側3ビット目までしか書き終わってないタイミングで、 スレッドB(CPU B)がアクセスして、0x07として読み取る心配は不要なのかどうか。
x86系なら、bit単位でスライスされるなんてことないから、心配無用
まぁ、他の系統でも、そんな動作聞いたことないから大丈夫だとは思うが…
但し、bit単位でNGはありえないが、バイト単位でのNGはあり得るので
心配であれば、スレッドAのread_indexへの書き込みが、intと同じ大きさで
一回の命令で書き込まれているかを確認する必要がある
※たとえば、スレッドAのread_indexへの書き込み部の実装が、
1バイト単位でのコピーになってれば当然NG(普通はあり得ないが保障もない)
あとは、作った奴がアホで、スレッドAでread_indexやcountを変更後に
配列 a[]を読み込んでたり、スレッドbでread_index確認せずに、
スレッドAが参照する前に追い越したり(write_indexの書き換えタイミングも同様)
アホなことをしなければ大丈夫だと思われる。
0058デフォルトの名無しさん
2011/03/11(金) 06:36:53.44ピンポイント予想が出来ないから、可能性のある場所全てが表示される
逆に考えれば、ピンポイント予想の一か所を外した場合、間違ってる箇所を探すのが大変
0059デフォルトの名無しさん
2011/03/11(金) 08:38:21.15え?
0060デフォルトの名無しさん
2011/03/11(金) 09:49:03.390061デフォルトの名無しさん
2011/03/11(金) 11:48:30.48・・・・
0062謙虚フロンティア戦士
2011/03/11(金) 13:33:19.03もうすこし根は深いぞ
例えばスレッドAとBが同じint型変数を100回ずつインクリメントする
プログラムを実行したとして、必ずしも
変数の値が200増える保証はない
0063デフォルトの名無しさん
2011/03/11(金) 13:42:31.55怪しげコード;;;;;;;;;
0064デフォルトの名無しさん
2011/03/11(金) 14:41:45.20typedef _tgaAAA{
...
};
typedef {
...
}AAA;
typedef _tgaAAA{
...
}AAA;
これらの違いをお教えいただけますでしょうか・・・。
0065デフォルトの名無しさん
2011/03/11(金) 15:07:23.93構文エラーかどうか
0066デフォルトの名無しさん
2011/03/11(金) 16:54:10.55すんません、structぬけてました。
006737
2011/03/11(金) 19:04:29.83スレッドA、Bは並列動作
ケース1 : スレッドB は 0 と -1 を交互に、 write_index へ一度に書き込む場合
http://ideone.com/Dn5SW
ケース2 : スレッドB は 0 と -1 を交互に、 write_index へ複数ステップで書き込む場合
http://ideone.com/Tn0y1
ケース1と、ケース2では、スレッドBの動作が異なるだけで、あとはすべて同じです。
ケース1では、心配してたバイト単位での不整合は、起きないようです。(CORE2の場合)
ケース2では、書き込みが2回に分けて行われますが(上位16bit、下位16bit)、この場合、Aとの同期に失敗します。(Aは0か-1以外ならエラー表示)
ケース3 : ケース2の各スレッドの動作速度を下げた。(1マイクロ秒毎)
http://ideone.com/hA2tF
ケース3の場合、動作速度以外はケース2と同じコードであるにも関わらず、実質、エラーが現れなくなりました。
(注:消えたではなく)
これは、おどろくべき事だと感じます… というか、並列プログラムのデバッグ・バグ再現の難しさを象徴してると思いました。
006837
2011/03/11(金) 19:11:06.33ケース1のように個々のIOはアトミックなので問題は出ないと思いますが、ご指摘のとうり、やはり懸念材料は count です。(変数操作が2つ以上あるということ。ケース2の例に相当)
そのものズバリ、「スレッドAとBで100づつ増やしても200にならない」問題です。(スレッドAを変えられさえすれば…)
また、
スレッドAでは、a[read_index+1]; read_index++; ではなく、ご察しのとうり(懸念どうり)、 read_index++; a[read_index]; の順序だったりします。(もともとシングルスレッド前提に書かれたコードなので)
これは実質スレッドBの動作には直接影響は無いと考えられますが、やはりシングルスレッドの時には注意しなかった微妙な点までもが、プログラム中で意味を持つようになるのは厄介に感じますね…
ある方法を思いついたのですが、アトミックが保証される動作に限定することで、A、B間での共有変数Mの操作に、セマフォ等を用いなくても可能になるのではないか? と思いました。が、実際にコード書いて検証はしてませんが。
count、write_index、read_index が、もしも128bitの配列として定義されてるのであれば、
書き込み、読み込みのインターフェースを限定し、そのインターフェース内でsseのmovで実現すれば、count と write_index を同時に書くことも可能になるかもしれないといことです。
(sseのmovはアトミックが保証されるのだろうか?がまだ不明ですが、保証される前提で考えてます。)
しかし、実際、それにはスレッドAのMへのアクセスも、すべてインターフェース使用を前提として書き換える必要が出てくるので、やはり実際には無理です…
(というか、スレッドAを書き換えられるとしても、セマフォではなく、sseレジスター128bit単位の方式の方が、セマフォでやるよりも効率の点でも良いような気がしますが、
果たしてsseのmovはbit単位で安全なのだろうか?等の懸念)
0069デフォルトの名無しさん
2011/03/11(金) 19:13:25.070070デフォルトの名無しさん
2011/03/11(金) 20:51:27.5616進数化するにはどういう方法を使えばいいのでしょうか
0071デフォルトの名無しさん
2011/03/11(金) 22:30:48.510072デフォルトの名無しさん
2011/03/11(金) 23:12:55.40「16進数化」とは何?
そこから話が始まるぞ。
0073デフォルトの名無しさん
2011/03/12(土) 02:13:36.08printfの%xとか、そういうレベル?
0074デフォルトの名無しさん
2011/03/12(土) 05:27:37.12>そのものズバリ、「スレッドAとBで100づつ増やしても200にならない」問題です。(スレッドAを変えられさえすれば…)
そりゃ、両スレッドから同じ値をカウントアップすれば、吐かれるコードによってはそうなって当たり前。
今回の話では、スレッドBは共有のcountを更新する必要はない。
スレッドBでは、前回読み込み時のread_indexとcountはローカルのみで保存して
read_indexが前回の読み込み時と同じ場合のみ、ローカルのcountと共有メモリのcountを、比較すればOK
(もちろんcountの更新方法はスレッドAと同じ方法で実装すること→最適化に注意)
と言っても、read_index++; a[read_index]; の更新&読み込み順だと、何やっても無駄だけどね…
0075デフォルトの名無しさん
2011/03/12(土) 05:41:38.30>(もちろんcountの更新方法はスレッドAと同じ方法で実装すること→最適化に注意)
ローカルのcountの更新は「前回のread_index」>「今回のread_index」もしくは、
「前回のread_index」==「今回のread_index」&&「ローカルcount」!=「共有count」
このcountの更新タイミングをスレッドAと同じタイミングで実装
って、これも分かり辛いか…
まぁ、何となく分かってくれ
0076デフォルトの名無しさん
2011/03/12(土) 05:46:39.77今回の話では、スレッドAが書いたものをスレッドBが読み込んで、
スレッドBが書いたものをスレッドAが読み込む仕様なので、そんな問題は起こらない。
0077デフォルトの名無しさん
2011/03/12(土) 06:07:38.05あぁ、ゴメン。
何か変だと思ったら、countの仕様とか、read writeとか反対に考えてた
つー訳で色々と無理だから諦めろ
0078デフォルトの名無しさん
2011/03/12(土) 06:24:24.95スレッドAの仕様にもよるが、読み込む時にcountをキーにしてる(count==0なら何もしない)
かつ、countが残っている限り、貪欲にデータを読み込む仕様であれば、
スレッドAをcount==0になるまで飢えさせて、データを渡す量を調整する手もある。
(countの確認→データの書き込み→write_index→countの更新順)
また、スレッドBが重い処理で、調整が難しいなら、
安全にデータを渡すためのスレッドCを作ってブリッジすればOK。
まぁ、いかにも継ぎはぎになってしまうけどね
0079グループ
2011/03/12(土) 06:46:24.850080デフォルトの名無しさん
2011/03/12(土) 09:03:59.0917 歳からです。結構としですね。
0081謙虚フロンティア戦士
2011/03/12(土) 11:32:12.13複数スレッドから同じ変数を更新するなら、
全スレッドでアトミックなメモリ操作にしない限り
どんな小細工しても整合性を保つことは不可能。
#define XXX 10
static const int YYY = 20;
int main (void){
#define XXX 1000
printf("%d\n", XXX);
// #undef XXX
{
static const int YYY = 2000;
printf("%d\n", YYY);
}
printf("%d\n", XXX);
printf("%d\n", YYY);
return 0;
}
0083デフォルトの名無しさん
2011/03/12(土) 12:16:35.07何が良いのか分からんが"定数定義"ってならconst
コンパイラの最適化の能力にもよるが、const int a = 123; とすると、実際に a を格納する領域を確保する場合がある。
定数にメモリを確保することが可能性としてあっていいのならば、int const a = 123; としていい。
定数のためにメモリを確保することを絶対に避けたいのであれば #define でマクロ置換とすればいい。
整数の定数宣言であれば enum を使う流儀も最近みかける。
0085デフォルトの名無しさん
2011/03/12(土) 12:58:29.19これこれ、真っ赤な嘘を書かんようにな
0086デフォルトの名無しさん
2011/03/12(土) 12:59:19.130087デフォルトの名無しさん
2011/03/12(土) 13:10:30.17コンパイラの最適化の能力にもよるが、const int a = 123; とすると、実際に a を格納する領域を確保する場合がある。
定数にメモリを確保することが可能性としてあっていいのならば、int const a = 123; としていい。
定数のためにメモリを確保することを絶対に避けたいのであれば #define でマクロ置換とすればいい。
整数の定数宣言であれば enum を使う流儀も最近みかける。
0088デフォルトの名無しさん
2011/03/12(土) 13:17:34.78#defineかconstかどっちがいいか聞いてるだけじゃね?
0089デフォルトの名無しさん
2011/03/12(土) 13:29:05.780090デフォルトの名無しさん
2011/03/12(土) 13:38:48.37その「良い」ってのが、どういう様をいうのかによる
おまえさんが聞きたいのは2個目の XXX と YYY がどうなるかってことじゃないか?
その実験でわかったろうが #define には # で始まらない構文にくらべて
独特の扱いにくさがあるよな
誰とは言わんが即値になるか数値リテラルになるかの保証はそんなに甘くないぜ
0091デフォルトの名無しさん
2011/03/12(土) 13:44:40.84>誰とは言わんが即値になるか数値リテラルになるかの保証はそんなに甘くないぜ
kwsk
#define でも即値にならない場合があるの?
0092デフォルトの名無しさん
2011/03/12(土) 13:46:53.38あんた誰?
あと定義の場所ですがヘッダーとかに書くんじゃなくて使いたい場所の直前とかで定義するのが良いんですかね
void func(void)
{
int unko_val;
unko_val = get_unko();
{
static const int UNKO_MAX = 100;
if(UNKO_MAX < unko_val){
delete_mylife();
}
}
0094デフォルトの名無しさん
2011/03/12(土) 14:18:25.24それってコンパイル通るんか
0095デフォルトの名無しさん
2011/03/12(土) 14:31:02.670096デフォルトの名無しさん
2011/03/12(土) 14:43:35.75QZaw55cn4c
0098デフォルトの名無しさん
2011/03/12(土) 14:59:44.68NGしてるから隠さないでちゃんと付けとけよ
>スタックに領域確保する処理
というのは sp レジスタを定数分減らすことです。
これって一つでも他に auto 変数があれば不可避の動作ですから、static つけようとつけまいとほとんど差はありません。
0101デフォルトの名無しさん
2011/03/12(土) 21:10:32.31COBOL あたりはそういう思想だね
0102デフォルトの名無しさん
2011/03/13(日) 02:14:08.76readとwriteのスレッドに分かれてれば、両スレッドから同じ変数を更新する必要はない
ただし、>>37はスレッドAがcountを触ってしまってるため、その手が使えないって話が>>77
0103デフォルトの名無しさん
2011/03/13(日) 02:21:02.04定数を定義して使うのであればconst
定数を定義しないで使うのであればマクロ
スタックだとか即値だとかは環境依存なので、
xxxの環境で即値にするためには、どうすれば良い?
って質問であれば答えられるかもしれんが、
C言語の規格だけで、答えられるものではない。
0104デフォルトの名無しさん
2011/03/13(日) 04:48:28.98そのバイナリになったファイルをtxtで保存すると
すごく大きい容量になるのですが
これの解消法とかないですかね
0105デフォルトの名無しさん
2011/03/13(日) 05:49:41.33ド素人に考え方です。
static なしであれば、環境が許せば即値で定数が表現できる。
static をつけると、つねにそのためのメモリが確保される。
サイズ的にどうということがないという環境であれば、どちらでも問題はないが、
C プログラムについては、制限の多い環境で使われることも念頭において、人は評価する傾向にあるようです。
const int XXX = 10;
と書くとスタックを消費せずにXXXの文字列が10に置き換わる動作をする
コンパイラもあるってことなんですか?
私の知識ではローカル変数はスタックにプッシュされるものだと思っていたんですが
そうではない環境もあるということですか?
それならスタック消費なしで型情報も持たせられるのでconstが最強ですね
0109デフォルトの名無しさん
2011/03/13(日) 11:28:27.320111デフォルトの名無しさん
2011/03/13(日) 11:43:21.980112デフォルトの名無しさん
2011/03/13(日) 11:52:10.43というコードがあるんですが
この場合startSoundPlayerというメモリコンテナに該当サウンドを代入している
という認識でよろしいんですよね?
プリプロセッサ処理なのにint???
0114デフォルトの名無しさん
2011/03/13(日) 12:15:35.09よーく考えよー
0116デフォルトの名無しさん
2011/03/13(日) 13:20:36.020117デフォルトの名無しさん
2011/03/13(日) 13:55:48.690118デフォルトの名無しさん
2011/03/13(日) 13:57:00.410119デフォルトの名無しさん
2011/03/13(日) 14:06:22.110120デフォルトの名無しさん
2011/03/13(日) 15:57:40.97私の知識がすでに時代遅れです。
0121デフォルトの名無しさん
2011/03/13(日) 16:12:24.01規格には何て書いてあるか調べたのか?
そして、それが全てだ。
0123デフォルトの名無しさん
2011/03/13(日) 16:18:15.91知識あれば、できるなら、誰も苦労しないだろうに
0124デフォルトの名無しさん
2011/03/13(日) 16:22:15.050125デフォルトの名無しさん
2011/03/13(日) 16:33:31.570126デフォルトの名無しさん
2011/03/13(日) 16:49:26.80時代遅れって、何時のどんなC言語処理系で「ローカル変数はスタックにプッシュ」が使われていたんだ?
0127デフォルトの名無しさん
2011/03/13(日) 17:03:40.66ターゲットが Forth な C コンパイラ
0128デフォルトの名無しさん
2011/03/13(日) 17:09:44.15話の流れに static がでてきてるのに時代だってお(バンバン
0129デフォルトの名無しさん
2011/03/13(日) 17:11:33.62なるほど、ネイティブコードじゃなくて仮想マシンターゲットですか。
なら、CILあたりも似たようなことをやっているので時代遅れでは無いのでは?
実際にはCじゃなくてC++/CLIになるけどね
0130デフォルトの名無しさん
2011/03/13(日) 18:22:45.340131デフォルトの名無しさん
2011/03/13(日) 20:29:50.01ごめんなさい。わたしのことです。技術は月進日歩だというのに。
http://toki.2ch.net/test/read.cgi/i4004/1295492625/324
0132デフォルトの名無しさん
2011/03/14(月) 17:44:58.85while(t)
{
略;
t++;
略;}
や
while(t)
{
if(略){略;t++;}
if(略){t++;略;}
t++;
}
などでは、tは初期化されずに、常に新しい値が保存されては、
変化しますよね?
goto文や再帰関数などでも変数の値は、常に新しく保存されて、
処理によって変化されますか?
tが初期化されたり、保存が切れるような場合を教えてください・・・
0133デフォルトの名無しさん
2011/03/14(月) 17:50:17.13頼むから日本語かC言語かのどちらかで質問してくれ
0134デフォルトの名無しさん
2011/03/14(月) 18:43:00.01失礼しました・・
常に状況に応じて変化させなければいけない変数が多いというのに
whileやdo,for,ifなどの(){}などの関数構造がかなり複雑で、設定
が難しいなという事です。
どの段階で変数を設定したらいいのかなど良く分からないんです。
http://hibari.2ch.net/test/read.cgi/tech/1289715349/269
に、標準ライブラリの qsort() に沿った実装を書いてみました。
ご参考になればいいのですが。
0136デフォルトの名無しさん
2011/03/14(月) 18:47:17.91実装とは何でしょうか?
0137デフォルトの名無しさん
2011/03/14(月) 18:59:50.26一部分のコード晒されても答えられる人はいないだろうに
0138デフォルトの名無しさん
2011/03/14(月) 19:27:45.07(3次元までは家イメージで分かるんですが)
こんなイメージでいいのですか。配列の配列の配列の配列の配列の配列の配列の配列って感じですが。
EightDemensionArray[][][][][][]
□□□□(1次元)
■
■
■△△△△△(3次元)
■ 〇
■ 〇×××××××(5次元)
■ 〇 ★
■ (4次元) ★@@@@@@@@@(7次元)
■ ★ ☆
■ (6次元) ☆
(2次元) ☆
(8次元)
0139デフォルトの名無しさん
2011/03/14(月) 19:34:56.000140デフォルトの名無しさん
2011/03/14(月) 20:53:08.890141デフォルトの名無しさん
2011/03/14(月) 21:01:25.86d1の中にはd2が複数個入ってる
d2の中にはd3が複数個入ってる
袋の中に吹く論が入ってるだけ
0142デフォルトの名無しさん
2011/03/14(月) 21:56:43.410143デフォルトの名無しさん
2011/03/14(月) 22:21:50.36そのまえに次元とは何かを理解する必要がありそうだな
0144デフォルトの名無しさん
2011/03/14(月) 22:23:02.350145デフォルトの名無しさん
2011/03/14(月) 22:54:42.94次元大介
0146デフォルトの名無しさん
2011/03/14(月) 22:57:11.380147デフォルトの名無しさん
2011/03/15(火) 00:48:30.30技術?っていうのかネタっていうのか知らないけど、持ってるんですか?
0148デフォルトの名無しさん
2011/03/15(火) 00:53:58.61誰かが考えたアルゴリズムに到達するだけ
「俺様オリジナル」とか言ってるのはすでに誰かが考えてる
0149デフォルトの名無しさん
2011/03/15(火) 01:37:36.91その場で間に合わせのために
適当なアルゴリズムを捻り出すことは無いわけじゃないだろうが
ほとんどの問題は、ソートとか基本的なアルゴリズムの組み合わせで解決できる
自前のライブラリを持っている人は多いだろうと思う
0150デフォルトの名無しさん
2011/03/15(火) 10:53:43.34何も考えないでコピペして、はまりますって感じ?
0151デフォルトの名無しさん
2011/03/15(火) 10:56:08.15if( A == (B||C) )
で今A = Bがちゃんと入ってるのですがこのifを通りません。どうしてでしょうか?
0152デフォルトの名無しさん
2011/03/15(火) 11:14:25.350153デフォルトの名無しさん
2011/03/15(火) 11:18:55.74A=(BまたはC) じゃないんですか?
今A=Bなので
A=B=(BまたはC)って成立してるんじゃないんですか?
0154デフォルトの名無しさん
2011/03/15(火) 11:21:11.42(B||C) は 1 または 0
0155デフォルトの名無しさん
2011/03/15(火) 11:32:14.870156デフォルトの名無しさん
2011/03/15(火) 11:33:19.00どういうとき(B||C)が1になるのでしょうか?
0157デフォルトの名無しさん
2011/03/15(火) 11:39:20.44B が 0 以外 または C が 0 以外であるとき
0158デフォルトの名無しさん
2011/03/15(火) 11:49:06.150159デフォルトの名無しさん
2011/03/15(火) 13:27:10.53その場合はfabs(a - b) < 1e-10で比較するといいよ、と。
0160デフォルトの名無しさん
2011/03/15(火) 15:04:29.46関数への変数の受け渡しについて
http://oshiete.goo.ne.jp/qa/6431580.html
>int a[10];
>
>また「a」と「&a[0]」は「値は同じ」ですが「意味が違う」ので注意しましょう。
>例えば「a+1」と「(&a[0])+1」は「異なる値」になります。
との言及があります。
Borland C++ 5.5.1 for Win32で、「a+1」と「(&a[0])+1」の値を確かめたところ同じ値でした。
他のOSやコンパイラーでは異なる値になるのでしょうか?
0161デフォルトの名無しさん
2011/03/15(火) 15:06:19.38意図は違うかもしれないけど、意味は同じです
0162デフォルトの名無しさん
2011/03/15(火) 15:22:04.12それは勿論、& a[0] + 1とも同じです。
0163デフォルトの名無しさん
2011/03/15(火) 16:57:55.77ありがとうございます。
同じ値になるのが正しいのですね。
0164デフォルトの名無しさん
2011/03/15(火) 17:32:46.90ライブラリ使うのか、普通に配列とかスタックとか使ってクイックソート仕様
でやるのがいいのかどっちなんですか?
0165デフォルトの名無しさん
2011/03/15(火) 17:41:34.85要求を満たすほうを使う
コード記述量が少なくなるほうを使う
信頼できるほうを使う
0166デフォルトの名無しさん
2011/03/15(火) 17:49:45.32printf,scanfとか書くのが面倒臭いので、printfの場合は
p("helloworld")とかscanfの場合はs("%d",&t)みたいに省略
したいんですができますか?
0167デフォルトの名無しさん
2011/03/15(火) 17:51:24.950168デフォルトの名無しさん
2011/03/15(火) 17:55:37.40ヘッダファイルにそういうライブラリを作るんでしょうか?
良く分かりません。
記述の省略化という観点から、こういう事してるプログラマーって
多いのでしょうか?皆さんどうですか?
0169デフォルトの名無しさん
2011/03/15(火) 18:00:06.28そんな可読性を極端に落とすプログラマーなんて少ないはず
統合開発環境でも使って入力補完したほうがいい
0170デフォルトの名無しさん
2011/03/15(火) 18:00:12.34書くのは楽かもしれんけどな
0171デフォルトの名無しさん
2011/03/15(火) 18:04:21.73printf("%d", x);→pdx
scanf("%d",&x);→sdx
みたいに省略化したいなと思ってましたw
やっぱり見づらくなるんですね。入力補完機能使ったほうがいいですよね。
0172デフォルトの名無しさん
2011/03/15(火) 18:08:46.35C99なら
#define p(...) printf(__VA_ARGS__)
それより前なら
int p(const char *fmt, ...) {
va_list list;
int result;
va_start(list, fmt);
result = vprintf(fmt, list);
va_end(list);
return result;
}
0173デフォルトの名無しさん
2011/03/15(火) 18:11:27.72qsortをクイックソートで実装しなさいという決まりはないので、もしかしたらクイックソートで
実装していないコンパイラがあるかもしれません。
なので、汎用性の高いコード+クイックソートでないと嫌という場合は自分で実装することになる
かもしれません。
0174デフォルトの名無しさん
2011/03/15(火) 18:12:39.43あほなもん勧めるなよ
どうしてもやるなら
#define p printf
でいいだろ
0175デフォルトの名無しさん
2011/03/15(火) 18:17:15.16関数ポインタの実行速度が気になるなら、自前でやるほうがいいよ
0176デフォルトの名無しさん
2011/03/15(火) 18:34:14.44パラメータを調整したクイックソート&マージソートって実装はあるらしい
0177デフォルトの名無しさん
2011/03/15(火) 18:39:52.510178デフォルトの名無しさん
2011/03/15(火) 19:14:09.64num--;
}
※{}内省略
この文の継続条件式はnumとしか書いてないのですが、num==1とnumって同様の意味なのでしょうか?
num>10とか書いてあるなら分りますが、numだけとしか書いてないとどういう意味なのでしょうか?
0179デフォルトの名無しさん
2011/03/15(火) 19:16:47.79while(num!=0){
0180デフォルトの名無しさん
2011/03/15(火) 19:21:41.590181デフォルトの名無しさん
2011/03/15(火) 19:36:56.15while は条件式を評価した結果が 0 以外の場合にループする
あとはわかるな?
0182デフォルトの名無しさん
2011/03/15(火) 19:47:20.850183デフォルトの名無しさん
2011/03/16(水) 00:43:15.14アルゴリズム存在しますか?
0184デフォルトの名無しさん
2011/03/16(水) 00:50:25.33意味がわからないけどスレ違いだと思う
0185デフォルトの名無しさん
2011/03/16(水) 01:01:59.640186デフォルトの名無しさん
2011/03/16(水) 01:03:27.66バブルソート (の変形版)
ならソート済みデータに一つ追加しただけのときは早い
0187デフォルトの名無しさん
2011/03/16(水) 01:21:24.730188デフォルトの名無しさん
2011/03/16(水) 01:28:21.77奇数かどうかを判定するアルゴリズム
return i % 2; // 1回の計算を必要とする
return 0; // 1回も計算をする必要がない!高速!しかし成功率は50%
0189デフォルトの名無しさん
2011/03/16(水) 01:30:21.98確かにwww
素数判定はどうですか?
http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A9%E3%83%BC-%E3%83%A9%E3%83%93%E3%83%B3%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A%E6%B3%95
0191デフォルトの名無しさん
2011/03/16(水) 02:30:30.86Bloom Filterのような確率的アルゴリズムは
アルゴリズムが満たすべき条件を緩める代わりに
他の性能が改善されていることが多い
0192デフォルトの名無しさん
2011/03/16(水) 03:06:35.27めちゃくちゃ処理が早いと言うほどではない
まぁ、boolean返す関数で期待値として50%なら
それを決め打ちでtrueかfalseを返せば、めちゃめちゃ処理が早くなるかもしれない
0193デフォルトの名無しさん
2011/03/16(水) 03:57:52.25素数判定にそういうのがある
0194デフォルトの名無しさん
2011/03/16(水) 06:05:01.41もし設定の変更が必要ならその手順も教えていただけたらありがたいです。お願いします。
0195デフォルトの名無しさん
2011/03/16(水) 06:07:05.630196デフォルトの名無しさん
2011/03/16(水) 06:07:26.73★初心者にVisual C++を教えるスレ★ Part37
http://hibari.2ch.net/test/read.cgi/tech/1299982561/l50
0197デフォルトの名無しさん
2011/03/16(水) 06:24:49.131>------ ビルド開始: プロジェクト: hello2, 構成: Debug Win32 ------
1> hello2.cpp
1>d:\mison.d\visual studio 2010\projects\hello2\hello2\hello2.cpp(5): fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "StdAfx.h"' をソースに追加しましたか?
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
学校でやったときは,VSではなかったのですができてたんです・・・
>>196 ありがとうございます!参考にさせていただきます。
0198デフォルトの名無しさん
2011/03/16(水) 07:35:29.34Cygwinのgcc 4.3.4では警告は出ません。
実行ファイルは問題なく生成されましたが、この書き方は推奨されていないのでしょうか?
char *str = "test str";
printf(str); //strをそのまま渡すとUbuntuのgccでは警告が発生する
//警告文
//format not a string literal and no format arguments
printf("%s", str); //問題なし
puts(str); //問題なし
0199デフォルトの名無しさん
2011/03/16(水) 07:54:02.54strが指す先に、例えば"Hello! %d"なんて文字列がいると破綻するから警告されているのです。
printf()系のフォーマット文字列に(文字列リテラルでない)生のポインタを渡すのは充分注意が必要です。
0200デフォルトの名無しさん
2011/03/16(水) 08:15:44.60詳しい説明ありがとうございました。
次からは注意して使ってみます。
0201デフォルトの名無しさん
2011/03/16(水) 08:54:45.500202デフォルトの名無しさん
2011/03/16(水) 09:13:22.01入門書の通りに進めればいい
0203デフォルトの名無しさん
2011/03/16(水) 09:57:19.05たいていのコンパイラは拡張子を .c にするだけ
0204デフォルトの名無しさん
2011/03/16(水) 11:15:35.95目標はギャルゲーを作ることです
0205デフォルトの名無しさん
2011/03/16(水) 12:34:35.94の表示を出した後に、処理を休止するソフトのほうがいい
ただしforループによる停止は不可とする。それは処理休止しているのではないからだ。
「forループが動いている事で操作を受け付けない」だけだから休止とは言わない。
0206デフォルトの名無しさん
2011/03/16(水) 12:35:19.61絵の練習
シナリオの練習
0207デフォルトの名無しさん
2011/03/16(水) 14:09:51.29C言語でスレッドを4つ作って、各スレッドからRS232CのCOMポートにアクセスすることは普通にできるのでしょうか?
すみません、お願いします。
0208デフォルトの名無しさん
2011/03/16(水) 14:20:30.210209デフォルトの名無しさん
2011/03/16(水) 14:35:43.35Cではやったことはないが、できないということはないだろうな
ただ、1つのポートへ同時に複数スレッドの接続はできないだろうが
しかし、お前のレベルでマルチスレッドプログラミングはやめておけ
マルチスレッドはタイミング的な問題も発生しやすいからバグが見つけにくい
オブジェクトのきちんとした管理や場合によっては排他処理が必要になる
0210207
2011/03/16(水) 15:25:18.32スレッド1はCOM1、スレッド2はCOM2、スレッド3はCOM3というように、一つのCOMに複数スレッドでアクセスはしません。
各スレッドごとに、CreateFile、SetComm?、Write?、Read?という一連のよくあるサンプルのようにかいたらできるのかなと思いまして。
0211デフォルトの名無しさん
2011/03/16(水) 15:29:54.21まあ新しい言語作れって話になっちゃうんだろうけどさ。
0212デフォルトの名無しさん
2011/03/16(水) 15:35:08.010213デフォルトの名無しさん
2011/03/16(水) 16:25:47.43「WindowsAPIやLinuxAPIを使わずに」
「規定秒だけ処理を休止して復帰させるプログラミ」 作れないやつが多い。
嘆かわしい事である。
やれました!とか言うから見てみるとforだし
だからそれはfor動いている間、他の処理できてねえだろっていう。
あくまでマルチタスクOSのおかげで、他の処理ができているだけであって
「停止しているように見えてる間もCPUを使っている」のは間違いないのだ。
そういうのがダメ。
休止中はCPUを一切使わずに休止。
シングルタスクOSでも、休止中は他の事ができる。
そういうもの作れちゅうてんのに
0214デフォルトの名無しさん
2011/03/16(水) 16:29:38.82CPUは動かないが
時間もしくはそれに相当するカウントを行う
最低でもそれができなきゃCを学ぶ意味はねえ----------------------------------------ッ
ここまでいうとピ-------------------------ンと来るやつもいようが
まさにそれである
それをするためのCだ
VBやJAVAではやれないだろ
0215デフォルトの名無しさん
2011/03/16(水) 16:29:42.52C言語のみの範囲では無理だよ
0216デフォルトの名無しさん
2011/03/16(水) 16:35:52.75アプリ系だな
たわけども
0217デフォルトの名無しさん
2011/03/16(水) 16:38:33.30ノンプリエンプティブなマルチタスクシステムをつくれとな?
まあCなら関数ポインタしってれば簡単につくれるとおもわれるが・・・。
これでよいのかい?
じぶんでおっきするのか、たにんにおっきさせてもらうかでちょいと違いがでるんだけど。
0218デフォルトの名無しさん
2011/03/16(水) 16:38:36.170219デフォルトの名無しさん
2011/03/16(水) 16:39:14.210220デフォルトの名無しさん
2011/03/16(水) 16:41:08.86その割り込みベクタに割り当てられたコードを実行しているわけだから、
CPUが停止しているという縛りははたせていないような・・・。
0221デフォルトの名無しさん
2011/03/16(水) 16:41:13.64アンダーフローしたら割り込みを発する
割り込み受け取ったCPUがおっきさせる
実に簡単なことだが、それをWindowsでやろうとするとカーネル側のドライバが要る。
0222デフォルトの名無しさん
2011/03/16(水) 16:43:08.32どこまでも厳密に解釈すると、無理になるがのう
0223デフォルトの名無しさん
2011/03/16(水) 16:44:53.240224デフォルトの名無しさん
2011/03/16(水) 16:50:48.99何を騒ぎたいのだ?
>休止中はCPUを一切使わずに休止。
>シングルタスクOSでも、休止中は他の事ができる。
休止っていうのはCPU使わないこと?
じゃ、他の事っていうのは誰がするの?
0225デフォルトの名無しさん
2011/03/16(水) 16:53:14.680226デフォルトの名無しさん
2011/03/16(水) 16:54:24.68Aご就寝
B起動
A御起床 (とともにB死亡)
A処理再開
こんなであろうさ
0227デフォルトの名無しさん
2011/03/16(水) 16:56:47.970228デフォルトの名無しさん
2011/03/16(水) 17:07:33.74x86ならHLTしてinterrupt待ちってことね
なら純粋なCでは無理、HLT命令が発行できないから
0229デフォルトの名無しさん
2011/03/16(水) 17:15:14.21アセンブラ直接世べべヴぇヴ
0230デフォルトの名無しさん
2011/03/16(水) 17:18:35.25普段みんなCPUとメモリのことばかり気にするから、周辺チップ使おうって気にはならないよな。
あってもUSBかシリアルポートくらいなもの。
こういうとき、PowerPCだと超ラク。
0231デフォルトの名無しさん
2011/03/16(水) 17:20:40.22インラインアセンブラ使えば寝ることは出来るけど
起きるタイミングは設定できないからsleepの実装は無理だよね
あとOSが管理している以上、次のコンテキストに処理をゆずる
というのは絶対にAPI叩かないと実現不可能だよね
あってる?
0232デフォルトの名無しさん
2011/03/16(水) 17:22:24.67何だ、>>213はアセンブラを学べと主張したかったのか
さすがにそこまでは行間を読めんかったw
0233デフォルトの名無しさん
2011/03/16(水) 17:23:21.970234デフォルトの名無しさん
2011/03/16(水) 17:31:54.61x86だとring0にいなければHLT実行はできない
要はそのOS用のドライバーを書く必要がある
なのでAPI(Application Program Interface)は不要w
0235デフォルトの名無しさん
2011/03/16(水) 17:45:12.25ハッキリ言えば要らないものなんだぞ。
ラップしてあるだけ。
OSが提供する機能 -> それを隠蔽したいために別名にする
それがAPI。
例えば、printf()がCで提供されているが
これをラップして print_to()とか、そんな名前の関数を作る
それがAPIだ。直にprintf()やれば、APIなんか経由しなくてもいいのだが
どうもモダンなOSは互換の問題を気にしているのか、隠したいらしい。
0236デフォルトの名無しさん
2011/03/16(水) 17:51:36.18そんな説明で大丈夫か?
0237デフォルトの名無しさん
2011/03/16(水) 17:52:53.820238デフォルトの名無しさん
2011/03/16(水) 17:56:32.37ザックリ言えばの話よ
0239デフォルトの名無しさん
2011/03/16(水) 17:58:39.93これが不遜メソッドでちゅかー
0240デフォルトの名無しさん
2011/03/16(水) 17:58:53.11ひでーのになるとネイティブ -> API -> 社で決めたローカルAPI -> プロジェクトで決めた超ローカルAPI -> プログラマ
なんてのもあるからな。
ここまで来ると、おまえどんだけオーバーヘッド好きやねん、って言わざるを得ない。
0241デフォルトの名無しさん
2011/03/16(水) 18:03:39.82へー、おまえ作れるの?
上限と下限が両方ある時間的な保証はけっこう難問だぞ
CPU 使用権を明け渡すのではなく本当に CPU を休止状態にするウエイトもできるんだな?
0242デフォルトの名無しさん
2011/03/16(水) 18:06:27.23いないほうがマシ
0243207
2011/03/16(水) 18:09:53.770244デフォルトの名無しさん
2011/03/16(水) 18:51:59.69まったく問題なく出来るから心配すんな
0245デフォルトの名無しさん
2011/03/17(木) 01:56:51.260246デフォルトの名無しさん
2011/03/17(木) 02:11:34.110247デフォルトの名無しさん
2011/03/17(木) 08:55:47.17という感じで、関数の前にstaticをつける理由はなんですか?
どういう利点がありますか?
0248デフォルトの名無しさん
2011/03/17(木) 09:58:03.38つまり、仮にソースファイル内でexit()なんて戯けた名前をつけていても
他のファイルの邪魔にはなりません。
また、gccなどではインライン展開を行なうためのヒントとしても使われます。
∵他所から呼ばれないことが判っている関数なら実体がなくても困らない。
0249デフォルトの名無しさん
2011/03/17(木) 10:02:51.36申し訳ないが
意味分からんwww
exit()って名前は、exit1;みたいなのがあるから、混合しやすいってこと?
やっぱプログラミングの基礎は自分で理解するに限る。
0250デフォルトの名無しさん
2011/03/17(木) 10:05:30.270251デフォルトの名無しさん
2011/03/17(木) 10:13:58.682つのファイルで同じ名前の関数、ttt()が使われる時、それぞれのファイルで
static ttt()とすればいいんですね?
0252デフォルトの名無しさん
2011/03/17(木) 10:55:08.67そのとおりだ
0253謙虚フロンティア戦士
2011/03/17(木) 11:27:26.550254デフォルトの名無しさん
2011/03/17(木) 14:48:49.50友人が書いたc言語のプログラムを手直しして
javaに変換している仕事を頼まれたのですが
コードが3,5kステップほどもあり非常に苦戦しています。
c言語で書かれたコードを解析しやすくするようなツールはありませんか?
0255デフォルトの名無しさん
2011/03/17(木) 15:26:37.51プリンタ
ローテク侮りがたし
0256デフォルトの名無しさん
2011/03/17(木) 15:56:19.95lintかけて印刷
0257デフォルトの名無しさん
2011/03/17(木) 16:19:51.360258デフォルトの名無しさん
2011/03/17(木) 17:11:32.81とりあえずなるべく早い段階で完成を目指してがんばりますw
0259デフォルトの名無しさん
2011/03/17(木) 17:37:59.51だけでそのアルゴリズムをプログラムを組んで実現できるのは普通でしょうか?
本に乗ってるソートのプログラミングのサンプル例はどれも直線的な考えじゃ思い浮かばない
ような設定や、要領の良さがあります。
優秀な人で何も見ずに組んでる人はいますが、やはり本に載ってる例に比べたら
劣っています。そういうものでしょうか?
0260デフォルトの名無しさん
2011/03/17(木) 17:39:38.410261デフォルトの名無しさん
2011/03/17(木) 17:43:12.680262デフォルトの名無しさん
2011/03/17(木) 17:52:10.99Doxygen。Graphvizもあれば関数ツリーもできるし、結構解析には有効よ。
詳しくは該当スレで。
0263デフォルトの名無しさん
2011/03/17(木) 17:53:12.770264デフォルトの名無しさん
2011/03/17(木) 18:01:35.63そういうのってコンバーターがあるのかと思ってた
0265デフォルトの名無しさん
2011/03/17(木) 18:18:37.36質問ページ
0266デフォルトの名無しさん
2011/03/17(木) 18:55:20.34それが出来たら皆プログラマーになれるわけで。
C言語何て自由度高すぎて、初心者やプログラム例を初見じゃ理解すら、
出来ないと思うよ。
C言語の入門書は一週間で読めても、ソースを解読するのはかなり手こずる。
0267デフォルトの名無しさん
2011/03/17(木) 18:56:12.490268デフォルトの名無しさん
2011/03/17(木) 18:57:19.11かなり優秀な方。
0269デフォルトの名無しさん
2011/03/17(木) 19:02:53.780270デフォルトの名無しさん
2011/03/17(木) 19:20:37.380271258
2011/03/17(木) 19:44:48.02ありがとうございます。試してみます
皆さん親切な方が多くて助かりました。
>>255-256>>265
本当にありがとうございました!
0272デフォルトの名無しさん
2011/03/17(木) 19:46:59.140273デフォルトの名無しさん
2011/03/17(木) 19:50:56.93道具があれば頼る。道具が無ければ買う。道具が売ってなければ作る。
これが健全で正しいやり方じゃないか。
0274デフォルトの名無しさん
2011/03/17(木) 19:59:23.300275デフォルトの名無しさん
2011/03/17(木) 20:35:12.180276謙虚フロンティア戦士
2011/03/17(木) 20:52:37.39普通に書いてあれば余裕で理解できる。
理解できないほどひどいのは書いた人も理解できない。
0277デフォルトの名無しさん
2011/03/17(木) 20:55:12.080278デフォルトの名無しさん
2011/03/17(木) 21:05:00.86プログラミング好きなんですが頭の回転遅いんでプログラマーは無理かと。
回答者の職業教えてください。
0279デフォルトの名無しさん
2011/03/17(木) 21:18:41.900281デフォルトの名無しさん
2011/03/17(木) 21:22:29.45年収いくら?
0282デフォルトの名無しさん
2011/03/17(木) 21:37:10.9940万円の教材を作るから買ってくれるかい?
5万円分くらいの仕事を発注することは保証するから
っていう商売にひっかかるなよ
0284デフォルトの名無しさん
2011/03/17(木) 22:00:16.58自分がコンパイラになった気分でソースを個々に読み
自分がリンカーになった気分で全体を取り込んで、
最後に自分がCPUになった気分で実行状態を思い浮かべる。
これで10万行くらいのソースなら楽に解読出来る。
所詮人間の作ったモノだ。
0285デフォルトの名無しさん
2011/03/17(木) 22:17:01.11高度なプログラム書いてるの?
0286デフォルトの名無しさん
2011/03/17(木) 22:19:05.440287デフォルトの名無しさん
2011/03/17(木) 22:24:50.86へーすごいなー何時間ぐらいで出来るのー?
0288デフォルトの名無しさん
2011/03/17(木) 22:52:50.44ざっと流れをつかむだけなら100時間もかからんのじゃね?
0289デフォルトの名無しさん
2011/03/17(木) 23:02:02.98100時間とかなんだよそれ、それでも流れつかむだけだろ
全然楽じゃねーだろw一体何日かかるんだよ
0290デフォルトの名無しさん
2011/03/17(木) 23:06:09.950291デフォルトの名無しさん
2011/03/17(木) 23:15:31.460292デフォルトの名無しさん
2011/03/18(金) 01:41:00.99戻りアドレスをニセのアドレスに書き換えるのがうまくいかん
0293デフォルトの名無しさん
2011/03/18(金) 01:43:27.06うるせー馬鹿
0295デフォルトの名無しさん
2011/03/18(金) 12:23:02.03その見極めをするのに2週間はかかるよね という話
0296デフォルトの名無しさん
2011/03/18(金) 13:51:18.29わかんねーならだまっておけ!
0297デフォルトの名無しさん
2011/03/18(金) 14:37:26.170298デフォルトの名無しさん
2011/03/18(金) 16:55:48.98教えてもらえないでしょうか?
マイクロソフトのVisualなんとかは複雑すぎて、私には難しそうです。
入門以下ですいません…
0300デフォルトの名無しさん
2011/03/18(金) 17:31:33.05「ローカル変数の型を引数から操作できないのか」という質問です。
これを
http://codepad.org/85ClCanP
↓
こんな感じに
http://codepad.org/FPxdR45r
宣言も引数で操作できるのでしたら、
是非とも知識として知っておきたいと思います。
宜しくお願いします。
0301デフォルトの名無しさん
2011/03/18(金) 17:39:30.18マクロを使うか
C++でテンプレートを使うか
0302謙虚フロンティア戦士
2011/03/18(金) 17:44:25.78何がしたいかよくわからんけど共用体使えないの?
0303デフォルトの名無しさん
2011/03/18(金) 17:45:06.440304デフォルトの名無しさん
2011/03/18(金) 17:53:10.28ヒント: printf
0305デフォルトの名無しさん
2011/03/18(金) 17:53:23.91http://homepage2.nifty.com/well/Template.html
「C++テンプレート」で検索をかけると、
こちらのサイトがヒットし、
自分のやりたい事と同じ内容でした。
ありがとうございました。
0306謙虚フロンティア戦士
2011/03/18(金) 18:29:27.53それシープラ
0307デフォルトの名無しさん
2011/03/18(金) 18:34:31.620308デフォルトの名無しさん
2011/03/18(金) 18:58:15.54上記URLのプログラムをコピペしてそのままコンパイルしてみると
住所を書き込むたびに、データが上書きされてしまって
結局最後に入力したデータしか表示されません。
ソースコードを読んでると、ちゃんとデータが追加されるようになってるのに
上書きされるのは何でなんでしょうか
0309デフォルトの名無しさん
2011/03/18(金) 19:07:33.13これが1番簡単じゃね?
http://www.vector.co.jp/soft/winnt/prog/se483520.html
0310デフォルトの名無しさん
2011/03/18(金) 20:29:25.67openモードが間違っている
ios::app で OR を取りましょう
0311デフォルトの名無しさん
2011/03/18(金) 21:07:41.63出力できないと思うのですが・・・
0312デフォルトの名無しさん
2011/03/18(金) 22:16:06.23appは書き込みの時のみファイルの最後に自動的にシークされます
読み込みもしたいのならios::inもORしておけばよいです
問題のプログラムはios::ateでopenしているので、ファイルを開いた
後にファイルの最後にseekするようになっています
Jout.seekp(0, ios::end);
で、自分でファイルの最後にseekしてから書き込みしているので、
既に書いた部分の上書きはされないと思います
0313デフォルトの名無しさん
2011/03/18(金) 23:35:59.80でもそれじゃ困ります
ファイルをオープンした後、ファイルの一番最初にシークして
データの個数を書き込んでから、また最後にシークして新たなデータを追加しなければいけないので
具体的に説明すると、例えば一回目のデータを書き込むと
1
『追加データ1』
2回目は
2
『追加データ1』
『追加データ2』
って感じです
ただ単にデータを追加するのではなく、一番最初にデータの個数を書き込みます
データを表示させるときに、このデータの個数を読み込んで、個数分while文で表示するためです
だから僕はあえてateにしてるんだと解釈してるんですが、違うんでしょうか?
0314デフォルトの名無しさん
2011/03/18(金) 23:37:22.670315デフォルトの名無しさん
2011/03/19(土) 00:31:35.56確かにこのプログラムの作者はC++のオープンモードについてよく理解してないようです。
データが存在しない場合にデータ個数を0と書いてしまった方がすっきりします。
但し、というか元のプログラムもですが、no_of_dataを1桁と決め打ちしてしまっているので、
データが10個以上になると動作がおかしくなると思います。(nameを浸食します)
動くようにしたプロクラムを下に示します。
http://codepad.org/M26FrFlI
なお、>>314さんもおっしゃっておられますがこれはC++の話なので、スレを以下に移しましょう
スレ立てるまでもない質問はここで 110匹目
http://hibari.2ch.net/test/read.cgi/tech/1295800051/
0316デフォルトの名無しさん
2011/03/19(土) 00:37:56.90ios::nocreateは非標準ですので、動作は環境依存なので使わない方が無難です
0317デフォルトの名無しさん
2011/03/19(土) 01:08:16.69ダブルコロンの置き換えがよく分かりません。
何の機能がCでは何に当たるのか、を調べる方法ありませんか。
0318デフォルトの名無しさん
2011/03/19(土) 01:23:37.240319デフォルトの名無しさん
2011/03/19(土) 01:40:18.03当たるものはないよ
しいて言うなら命名規則で
アンダーバーやキャメル、プリフィックス、サフィックスなどで
工夫するぐらいしかない
CSTLなどありものの作法に倣うのが楽じゃないかな
0320デフォルトの名無しさん
2011/03/19(土) 01:51:03.27C++ の :: は名前空間
C で名前空間相当の処理を行う場合は接頭辞を使う
接頭辞というのは、gtk_init(), gtk_main() の様に先頭の数文字を同じ単語で揃える事
接頭辞とそれ以外の部分は _ で繋ぐ
つまり、C++ の foo::bar は C で接頭辞を使うと foo_bar になる
ただし std::vector を C で std_vector とした所でそのまま動く訳じゃないよ
std_vector というのは C には存在していないから、自分で実装する必要がある
自分で実装するのは面倒なので、C++ から一行ずつ置き換えるという考えはやめて、
ファイル単位で大体似た様な処理を一から書いて行った方が良いと思われ
0321デフォルトの名無しさん
2011/03/19(土) 03:35:08.700322デフォルトの名無しさん
2011/03/19(土) 10:14:30.74298です。
2ちゃんねる使うの初めてだから、これでいいのだろうか。
レスありがとうございます。
ダウンロードしてみます
0323デフォルトの名無しさん
2011/03/19(土) 14:54:38.870324デフォルトの名無しさん
2011/03/19(土) 16:35:09.480325デフォルトの名無しさん
2011/03/19(土) 16:47:36.140326デフォルトの名無しさん
2011/03/19(土) 17:06:24.750327313
2011/03/19(土) 17:16:03.23ちゃんと>>1を読んでいませんでした
本当に申し訳ないです
>>315さんの紹介してくださったスレで再度質問したいと思います
僕の質問に回答してくださった方、ありがとうございました
とても参考になりました
0329デフォルトの名無しさん
2011/03/20(日) 11:41:34.76*があれば「そのアドレスにある値の操作」で
なければ「アドレスそのものに対する操作」を
意味するという理解でいいのですか。
0330デフォルトの名無しさん
2011/03/20(日) 13:31:13.40だいぶ用語が粗っぽくて、何も理解できていないのではないかと思う。
単に「ポインタ」といっても、型、変数、値があることを意識しなくてはならない。
しかし、普通は文脈で判る場合が多く、単に「ポインタ」と言われる。
前の文章を書き直すと
「ポインタの値」に対して「前置単項演算子*」を適用して評価すると、
評価結果はポインタが指すオブジェクトである。
0331デフォルトの名無しさん
2011/03/20(日) 13:36:32.960332デフォルトの名無しさん
2011/03/20(日) 14:18:11.86「どんなときでも」ではないが、当初それでいい
あとで出てくる char **argv; などは * があってもアドレスだったりするし
void *ptr; は * で値にすることができない
誰とは言わんが
> 「ポインタの値」に対して「前置単項演算子*」を適用して評価すると、
前置でない単項はないから安心しろ
こいつ冗長な形容で小難しく書き直しているだけで
話がほとんどピーマンだよ
0333Perl忍者lvl2(善) ◆M5ZWRnXOj6
2011/03/20(日) 14:27:42.06遊べるぜ ネット系のモジュールとか
この本おすすめ
Perl CPANモジュールガイド 440ページ
http://www.amazon.co.jp/gp/product/486267108X/ref=as_li_ss_tl?ie=UTF8&tag=ele-22&linkCode=as2&camp=247&creative=7399&creativeASIN=486267108X
これよめば俺と互角にはりあえる かもしれないぜ
0334デフォルトの名無しさん
2011/03/20(日) 14:32:01.990335Perl忍者lvl2(善) ◆M5ZWRnXOj6
2011/03/20(日) 14:33:09.780336デフォルトの名無しさん
2011/03/20(日) 15:45:13.95サイトなどを教えてください。
関数とかわけわかりませんw
0337デフォルトの名無しさん
2011/03/20(日) 15:48:39.36y=f(x) のfだね
0338デフォルトの名無しさん
2011/03/20(日) 15:56:20.930340デフォルトの名無しさん
2011/03/20(日) 19:44:37.660341デフォルトの名無しさん
2011/03/20(日) 22:17:45.98勉強しながらある程度少しは実用的なプログラム習得できる書籍かサイトご存じでしょうか?
AmazonのC言語関連書籍一通り見ましたが、しっくりくるのがなかったので。
仕事はプログラミング全く関係ないです。
0342デフォルトの名無しさん
2011/03/20(日) 22:42:16.28第一ステップ:引数をポインタにして、関数で参照渡しに相当することが
出来るようになろう。
第二ステップ:malloc/freeで変数を動的に生成しよう。NULLの使い方も
学ぼう
第三ステップ:配列とポインタの意図的混同に関連する慣習を
学ぼう
第四ステップ:構造体のメンバにポインタを用いることにより
リストや木などの高度なデータ型を取り扱えるようになろう。
0343デフォルトの名無しさん
2011/03/20(日) 23:20:32.190344330
2011/03/21(月) 00:14:55.51たしかにいきなり小難しい説明をしてしまった。あとで読み返して、
まずったとおもった。申し訳ない。
しかし、正しい用語を使うことは正しい理解につながると思って、
あのような表現になっている。もう少し噛み砕くべきだった。
>329>332
>ポインタってどんなときでも*があれば
>前置でない単項はないから安心しろ
たしかに単行*は前置しか無いから冗長な表現だった。
しかし*は、(前置)単項演算子、二項演算子、ポインタ宣言子
として登場するので、意識してもらうために明示した。
>char **argv; などは * があってもアドレスだったりするし
char **argv;の場合、
argvはchar *を指すポインタ
それに間接演算子*を適用すると、評価結果は指している
オブジェクトとなるので、その型がchar *になるだけで、
全く話は同じ。
>void *ptr; は * で値にすることができない
void *のことは失念していた。指しているオブジェクトサイズが
不定である場合は演算子*,[]を適用できない。
0346デフォルトの名無しさん
2011/03/21(月) 00:26:34.17馬鹿かお前?
joke もわからんとは。
0348デフォルトの名無しさん
2011/03/21(月) 00:37:06.250349デフォルトの名無しさん
2011/03/21(月) 03:34:31.18メモリ管理って誰がやんの?
OS?
ほしたら何でCでmallocしたメモリはフラングメントすんの?
ガベージコレクションが必要な理由は?
言語?
言語は単にOSに頼んでメモリ割り当てしてもらっただけで
それもなんか違う気もする
0350デフォルトの名無しさん
2011/03/21(月) 04:07:05.89確保と開放を繰り返すとフラグメントする、ということは
確保されたぶんがそっくりそのまま開放されるというわけではないわけだ
いくらか少ない量、ってことだろ
このサイズは誰が知ってんの
プログラマがmallocでサイズを数値で見れても信用ならないって事だろ
>メモリ管理って誰がやんの?
主に OS
ただし、malloc() に関してはリンクされたライブラリもかかわっている。
>ほしたら何でCでmallocしたメモリはフラングメントすんの?
malloc() したメモリは普通 OS には返さない。
そう仮定した場合、「malloc() したメモリがフラグメントを起こす」のなら、その原因は malloc() のアルゴリズム。
>言語は単にOSに頼んでメモリ割り当てしてもらっただけで
メモリは OS からもらうが、再利用は malloc() が管理する。
0352デフォルトの名無しさん
2011/03/21(月) 07:33:33.330353デフォルトの名無しさん
2011/03/21(月) 07:34:41.81肝心なことなのに
どうすんのさ
0354デフォルトの名無しさん
2011/03/21(月) 07:36:54.780355デフォルトの名無しさん
2011/03/21(月) 07:43:28.44メモリは1ビットたりとも無駄にしたくないわけやん。
しないほうがよい。
「できないからやらない、知る必要がない」ではポロろgグラマー失格なわけやん。
こういうとき組み込みなら、iTronだなんだのメモリ管理には世話になっても
自分でできる下地があるわけで、軽減は出来る。
ならWindowsやその他でもそうすべきだ。
0356デフォルトの名無しさん
2011/03/21(月) 10:26:43.26Windows はもともと、そういう思想だったんだよ
0357デフォルトの名無しさん
2011/03/21(月) 11:01:40.05自分の頭が悪い点にズバリ切り込まれるとjokeって事にするのですね。
どこまで馬鹿なんだお前は
0358デフォルトの名無しさん
2011/03/21(月) 11:51:34.490359デフォルトの名無しさん
2011/03/21(月) 12:20:43.86void merge(int first int last int *A)
{
if(){
center=(first+last)/2�@
void merge(first center *A)�A・・・前半起点マージ
�B
void merge(center+1 last *A )�C・・・後半起点マージ
}}
mainで呼び出した関数で中に二つの自分と同じ関数がある再帰構造を持ってます。
で良く分からないのですが
�Cのcenterは、�@、�Aのcenterの値と一致するのでしょうか?(※まぁlastもなんですが置いときます。)
再帰関数だから�A→□1→□2→・□n→・・→□2→□1→�Bと戻ってきて次に�Cの作業
をするので、�Cのcenterの値は□1の部分の作業で設定されたcenterの値じゃないんでしょうか?
そうなると帰納的にcenter=一定値になると思うのですが、何か違いますか?再帰関数がややこしくて仕方ありません・・・
0360デフォルトの名無しさん
2011/03/21(月) 12:21:20.74少なくとも、俺は関わってない。
また、銀行系のシステムで、この手のトラブルの原因となるコードが
Cで実装されてることは、滅多にないと思われ。
0361デフォルトの名無しさん
2011/03/21(月) 12:25:20.51?
良く分からんがC言語でOK
0362デフォルトの名無しさん
2011/03/21(月) 12:44:46.45はいC言語です、お願いします。
マージソートのプログラムで、centerは真ん中の配列の添え字ですかね。
再帰関数によって分けて分けて、で作業の末端までいったら
今度はくっつけてくっつけて戻ってくるというプログラムです。たぶん・・
0363デフォルトの名無しさん
2011/03/21(月) 12:45:48.83よくわからんが
>�Cのcenterは、�@、�Aのcenterの値と一致するのでしょうか?(※まぁlastもなんですが置いときます。)
一致する
>�Cのcenterの値は□1の部分の作業で設定されたcenterの値じゃないんでしょうか?
merge が呼ばれるたびに新しく center が作られる
0364デフォルトの名無しさん
2011/03/21(月) 12:48:34.450365デフォルトの名無しさん
2011/03/21(月) 13:08:49.26間にprintfを挟んでみては?
0366デフォルトの名無しさん
2011/03/21(月) 13:10:32.08http://www.codereading.com/algo_and_ds/algo/merge_sort.html
0367デフォルトの名無しさん
2011/03/21(月) 13:54:06.940368デフォルトの名無しさん
2011/03/21(月) 13:55:29.16void merge( int first, int last, int *A ) {
if() {
int center; // static int center; // ではない
center = ( first + last ) / 2; // �@
void merge( first, center, A ); // �A・・・前半起点マージ
// �B
void merge( center + 1, last, A ); // �C・・・後半起点マージ
}
}
だと仮定して
>�Cのcenterは、�@、�Aのcenterの値と一致するのでしょうか?(※まぁlastもなんですが置いときます。)
一致します
>再帰関数だから�A→□1→□2→・□n→・・→□2→□1→�Bと戻ってきて次に�Cの作業
>をするので、�Cのcenterの値は□1の部分の作業で設定されたcenterの値じゃないんでしょうか?
centerの型がstaticの場合、再起先と呼出元のcenterの値の格納先が同じ場所となり、
あなたの予想通り、値を上書きしてしまいますが、
今回の場合、staticは使用しないと考えられるので、再起先のcenterの値の格納先と
呼出元のcenterの値の格納先は異なる場所となるため、�@・�Aは�Cと一致します。
0369デフォルトの名無しさん
2011/03/21(月) 15:35:43.42Mr.マロック (うっうっうっううー)
0370デフォルトの名無しさん
2011/03/21(月) 21:10:09.40ch = fgetc(f1);
if (!feof(f1))
fputc(ch, temp);
}
教本を読んでいてファイルの入出力の章でこのようなコードが出てきたのですが、
これだと例えば今f1はファイルの最後の文字の位置にあるとすると、
ch = fgetc(f1);でf1が示す位置が1つ先にずれEOFとなり、その後if(!feof(f1))でfputc(ch, temp);をするか判定しているので
最後の1文字がtempに出力されないで終わってしまう気がするのですがどうなんでしょうか。
実際コンパイルしてみると最後の文字までちゃんと出力されていたのですが……
全ソースはこちらに上げておきました tp://ideone.com/pVv1S
宜しくお願いします。
0371デフォルトの名無しさん
2011/03/21(月) 21:14:06.71何が疑問なの?
0372デフォルトの名無しさん
2011/03/21(月) 21:33:24.36何故f1の全ての内容がtempに書きこまれるのかがわかりません。
>370にも書いたのですが、if(!feof(f1))があるとその前にfgetc(f1)でf1が示す位置が既に1つ先に進んでいるので、
if文の中のfputc(ch, temp)が実行される回数が1回足りないで処理が終了してしまう気がします。
自分がこの部分を書こうと思って以下のようなコードを書いたのですが(色々違うものが挟まってますが)、
これだとtempにf1の内容のあとFF 00 00 00....(tempのバイト数が4KBになるまで)まで出力してしまいました。
なぜfputc(ch, temp)を実行する前にif(!eof(f1))を判定しなければならないのか教えて頂ければと思います。
while (!feof(f1)) {
ch = fgetc(f1);
if(ferror(f1)) {
puts("FILE1の読み込みエラー");
exit(2);
}
fputc(ch, temp);
if(ferror(temp)) {
puts("tempファイルの書き込みエラー");
exit(2);
}
}
0373デフォルトの名無しさん
2011/03/21(月) 21:35:03.39http://archive.linux.or.jp/JM/html/LDP_man-pages/man3/ferror.3.html
0374デフォルトの名無しさん
2011/03/21(月) 21:36:08.881>d:\ワークステーション\ゲーム開発プロジェクト\rxz project laboratory\programs\rxz_ver0.01\screensource00103.cpp(40): error C2144: 構文エラー : 'void' は ';' によって先行されなければなりません。
該当の場所
・
・
・
(40)void bg_ctrl(){
(41) DrawGraph( 0 , 0 , Stage_BG , FALSE ) ;
(42)} /* リファレンス注釈7参照 */
(43)
・
・
・
0375デフォルトの名無しさん
2011/03/21(月) 21:37:54.44誤爆です。すいません。
よく見てませんでしたすいません><;
0376デフォルトの名無しさん
2011/03/21(月) 21:47:04.640377デフォルトの名無しさん
2011/03/21(月) 21:47:23.67あー…これは読み込んでいるファイルの末端にEOFがないってことです…かね?
しかしEOFがないのにどうやってfeof()で判断してるんでしょうか、わけがわからなく…
0378デフォルトの名無しさん
2011/03/21(月) 21:55:58.48EOFはどんなファイルの最後にもあるという勘違いをしてたようです、ありがとうございます
改めて考え直したのですが、そうするとif文は
if (!feof(f1))ではなくif(!ferror(f1))ではないのでしょうか
こうすればファイルの末端を超えたときその前のch = fgetc(f1);でエラーがでているはずで、処理を止めることができるという感じに
これはまた違うのでしょうか、申し訳ないのですがが宜しくお願いします。
0379デフォルトの名無しさん
2011/03/21(月) 21:56:42.710380デフォルトの名無しさん
2011/03/21(月) 21:57:22.66fgetc()でchにEOFが入った後じゃないとfeofは1を返さない
0381デフォルトの名無しさん
2011/03/21(月) 22:11:14.18例えばテキストファイルで今末端の位置にいるとき、
<1回目>
while (!feof(f1)) { /* ファイルの末端での判定、当然実行される */
ch = fgetc(f1); /* chにファイルの末端の文字を代入*/
if (!feof(f1)) /* このときf1はファイルの末端の次にあるが、その読み出しはされていないのでfeof()は0を返す */
fputc(ch, temp); /* fputc()は行われる */
}
<2回目>
while (!feof(f1)) { /* ファイルの末端の次での判定、しかし上記と同様にしてfeof()は0を返し実行される */
ch = fgetc(f1); /* chにf1を代入しようとするが、末端を超えているので失敗し、EOF指示子がセットされる */
if (!feof(f1)) /* ここでfeof()はEOF指示子があるので1を返し、fputc()はスキップされる */
fputc(ch, temp);
}
<3回目>
上記と同様にして、while文は実行されず次の処理にうつる
こういうことでよろしいでしょうか……
0382デフォルトの名無しさん
2011/03/21(月) 22:19:09.25while (1) {
if (feof(f1))
break;
ch = fgetc(f1);
fputc(ch, temp);
}
0383デフォルトの名無しさん
2011/03/21(月) 22:35:57.51前の処理がファイルの末端の文字だったとして、いまf1、tempがファイルの末端の次の位置になっているとしますと、
<1回目>
while (1) {
if (feof(f1)) /* EOF指定子がないのでfeof()は0を返し、実行されない */
break;
ch = fgetc(f1);
/* f1はファイルの末端の次なのでch = fgetc(f1)が実行されchにEOF(-1)が代入され(調べ直したら失敗するわけではないですね)、
EOF指定子がセットされる */
fputc(ch, temp); /* fputc(ch, temp)は実行され、tempにEOFが書きこまれる */
}
<2回目>
if(feof(f1))で条件が真となり、while文を抜ける
この場合だと結果的に>370でできるファイルの末尾にEOFが付加された形になるんでしょうか、解釈があっていればよいのですが
0384デフォルトの名無しさん
2011/03/21(月) 22:50:55.03規格書読んで分からないなら
1つの標準関数ごとにデバッガ使ってトレースして
振る舞いを確かめるといいよ
IDEをつかえばコマンド覚えることなく誰にでも簡単に扱えるから。
0385デフォルトの名無しさん
2011/03/21(月) 23:06:34.70なるほど、了解です
一度落ち着いて整理し直し、色々試してみることにします
これはまずいです。>>383 のような誤解を招きます。
for (;;) {
ch = fgetc(f1)
if (feof(f1))
break;
fputsc(ch, tmp);
}
とすべきです。読む→テストする→書く、というです。
0387デフォルトの名無しさん
2011/03/21(月) 23:52:09.72等価
って知ってる?
0388デフォルトの名無しさん
2011/03/22(火) 00:38:22.63strtokの返すアドレスというのは実質、文章の終わりまで置き換えが終わったかどうか確認するためだけに使うようなものなのでしょうか?
0389デフォルトの名無しさん
2011/03/22(火) 00:42:09.060390デフォルトの名無しさん
2011/03/22(火) 00:46:26.70区切った記号までの文字列の先頭アドレスを返すと聞いたのですが、
例えばどのようなときに使うのでしょうか?
よかったらお願いします
等価じゃないと思いますよ。
>>382
ビットパターン 0xff をディスクリプタ tmp に書いてしまいますよ。
ビットパターン0xff は EOF を示すascii 制御コードですらなく、
オリジナルのディスクリプタ f の指すファイルの内容とは、変わってしまいますよ。
その解釈であっています。
>>370 のリンク先は、致命的に間違っています。
char ch; ではなく int ch; が正しい。
あと while(!eof())うんぬんは、教科書によくあらわれる書き方です。(たとえば、ハーバードシルト先生は信念があるのかいつもこう書きます。)
while() を無理に使うとこう書かざるを得ないのですが、私見では、残念ながら eof() が重複してしまい無駄ですね。
0393デフォルトの名無しさん
2011/03/22(火) 08:41:48.74C言語の標準ライブラリの仕様の話しだが、
今時C標準ライブラリが外部言語処理系に非公開な
プラットフォームってまずない。
だからこれは微妙にこれはOSの標準ストリームの
仕様の話になりそうな件
0394デフォルトの名無しさん
2011/03/22(火) 10:23:33.38int ch;
while ((ch = fgetc(f1)) != EOF) {
fputc(ch, tmp);
}
0395デフォルトの名無しさん
2011/03/22(火) 10:34:57.88EOFはファイルに書いてある値じゃないよ
既にファイルの最後まで読んでいるのになお更に読もうとした時にfgetc()が返してくる値
ファイルに書いてある値以外の値でEOFを表現しなければならないので、fgetc()の型はunsigned charじゃなくてint
ch = fgetc(f1);の次に即fputc(ch, temp);するのはまずい
0396デフォルトの名無しさん
2011/03/22(火) 11:21:56.20アスキーコードのEOFにも対応しといてください。お願いします。
0397デフォルトの名無しさん
2011/03/22(火) 11:22:52.750398デフォルトの名無しさん
2011/03/22(火) 11:41:50.05マージソートの計算量は何故nlognなんですか?
例えば要素数16とします。
全て一つだけの配列に分けて、それを二つ配列にする比較回数が8回
二配列を四配列にする比較回数が3×4=12回
四配列を8配列 2×7=14回
最後8配列同士を比較して 15回
で合計49回ですよね?
n=16のとき
nlogn=1.2×16=19・・計算量19?
49とかけ離れてますよね?
0399デフォルトの名無しさん
2011/03/22(火) 12:02:53.78それは370も同じでしょ
いいえ違います。
>>370 は読んだあと書き込む前にテストが入ります。だから正しい。
>>382 は読んだあとテストする前に書き込んでしまいます。これはバグっている。
したがって、>>370 と >>382 は等価ではありません。 >>382 はバグ入りのきわめてまずいコードです。
0401デフォルトの名無しさん
2011/03/22(火) 13:34:55.45色々間違っている気がするけど、一番の間違いはlog(10)≒2.3を1.2で計算していることだな。
0402デフォルトの名無しさん
2011/03/22(火) 13:35:46.12>>398
色々間違っている気がするけど、一番の間違いはlog(16)≒2.8を1.2で計算していることだな。
0403デフォルトの名無しさん
2011/03/22(火) 14:17:19.10最適化のため、比較の最後のを一回省略しているが、それは省略しない
>全て一つだけの配列に分けて、それを二つ配列にする比較回数が8回
一配列を二配列にする比較回数が16回
>二配列を四配列にする比較回数が3×4=12回
二配列を四配列にする比較回数が4×4=16回
>四配列を8配列 2×7=14回
四配列を八配列にする比較回数が2×8=16回
>最後8配列同士を比較して 15回
八配列を十六配列にする比較回数が16回
合計64回
>n=16のとき
>nlogn=1.2×16=19・・計算量19?
マージソートの実装は2分割で行うのでlog2で計算
16*log2(16) = 16 * 4 = 64回
ピッタリですね
0404デフォルトの名無しさん
2011/03/22(火) 14:20:12.27置き換えた(実際に置き換えなくても置き換えたと考える)回数なので、
比較を省略できても、置き換えは省略できないため>>403の計算量になる
0405デフォルトの名無しさん
2011/03/22(火) 14:24:54.750406デフォルトの名無しさん
2011/03/22(火) 14:29:04.290407デフォルトの名無しさん
2011/03/22(火) 14:37:35.57ソートの実装が2分割になってるから、
16 * log2(16) = 16 * 4 = 64
ソートの実装が4分割(もちろん比較回数は増える)であれば
16 * log4(16) = 16 * 2 = 32
ソートの実装が16分割であれば
16 * log16(16) = 16 * 1 = 16
0408デフォルトの名無しさん
2011/03/22(火) 17:21:05.21「あることを行うためにかかる時間」はどうやって計測すればいいですか。
あることを行うためのプランが3つあるとして、その中でどれが一番ボンバーヘッドが少ないか知りたいのですが
どれも1秒未満で終わるので、時間の差を取得することでは精度のいい計測ができません。
0409デフォルトの名無しさん
2011/03/22(火) 17:23:27.660410デフォルトの名無しさん
2011/03/22(火) 17:36:28.69もしかして オーバーヘッド
…は、ともかくとして
精度のいい計測がしたければ
きっちり同じ条件でテストする必要があるぞ
同じことを繰り返すと2回目以後はキャッシュが効いたりするし
ネットつないだままとかデフラグの時刻をまたいだりとか論外
0411デフォルトの名無しさん
2011/03/22(火) 18:15:37.59それがないなら、100万回でも1億回でも好きなだけ回せば充分精度は得られる。
後は、もし入力データが必要な場合にどういうデータにするかを検討しておくことだね。
0412デフォルトの名無しさん
2011/03/22(火) 21:51:40.62#include <stdio.h>
int main()
{
int x = 0;
while (x < 10) {
printf("%d\n", x);
x++;
}
int i;
for (i = 0; i < 10; i++) {
printf("%d\n", i);
}
return 0;
}
このプログラムで ';' が '型' の前にありません。 または'i' : 定義されていない識別子です。というエラーが表示されます。
int i;の位置を上に持っていったらエラーが消えるのですがC言語は変数を宣言する場所が決まっているのでしょうか?
Visual C++ 2010を使っています。よろしくお願いします。
0413デフォルトの名無しさん
2011/03/22(火) 21:56:57.34決まってます
0414デフォルトの名無しさん
2011/03/22(火) 22:04:06.64そうでしたか・・・
今まで一年間やってたのに知らなかったです。ありがとうございました。
0415デフォルトの名無しさん
2011/03/22(火) 22:06:30.99C99では何処でも良いが、それ以前ではブロックの先頭
0416デフォルトの名無しさん
2011/03/22(火) 22:19:05.97調べていたらそのようなことが書いていました。
今まで変数宣言の位置を気にせずプログラミング出来ていたため昔のバージョン?の設定になってしまったのかなと思っています。
C99に戻す方法がありましたら是非教えてください。
0417デフォルトの名無しさん
2011/03/23(水) 00:06:04.190418デフォルトの名無しさん
2011/03/23(水) 00:07:39.920419デフォルトの名無しさん
2011/03/23(水) 00:10:18.130420デフォルトの名無しさん
2011/03/23(水) 00:19:02.87うろ覚えだけど、プロジェクトの設定で Microsoft 言語拡張機能 だったかな
0421デフォルトの名無しさん
2011/03/23(水) 01:52:14.620422デフォルトの名無しさん
2011/03/23(水) 05:27:56.91>>407
非常に良く分かりました。全て置き換えた場合を考えるってことは
最悪計算量を想定してるのですか?
後時間量(time)は計算量にだいたい比例するのでしょうか?
例えば計算量、3log3である二つのプログラムを実行した時
処理時間は一緒でしょうか?
0423デフォルトの名無しさん
2011/03/23(水) 05:33:13.790424デフォルトの名無しさん
2011/03/23(水) 07:43:13.83>非常に良く分かりました。全て置き換えた場合を考えるってことは
>最悪計算量を想定してるのですか?
マージソートのアルゴリズムとしては、
置き換えても置き換えなくても回数は同じ。
トランプとかを使って実際にマージソートと
クイックソートを比較してみれば意味が分かるはず。
>後時間量(time)は計算量にだいたい比例するのでしょうか?
実装では、比較などの演算時間は0でないし、
何らかの最適化が入るので、計算量とは一致しない。
もし、比較の演算時間が0で、最適化が全く入らなければ、ほぼ一致する。
※ある程度の目安にはなる
>例えば計算量、3log3である二つのプログラムを実行した時
>処理時間は一緒でしょうか?
最適化次第
0425デフォルトの名無しさん
2011/03/23(水) 07:46:25.29細かい環境を書いて値の定義をするか、他のスレに行って下さい
0426デフォルトの名無しさん
2011/03/23(水) 16:53:55.270427デフォルトの名無しさん
2011/03/23(水) 17:22:46.07まずprintfだけで絵無しのADVを作るところから始めるといいよ。
そこが出来ればあとはDirectXなりGDIで絵をだすだけだよ。
音楽は割りと簡単にWindowsAPとかでならせる。
ひとまず絵や音は後回しにして作ることが次の一歩につながるよ。
0428デフォルトの名無しさん
2011/03/23(水) 18:35:53.80nlognとかO(1)とかよくわかりません。
0429デフォルトの名無しさん
2011/03/23(水) 19:20:51.230430デフォルトの名無しさん
2011/03/23(水) 19:24:05.350431デフォルトの名無しさん
2011/03/23(水) 19:47:53.99>計算量を求める時って、何を単位にしたらいいんですか?
好きな単位にすれば?
>nlognとかO(1)とかよくわかりません。
Cの話題じゃない
数学板にでも行ってこい
0432デフォルトの名無しさん
2011/03/23(水) 20:08:15.01いや違う違う、違います。
どんな単位で数えるじゃなくて、何を単位にするかです。
時間、作業量なのか、領域なのか。
作業量は、収納と判定がありますよね。
0433デフォルトの名無しさん
2011/03/23(水) 21:04:35.96アクセスできないようにしたいのですがうまくいきません。32バイト
のハッシュ値を先読みして、それから後続の16バイトの鍵を使おうと
思うのですが、ハッシュ値の認証で失敗したり、鍵生成が無限ループ
になったりします。何が原因か分かりません。どなたか教えてください。
よろしくお願いします。
http://codepad.org/nz55zSBj
0434デフォルトの名無しさん
2011/03/23(水) 21:11:36.98>いや違う違う、違います。
何も違わない
>時間、作業量なのか、領域なのか。
だから時間でも作業量でもメモリでも好きな単位を使えば良い
何に対して何の為に計算量を求めるのかを知ってるのはお前さんだけ
お前さんが>>398ならソートの計算量の話だと考えるが別人だろ?
便乗なら、便乗と書け。
同一人物なら、何故上げる?
空間計算量と時間計算量とがあります。つhttp://ja.wikipedia.org/wiki/%E8%A8%88%E7%AE%97%E8%A4%87%E9%9B%91%E6%80%A7%E7%90%86%E8%AB%96
たとえば、時間計算量であれば、実質的に命令実行回数(ステップ数)が問題になります。
ここで細かいことをいうと、CPU が実行する命令数を調べることになるわけですが、環境によって CPU の命令構造も違います。
じゃ、なにで時間計算量を見当づけるか、については、お題とするアルゴリズムにより異なります。
ソーティングなら、「2つのデータの交換回数」を目安にしていろいろなソーティング手法を比較します。
FFT(離散フーリエ変換) なら、「掛け算」の回数になります。
0436デフォルトの名無しさん
2011/03/23(水) 21:30:06.57> while(a==0){
> printf("lx=%u trace 0\n",x);
> for(i=0;i<16;i++){
> s[i]=c1.m[i];
> s[i+16]=c2.m[i];
> }
> genkey(s,t);
> lk(t);
> fclose(fp);
> }
何をしたいか、良く分からんが、
取りあえず、無限ループするのは仕様に見えるが?
0437デフォルトの名無しさん
2011/03/23(水) 21:31:54.610438デフォルトの名無しさん
2011/03/23(水) 22:12:47.27genkey()は呼び出されます。再帰呼び出しのときに値を買えて計算
し直しているので全ての値に対してaが0でない関数がいつか見つか
るはずなのですがものすごく時間がかかります。また同じ値をハッシュ
関数に渡しているのに再帰呼び出しノアとに値が変わっているのは
なぜでしょうか?よろしくお願いします。
0439デフォルトの名無しさん
2011/03/23(水) 22:26:04.85http://codepad.org/wA3mHk7N
0440デフォルトの名無しさん
2011/03/23(水) 22:27:24.30処理時間を見積もる場合は、
アルゴリズムを考える上では収束と発散(≒ステップ数)、
仕様(実装)の段階では時間だな
もちろん、アルゴリズムを考える上でCPUの命令構造なんて考えないし
仕様(実装)の段階で、実機を無視したステップ数を計算しても意味がない。
ソートについても、計算量=命令実行回数(ステップ数)で
計算量を出してるのは見たことがない
普通は計算量=発散(n、n log n、n^2など)であらわす。
0441デフォルトの名無しさん
2011/03/23(水) 22:35:27.52再起先でaが0以外になろうが、呼出元のaは0だから終わる訳がない。
0442デフォルトの名無しさん
2011/03/23(水) 22:41:13.22レスが遅くなりました
ありがとうございました。
0443デフォルトの名無しさん
2011/03/23(水) 22:43:33.90ありがとうございます。
置き換えるというより64個の要素を64個の場所にしきつめる作業ということで
理解しました。
比較などの演算時間、ポインタや配列を使う事によって領域量や時間量は変わって
きますよね。
0444デフォルトの名無しさん
2011/03/23(水) 22:46:41.25所要時間が n秒 だろうと 1000n秒 だろうと計算のオーダーは O(n) と表記することになってる
0445デフォルトの名無しさん
2011/03/23(水) 22:54:54.12その時aは再計算されて0かどうか比較されるのではないですか?
0446デフォルトの名無しさん
2011/03/23(水) 23:05:52.15>再帰先っていうのは、一度ループから抜けますよね。
何を言いたいのか分からんが、呼出元の>>436でループではaは0のまま
再起先で変更したものを、呼出元で変更したければ、aの値を返して
aの値を変更するか、aをstaticにすれば良い。
って言うか、このコードで再起する意味が分からん。
0447デフォルトの名無しさん
2011/03/23(水) 23:05:56.07そのあと帰ってきたときに0のままでしょ
0448デフォルトの名無しさん
2011/03/23(水) 23:32:50.39>置き換えるというより64個の要素を64個の場所にしきつめる作業ということで
>理解しました。
大体そんな認識でOK
>比較などの演算時間、ポインタや配列を使う事によって領域量や時間量は変わって
>きますよね。
これも、大体そんな認識でOK
基本的にnがある程度の範囲に収まっていればnlognで計算した値に近いものになるが、
実際に処理に必要な時間を計算しようとすると、
キャッシュにのる量か否か、メモリにのるか量か否かなど、実機に大きく左右される。
と言う訳で、アルゴリズムで考える場合はnlognなと、
あるステップを、どの程度の回数繰り返すのか?ってことだけを表す。
0449デフォルトの名無しさん
2011/03/24(木) 00:05:40.07とてもわかりやすいです、ありがとうございました^^
条件判定の作業量も、置き換える作業量とあんまり変わらないですよね。
加味しないんですね。
2nlognとnlognだと作業効率違いませんか。
0450デフォルトの名無しさん
2011/03/24(木) 00:11:48.08なくなりましたが答えが不安です。そんなに一発で見つかるものなの
だろうかと。
for(x=0;x<256;x++){
a=f(x);
if(a==0){lkb(); break;}
}
見たいな感じです。
0451デフォルトの名無しさん
2011/03/24(木) 00:24:41.88>>433が開かないから確認できないが、多分、そのforのbreakはおかしい。
そこでやるなら、returnのはず。
そもそも、考え方がおかしいので、落ち着いて1から考え直せ。
0452デフォルトの名無しさん
2011/03/24(木) 02:38:51.06>2nlognとnlognだと作業効率違いませんか。
計算量Oはアルゴリズムとしての評価をするための記法。
各アルゴリズムや実装方法によって、計算の基準となる
O(1)(一回当たり)の期待値(クロックや時間など)が大きく異なり、
係数を持つことは、あまり意味を持たないから、
「2nlogn」も「nlogn」も同じ「nlogn」と表記する。
で、実機の負荷の概算は、計算量OにO(1)の期待値を掛けて、
必要であれば+αなどして出す。
ちなみに「nlogn+n」のような場合、nの値が大きくなると「n」は
無視できるほど小さくなるので、これも「nlogn」と表記する。
0453デフォルトの名無しさん
2011/03/24(木) 02:50:15.55>で、実機の負荷の概算は、計算量OにO(1)の期待値を掛けて、
の「O(1)」は、元が2nlognなら、「2・O(1)」に相当する
※正確には、その「2・O(1)」が、そのアルゴリズムの「O(1)」の期待値となる
0454デフォルトの名無しさん
2011/03/24(木) 03:03:50.12あまり深く考えなくても実用できる
「大まかな振る舞い」を示すようなものだと思っておけば十分
0455デフォルトの名無しさん
2011/03/24(木) 03:38:45.76夜分遅く
ありがとうございます。
非常に分かりやすいです。
でも計算の基準によって、nlognやn^nみたいに、全く次元の違う
計算量になったりすることはないんですか?
1000<n<3000まではnlogn
3000<n<10000まではn^3
100000<n<1000000でn^3×logn
10000000<n<1000000000でまたnlogn
みたいな。
0456デフォルトの名無しさん
2011/03/24(木) 03:43:40.000457デフォルトの名無しさん
2011/03/24(木) 06:26:44.45ならない。
それはアルゴリズムとしておかしいか、条件によって、アルゴリズムを条件で使い分けてる場合のみ。
ちなみに、O(1)は定数なので、>>456にnやlognが出てくるのはありえない。(nの値によってOの表記の方が変わる)
0458デフォルトの名無しさん
2011/03/24(木) 19:53:14.24func1()とfunc2()を同じ処理にしたいという感じです。
二つだと、同じ処理をコピペすればよいが、多数あるときはどうすればよいでしょうか?
0459デフォルトの名無しさん
2011/03/24(木) 19:57:12.32#define func3 func1
0460デフォルトの名無しさん
2011/03/24(木) 19:58:34.10数が未定なので、動的に関数のクローンを生成したいのです
0461デフォルトの名無しさん
2011/03/24(木) 20:00:25.64関数ポインタ
0462デフォルトの名無しさん
2011/03/24(木) 20:01:48.75関数ポインタでは困るので、クローンしたいのです。
メモリ上に同じ処理を複数作りたいのです。
0463デフォルトの名無しさん
2011/03/24(木) 20:07:03.86関数ポインタで困るってことは静的な値を使ってたりして、
呼び出し元毎にユニークにしたいのか?
だとすると、無理。(環境依存なら出来るかも知れんが)
まぁ、実装の方を工夫するべき。
0464458
2011/03/24(木) 20:07:12.54func2 = malloc(sizeof(func1));
memcpy(func2, func1, sizeof(func1));
0465デフォルトの名無しさん
2011/03/24(木) 20:08:55.01C++風なクラスの関数を作りたいのです。
関数ポインタだと同じ先を指すので、上手くいかないと思いまして…
(C++で実装されているものと、同じような機能をCで提供したい
0466デフォルトの名無しさん
2011/03/24(木) 20:10:42.24動的(実行中)に関数(命令列)を作る(書き換える)ということか
単にイメージを複製しても位置独立でない可能性を C の範疇では否定できないので
やるならアセンブラだね
0467デフォルトの名無しさん
2011/03/24(木) 20:12:27.94>C++風なクラスの関数を作りたいのです。
テンプレートみたいなもの?
それとも、継承みたいなもの?
前者なら無理。
後者なら同じ先を指して問題ないはず。
※静的な値を使ってなければ
0468デフォルトの名無しさん
2011/03/24(木) 20:14:59.23後者です。
入門者ですみません。
同じアドレスの関数を実行して、
複数のプロセスやスレッドに実行された場合、正常に動作可能でしょうか?
0469デフォルトの名無しさん
2011/03/24(木) 20:16:01.14C++ の関数オブジェクトに相当するものなら構造体で作れる
特に変わったテクニックは必要なく素直に作れる
0470デフォルトの名無しさん
2011/03/24(木) 20:17:34.39単一のプロセスやスレッドならば、関数ポインタで大丈夫なのは理解しておりますが、
複数から呼ばれた場合、問題ないですか?
0471デフォルトの名無しさん
2011/03/24(木) 20:17:38.51再入可能でぐぐれ
0472デフォルトの名無しさん
2011/03/24(木) 20:18:13.43マルチスレッドはCで環境依存の問題。
基本的には、各環境でスレッドセーフに作れば、
同じ関数で、問題ない(何度も書くが静的変数を含まなければ)
0473デフォルトの名無しさん
2011/03/24(木) 20:21:09.91関数のクローンが作れたら良いと思ったのですが、話を聞いていると無理っぽいですね
0474デフォルトの名無しさん
2011/03/24(木) 20:22:35.86入門編と言う事でお聞きしたのですが、再入可能って難しい概念ですね。。
0475デフォルトの名無しさん
2011/03/24(木) 20:23:58.17そんならコード自体が別である必要はなさそうだな
データがアクションごとに用意されていればいいんじゃないか?
0476デフォルトの名無しさん
2011/03/24(木) 20:24:36.53無理です。
実装の方で工夫して下さい。
0477デフォルトの名無しさん
2011/03/24(木) 20:26:36.63ありがとうございます。
否定されると、返って開き直れます。
C++と同じI/Fを提供する手立てがないかと探していましたが、
別の道を探ってみます。
0478デフォルトの名無しさん
2011/03/24(木) 20:27:49.36そんなに難しくない。
自分が書いたプログラム内で、静的変数を使用しない。
後は、そのプログラムから呼び出している関数が、スレッドセーフである。
この2点のみ満たせばOK。
0479デフォルトの名無しさん
2011/03/24(木) 20:28:48.98技術的に可能と能力的に可能は別物
JITとかの動的コード生成ができているので技術的には可能
0480デフォルトの名無しさん
2011/03/24(木) 20:31:10.78ありがとう。
JITというものは知りませんでした。
可能なら、手だてを考えます
0481デフォルトの名無しさん
2011/03/24(木) 20:36:07.25アホ言うな。
お前さんが言ってるのは、入門者に対して
新しいC言語作れって言ってるのに等しい。
0482デフォルトの名無しさん
2011/03/24(木) 20:39:31.40だから最初に「技術的に可能と能力的に可能は別物」と書いてある。よく読めカス
0483デフォルトの名無しさん
2011/03/24(木) 20:39:49.25>後は、そのプログラムから呼び出している関数が、スレッドセーフである。
スレッドセーフじゃなくて再入可能な
0484デフォルトの名無しさん
2011/03/24(木) 20:42:10.24誰もが通る試練(大げさだが)だよ
クリアできるかどうかは
おまえさん次第だ
0485デフォルトの名無しさん
2011/03/24(木) 20:42:41.34C言語的には無理という事ですね。
違った実装を考えます。
0486デフォルトの名無しさん
2011/03/24(木) 20:44:50.11違う。C言語でも 技・術・的 には可能。でも 素・人 には無理
0487デフォルトの名無しさん
2011/03/24(木) 20:45:23.74入門者に対してJITコンパイラ作れって言ってるお前さんほどじゃないよ
>>483
そうだね
何で間違えたんだろう…
0488デフォルトの名無しさん
2011/03/24(木) 20:47:30.46今の俺のスキルでは到底無理な事という事ですね。
0489デフォルトの名無しさん
2011/03/24(木) 20:49:23.54単純にC言語では無理。
環境依存であれば、環境次第。
環境に依存しないのであれば、仮想マシンをC言語で作って
さらに、その仮想マシン上で動いて、>>473を満たすCコンパイラを作ればOK。
0490デフォルトの名無しさん
2011/03/24(木) 20:52:47.84ありがとう。
標準ライブラリのみのCで作るには、それなりの手腕が必要である事は理解できました。
0491デフォルトの名無しさん
2011/03/24(木) 20:54:13.33>標準ライブラリのみのCで作るには、それなりの手腕が必要である事は理解できました。
どんな腕があろうと、環境依存しなきゃ無理。
0493デフォルトの名無しさん
2011/03/24(木) 21:41:20.330494デフォルトの名無しさん
2011/03/24(木) 21:43:34.050495デフォルトの名無しさん
2011/03/24(木) 21:50:42.26途中でリエントラントの話に脱線してるが、
基本的には環境に依存しないスレッドセーフを提供するための手段らしい
0496デフォルトの名無しさん
2011/03/24(木) 22:11:08.160497謙虚フロンティア戦士
2011/03/24(木) 22:17:38.59C言語の範疇で原始的なC++的なことはできるだろJK
0498デフォルトの名無しさん
2011/03/25(金) 00:27:09.92ユーザーの入力した文字を受け取る関数としてgetchar()が書いていたのですが、文字列を受け取る方法が書かれていませんでした。
もしかしたらこの先に書かれているのかもしれませんが、自分的にはLEsson5から条件分岐や繰り返し処理にはいるそうで、その前に知っておきたいので、文字列を受け取る関数を教えていただけないでしょうか
まだ試してないと言うか、違うと思っているので試すつもりもないのですが、文字列と文字は違うと言う事なので、getchar()で文字列を受け取っても多分バグ?りますよね?
0499デフォルトの名無しさん
2011/03/25(金) 00:36:17.770500デフォルトの名無しさん
2011/03/25(金) 05:43:05.90C言語では文字の配列が文字列だから配列を理解して処理すれば大丈夫
0501デフォルトの名無しさん
2011/03/25(金) 05:55:58.10何に対して回答してるんだ?
0502デフォルトの名無しさん
2011/03/25(金) 12:09:14.87なるほど
配列を見てみましたがLesson6でようやくでてくる単元のようです。
Lesson6まで楽しみにとっておこうとおもいます
回答ありがとうございました
0503デフォルトの名無しさん
2011/03/25(金) 16:20:33.43http://www.kis-lab.com/serikashiki/C/C03.html
ここ↑に、int型のサイズを知る方法として、
int ans;
ans = (int)&(((int*)0)[1]);
というのが紹介されてますが、以下の方法だとまずいでしょうか?
ans = (int)((int*)0 + 1);
0504デフォルトの名無しさん
2011/03/25(金) 16:43:54.78そのサイト主よりおまえさんのほうがきれいなコード書けてるが
ただしポインタを int に変換した結果は処理系定義なので
sizeof(int) を回避してまでそう書くことの優位性はない
0505デフォルトの名無しさん
2011/03/25(金) 17:17:19.24�d
0506デフォルトの名無しさん
2011/03/25(金) 19:20:35.48認証する機能をつけたいのですがうまくいきません。秘密鍵の計算方法が
正しいかどうかもわからないので公開します。lkbを呼び出すとループの
値が0にリセットされて無限ループになります。機能は動いたはずなのに
今朝動かしたら動かなくなっていました。下にソースのアドレスを書きます。
わかる人がいたらよろしくお願いします。
http://codepad.org/55oSSY2H
0507デフォルトの名無しさん
2011/03/25(金) 19:55:31.950508デフォルトの名無しさん
2011/03/25(金) 20:03:02.20//ファイルkey.binに秘密鍵を書き込む。
void genkey(unsigned char str[256],unsigned char tt[256]){
FILE *fp;
int i;
fp=fopen("key.bin","wb");
hash(str);
fwrite(c1.dd,1,16,fp);
fwrite(c2.dd,1,16,fp);
fclose(fp);
}
//関数の値が0だったらもう一度秘密鍵の計算をやり直す
void lkb(unsigned char t[256],int x){
unsigned char str[16],m[32],s[256];
int i,a;
FILE *fp;
flag=0;
for(i=0;i<16;i++){
s[i]=c1.m[i];
s[i+16]=c2.m[i];
}
genkey(s,t);
lk(t);
if(mode==2)
kk(t);
}
0509デフォルトの名無しさん
2011/03/25(金) 20:23:07.61>ans = (int)&(((int*)0)[1]);
これは、Cを規格通り覚えたいなら、やっちゃ駄目な典型
どんな環境でも正しくサイズを取得する場合はsizeofを使う
0510デフォルトの名無しさん
2011/03/25(金) 20:31:55.75またお前か
取りあえず、作り直した方が早いよ
考え方としては、キーを再生成する可能性があるなら、その部分は暗号化の前に終わらせておく。
その為に、暗号化の部分に入ってる、キー再生成の条件を出すコード(aの演算)は別関数にする。
それだけで、見通しが良くなって、何が悪いのかも分かりやすくなる。
0511デフォルトの名無しさん
2011/03/25(金) 20:55:47.710512デフォルトの名無しさん
2011/03/25(金) 21:02:03.36取りあえず、他のスレに書いた質問を全て終わらせてこい
※前回の質問やりっ放しも含む
0513デフォルトの名無しさん
2011/03/25(金) 21:09:09.40と思ったんですけど、今朝見たら動かなかったんです。
0514デフォルトの名無しさん
2011/03/25(金) 21:14:30.590515デフォルトの名無しさん
2011/03/25(金) 21:21:55.66おまえ &*(int *)0 を「やっちゃ駄目」だと思ってるだろw
0516Perl忍者lvl2 ◇M5ZWRnXOj6
2011/03/25(金) 22:18:19.41Perlはハッカー御用達だぜ!?
ハッカー(爆笑)
0518デフォルトの名無しさん
2011/03/25(金) 22:26:24.130519デフォルトの名無しさん
2011/03/25(金) 22:27:02.42ガリでも食ってろ
0520デフォルトの名無しさん
2011/03/25(金) 22:28:12.43お前が>>503の何が駄目なのか分かってないことは分かった
0521デフォルトの名無しさん
2011/03/25(金) 23:07:35.230522謙虚フロンティア戦士
2011/03/26(土) 09:57:35.240523デフォルトの名無しさん
2011/03/26(土) 22:26:24.66ビッツシフツ(複数形かつ動態形) ってなして嫌われるとですか?
0524デフォルトの名無しさん
2011/03/26(土) 23:13:00.07コンパイルしたらなんか下記のエラー出る…
誰か助け・・・て・・・
error LNK2005: "int * Player1" (?Player1@@3PAHA) は既に functioncode00102.obj で定義されています。
int Player1はヘッダーの中で定義している変数名です。
ファイルは“algrithm.cpp”、“mainsource.cpp”、“functioncode.cpp”、“func_header.h”で
cppファイルはそれぞれ#include func_header.hでヘッダーファイル取り込み。
変数とか構造体の定義は全部ヘッダーファイル内で行っています。cppファイルでは一切定義しておりません。デバッグの事を考えて変数は全て1ファイルに収めた方がいいと考えたからです。
で、これで多重インクルードってのがあるんでしょ?
だから#ifndef定義とか使って対策した。
その他…ヘッダーの中にstaticはないです。
そしたら↑のエラーメッセージ吐いてきたんだが、もう対策方法がわからん。
そのエラーコードはググったんだけどよくわかんねw
同じ事を質問してる人いたけどよく分からん単語ばっかり言ってて参考にもならねぇわ…(´・ω・)
0525デフォルトの名無しさん
2011/03/26(土) 23:24:12.96int Player1; 書いて
ヘッダーには
extern int Player1;
書く
ってのは単に指定したファイルの中身を書いた場所にぶちまけるだけ
int Player1をヘッダーに書いて複数ファイルからinclude すると
インクルードしただけint Player1が作られるということ
0527デフォルトの名無しさん
2011/03/26(土) 23:31:06.25まずは宣言と定義の違いを理解しませう
0528デフォルトの名無しさん
2011/03/26(土) 23:41:44.58出来た…でもさ…
やっぱりcppに宣言かかないと無理なのか…?
0529デフォルトの名無しさん
2011/03/26(土) 23:50:49.67.hに宣言、.cppに定義だっちゅうに
どうしても変数定義だけを別けたいならそれ専用の.cppを作れば
Player1を使いたいcppでplayer.hをincludeして関数経由でint Player1を操作
0531デフォルトの名無しさん
2011/03/26(土) 23:57:28.42OK。分かった。
どうもありがとう
0532デフォルトの名無しさん
2011/03/28(月) 02:16:29.33しば
しば。
どーでもええがなンなもん
0533デフォルトの名無しさん
2011/03/28(月) 02:21:43.19static(extern)の有無でいいんじゃないの?
0534デフォルトの名無しさん
2011/03/28(月) 02:26:27.93ファイルの中の文字列の置き換え
test.txtというテキストファイルの"dog"という文字列をすべて"rabbit"に変換し、
rabbit.txtという名前で保存するプログラムである。
http://codepad.org/IRMS82LF
●のところが文字列を置き換える処理らしいんだけど、
これ何?アドレスの足し算、引き算してんの?
教えてください。エロい人さん。
0535デフォルトの名無しさん
2011/03/28(月) 02:46:45.010536デフォルトの名無しさん
2011/03/28(月) 02:58:15.02面倒だからちゃんとコンパイルできる形で登録しろよ。
で、問題の3行はこれと同じ。
sprintf(bufw, "%.*s%s%s", p - bufr, bufr, str2, p + strlen(str1));
どうでもいいけどそのプログラムは最後の行が重複するバグがあるぞ。
0537デフォルトの名無しさん
2011/03/28(月) 03:04:05.170538デフォルトの名無しさん
2011/03/28(月) 03:04:40.910539デフォルトの名無しさん
2011/03/28(月) 07:56:10.52それはない
0540デフォルトの名無しさん
2011/03/28(月) 11:07:19.92Windows APIとかたくさんありすぎて丸暗記できないのですが
0541デフォルトの名無しさん
2011/03/28(月) 11:24:28.650542デフォルトの名無しさん
2011/03/28(月) 11:54:19.89Cはやっぱり勉強して損はないですか?
あと初心者からCを覚えきるまで何時間掛かりますか?
秀丸エディタで勉強しても大丈夫ですか?
やっぱりVC++をインストールしないとダメですか?
いちおうBCCいれてます
0543デフォルトの名無しさん
2011/03/28(月) 12:26:06.04どこの首相だよ
0544デフォルトの名無しさん
2011/03/28(月) 12:30:35.6050時間ほどあればいいんじゃね
何エディタでもいいよ
もうBCC動いてるんなら面倒だろうしそれで問題ない
0545デフォルトの名無しさん
2011/03/28(月) 13:08:25.570546デフォルトの名無しさん
2011/03/28(月) 13:16:00.850547デフォルトの名無しさん
2011/03/28(月) 13:42:24.13俺も初心者だから偉そうなこと言えないけど
0548デフォルトの名無しさん
2011/03/28(月) 13:49:44.59間違いがあるし、判り難い。文字通り苦しんで覚えたいなら止めないけれど。
0549デフォルトの名無しさん
2011/03/28(月) 14:23:24.45たまに、「XXXX入門書終わりましたが、プログラムが作れません。」
と言う初心者が現れる。
おまえ、入門書を眺めて、サンプルCDから実行しただけじゃないかと小一時間突っ込みたい。
0550デフォルトの名無しさん
2011/03/28(月) 15:33:40.05自分は「猫でも分かる」と「ゲームプログラミングの館」ってとこ使ってたけど、やっぱ入門書が一番だったな
もっといいところ無いんだろうか
0551デフォルトの名無しさん
2011/03/28(月) 15:48:19.400552デフォルトの名無しさん
2011/03/28(月) 16:42:50.69このファイルだけをコンパイルしたら動くのですか?
インクルードするDxLib.hというファイルもtest.cと同じフォルダに入れておかないとダメなんですか?
0553デフォルトの名無しさん
2011/03/28(月) 16:49:32.57そのサイトの手順を0からやってれば、そんな質問出ないはず。
仮に、0からやってて、その段階で、その質問が出てきたのなら、C言語あきらめた方が良い。
0554デフォルトの名無しさん
2011/03/28(月) 17:07:45.250555デフォルトの名無しさん
2011/03/28(月) 17:21:38.57解説や使い方が正しくないサイトは全てが疑わしくなる
筆者がC言語を理解できてないことの証明だから
0556デフォルトの名無しさん
2011/03/28(月) 17:29:53.740557デフォルトの名無しさん
2011/03/28(月) 17:31:45.75副作用完了点の取り扱いが間違ってるなら分かるけど怪しいって何?
0558デフォルトの名無しさん
2011/03/28(月) 17:31:54.200559デフォルトの名無しさん
2011/03/28(月) 17:34:57.61間違いと正解の混在。 一番たちが悪い
0560デフォルトの名無しさん
2011/03/28(月) 17:37:41.81自薦自演OKです
ダメだったら袋叩きにします
0561デフォルトの名無しさん
2011/03/28(月) 17:50:33.74ここ
0563デフォルトの名無しさん
2011/03/28(月) 19:14:52.290564デフォルトの名無しさん
2011/03/28(月) 19:38:31.53http://codepad.org/gim0E9pN
このプログラムなのですが、
エラー E2342 11.c 18: パラメータ 'num1' は int * 型として定義されているので int は渡せない(関数 main )
エラー E2342 11.c 18: パラメータ 'num2' は int * 型として定義されているので int は渡せない(関数 main )
とエラーが出てしまいます。
どこがおかしいのでしょうか?
間接参照演算子をつけたポインタは変数の値・アドレスを参照するのではなくて、変数そのものを参照すると思っているのですが、間違えていますでしょうか?
0565デフォルトの名無しさん
2011/03/28(月) 19:41:24.140566デフォルトの名無しさん
2011/03/28(月) 19:42:40.31関数addの第一と第二引数はintのポインタなのでmain側ではint型変数のアドレスを渡す必要がある
具体的に言うと
add(x1,x2,a);
を
add(&x1,&x2,a);
に変える
0567デフォルトの名無しさん
2011/03/28(月) 19:43:28.83addは引数に(int*型, int*型, int型)をとるようになってる
でも実際使ってるほうは
add(int,int,int)になってる。引数の型が違ったら使えないよ
0568デフォルトの名無しさん
2011/03/28(月) 19:44:49.64addのreturnに対する突っ込みは無しでつか?
いや、構文としては間違ってないけどね…
0569デフォルトの名無しさん
2011/03/28(月) 19:47:08.800570デフォルトの名無しさん
2011/03/28(月) 19:47:13.830571デフォルトの名無しさん
2011/03/28(月) 19:48:29.70なるほど引数で&をつけてあげないといけなかったんですね
つけてなかったから型違いになってエラーと・・・
解決しました
ありがとうございますm(_ _)m
>>568
addのreturnは自分でも思っていたのですが、
num3も返してあげた方がいいんですかね?
自分的にはnum3は加算する点数ようの引数なので返す必要ないとおもって返してないのですが
0572デフォルトの名無しさん
2011/03/28(月) 19:50:26.12暇も何もソースみたら一目瞭然だろ
つーか、こんなんで暇だねって言われたら
( ´∀`) <オマエモナー
0573デフォルトの名無しさん
2011/03/28(月) 19:52:22.810574デフォルトの名無しさん
2011/03/28(月) 19:53:15.85C言語では引数は一つしか返せない
int add(); // returnされる値はint型
複数の値を返したければ、>>564のように参照を使って
引数が指している中身を変更するか構造体を使う
0575デフォルトの名無しさん
2011/03/28(月) 19:56:13.87返せないのは返値(戻値)ね
0576デフォルトの名無しさん
2011/03/28(月) 19:58:11.59なるほど
今僕は「優しいC第3版」と云うのを見ながらやっているんですが、
return文のところで、「return 式」と書いていたので複数でも返せるものと思っていました。
構造体と云うものが何か分からなかったので今目次を見てみましたが、Lesson11でするようです。
(因みに自分はいまLesson9の最後の練習問題の所です)
0577デフォルトの名無しさん
2011/03/28(月) 19:59:33.12途中で書き込み押してしまいました。
ミスです。
まあどうでもいい話ですが、構造体というものをするのが楽しみになってきました。
ありがとうございましたm(_ _)m
0578デフォルトの名無しさん
2011/03/28(月) 20:01:23.25で実際に返してるのは*num2の値
0579デフォルトの名無しさん
2011/03/28(月) 20:06:53.98returnで*num1指定してもその後に*num2と指定すると戻り値が上書きされてしまうということでしょうかね
今returnで戻り値を0にしてみても動きました。
正直予想外で、本当は動かないと思ったいました。
戻り値は理解してるつもりでしたが出来ていないような気がしてきましたので、今から戻り値の単元を再度読み返そうと思いますm(_ _)m
0581デフォルトの名無しさん
2011/03/28(月) 20:12:50.48return a, b;
これは単純にコンマ演算子でaを評価したあとbを評価する。
その結果、aは捨てられてbを返す。
return 0;
これは0を返しているだけ。
意味が分からなければ、main()に int b;を用意して
b = add( &x1, &x2, a);
で、add()のreturn;を色々と変えてbの内容を確かめてみると良い
0583デフォルトの名無しさん
2011/03/28(月) 22:04:42.380584デフォルトの名無しさん
2011/03/28(月) 22:28:04.50HPにサンプルも載っけてあるから見てみれば
0585デフォルトの名無しさん
2011/03/28(月) 22:33:59.96hmjre.dll
0586デフォルトの名無しさん
2011/03/28(月) 22:55:19.91漢は黙ってPCRE
0587デフォルトの名無しさん
2011/03/28(月) 22:58:32.26ありがとう。
明日、それぞれを見比べてみます。
0588デフォルトの名無しさん
2011/03/28(月) 23:01:49.23ありがとうございます
0589デフォルトの名無しさん
2011/03/28(月) 23:07:06.67何この遅レスって思ったら11日か…
もしかして、やっと書き込めるようになったとか?
0590デフォルトの名無しさん
2011/03/28(月) 23:17:32.84タイトル名を「小手返し及びドラゴンスクリュー教えるツェー言語」にしようとしたことがある。
手取り・・・・手を取るのは小手返しである
足取り・・・・足を取るのはドラゴンスクリューである
よって、小手返し及びドラゴンスクリューで教えるとは
手取り足取り教えるということであるからウィットが効いておろう、
と思ったが長すぎるのでやめた。
0591デフォルトの名無しさん
2011/03/28(月) 23:22:08.490592デフォルトの名無しさん
2011/03/28(月) 23:26:04.380593デフォルトの名無しさん
2011/03/28(月) 23:28:05.100594デフォルトの名無しさん
2011/03/28(月) 23:35:53.12個人的にあのような記述方法は、厄介なコードへの近道だと思う。
たとえば
struct AAA {
int a,b,c;
};
これのインスタンスを大域変数として struct AAA aaa; として宣言してあるとします。
この aaa を読んだり書いたりするには、たとえば
void f(void) {
aaa.a = 1;
aaa.b = 2;
aaa.c = 3;
}
などとすれば、読んだり書いたりできますが、この aaa という長い名前を簡略化するために、マクロによって短い名前にしてる人が時々います。
つまり
#define w aaa
void f(void) {
w.a = 1;
w.b = 2;
w.c = 3;
}
となって、タイピング量が減って楽になるという理由でしょうけど、個人的に、マクロによってタイピング量をラクする、こういうコードを好んで書く人は、
ちょっと思慮が浅いと思います。というか、センスが良くないと思います。
0595594
2011/03/28(月) 23:38:58.36他人(もしくは数ヶ月後の自分)にとっては、読むにも、改変するにも、余計なワンクッションを思考に挟む必要のある、「無駄に読みづらくされたコード」として映ってしまうからです。
また、読みづらさだけならまだしも、これはマクロの罠を潜在的にコードに潜り込ませることになります。(バグの温床)
「マクロは、あくまでマクロでしかない」これはK&Rで戒められてることです。(うろおぼえ、いや、ストラウストラップの本の方だったかもしれない。)
つまりマクロはC言語を知らないんです。マクロはマクロでしかない。
たとえば、将来、別の誰か(もしくは数ヶ月後の自分)が、struct AAA にメンバー変数 w を追加するとしたら、どうなるでしょうか?
struct AAA {
int a,b,c;
int w;
};
#define w aaa
void f(void) {
w.a = 1;
w.b = 2;
w.c = 3;
w.w = 4; // エラー。 マクロによって実際には aaa.aaa = 4; という文字列に置き換えられてしまう。
}
厄介なことが起こりました。
wという名前をメンバー変数に使うのを諦めるか、もしくは #define w aaa を別の名前に変えるか、いずれにしても『余計な問題』が発生してしまいます。
でも、これはまだコンパイル時にエラーが出るのでマシです。
0596デフォルトの名無しさん
2011/03/28(月) 23:42:18.66きっと使えると説明できるって異なる能力なんだろうね
0597594
2011/03/28(月) 23:45:01.70もしも
struct AAA {
int a,b,c;
int w;
int aaa;
};
だとしたら?
#define w aaa
void f(void)
{
w.w = 4; // マクロによって実際には aaa.aaa = 4; という文字列に置き換えられてしまう。 そう! なんとメンバー変数 w は不定のまま! しかしコンパイルは正常に通ってしまう。
w.aaa = 5;
}
こういうコードを、「”ぱっ”と見せられて」、 w.w への代入が失敗してることに、つまり w.w にバグの原因があることに気づけますか? 少なくとも自分は、かなり気づきにくいと感じます。
(例では、#define w aaa がすぐ近くにあるけど、実際のコードでは数百行の彼方に記述されてるかもしれません。 それでも簡単に気づけますか?
こういう「コンパイル通る類のバグ」は本当に厄介だと思います。気づきづらい。
ましてや他人の書いた膨大なコード中だと、尚更気づきづらいでしょう。)
0598デフォルトの名無しさん
2011/03/28(月) 23:50:00.970599594
2011/03/28(月) 23:50:32.00まったく aaa 界隈とは無関係の処理で、同じソースファイル中に以下のようなコードを追加した場合、
struct BBB {
int aaa;
int w;
};
// ~~~
#define w aaa
// ~~~
void g(void)
{
struct BBB bbb;
bbb.aaa = 1;
bbb.w = 2; // マクロによって実際には bbb.aaa = 2; という文字列に置き換えられてしまう。(wは不定のまま。つまりバグ) しかし、コンパイルは正常に通ってしまう。
}
まったく struct AAA aaa; と関係無いような処理にまで、#define w aaa の魔の手が伸びてきます。
たとえばこのコードがバグを起こしたとして、はたして原因として、まったく数百行彼方の(しかも一見、まったく関係無い)#define w aaa が原因だなんて、
容易に連想できます? 少なくとも私は半日コードを凝視しつつ延々と悩みつづける自信があります…orz
こういうマクロ関連のバグって、ほんとに気づき難いものです。実際に起きたら。
では、じゃぁ、このバグの原因がマクロだということに気づけたとします。 では原因を発見できたとして、このバグをを回避するためにどうしますか? どこに手を付けますか?
やりようは、いくらでもありますが、しかし、それにしたって、余計な面倒が増えてしまうのです。
#define w aaa なんていうマクロのせいです。(もともとタイプ量をラクするためのものが、コードの成長とともに、いつのまにかコードの癌へと変化してしまってる様子です)
0600デフォルトの名無しさん
2011/03/28(月) 23:56:07.49そのコードでは、システムのワーキングメモリとして構造体のインスタンスを大域変数として宣言し、タイプ量を少なくするために #define で w という名前に置き換えられてました。 ・・・wですよ? もう、恐ろしいですよ、こういうコード・・・
だから、ワーキングメモリのメンバ変数には、その子世代にも続いてずっと、メンバ変数として w という変数名に(容易には)アクセスできませんし、ソースコード中に w という変数を作ることすら(ほぼ感覚的には)禁止されてしまってます。
たとえば、 int width; の意味で int w; というメンバー変数名を使うのはよくあることだと思いますが、この w という変数名が(事実上)禁じ手にされてしまってるのです。
(もちろん #undef など工夫すれば w という変数名にもアクセスできますが、はたして、これを本末転倒と言わずに、なんと言うのでしょうか? もともとタイプ量をラクするためのものだったのに。)
もしもマクロではなく、ポインターなど「C言語の記述として」 w を用意してれば、マクロの罠は起こりません。 なぜなら、当然ですが、C言語はC言語を知っているからです。
たとえば
struct AAA* w = &aaa;
void f(void) {
w->w = 4; // ちゃんと aaa.w へ代入される。
w->aaa = 5; // ちゃんと aaa.aaaへ代入される。
}
ただし、ポインターを用意する分だけ、マクロよりも処理速度もメモリー効率も落ちます。(最適化されない前提で考えれば)
でも、個人的には、それでも #define w aaa なんてマクロをコードに潜り込ませるよりは、遥にマシだと思います。
ようするに、何が言いたいって、マクロは注意深く使ったほうが(なるべく使用は控えた方が)良いんじゃないの? という個人的な感想ですw というか、保守する側の身にもなれや・・・的なグチですorz
「おおさまのみみはろばのみみ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!!!!!!!!!!!!!!!!!!!!!!!!」
ああ、スッキリした・・・orz
0601デフォルトの名無しさん
2011/03/28(月) 23:57:04.99型の名称を省略したい場合は、typedef使いましょうね。
あと、ソースは、ちゃんと分割して管理しまょうね。
最後に、依存関係は、ちゃんと管理しましょうね。
以上。
0602デフォルトの名無しさん
2011/03/29(火) 00:04:38.36んじゃ、最初から、命名規則に則った短い名前を付けましょう。
以上
0603デフォルトの名無しさん
2011/03/29(火) 00:07:35.550604デフォルトの名無しさん
2011/03/29(火) 00:14:54.24こんにゃろう
0605デフォルトの名無しさん
2011/03/29(火) 00:57:40.57とあったのですが、+ a + とはどういう意味ですか?
0606デフォルトの名無しさん
2011/03/29(火) 01:08:36.460607デフォルトの名無しさん
2011/03/29(火) 01:09:42.19試しにgetchar()、char testと定義してscanf("%c", &test);としても駄目だったもので。
>記号の入力判定
とは具体的になにをすればいいのでしょうか?例をあげてみてください。
0609デフォルトの名無しさん
2011/03/29(火) 01:19:00.90すいません書き方が悪かったですね。
単にどうすれば記号をユーザーの入力から取得できるか知りたかったのです。
具体的に云うと、
if(test == '+'){
...
}else if(test == '-'){
...
}else if(test == '*'){
...
}else if(test == '/'){
...
}else if(test == '&'){
...
}else if(test == '%'){
....
以下省略のように、入力された記号に応じた処理をするプログラムを作りたいので。
http://codepad.org/5qJaWoGM
こんなのはどうでしょうか。
0611デフォルトの名無しさん
2011/03/29(火) 01:28:47.95さっぱり分からないが
あなたが求めているのは
#include <conio.h>
と
getch() もしくは getche()
かもしれない
0612デフォルトの名無しさん
2011/03/29(火) 01:46:16.38私が求めていたのは若干事なりましたが大体そんな感じなのでとても助かりました。
EOFという知らない単語もあり、検索をしてみたところ良い勉強になりました。
ありがとうございました。
>>611
getch(),getche()どちらも知らない関数でありましたので調べさせていただいたところ入出力関数のようですね。
自分にはまだまだscanf getcharなどとの使い分けが今いち分かりませんが、新しい関数をしれたという意味ではいい勉強になったのではないかなと思います。
ありがとうございました。
0613デフォルトの名無しさん
2011/03/29(火) 02:30:45.93「キーボーから入力があったら通知あんねんから、それ直に捕まえて関数ポインタで飛ばしたったらええんや」
とか思い出せばしめたものである
0614デフォルトの名無しさん
2011/03/29(火) 05:32:15.91if (A==B || A==C || A==D || A==E) {
} else if (A==F || A==G || A==H) {
}
みたいな場合分けぐらいじゃなかろうか>switchcaseを使う場面
0615デフォルトの名無しさん
2011/03/29(火) 05:45:07.900616デフォルトの名無しさん
2011/03/29(火) 07:24:00.500617デフォルトの名無しさん
2011/03/29(火) 07:37:23.530618デフォルトの名無しさん
2011/03/29(火) 08:08:42.020619デフォルトの名無しさん
2011/03/29(火) 09:26:16.63キーボードからの入力を捕まえて関数ポインタで飛ばすって何?
0620デフォルトの名無しさん
2011/03/29(火) 10:36:33.190621デフォルトの名無しさん
2011/03/29(火) 11:23:47.66必要なものはその時わかる
0622デフォルトの名無しさん
2011/03/29(火) 11:27:58.32目的がiPhoneアプリなのだから、独力で学習できるならObjectiveCだけでいい。
そうでないなら、情報量の多いCから入った方がいいかもしれない。
まぁ、そんな質問をしている段階でどうせ無理だと思うが。
0623607
2011/03/29(火) 11:46:47.01http://codepad.org/DaZzmWhv
-が入力されたときは上手く処理をするので、-の所との違いをチェックしていきましたが、演算の違いだけで他に見当たりません。
また、エラーがでているわけでもありません。
どこがおかしいのでしょうか
0624デフォルトの名無しさん
2011/03/29(火) 11:53:04.310625デフォルトの名無しさん
2011/03/29(火) 11:56:38.47mark = getchar() は最初の一回のみ
後は、markと記号の比較でOK
0626607
2011/03/29(火) 11:57:29.02mark = getchar()を先にするのは昨日やってみました。
するとちゃんと+などを打っても、
else{
printf("対応してる計算式を入力してください。\n");
printf("もう一度始めからやり直してください。\n");
}
の部分へ行ってしまいます。
あ、それと何故かchar型のans2定義してますが意味ないです
0628607
2011/03/29(火) 12:03:55.16http://gyazo.com/f9d1862e932d0d1c4fca6ae6f9d78386.png
+を入力しましたがやはりこんな感じになってしまいます。
発想を変えて条件分岐のmarkも文字が代入されてるので試しに'つけてみたら次はエラーがでましたorz
0629デフォルトの名無しさん
2011/03/29(火) 12:05:01.520630デフォルトの名無しさん
2011/03/29(火) 12:07:40.08変な動きをする理由はscanfのあと入力バッファに改行が残るからです
例えば 1<改行>2<改行>+<改行> のように入力すると
最初の scanf("%d", &num1); は 1 を読み込みます
次の scanf("%d", &num2); は改行を読み飛ばして 2 を読み込みます
次の getchar() は改行を読み込みます
次の getchar() は + を読み込みます
次の getchar() は改行を読み込みます
解決方法は・・・マンドクセ('A`)
0631607
2011/03/29(火) 12:10:22.99やってみましたが>>628と同じ処理になってしまいました。
>>630
なるほど
getcharで改行を読み込ませないか数字入力する時点で改行が無いようにしてあげればいいってことですかね
やってみます
0632デフォルトの名無しさん
2011/03/29(火) 12:15:29.880633607
2011/03/29(火) 12:25:39.34getcharをscanfに変えて%*cで空白を読み飛ばしました。
入力バッファという言葉自体しらなかったのでggってみたらscanfの問題点というのがあってそこに空白の読み飛ばしと云うものがありました
やっぱプログラミングって難しいですね
何が原因とかわかってたら最初からggっていれば、これだってすぐ解決できるようなことだったのに
そういう言葉を知らないために検索のしようもないですからねー
でも難しいけどできた時が嬉しいので楽しいです
ありがとございました
0634デフォルトの名無しさん
2011/03/29(火) 14:53:37.990635デフォルトの名無しさん
2011/03/29(火) 16:52:50.78先輩に殺されるかも・・・・・・・・・・・・・・・・・・
0636デフォルトの名無しさん
2011/03/29(火) 18:29:47.110637デフォルトの名無しさん
2011/03/29(火) 18:31:44.07会社でよく使われてるほうのコンパイラを使って勉強したいです!
vc++一択
0639デフォルトの名無しさん
2011/03/29(火) 18:39:08.23HSCでもGCCでもBCCでもVCでもそれぞれクセがあって、結局書き直さないといけなくなる。
GCCは頑なにANSIで認められたものしか実装しようとせずstrnlengthとか使えなかったり
BCCはもう古くてlong long とか使えなかったりするし
VCはWindows専用でほかのシステムにまったく対応できないし
0640デフォルトの名無しさん
2011/03/29(火) 18:39:13.61あえて一から教える事で飲み込み能力を見てるわけ?
C言語の飲み込み能力見るために、つまり天性的なものを見るために
あえてC言語経験者は取らない会社ってあるの?
0641デフォルトの名無しさん
2011/03/29(火) 18:51:55.20GCCって変な拡張がいっぱいあるいようなイメージだけど。
0642デフォルトの名無しさん
2011/03/29(火) 19:01:50.00「どっちが」という前提からもう違う(クロスを完全に考え落としている)
「よく使われてるほう」に山はっても容赦なく外れるが、どうする?
具体的な案件が決まらないうちに予習するなら
手当たり次第全部だよ
0643デフォルトの名無しさん
2011/03/29(火) 19:27:23.30Zend Frameworkでサイト作る事になったけどさっぱりわかんない
0644デフォルトの名無しさん
2011/03/29(火) 20:57:24.24if文を使わずに条件分岐ってこと??
http://codepad.org/6MJDapYu
普通にswitchやifの方が読みやすくね?
0646デフォルトの名無しさん
2011/03/29(火) 21:16:07.23ifやswitchを使わないでクラスを継承してポリモーフィズムしてみる
みたいだな。
0647デフォルトの名無しさん
2011/03/29(火) 21:17:02.23極端に言えばOSが固まってても受け付けてくれる。
0648デフォルトの名無しさん
2011/03/29(火) 21:17:12.14気にするな、getchar()からEOF返されて暴走するコードなんだからw
0649デフォルトの名無しさん
2011/03/29(火) 21:18:57.79ベクタがまずムカつく。
こういうときPowerPCなら、直接アドレスにスッ飛ばすからンなもんいらねえのに
0650デフォルトの名無しさん
2011/03/29(火) 21:19:37.230651デフォルトの名無しさん
2011/03/29(火) 21:23:25.680652デフォルトの名無しさん
2011/03/29(火) 21:25:43.41for(i=0; i < 6; i++){
for(ii=0; ii < 12; ii++){
for(iii=526309629; iii > 5555; iii--)
みたいなのは、例えば i の値を変えたくなったときに困る。
カウントに使うだけならまだしも、それに付随して何かさせたいとき
i の値が変わったらそれみんな設定しなおしになる。
配列要素数もそうだ
定数で決め打ちするから、それ変えたいときにみんな変える羽目になる。
0653デフォルトの名無しさん
2011/03/29(火) 21:33:45.19> カウントに使うだけならまだしも、それに付随して何かさせたいとき
> i の値が変わったらそれみんな設定しなおしになる。
iにconstつけとけよw
0654デフォルトの名無しさん
2011/03/29(火) 21:34:36.92気持は伝わるんだが、いいたい事が分からん
0655デフォルトの名無しさん
2011/03/29(火) 21:36:03.21関数ポインタ無しで if と switch だけでポリモフ機構の実装は…
ぱっと思い浮かばんね。
それ以外で関数ポインタ使うのって qsort や Windows APIのように
それを要求してるから仕方なしに渡してる って場合がほとんど
0656デフォルトの名無しさん
2011/03/29(火) 21:53:24.83適当に型に対して番号振って、その番号で分岐すれば良いじゃん
0657デフォルトの名無しさん
2011/03/29(火) 21:59:36.86実務ではそれは絶対に認められない。趣味でも効率が悪いだけだ。
if を重ねるのは3つまで。
3つで終わらないものは別の方法を考えたほうがいい。
0658デフォルトの名無しさん
2011/03/29(火) 22:22:11.75WndProc なんか switch だけでポリモしてるじゃん
ぺぞるととか
0659デフォルトの名無しさん
2011/03/29(火) 23:56:10.43どちらも関数に渡しても中身を変えないって意味ですか?
0660デフォルトの名無しさん
2011/03/30(水) 00:20:34.12staticは値は変えられるがプログラムが終わるまで値を保持し続けるもの
グローバル変数もプログラムが終わるまでの寿命を持つが
グローバル変数はありとあらゆる関数や式で参照できるのに対し
staticは宣言した場所でしか参照できない
「与えたり計算して変更した値を死ぬまで持っているローカル変数」
「staticグローバル変数」というものもあり
これはそのソースファイル内だけ有効なグローバル変数
他のソースファイルからはexternを付けても見えなくなる
0661デフォルトの名無しさん
2011/03/30(水) 01:05:26.49バッファの意味が分かりません。
0662デフォルトの名無しさん
2011/03/30(水) 01:11:04.30バッファはいろんな用途に使われるけど、例えばI/Oバッファ
I/OはCPUの速度に比べて圧倒的に遅いのが普通なので、入力もしくは
出力コマンドを送ってから作業が終了した事を割り込みでCPUに知らせる
その時にI/Oの回数を少しでも減らせばそれだけ速度が上がる
バッファ:緩衝装置→緩衝記憶領域・緩衝増幅器(アナログ/デジタル)・pH緩衝液
他になにかあったかなあ。
PowerPC 系って、CPU に割り込み信号が入った後、割り込みコントローラ(8259みたいな奴ね)はバスに物理アドレスを送るんですか?
じゃあ、割り込みコントローラにあらかじめアドレスを登録するとかするのですか?それは大変だ。
0665デフォルトの名無しさん
2011/03/30(水) 01:40:17.68I/Oって何ですか?
さすがにググルのは面倒です。
どうせ調べても分からないし。
0666デフォルトの名無しさん
2011/03/30(水) 01:44:24.41CPUが受け取ったり、出力したりする信号線。インアウトの略。
普通、CPUの速度よりも遙かに遅い。
0667デフォルトの名無しさん
2011/03/30(水) 01:55:02.06例えばハードディスクへの読み込み、書き込みもI/O
バッファ領域を取っておけばI/O回数が減らせる
0668デフォルトの名無しさん
2011/03/30(水) 01:59:49.73CUIのみでWin32APIは使わない方向でお願いします。
では、最古のアルゴリズムである、ユークリッドの互除法はどうでしょうか。すでに体験ずみならごめんなさい。
0670デフォルトの名無しさん
2011/03/30(水) 02:05:17.57今wikiみて来ました
楽しそうですね
やってみます
0671デフォルトの名無しさん
2011/03/30(水) 03:01:56.98出てきますよね?バッファ32%とか。
そのバッファですか?
0672デフォルトの名無しさん
2011/03/30(水) 03:06:50.380673デフォルトの名無しさん
2011/03/30(水) 03:08:14.53それも一種のバッファですね
>>672
そうとも限らない
HDDやSSDがバッファになる事もある
0674デフォルトの名無しさん
2011/03/30(水) 03:11:39.850675デフォルトの名無しさん
2011/03/30(水) 03:13:45.94HDDやSSDがバッファになる事もある
仮想メモリのことですか?
0676デフォルトの名無しさん
2011/03/30(水) 03:21:01.51単純にテーブルを置いておけばよい。
0677デフォルトの名無しさん
2011/03/30(水) 03:23:07.32まあいいや
0678デフォルトの名無しさん
2011/03/30(水) 04:03:59.61CGIプログラムってなんでしょう?
C言語でも書けるんですか?どうやって実行するんでしょう?
0679デフォルトの名無しさん
2011/03/30(水) 05:15:53.59こことか参考になると思う
http://goo.gl/MpMGF
0680デフォルトの名無しさん
2011/03/30(水) 07:29:03.95CGIってのは何か物の名前じゃなくて、仕組みの名前だと思う。しらねーけど。
インターネットエクスプローラー6とかから、どっか別のパソコンの中にあるプログラムを、遠隔操作みたいな感じで実行して、
その実行結果の文字列とかを送り返してもらって、自分のとこのIE6とかで表示できる。 って感じだとおもってる。 たぶん。
。oO「○○ってプログラムを実行しろ」
自分のIE6 → どっか別のパソコン
。oO「は〜〜い。 ○○ってプログラムを実行しま〜〜す☆」
自分のIE6 どっか別のパソコン
。oO「○○ってプログラムの出たやつです。おくりまーす」
自分のIE6 ← どっか別のパソコン
。oO「キター♪」 。oO「よかったね(^_^/」
自分のIE6 どっかのパソコン
この○○ってプログラムには、実際のところ、パールをつかったり、ジャバーをつかったり、シーをつかったり、それは何を使ってもいいってことなのかもしれない。って思う。
よくしらねーけど。
0681デフォルトの名無しさん
2011/03/30(水) 07:38:25.690682デフォルトの名無しさん
2011/03/30(水) 08:51:31.230683デフォルトの名無しさん
2011/03/30(水) 11:42:31.88させたいのですが、できません。どうしたらいいか教えてください。
よろしくお願いします。
cin >> ax;
cin >> ay;
cin >> az;
scanf("%s",&tt);
0684デフォルトの名無しさん
2011/03/30(水) 11:44:53.31自分で1からコード書くの難しくて
0685デフォルトの名無しさん
2011/03/30(水) 12:40:34.65fgetpos
dup
freopen
dup2
close
clearerr
fsetpos
0686デフォルトの名無しさん
2011/03/30(水) 12:53:45.0912時に音楽を鳴らす
18時に音楽をならす
ただし土日は何もしない
パソコンを起動したらスタートアップに入れてプログラムを自動起動する
対象はXP〜だが.netフレームワークが導入されているとは限らない
この用途の場合は何の言語を用いるとよいですか?
0687デフォルトの名無しさん
2011/03/30(水) 12:59:59.13タスクスケジューラを使う
0688デフォルトの名無しさん
2011/03/30(水) 14:21:58.69char 2つで 一つのint値に対応している。
この変換は、以下のような認識であっていますでしょうか。
上位 char値(c1)がマイナス
int val = c1 * 256 - (unsigned の c2)
上位 char値(c1) がプラス
int val = c1 * 256 + (unsigned の c2)
よろしくお願いします。
0689デフォルトの名無しさん
2011/03/30(水) 14:49:00.67実はttp://www.lancers.jp/work/detail/15544の仕事をやってみたいんです
0690デフォルトの名無しさん
2011/03/30(水) 15:01:21.55何をしているのかわかりません。ファイルには書き込みません。
標準入力から入力するときは止まってくれるのに、ファイルを
リダイレクトすると入力すべきところをスルーしてしまいます。
止まって入力させることはできないのでしょうか?
0691デフォルトの名無しさん
2011/03/30(水) 15:14:50.44環境を書いてくれ
0692デフォルトの名無しさん
2011/03/30(水) 15:42:38.72計算問題が色々と置かれてあって、それをプログラムで書きましょうみたいなwikiがあるのですが、誰かご存知ありませんか?
ご存じある方が居ればURLを教えていただきたいのですが
0693デフォルトの名無しさん
2011/03/30(水) 15:46:04.13標準入力は一つしかないからファイルからもコンソールからも入力したいと思ってもそう簡単ではない。
>685のように切り替えて使うか、
コンソール入力を別の手段で行なうか、
ファイル入力を自分でファイルを開くか、
どれかを選ぶしかない。
0694デフォルトの名無しさん
2011/03/30(水) 15:48:18.44>C言語の質問と云わず全部の言語での質問になりそうなので此処で質問していいのか分からないのですが
ダメ。板のトップを見ましょう。
0695デフォルトの名無しさん
2011/03/30(水) 16:40:53.95分かり安すぎワロタww
分かり安すぎて、これからC言語の勉強をする前に挫折しそう。
0696デフォルトの名無しさん
2011/03/30(水) 16:49:01.36mac os xで、c言語をやろうと思っています。
設定を、できません。
ターミナルに、gccとうつと、i686-apple-darwin10-gcc-4.2.1: no input filesと、
でます。
どのように、変えたらよいでしょうか/
0697デフォルトの名無しさん
2011/03/30(水) 16:54:43.190698デフォルトの名無しさん
2011/03/30(水) 17:22:48.30実験しましたが、駄目でした。
ooguma-katsuki-no-MacBook:programs 12we56ty$ gcc sample.c
ooguma-katsuki-no-MacBook:programs 12we56ty$
コンパイルをしてみました
ooguma-katsuki-no-MacBook:programs 12we56ty$ gcc -o sample.c
i686-apple-darwin10-gcc-4.2.1: no input files
駄目でした
どこの設定が、おかしいでしょう?
0699デフォルトの名無しさん
2011/03/30(水) 17:28:08.00エラーメッセージが出なければ成功だと思うが
0700デフォルトの名無しさん
2011/03/30(水) 17:33:27.95最初の gcc sample.c はエラーメッセージが出ていないので成功している
sample.c は正しくコンパイルされ、実行ファイルが生成されているはず
出力ファイル名は指定していないのでデフォルトの a.out のはず
次の gcc -o sample.c はオプションの使い方が間違っているからエラーメッセージが出た
-o は出力するファイル名を指定するオプションだが、同時に入力するファイル名も当然必要なので、
gcc sample.c -o sample
とか
gcc -o sample sample.c
のようにすると、 sample.c をコンパイルして sample ができる
0701デフォルトの名無しさん
2011/03/30(水) 17:39:23.78自分linux(ubuntu10.10)なのでマックよくしらないけど、ギーシーシーならわかる〜〜
たとえば sample.c ってのをコンパイルしたければ、
コンパイル後の名前(実行形式の名前)を考えます。 とりあえず aaa でいいです。
gcc -o 実行形式の名前 ソースファイル1.c ソースファイル2.c ソースファイル3.c ................................
だから、sample.c をこんぱいるしたければ
gcc -o aaa sample.c
とすればいいです。たぶん。
あと、ライブラリーってのが必要な場合は、(たとえば #include <math.h> とかしたなら)
gcc -o aaa sample.c -lm
ってやります。 -lm
これは、たぶん libm.so とかなのだけど、この lib のところを取った名前を -l に続けて書く作法みたい。だから -lm
だから libaaa.so なら -laaa になるみたい。
マックントッシュは持ってないんで、もしかしたらルールが違うかもしれないけど。よくしらない。
余談:
gcc -o sample.c ってやると、たぶん、sample.cのファイルが破壊されてるかもしれません。(中身がぐちゃぐちゃになったり、消えてたり、なんか変になってるかもしれない)
0702デフォルトの名無しさん
2011/03/30(水) 17:51:09.50できました!
ooguma-katsuki-no-MacBook:programs 12we56ty$ gcc sample2.c
ooguma-katsuki-no-MacBook:programs 12we56ty$ ./a.out
Hello World!\nooguma-katsuki-no-MacBook:programs 12we56ty$
ooguma-katsuki-no-MacBook:programs 12we56ty$ gcc -o sample2 sample2.c
ooguma-katsuki-no-MacBook:programs 12we56ty$ ./a.out
Hello World!\nooguma-katsuki-no-MacBook:programs 12we56ty$
ありがとうございましたm(_ _)m
0703デフォルトの名無しさん
2011/03/30(水) 17:52:51.88なら
./a.out
ではなく
./sample2
とすべき
0704デフォルトの名無しさん
2011/03/30(水) 18:18:45.98勉強になります
0705690
2011/03/30(水) 19:38:35.10環境はMinGWです。
調べてみましたが、256バイトまでのハンドラを配置し、割り込みでは、そのハンドラが直接コールされる仕組みなんですね。
256 バイトを超えるようであれば別途工夫が必要なようですね。割り込みは何種類まで設定できるのでしょうか?
8086 はたしか 128種だったかな?
0707デフォルトの名無しさん
2011/03/30(水) 19:49:00.39freopen("con", "r", stdin);
0708デフォルトの名無しさん
2011/03/30(水) 20:09:43.7521時から速度規制がありましてテレホーダイ時代の速度になってしまうのですよ
0709690
2011/03/30(水) 20:14:05.59ファイルPの中身
53585524541702942078802276995470987148022575395067806084418252847286965358370
66374938992110997276702207311816358295672473702142926007886483976217087914527
1
です。4番目の変数に値を初期化するのに、手で入力したいのですが
止まりませんでした。
freopen("con","r",stdin);
とやると、鍵が短すぎますというエラーが出て終わってしまいました。
どうすればファイルリダイレクトの跡に主導入力できるかわかりません。
よろしくお願いします。
0710デフォルトの名無しさん
2011/03/30(水) 20:22:40.37説明する気あんのかよ
何もかもがダメだから諦めたら?
0711690
2011/03/30(水) 20:32:02.06a.exe < Pのようにしてファイルを読み込ませます。
このとき3つの値が初期化されますが、a.exeには4番目の変数があり、
それだけを手動で入力させたいのです。4番目の変数はパスワードなので
ファイルPを受け取った本人が設定しなければなりません。ファイルに
書き込むという手もありますがなんだか違う気がします。パスワードは
長さ9文字以上です。しかしファイルには3つの値しか存在しないにも
かかわらず、プログラムは4番目の変数を初期化しないまま終了して
しまいます。これではパスワードは設定できません。この状況を
何とかしたいです。お手数おかけしますがもう少しわかりやすく説明
してくれると助かります。よろしくお願いします。
0712デフォルトの名無しさん
2011/03/30(水) 20:34:25.600713デフォルトの名無しさん
2011/03/30(水) 20:35:22.99分かりやすく言うと、うまくいくはずなのにダメだってことはあなたのやり方がマズイ
今どうやっているのかソースコードを出さないとどこが悪いか分からないよ
ってこと
0714デフォルトの名無しさん
2011/03/30(水) 20:37:19.170715690
2011/03/30(水) 20:39:21.540716デフォルトの名無しさん
2011/03/30(水) 20:41:18.480717デフォルトの名無しさん
2011/03/30(水) 20:44:10.220718690
2011/03/30(水) 20:55:45.23質問に付き合ってくれた方々、ありがとうございました。
0720デフォルトの名無しさん
2011/03/30(水) 21:04:34.90切り替えできるよ
0721690
2011/03/30(水) 21:06:04.900722デフォルトの名無しさん
2011/03/30(水) 21:07:30.160723690
2011/03/30(水) 21:17:51.26ググってもファイル入出力がどうとか書いてあって、リダイレクトからの
切り替えに関してはさっぱりでした。
// test.c
#include <stdio.h>
int main(void)
{
int ax; int ay; int az;
int bx; int by; int bz;
scanf("%d", &ax); scanf("%d", &ay); scanf("%d", &az);
freopen("con", "r", stdin);
scanf("%d", &bx); scanf("%d", &by); scanf("%d", &bz);
printf("ax:%d, ay:%d, az:%d\n", ax, ay, az);
printf("bx:%d, by:%d, bz:%d\n", bx, by, bz);
return 0;
}
// text
100
200
300
//
$ ./a.exe < text
ax:100, ay:200, az:300
bx:1628704768, by:47, bz:1628883074
0725690
2011/03/30(水) 21:27:54.460726690
2011/03/30(水) 21:31:21.490729690
2011/03/30(水) 21:43:18.020730デフォルトの名無しさん
2011/03/30(水) 21:51:00.90俺オナニー好きだからその傾向にあるわ
0731デフォルトの名無しさん
2011/03/30(水) 21:55:23.294項目目のデータが何か特別な文字列なら、
標準入力から入力するようにすれば良い。
0732690
2011/03/30(水) 21:58:49.48fgetsだとうまくいかないんですけど。後ファイル名も決まってないから。
メールで鍵交換するソフトなんです。
0733デフォルトの名無しさん
2011/03/30(水) 22:00:55.980734デフォルトの名無しさん
2011/03/30(水) 22:03:04.600735デフォルトの名無しさん
2011/03/30(水) 22:03:23.88日本語おかしすぎだろ
0736690
2011/03/30(水) 22:10:36.350737デフォルトの名無しさん
2011/03/30(水) 22:18:36.480738デフォルトの名無しさん
2011/03/30(水) 22:23:12.55例のスレで2人でよろしくやってくれれば
自分の欠点が見えるようになるんじゃないかな
0739デフォルトの名無しさん
2011/03/30(水) 22:39:22.02モリタポ払っても良いって言ってみな
誰かが名乗り出てくれるかも
0740デフォルトの名無しさん
2011/03/30(水) 23:34:49.39配列の添え字に使っても問題ないのかな
まあカーニハン先生がOKって言ってるから、いいんだろうけど
0741デフォルトの名無しさん
2011/03/30(水) 23:42:10.93どなたか助けてください
include <stdio.h>
function text() {
return "Hello world!!";
}
0742デフォルトの名無しさん
2011/03/30(水) 23:46:29.34モリタポじゃなくて俺の糞ならいくらでもあげますけど
0743デフォルトの名無しさん
2011/03/30(水) 23:47:57.63お前は一体なに言語を書こうとしてるんだ
0744デフォルトの名無しさん
2011/03/30(水) 23:53:01.68何れもらうかも知れない。
それまで大事に取って置いてくれ。
0745デフォルトの名無しさん
2011/03/31(木) 00:18:06.210746デフォルトの名無しさん
2011/03/31(木) 00:20:27.040747デフォルトの名無しさん
2011/03/31(木) 00:21:54.780748デフォルトの名無しさん
2011/03/31(木) 00:23:16.85enumは最終的にint型になるからおk
0749デフォルトの名無しさん
2011/03/31(木) 01:10:31.04え?
0750デフォルトの名無しさん
2011/03/31(木) 01:13:16.61を使えない人が多かったから
enum
が出来たんですけど
0751デフォルトの名無しさん
2011/03/31(木) 01:26:49.210752デフォルトの名無しさん
2011/03/31(木) 01:27:27.36なるほど、老害の武勇伝か
0753デフォルトの名無しさん
2011/03/31(木) 01:36:58.820754デフォルトの名無しさん
2011/03/31(木) 01:39:00.690755デフォルトの名無しさん
2011/03/31(木) 01:40:55.880756デフォルトの名無しさん
2011/03/31(木) 01:44:32.06enumを使え
とか言ってたからかもしれん
0757デフォルトの名無しさん
2011/03/31(木) 02:02:23.660758デフォルトの名無しさん
2011/03/31(木) 02:37:57.300759デフォルトの名無しさん
2011/03/31(木) 03:08:18.43任意の5ケタの整数(int型)を入力し、その整数を二乗した数の下5ケタを
始め、以降二乗された数の下5ケタの二乗を計算していく作業を再帰的に
行い一回の作業ごとに下5ケタの数を表示していくプログラムを作れ。
できるだけ簡単なプログラムでお願いします。
0760デフォルトの名無しさん
2011/03/31(木) 03:27:20.86その言い訳はいらないので自分でスレぐらい立ててください
0761デフォルトの名無しさん
2011/03/31(木) 03:44:23.29お願いします。
0762デフォルトの名無しさん
2011/03/31(木) 03:55:12.35#include <stdio.h>
f(a)
long long a;
{
a = (a * a) % 100000;
printf("%lld\n", a);
f(a);
}
main()
{
char s[123];
f(atoi(gets(s)));
}
スタックオーバーフローするのですがどうするばいいでるた?
0763デフォルトの名無しさん
2011/03/31(木) 03:57:54.49&
0764デフォルトの名無しさん
2011/03/31(木) 04:05:49.540765デフォルトの名無しさん
2011/03/31(木) 04:32:37.41できるだけ簡単なプログラムでお願いします。
下5ケタの中に0が現れたら再起崩壊という事でお願いします。
0766デフォルトの名無しさん
2011/03/31(木) 04:44:07.79時々いるんだよな日本語できないヤツ
0767デフォルトの名無しさん
2011/03/31(木) 04:46:41.690768デフォルトの名無しさん
2011/03/31(木) 04:51:31.290769デフォルトの名無しさん
2011/03/31(木) 05:02:18.47#include <stdio.h>
static int b[100000];
f(long long a)
{
a = (a * a) % 100000;
if(b[a]++ == 0) {
printf("%lld\n", a);
f(a);
}
}
main()
{
char s[123];
f(atoi(gets(s)));
}
0がでたらとかワケわかんないんで、
循環したら再起崩壊という事でがんばってみました。
0770デフォルトの名無しさん
2011/03/31(木) 05:19:10.12これってメモリとか大丈夫なのかな?
俺みたいな素人には良く解らんけども
0771デフォルトの名無しさん
2011/03/31(木) 05:34:20.04たいしたことないか
0772デフォルトの名無しさん
2011/03/31(木) 06:35:55.77概念的に再起。日本語でうまく説明できないし。
プログラム的には再起構造じゃなくてもできるかな。
0773デフォルトの名無しさん
2011/03/31(木) 06:43:28.33すげーな・・・
必ず条件満たして終了する件。
0774デフォルトの名無しさん
2011/03/31(木) 06:54:49.023ケタや4ケタの数字出てくるんだけど0が省略されてるのかな?
0775デフォルトの名無しさん
2011/03/31(木) 07:12:48.88>>772
そういうとこちゃんと出題者に聞かないと駄目じゃん
0776デフォルトの名無しさん
2011/03/31(木) 09:46:44.72どっちかを1年頑張ってからもう片方を学ぶほうがいいですか?
0777デフォルトの名無しさん
2011/03/31(木) 11:00:16.96おまえさん次第だね
C と他の言語を並行でやると、ともすると似て非なるところを混同しがちだが
そのあたり「今は C の話」「これは Java の話」ときっちり区別できる人かどうかによるし
C でも Java でもできる積集合にしか関心を持たなくなるのが一番問題だ
1年は長すぎるかも知れないが、片方ずつというのは無難かも
0778デフォルトの名無しさん
2011/03/31(木) 11:04:05.22どっちが学習期間が短いですか?なるべき短いほうから学習したいえうs
0779デフォルトの名無しさん
2011/03/31(木) 11:04:51.46○学習したいです
すいませんあまりにも良い回答に興奮して誤字打ってしまいました
0780デフォルトの名無しさん
2011/03/31(木) 11:12:56.55身軽さが売りの言語だかんね
0781デフォルトの名無しさん
2011/03/31(木) 11:13:47.66切り番おめ
0782デフォルトの名無しさん
2011/03/31(木) 12:14:48.231年頑張れば何とか理解できるかなぁ
0783デフォルトの名無しさん
2011/03/31(木) 12:41:28.07これは相性があるから C がダメでもあきらめることはない
0784デフォルトの名無しさん
2011/03/31(木) 12:54:20.020785デフォルトの名無しさん
2011/03/31(木) 13:02:10.87実際には言語以外の要素も小さくは無い。
特にCは言語としては未定義にしてあるところがいっぱい有る。
まともなソフトウェアを作ろうと思うと各OSのAPIとかに頼ることになる。
アーキテクチャ依存、処理系依存の要素も考慮するとCがJavaより楽とは言えない。
言語だけで言えばCの方が学習期間は短いと言えると思うが…。
0786デフォルトの名無しさん
2011/03/31(木) 13:18:35.35111000
110100
110010
110001
101100
101010
101001
100110
100101
100011
011100
011010
011001
010110
010101
010011
001110
001101
001011
000111
こんなのを出力するプログラムを言語なんでもいいのでideoneか何かに書いてください。
再起処理だと思うんだけど苦手で。丸投げで悪いけどすぐ実行結果だけ使いたいので。
0787デフォルトの名無しさん
2011/03/31(木) 13:24:03.750788デフォルトの名無しさん
2011/03/31(木) 13:29:16.85書いてみたけどちょっと出力の順番が違ったか・・・まぁディスプレイを180度回転して見てやってくれ
0789デフォルトの名無しさん
2011/03/31(木) 13:37:54.990790デフォルトの名無しさん
2011/03/31(木) 13:39:00.69全数や再帰を使わないのがいいんでは?
0791デフォルトの名無しさん
2011/03/31(木) 13:40:39.90char time = "2000年3月09日 14時02分01秒";
これの1時間36分35秒後の日時に直す方法を教えてください
0792デフォルトの名無しさん
2011/03/31(木) 13:45:19.930793デフォルトの名無しさん
2011/03/31(木) 13:46:04.30方法。
たとえば1970年1月1日0時0分0秒を基準として0から初めて、その10000秒後の日時を求めるプログラムを作る。
そしたら簡単だ。
0794デフォルトの名無しさん
2011/03/31(木) 13:50:57.910795デフォルトの名無しさん
2011/03/31(木) 14:16:40.78http://ideone.com/JwxBU
0796デフォルトの名無しさん
2011/03/31(木) 14:34:02.16関数呼び出しの前に、関数の戻り値を指定して呼び出しているソースを見付けたのですが、
これはどんな意味があるのでしょうか?
通常は省略しているのが一般的だと思いますが。
0797デフォルトの名無しさん
2011/03/31(木) 14:39:56.02関数のスコープ内にあったという話ではないの? (Param_a Param_b Param_c は型名)
0798デフォルトの名無しさん
2011/03/31(木) 14:42:23.610799デフォルトの名無しさん
2011/03/31(木) 14:43:25.720800796
2011/03/31(木) 14:46:10.61BOOL Func( 型名 Pram_a, 型名 Pram_b,型名 Pram_c)
{
if( Func1())
{
}
if( Func2())
{
}
}
という様な感じで続いていますので、
プロトタイプ宣言ではないと思います。
0801デフォルトの名無しさん
2011/03/31(木) 14:50:53.48それは呼び出しではなくプロトタイプ宣言です。
0802デフォルトの名無しさん
2011/03/31(木) 14:52:12.92それは関数定義です。
0803デフォルトの名無しさん
2011/03/31(木) 14:53:00.00Func を呼び出していないな
0804デフォルトの名無しさん
2011/03/31(木) 14:53:41.67こんなん誰でも出来んだろ
0805デフォルトの名無しさん
2011/03/31(木) 14:53:54.09お前さんは
int main()
{
...
}
とか書いたことは無いのか?
0806デフォルトの名無しさん
2011/03/31(木) 14:57:40.850807デフォルトの名無しさん
2011/03/31(木) 15:09:36.43おかげで数学の検算ができた。感謝してる!
0808デフォルトの名無しさん
2011/03/31(木) 15:27:50.70/ || ̄ ̄|| ∧∧
| ||__|| ( ) 逆に考えるんだ、回転してるなら
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___ ゴキッ
/ || ̄ ̄|| <⌒ヽ )) 自分の首を回転させればいいと!
| ||__|| < 丿
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
0809デフォルトの名無しさん
2011/03/31(木) 15:35:31.24お前天才だな俺もトライしたが書けなかった
0810デフォルトの名無しさん
2011/03/31(木) 15:36:25.870811デフォルトの名無しさん
2011/03/31(木) 15:37:18.83C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
0812デフォルトの名無しさん
2011/03/31(木) 15:40:21.82が、手が勝手にタイプしてることが多い stdio.h と stdlib.h
0813デフォルトの名無しさん
2011/03/31(木) 16:07:45.56>>806
例題の通り素直に書いた。
http://ideone.com/upV03
0814デフォルトの名無しさん
2011/03/31(木) 16:14:26.92すいません関数のリファレンスってどこのサイトにあるのですか?自分で調べます
0815デフォルトの名無しさん
2011/03/31(木) 16:15:19.03例えばVC++2010ならこのへんを見て
http://msdn.microsoft.com/ja-jp/library/634ca0c2.aspx
使いたい関数のページを開いて
http://msdn.microsoft.com/ja-jp/library/wc7014hz.aspx
下の方にスクロールすると必要条件のところに <stdio.h> とか書いてある
0816デフォルトの名無しさん
2011/03/31(木) 16:27:08.62その関数の作者が発信している情報
標準関数なら ISO や JIS の規格票(書店か日本規格協会から取り寄せる)
特定のコンパイラで通るかどうかは信じないほうがいい
stdlib.h で memcpy が使えたり、標準ぽい関数が実は非標準というのがよくある
0818デフォルトの名無しさん
2011/03/31(木) 18:07:23.30ゲーム製作環境ってありますか?
0819デフォルトの名無しさん
2011/03/31(木) 18:09:10.460820デフォルトの名無しさん
2011/03/31(木) 18:16:12.320821デフォルトの名無しさん
2011/03/31(木) 18:19:28.44ブラウザならhtmlやらないとダメなのでは?
ChromeでCだけで何か作れませんかね。
0822デフォルトの名無しさん
2011/03/31(木) 18:26:10.87ヒント: ゲームブック
0823デフォルトの名無しさん
2011/03/31(木) 18:28:16.780824デフォルトの名無しさん
2011/03/31(木) 18:30:27.92標準化されている部分だけでは、テキスト以外に画面へ出力できないわけだが。
0825デフォルトの名無しさん
2011/03/31(木) 18:36:07.530826デフォルトの名無しさん
2011/03/31(木) 18:41:40.33するときはg++ -O2 -I /include a.cpp ntl.a でエラーなしで
コンパイルできるのにVisual Studioのコマンドプロンプトから
cl /O2 a.cpp ntl.a とやると13個の未参照のシンボルエラーが
出てきます。なぜなのでしょうか?配布にはなるべくアプリケーション
単体で配布したいので余計なDLLは入れたくありません。どうすれば
解決できるでしょうか?よろしくお願いします。
0827デフォルトの名無しさん
2011/03/31(木) 18:42:46.21APIコードがC言語で代替できてるような環境ないですかね?
0828デフォルトの名無しさん
2011/03/31(木) 18:50:42.78gcc の .a って Visual Studio で読めるの? Visual Studio のライブラリって .lib じゃなかったっけ
0829デフォルトの名無しさん
2011/03/31(木) 18:54:45.47気にするな。DLL同封しろ。
たいしたことではない。
インポートライブラリは、開発環境ごとにいる。
0830デフォルトの名無しさん
2011/03/31(木) 18:55:32.23C言語で代替するってどういうこと?
記述言語はCでAPIを呼び出し、それを利用する という話なのか?
0831デフォルトの名無しさん
2011/03/31(木) 18:58:14.21OSによる保護がない環境でVRAMとかに直接アクセスするとか?
0832デフォルトの名無しさん
2011/03/31(木) 18:59:36.39単なる文字列を見て楽しいと思わせるアイディアがあるなら
標準 C だけで作ることも考えられるが
それなくしては空疎の極みだ
0833デフォルトの名無しさん
2011/03/31(木) 19:00:43.85HSPでもいい。
0834デフォルトの名無しさん
2011/03/31(木) 19:19:02.64ttp://www.kouno.jp/home/c_faq/c19.html#0
0835デフォルトの名無しさん
2011/03/31(木) 19:59:49.44なるほど、ありがとうございます
頑張ります
0836デフォルトの名無しさん
2011/03/31(木) 20:13:16.82アドレスタイプが不明とでていけないのですが、リンクミスですか?
0837デフォルトの名無しさん
2011/03/31(木) 22:06:38.76CGIでWebプログラムにすればグラフィックも音声もいけるぞ
0838デフォルトの名無しさん
2011/03/31(木) 23:21:18.06を
教えてください
10つじゃなくてもかまいません
0839デフォルトの名無しさん
2011/03/31(木) 23:23:15.370840デフォルトの名無しさん
2011/03/31(木) 23:24:02.280841デフォルトの名無しさん
2011/03/31(木) 23:46:28.97これをD:\testにフォルダごとコピーする場合
CでやるのとDOSコマンドでやるのはどちらが早いでしょうか?
Cは早いとよく言われるのでDOSよりも高速ですか?
0842デフォルトの名無しさん
2011/03/31(木) 23:50:14.100843デフォルトの名無しさん
2011/03/31(木) 23:54:58.560844デフォルトの名無しさん
2011/03/31(木) 23:55:07.010845デフォルトの名無しさん
2011/03/31(木) 23:55:55.490846デフォルトの名無しさん
2011/03/31(木) 23:56:08.54あったけどああいうのってどうやって高速化してたんだろ。
0847デフォルトの名無しさん
2011/04/01(金) 00:05:06.98win98の頃は、単純コピーならcopyコマンドより
自作したコマンドの方が速かったが、最近は分からん。
でも、copyコマンド自体、あまり速いとも感じないので、
作り方次第だけど、速くなると思うよ。
0848デフォルトの名無しさん
2011/04/01(金) 00:06:25.20DOSってCでできてたの!?
Windowsで出来てるものだと思ってたけどCで出来てるならDOSのほうがいいか
0849デフォルトの名無しさん
2011/04/01(金) 00:13:13.60copy が seek read seek write seek read seek write とやるところを
xcopy は seek read read seek write write で済ませるようにしていた
あと /s が使えるのも大きなメリットだった
スレ違いすまそ
0850デフォルトの名無しさん
2011/04/01(金) 00:15:01.20お前はwindowsをなんだと思ってるんだ?
0851デフォルトの名無しさん
2011/04/01(金) 00:20:32.34昔のWindowsはDOSから起動してたな
0852デフォルトの名無しさん
2011/04/01(金) 00:23:26.770853デフォルトの名無しさん
2011/04/01(金) 00:28:46.480854デフォルトの名無しさん
2011/04/01(金) 00:30:12.58Windows出る前だよな?それなのにあんなに綺麗なグラフィックなのが
信じられない。
0855デフォルトの名無しさん
2011/04/01(金) 00:34:54.10初期バージョンはもっと前からあるよ。
0856デフォルトの名無しさん
2011/04/01(金) 00:41:39.340857デフォルトの名無しさん
2011/04/01(金) 00:42:29.80○Windows
0858デフォルトの名無しさん
2011/04/01(金) 01:03:28.25Windowsは95からってのが、WIndowsとかに詳しくない一般人の感覚だからね
0859デフォルトの名無しさん
2011/04/01(金) 01:06:06.890860デフォルトの名無しさん
2011/04/01(金) 01:41:25.550861デフォルトの名無しさん
2011/04/01(金) 02:55:05.48可能なの?
0862デフォルトの名無しさん
2011/04/01(金) 03:00:29.68プリレンダリングなら可能
0863デフォルトの名無しさん
2011/04/01(金) 03:22:00.220864デフォルトの名無しさん
2011/04/01(金) 04:38:47.06::::::::::::::::::::::::::::::::::::::::::::o:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::゚:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ブロロォ・・・............γ_⌒_ 、 ........................ .......
.....................___ U ´д`)_ .............../\........| ̄....ニ ..........
|_i_|( ー O=(O=O
;;) .:) /,=、(ヽ ヽ::| |ニ|#|
⌒):. て , (φ)ヽ(__ノ//(O))
0865デフォルトの名無しさん
2011/04/01(金) 04:45:58.69こちらは現在2011年。 21世紀に入ってから10年くらい経ってます。
パソコン一台50万円という話に驚きました。 最新鋭のインテル386、12メガヘルツ、メモリー2メガバイト、ハードディスク50メガバイトですか… 最新型ですか… そうですか…
ぼくらの時代だと、パソコンは5万円でおつりが来ます。
CPUのクロック周波数は、たったの3000メガヘルツ程度です。(2005年頃から回路の微細化での、物理的な限界問題が顕著に現れ始めて、以降はあまり伸びていません)
そのかわり、CPUの中に、同じCPUがいくつも存在するようになってます。 マルチコアと呼んでます。 昔のデュアルCPUみたいな感じですかね?
2、3万円のパソコンでも、今はマルチコアが当たり前です。 2個か4個が普通ですね。 むしろ、シングルコアのパソコンを探す方が大変なほどですw
あと、メモリーは4000メガバイトが当たり前になってますね。 アキバで5000円くらいで買えますよ?
(余談ですが、アキバ、すごい風俗街になっちゃってます。 女の子がメイドの恰好で接客してる”メイド喫茶”なんてのが出来てたり、女の子が道路の真ん中でパンツ見せたりしてます。はぁはぁ)
32ビットで扱える数字の範囲は、0から4ギガ程度までなので、32ビットOSで扱えるメモリー量の少なさ(たったの4ギガバイトしかないw)が問題になってます。
CPUは内部的には64ビット化してるのが主流です。
いや、4ギガバイトはメモリーです。 メモリー。
ハードディスクは1テラバイトくらいが普通ですかね。 アキバで7000円で買えますよ。
あと、3Dグラフィックス用のグラフィックスカードが、安いのなら1万円くらいで売ってます。 安物だと性能悪いんで、秒間1億ポリゴンくらいですかね。 よく知りませんが。
0866デフォルトの名無しさん
2011/04/01(金) 04:58:19.55OSは今でもマイクロソフトのOSが主流です。 ウインドウズって名前です。 マッキントッシュみたいな感じですね、見た目。
あと、UNIXが無料で配られてます。 ソースコード付き、ソースの改変も自由です。 Linuxって名前ですけどね。
コンパイラーも無料で配られてますよ。 LSI-C86みたいな、ちゃんとしたCコンパイラーがフリーソフトであります。gccって名前ですけどね。
C言語、BASIC、他にもいろいろな言語のコンパイラーが、有志によって作られて、インターネットで配られてます。
そういえば、マイクロソフトもコンパイラー含め、統合開発環境を無料で配ってました。
そちらはBASICが主流ですか… へぇ、2万円ですか… 大変な時代ですね…
MS-DOS??? ああ、聞いたことありますw へぇ2万円ですか… へぇ〜〜〜… 大変な時代ですね…
そういえば、関係ないですけど、
先日、大地震がおきて、福島で原子力発電所が爆発しましたよw なんか原子炉の建物が吹っ飛んで、鉄骨とかグシャグシャになってる映像がNHKでやってましたw
こっちはこっちで大変な時代です…www
(毎日ニュースで「東京の飲み水が放射能汚染されました〜〜」とかやってますw なんという世紀末www)
あ、でも安心してください。 ノストラダムスは外れましたからw 1999年7月は、ふつうにふつうの夏でしたよw
0867デフォルトの名無しさん
2011/04/01(金) 07:52:42.35がデフォだと思うのに
main()
と省略してるプログラムとか何のつもりなのでしょうか?良く見かけます。
0868デフォルトの名無しさん
2011/04/01(金) 08:53:40.80K&R disってんのか?
0869デフォルトの名無しさん
2011/04/01(金) 09:38:01.63(
,, ) )
゙ミ;;;;;,_ (
ミ;;;;;;;;、;:..,,.,,,,,
i;i;i;i; '',',;^′..ヽ
゙ゞy、、;:..、) }
.¨.、,_,,、_,,r_,ノ′
/;:;":;.:;";i; '',',;;;_~;;;′.ヽ
゙{y、、;:...:,:.:.、;:..:,:.:. ._ 、}
".¨ー=v ''‐ .:v、,,、_,r_,ノ′
/;i;i; '',',;;;_~⌒¨;;;;;;;;ヾ.ミ゙´゙^′..ヽ
゙{y、、;:...:,:.:.、;、;:.:,:.:. ._ .、) 、}
".¨ー=v ''‐ .:v、冫_._ .、,_,,、_,,r_,ノ′
/i;i; '',',;;;_~υ⌒¨;;;;;;;;ヾ.ミ゙´゙^′.ソ.ヽ
゙{y、、;:..ゞ.:,:.:.、;:.ミ.:,:.:. ._υ゚o,,'.、) 、}
ヾ,,..;::;;;::,;,::;):;:;:; .:v、冫_._ .、,_,,、_,,r_,ノ′
0870デフォルトの名無しさん
2011/04/01(金) 10:08:23.21おまえ、実務経験あるのか?
0871デフォルトの名無しさん
2011/04/01(金) 10:24:22.78あれはもうdisっていい
0872デフォルトの名無しさん
2011/04/01(金) 10:26:37.86(
,, ) )
゙ミ;;;;;,_ (
ミ;;;;;;;;、;:..,,.,,,,,
i;i;i;i; '',',;^′..ヽ
゙ゞy、、;:..、) }
.¨.、,_,,、_,,r_,ノ′
/;:;":;.:;";i; '',',;;;_~;;;′.ヽ
゙{y、、;:...:,:.:.、;:..:,:.:. ._ 、} < おまえ、実務経験あるのか?
".¨ー=v ''‐ .:v、,,、_,r_,ノ′
/;i;i; '',',;;;_~⌒¨;;;;;;;;ヾ.ミ゙´゙^′..ヽ
゙{y、、;:...:,:.:.、;、;:.:,:.:. ._ .、) 、}
".¨ー=v ''‐ .:v、冫_._ .、,_,,、_,,r_,ノ′
/i;i; '',',;;;_~υ⌒¨;;;;;;;;ヾ.ミ゙´゙^′.ソ.ヽ
゙{y、、;:..ゞ.:,:.:.、;:.ミ.:,:.:. ._υ゚o,,'.、) 、}
ヾ,,..;::;;;::,;,::;):;:;:; .:v、冫_._ .、,_,,、_,,r_,ノ′
0873デフォルトの名無しさん
2011/04/01(金) 10:38:29.630874デフォルトの名無しさん
2011/04/01(金) 13:02:10.11int main(int argc, char* argv[])
{
int a = 1 + 1;
return 0;
}
をデフォにしてみてはどうでしょうか?
きっと先生も満点くれるとおもいます。
0875デフォルトの名無しさん
2011/04/01(金) 13:52:50.84PythonとかRubyでやるべきでしょうか?
0876デフォルトの名無しさん
2011/04/01(金) 14:24:49.25何のマクロで?
0877デフォルトの名無しさん
2011/04/01(金) 14:48:44.59どうしたらいいですか?
123456789→2345678
0878デフォルトの名無しさん
2011/04/01(金) 14:52:38.950879デフォルトの名無しさん
2011/04/01(金) 14:54:29.34char buf[128];
sprintf(buf, "%d", i);
buf[8] = '\0';
j = atoi(buf + 1);
printf("%d\n", j);
0880デフォルトの名無しさん
2011/04/01(金) 14:55:35.51たとえば、指定したフォルダに特定のファイルやフォルダを作成するとか
特定のデータをデータベースに記録するなどです
0881デフォルトの名無しさん
2011/04/01(金) 15:09:18.07バッチファイルとかシェルスクリプトとかワンライナー的な雑務用途に
それらスクリプト言語の代わりにCを使いたいということか?
まぁ使いたければ別にいいんじゃない
大抵は面倒が増えるだけだと思うけど、処理の内容によってはCで書くしかないこともあるかもしれないし
0882デフォルトの名無しさん
2011/04/01(金) 15:21:52.720883デフォルトの名無しさん
2011/04/01(金) 15:41:22.06コンパイラ言語
0884デフォルトの名無しさん
2011/04/01(金) 15:47:56.550885デフォルトの名無しさん
2011/04/01(金) 15:52:29.09何も問題ない
省略されれば暗黙でintだ
引数はvoidでもなんでもお好きなように
0886デフォルトの名無しさん
2011/04/01(金) 15:53:10.80どっちがベースかによる。
perlだってコンパイルできる。
0887デフォルトの名無しさん
2011/04/01(金) 15:53:37.98スクリプトで処理するほうがいいのでしょうか?よろしくお願いします。
1.ecdh 0 > P (自分の公開鍵を生成する)
2.ecdh 1 P > Q(自分の公開鍵に署名する。この時256ビットの乱数を手で入力する)
3.P,Qをメールで送る。
4.相手の公開鍵 Rと署名Sをもらう。
5.ecdh 2 R < S 相手の公開鍵の署名を検証する。(That's Trueと出ればよい)
6.ecdh 3 < R (相手の公開鍵Rをリダイレクトして共有鍵を生成する。アクセスパスワードの設定が必要)
7.オリジナルの鍵key.binのバックアップを取り、seed.keyをkey.binに変更して相手との通信に使う。
0888デフォルトの名無しさん
2011/04/01(金) 16:03:42.600889デフォルトの名無しさん
2011/04/01(金) 16:31:21.871.両方覚えるべきか?
2.どちらを先に覚えるべきか?
3.どっちを切り捨てるべきか?
お願いしますっ!
0890デフォルトの名無しさん
2011/04/01(金) 16:35:22.03C++はコードが難し過ぎる。
0891デフォルトの名無しさん
2011/04/01(金) 16:51:17.00CとJAVAの両方覚える、その後必要ならC++ と個人的には思った
0892デフォルトの名無しさん
2011/04/01(金) 17:04:04.68Cはすべて使えるし、便利になっている。
文字列とか、ポインタなどC言語の特徴的なものを使わずに
同じ事が可能。
0893デフォルトの名無しさん
2011/04/01(金) 17:08:25.94C++はわかりにくい。
0894デフォルトの名無しさん
2011/04/01(金) 17:10:08.24嘘つけカス
0895デフォルトの名無しさん
2011/04/01(金) 17:13:18.35で、結局どっちなの?
0896デフォルトの名無しさん
2011/04/01(金) 17:13:43.64C++はCの要素が内包されてるからC++だけ覚えればいい
0897デフォルトの名無しさん
2011/04/01(金) 17:13:52.87余りをとって割ればいいじゃん
0898デフォルトの名無しさん
2011/04/01(金) 17:20:30.520899デフォルトの名無しさん
2011/04/01(金) 17:22:37.070900デフォルトの名無しさん
2011/04/01(金) 17:27:25.06Cはポインタ「しかない」
どちらを選ぶかは自由
0901デフォルトの名無しさん
2011/04/01(金) 17:56:39.84Cは複雑だけど分かりやすい。
0902デフォルトの名無しさん
2011/04/01(金) 17:58:44.16C++:複雑怪奇
0903デフォルトの名無しさん
2011/04/01(金) 18:31:44.20#include <stdio.h>
void func(char *p, int n, int r, int indx)
{
if(r == 0) {
printf("%s\n", p);
return; }
if(r > n - indx) return;
p[indx] = '1';
func(p, n, r - 1, indx + 1);
p[indx] = '0';
func(p, n, r, indx + 1);
}
int main(void)
{
int i, n, r;
char buff[256] = {0};
scanf("%d%d", &n, &r);
for(i = 0; i < n; i++) buff[i] = '0';
func(buff, n, r, 0);
return 0;
}
0904デフォルトの名無しさん
2011/04/01(金) 18:41:42.60アセンブラ:超常現象
C:怪奇
C++:怪異
0905デフォルトの名無しさん
2011/04/01(金) 19:57:37.53http://hibari.2ch.net/test/read.cgi/tech/1207419469/
0906デフォルトの名無しさん
2011/04/02(土) 04:34:35.25手元の入門書に、&&(||)は無駄な処理を省いていて、
a && b はまずaの式を評価して、もし偽ならばbの式は評価しない。
a || b はまずaの式を評価して、もし真ならばbの式は評価しない。
といったことが書かれてありました。
上の説明では先に左のオペランドから評価されているんですが、逆に
a && b はまずbの式を評価して、もし偽ならばaの式は評価しない。
a || b はまずbの式を評価して、もし真ならばaの式は評価しない。
と、右から評価される可能性も考えられませんか?
一般に式の評価順序は決まっていない(コンパイラに依存する)と聞いたことがあるので、
コンパイラによっては、右から評価される可能性も考えられると思います。
それとも&&(||)の演算子だけは、必ず左のオペランドから評価されなければならない、
と決まってるんですか?
まだ初心者なので、用語の使い方が間違ってたらごめそ
0907デフォルトの名無しさん
2011/04/02(土) 04:41:28.27今時のコンパイラは...
0908デフォルトの名無しさん
2011/04/02(土) 04:53:53.77>一般に式の評価順序は決まっていない(コンパイラに依存する)
そのとおりなのですが例外があって、少なくとも、&&, ||, は左から右に評価します。
cf. ISO/IEC 9899:1999 6.5.13.4, 6.5.14.4,
三項演算子(条件演算子)についても、第一オペランドの後に副作用完了点がくる、という記述があるので、もしかすると左から右に評価すると定義されているとしていいかもしれませんが、私には言い切る自信がありません。
cf ISO/IEC 9899:1999 6.5.15.4
0910デフォルトの名無しさん
2011/04/02(土) 04:58:57.260911デフォルトの名無しさん
2011/04/02(土) 05:00:17.830912デフォルトの名無しさん
2011/04/02(土) 05:25:44.82入門書のまえがきを読んでみ
コンパイラは○○でだとか
○○規格に準拠だとか但し書きがあるはず
なんでもそうだけど
なんらかの前提(ルール、共通言語、共通認識)がなければ
会話が成り立たないんだな
0913デフォルトの名無しさん
2011/04/02(土) 08:51:29.49あればコンパイラによるし、その順番に依存するコード書いたら
いけない。標準に順番が書かれていればそれを守らないコンパイラ
はC言語のコンパイラといってはいけないんだから、その順番は
前提としていい。それだけのことでしょ。
0914デフォルトの名無しさん
2011/04/02(土) 09:02:57.85前々からアプリの自作に憧れており、つい最近C言語に手を出そうと決めました
慣れてきたら次はC++を学びたいと考えています
まずは入門書をいくつか流し読みし、まだ最初の数ページを実践している段階なのですが……
例えばIEのような、ウィンドウ?を表示する為には何が必要なのでしょうか?
C言語を使って表示するより、C++言語を使って表示した方が簡単でしょうか?
アプリ完成までの全体像をイメージ出来ればやりやすいのですが……
未だプログラミングについて知識が曖昧なので、変な質問だったらすみません
0915デフォルトの名無しさん
2011/04/02(土) 09:05:54.970916デフォルトの名無しさん
2011/04/02(土) 09:08:58.02C#かC++ Express
C#のがいいと思うけど、詳しくは各々の専スレでどぞ
http://www.microsoft.com/japan/msdn/vstudio/express/
0917デフォルトの名無しさん
2011/04/02(土) 09:10:43.700918デフォルトの名無しさん
2011/04/02(土) 09:55:31.04main関数を捨てることからかな?
0919デフォルトの名無しさん
2011/04/02(土) 10:42:28.02Windows APIを使うほどの高等な技術でしょうか?
C言語の基本文法でできますか?
0920デフォルトの名無しさん
2011/04/02(土) 10:49:48.750921デフォルトの名無しさん
2011/04/02(土) 10:51:45.35テキストファイル全体が一度にメモリに読み込めるなら
strstrが使える。
読み込めない場合は、分割して読込すれば良いだろうけど、
対象文字列が切れた時の処理が必要。
0922デフォルトの名無しさん
2011/04/02(土) 10:53:22.36基本文法だけだとファイルを扱えないぞ
0923デフォルトの名無しさん
2011/04/02(土) 11:11:51.440924デフォルトの名無しさん
2011/04/02(土) 11:17:36.33VC++の無料の奴をダウンロードしました
あの自分が作ったコードを先輩方に見てもらってどこがダメだとか指摘してもらえるかもしれないスレはどこに行けばよいでしょうか?
0925デフォルトの名無しさん
2011/04/02(土) 11:33:08.64ここでいいよ
長かったら直接書かずにどっかにうpしてもらえれば
あと、こういう結果が欲しかったのだけどこうなってしまった、とかいうような状況説明も付けて
0926デフォルトの名無しさん
2011/04/02(土) 11:45:52.44どっちでもいいですか?
0927デフォルトの名無しさん
2011/04/02(土) 11:50:16.280928デフォルトの名無しさん
2011/04/02(土) 12:02:35.55分割で考えてみた
fpよりfdの方が分かりやすくて好き
#include <stdio.h>
#include <string.h>
#define BUF_SIZE (1024)
int search_str(const char* path, const char* str)
{
FILE* fp;
char buf[BUF_SIZE], *str_pos;
int read_cnt = 0;
if((fp = fopen(path, "r")) == NULL) return -1;
while(fread(buf, sizeof(char), sizeof(buf), fp) > 0){
if((str_pos = strstr(buf, str)) != NULL){
fclose(fp);
return (int)(str_pos - buf)
+ (sizeof(buf) - sizeof(str)) * read_cnt;
}
fseek(fp, -((long)sizeof(str)), SEEK_CUR);
read_cnt++;
}
fclose(fp);
return -1;
}
0929デフォルトの名無しさん
2011/04/02(土) 12:20:25.96size_t ret;
while((ret = fread(buf, sizeof(char), sizeof(buf), fp)) > 0){
memset(buf + (char*)ret, NULL, sizeof(buf) - ret);
0930デフォルトの名無しさん
2011/04/02(土) 12:22:49.13#stdio.hとか
#stdio.mathのことですか?
0931デフォルトの名無しさん
2011/04/02(土) 12:25:16.63stdio.h とか math.h とかのことです
0932デフォルトの名無しさん
2011/04/02(土) 12:26:17.75freadでbuf一杯のサイズ読み込んだとき、strstrに渡しても大丈夫?
0933デフォルトの名無しさん
2011/04/02(土) 12:32:40.62ウィンドウズのコマンドプロンプトで動くハローワールドを作った
http://www1.axfc.net/uploader/Sc/so/220703
遊び方
c:>hello
Hello World!
c:>hello "Good Morning!" good.exe
で good.exe ができる
c:> good
Good Morning!
となる。good.exe も当然同じ機能を持ってる。
(勿論、どんな文字列でもいける)
あほみたいだけど、一応コンパイラコンパイラなんだ
0934デフォルトの名無しさん
2011/04/02(土) 12:38:40.50実行ファイル置いても、誰も動かさないのでは?
0935デフォルトの名無しさん
2011/04/02(土) 12:40:45.38それだけなら自分の複製を作って
初期化する文字列部分を書き換えるだけでできるし面白くない
0936デフォルトの名無しさん
2011/04/02(土) 12:45:52.80誤認識してるほうが多いような?
0937デフォルトの名無しさん
2011/04/02(土) 12:46:23.33勿論、真面目な奴だとBNFパーザを内包して、自前のスクリプト言語で
超言語代入分の部分に関する動作を記述して、まともに動くコンパイラ
コンパイラを作ってるよ。
<NTSYMBOL>::=<><><>:action;
アクションの部分の書き方が定まったものがないから人には勧められないけど……
確かに上にだしてるのは、ランタイムが無しでサイズが1KBなのが売りだけかも
0938デフォルトの名無しさん
2011/04/02(土) 12:57:51.720939デフォルトの名無しさん
2011/04/02(土) 13:03:07.652い:typedef
3い:const
0940デフォルトの名無しさん
2011/04/02(土) 13:07:20.61static使えなきゃグローバルにしなきゃいかんからな
0941デフォルトの名無しさん
2011/04/02(土) 13:22:09.62#include <"stdio.h">という風に囲わなくてもいいのですか?
stdio.hの部分は絶対パスで書くことはないのですか?
0942デフォルトの名無しさん
2011/04/02(土) 13:26:57.97か
#include "stdio.h"
のどちらかです
混ぜてはダメです
絶対パスで書いてもいいけど、面倒臭いでしょ
0943デフォルトの名無しさん
2011/04/02(土) 13:29:18.430945デフォルトの名無しさん
2011/04/02(土) 13:37:17.070946デフォルトの名無しさん
2011/04/02(土) 13:40:06.07そう言う奴はmainだけでプログラムが書けそうだな
0947デフォルトの名無しさん
2011/04/02(土) 13:40:49.43だね
外部シンボルの制限がきつかった頃の痕跡器官といっていい
0949デフォルトの名無しさん
2011/04/02(土) 13:48:04.310950デフォルトの名無しさん
2011/04/02(土) 13:49:01.660951Lv1
2011/04/02(土) 14:01:06.28int main(void)
{
int a[3];
a[0] = 4;
a[1] = 6;
a[2] = 9;
int i;
for (i=0; i<3; i++) {
printf("%d\n", a[i]);
}
return 0;
}
0952Lv1
2011/04/02(土) 14:02:05.42int main(void)
{
int i;
int a[3];
a[0] = 4;
a[1] = 6;
a[2] = 9;
for (i=0; i<3; i++) {
printf("%d\n", a[i]);
}
return 0;
}
>>951だとエラーになって、>>952ではエラーになりません
int i;の位置がaよりも後に来るとエラーに来るのは何故ですか?
0953デフォルトの名無しさん
2011/04/02(土) 14:03:56.450954デフォルトの名無しさん
2011/04/02(土) 14:05:00.94static VS typedef
static VS 配列
sitatic VS enum
便利度で言えば全部staticの負け?
0956Lv2
2011/04/02(土) 14:06:34.20ありがとうございます
0957デフォルトの名無しさん
2011/04/02(土) 14:07:17.35外部ソースからアクセス可能にするという、運用上の特別な理由が無い限りは、
基本的に全て static として定義した方がよいです。
これはソースを書いた人間が、思慮深い優秀なCプログラマーか否かを判断する、一つの指標にもなります。
C++ の class のデフォルトが private なのも、もともとの根拠は C の static と同じ理由です。
0958デフォルトの名無しさん
2011/04/02(土) 14:09:20.93プログラミング向いてる人程、単純でありきたりなプログラムを早く作る。
0959デフォルトの名無しさん
2011/04/02(土) 14:47:57.83private がデフォつーのは、あくまで C++ から以後の考え方で
C が public をデフォにしているのは当時なりの善だったんだよ
アセンブラでは private がデフォだった(外部シンボルを手間をかけて「作る」必要があった)
それを C では public をデフォにわざわざ変えた(使えるものは自己責任で使えという思想)
その後 C++ で再び private をデフォにした(隠しコマンドを気安く使うなという思想)
言語自体の設計思想とずれてる奴がこういうマクロを作る
#define begin {
#define end }
おまえの言ってることはこれに近い
0960デフォルトの名無しさん
2011/04/02(土) 14:50:22.84#include<stdlib.h>
#include<ctype.h>
main()
{
printf("%c",('c'&'b'));
}
0961デフォルトの名無しさん
2011/04/02(土) 14:56:26.730962デフォルトの名無しさん
2011/04/02(土) 15:02:52.770963デフォルトの名無しさん
2011/04/02(土) 15:28:19.270964デフォルトの名無しさん
2011/04/02(土) 15:45:03.87んなこたーない
0965Lv2
2011/04/02(土) 16:04:24.53int x = 10; int型の変数xを宣言して10を代入する
int *p; ポインタ型の変数pを宣言する
p = &x; pにxのアドレスを格納する
*p = 30; xのアドレスに30を代入する
printf("%d", x); 30が表示される
という認識でよいでしょうか?
0966デフォルトの名無しさん
2011/04/02(土) 16:11:47.660967デフォルトの名無しさん
2011/04/02(土) 16:37:12.88もうかなり前から、みんな>>957みたいな考え方じゃない?
モジュール毎にソースファイル割って、グローバルは極力使わない
設計思想とか言っても、その言語設計者がそういう使い方推奨してるし
0968デフォルトの名無しさん
2011/04/02(土) 16:49:05.57どれもいるけど、staticはプログラムの構造自体変わっちゃうからなあ・・・
>キャスト演算子
memcpyとmemsetで何とかなるかな
>typedef
まあ使わないでも
>配列
ポインタ+mallocで何とかなるか?
malloc禁止なら、静的領域を固定で確保か・・・
>enum
#defineでいいな
0969デフォルトの名無しさん
2011/04/02(土) 16:50:42.190970デフォルトの名無しさん
2011/04/02(土) 17:03:02.66グローバルはグローバル
いくら static で五十歩百歩なスコープを付けても
構造化プログラミングからは外れるものだ
この意味ではマクロも同類
言語の設計者がああしろこうしろと押しつけがましいことを言わないのが C の思想の1つで
珍しくそのようなことを言っているのは goto に対してくらいだ
# もっとも goto のスコープには別な理由があるんだが
それから「もうかなり前から」とは C ができる前からで
監視モードや主記憶キーで隠蔽はしていて
「ここは使わないでね♥」みたいな甘ちゃんなやり方じゃなかっただけだ
0971デフォルトの名無しさん
2011/04/02(土) 17:13:24.55> グローバルはグローバル
> いくら static で五十歩百歩なスコープを付けても
> 構造化プログラミングからは外れるものだ
ちょっと何言ってるか分からないんですけど
> それから「もうかなり前から」とは C ができる前からで
> 監視モードや主記憶キーで隠蔽はしていて
> 「ここは使わないでね♥」みたいな甘ちゃんなやり方じゃなかっただけだ
かなり意味分からないんですけど
C以前の話とか、無意味だと思いますが
0972デフォルトの名無しさん
2011/04/02(土) 17:19:58.27BASICのコード、そのままCにしましたってコード見たことあるし
0973デフォルトの名無しさん
2011/04/02(土) 17:25:51.97for文とかの条件でつまずくんですが
1回多かったり、どう回せば上手く出力できるかわかりません。
やっぱ、こういうのは慣れなんでしょうかね?
0974デフォルトの名無しさん
2011/04/02(土) 17:31:14.17いいよ
>>973
どう書いたらどう動くのか、正確にfor文や条件式の意味や動きを理解できてないだけだろう
0975デフォルトの名無しさん
2011/04/02(土) 17:31:45.53あそう
で?
0976デフォルトの名無しさん
2011/04/02(土) 17:32:30.86->と.はどう違うのでしょうか?
構造体penのメンバーx1はpen->x1なのかpen.x1とするのかどっちですか?
0977デフォルトの名無しさん
2011/04/02(土) 17:33:42.38ヴァカ
0978デフォルトの名無しさん
2011/04/02(土) 17:33:51.74症状から考えると
配列をa[n]で宣言したらa[0]からa[n-1]のn個の領域しかアクセスできないよ
か
浮動小数点数を比較するのはやめておけ
のどっちかだろ
0979デフォルトの名無しさん
2011/04/02(土) 17:35:02.15アフォ
0980デフォルトの名無しさん
2011/04/02(土) 17:35:08.05p->x は (*p).x の意味
0981デフォルトの名無しさん
2011/04/02(土) 17:35:14.22> グローバルはグローバル
> いくら static で五十歩百歩なスコープを付けても
> 構造化プログラミングからは外れるものだ
その理屈でいくと構造化プログラミングなんてものは存在しないのでは?
main関数のみで#includeも出来ないよね
0982デフォルトの名無しさん
2011/04/02(土) 17:39:29.05使わないグローバルが見えてるプログラムなんて見たらアチャーって思うし、後輩なら指導する
0983デフォルトの名無しさん
2011/04/02(土) 17:39:42.20#include ?? どっから出てきた?
少なくともそれは構造化プログラミングを肯定も否定もしないぞ
0984デフォルトの名無しさん
2011/04/02(土) 17:43:13.560985デフォルトの名無しさん
2011/04/02(土) 17:44:38.42グローバル自体が構造化を否定(笑)ってのがお前の持論じゃないの?w
0986デフォルトの名無しさん
2011/04/02(土) 17:44:52.03だからそう言ってる
static をつけても同じことだと
0987デフォルトの名無しさん
2011/04/02(土) 17:46:31.83C#が最強でしょ。GUIも簡単だし。
Cのいいところ教えてください
0988デフォルトの名無しさん
2011/04/02(土) 17:47:04.00ありがとうございました
0989デフォルトの名無しさん
2011/04/02(土) 17:48:21.51スコープが違うのに、何が同じなんだ?
>>987
Windowsアプリ作ってる人ばかりじゃないんだよ
0990デフォルトの名無しさん
2011/04/02(土) 17:48:49.01意味すら分からないのかw
0991デフォルトの名無しさん
2011/04/02(土) 17:49:05.30300行くらい?
0992デフォルトの名無しさん
2011/04/02(土) 17:50:12.90同じだと言っているのは構造化プログラミングの観点からだ
構造化プログラミングとは何かは他で調べればいい
0993デフォルトの名無しさん
2011/04/02(土) 17:51:21.24「共通テーブルなのでいいでしょ?」と言って認めさせ、
でっかい構造体を置いたっけ。
後からメンバーがどんどん追加されて行ったのには笑った。
0994デフォルトの名無しさん
2011/04/02(土) 17:52:01.670995デフォルトの名無しさん
2011/04/02(土) 17:52:18.63君は構造化プログラミングとオブジェクト指向の区別がついてない
0996デフォルトの名無しさん
2011/04/02(土) 17:55:33.28だから、言語関係なく隠蔽は大事だよね、ってのが世の中の流れだって
いくら屁理屈並べて言語仕様でデフォだからとか言ったって、通用しないよ
>>993
まあ全部get/set関数ってのはやりすぎ感があるね
0997デフォルトの名無しさん
2011/04/02(土) 17:56:13.97隠蔽=private みたいな矮小な思考の持ち主がよく言うぜ
一ヶ月で300行くらい
会議、資料作成、調査が8割
0999デフォルトの名無しさん
2011/04/02(土) 17:57:22.61時間の無駄に過ぎない。
1000デフォルトの名無しさん
2011/04/02(土) 18:00:16.35web開発なら最低4つはいるもんな
HTMLとJavaScriptとSQLとPHPかCGI書けるやつ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。