C言語なら俺に聞け(入門編)Part 89
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/08/31(水) 18:45:07.04★前スレ
C言語なら俺に聞け(入門編)Part 88
http://hibari.2ch.net/test/read.cgi/tech/1312926287/
★過去スレ
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++の宿題片付けます 152代目
http://hibari.2ch.net/test/read.cgi/tech/1312201995/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。
長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
0002デフォルトの名無しさん
2011/08/31(水) 20:08:18.310003デフォルトの名無しさん
2011/08/31(水) 20:15:06.53表記されてる本を読んでみるとわかると思うが、前半はC、後半はC++と、明確に別れてる
0004デフォルトの名無しさん
2011/08/31(水) 21:11:17.20脆弱性のある関数など実用的なプログラムで使うべきでない関数とか知りたいんだけど
いいサイトない?もしくは本。
0005デフォルトの名無しさん
2011/08/31(水) 21:13:48.35microsoft がセキュア版と称しているものの元になっている関数群
0006デフォルトの名無しさん
2011/08/31(水) 21:16:19.71getsで検索すると出てくるページ達
0007デフォルトの名無しさん
2011/08/31(水) 21:18:24.780008デフォルトの名無しさん
2011/08/31(水) 21:19:27.25バッファに読み込むサイズをしていできないgets()を使うと、バッファーオーバーランの危険性があると言われる。
0009デフォルトの名無しさん
2011/08/31(水) 21:53:43.32freeした後に再度mallocやcallocでメモリを再確保するのもダメ?
例えば、繰り返し文の処理内や、関数呼出し毎に関数内で
malloc->freeみたいな
0010デフォルトの名無しさん
2011/08/31(水) 22:17:59.360011デフォルトの名無しさん
2011/09/01(木) 01:38:18.56C言語は「シー言語」と読むのが正しいのでしょうか?
それとも「スィー言語」でしょうか?
0012デフォルトの名無しさん
2011/09/01(木) 02:15:16.400013デフォルトの名無しさん
2011/09/01(木) 02:21:00.67日本人が発音すると、Sea[siː]と言っているつもりでも大体はShe[ʃ iː]と聞こえてしまいます。またアルファベットの“C”の発音はSea[siː]と同じですが、これも多くの日本人がShe[ʃ iː]と発音してしまっています。
0014デフォルトの名無しさん
2011/09/01(木) 02:28:14.820015デフォルトの名無しさん
2011/09/01(木) 02:35:05.610016デフォルトの名無しさん
2011/09/01(木) 02:47:43.87http://www.youtube.com/watch?v=KlPC3O1DVcg
0017デフォルトの名無しさん
2011/09/01(木) 02:48:29.02あーべせー
0018デフォルトの名無しさん
2011/09/01(木) 03:05:13.180019デフォルトの名無しさん
2011/09/01(木) 05:05:51.93F(0)とF(1)で0、F(2)で1、〜F(7)で6、F(8)とF(9)で0、F(10)で1、〜F(100)で3、〜F(104)とF(105)で0、〜
0020デフォルトの名無しさん
2011/09/01(木) 06:01:48.41{
n %= 8;
return n ? n - 1 : n;
}
0021デフォルトの名無しさん
2011/09/01(木) 11:07:49.50using namespace std;
int F(int n){
static int data[8]={0,0,1,2,3,4,5,6};
return data[n%8];
}
int main(){
for(int i=0;i<10;i++) cout<<i<<"="<<F(i)<< " ";
cout<<endl;
i=100;cout<<i<<"="<<F(i)<<endl;
i=104;cout<<i<<"="<<F(i)<<endl;
i=105;cout<<i<<"="<<F(i)<<endl;
}
0022デフォルトの名無しさん
2011/09/01(木) 11:18:52.99int F(int n){
return (n+7)%8%7;
}
0023デフォルトの名無しさん
2011/09/01(木) 11:21:48.460024デフォルトの名無しさん
2011/09/01(木) 11:26:53.840025デフォルトの名無しさん
2011/09/01(木) 11:30:56.400026デフォルトの名無しさん
2011/09/01(木) 13:06:19.200027デフォルトの名無しさん
2011/09/01(木) 13:45:18.390028デフォルトの名無しさん
2011/09/01(木) 13:56:11.820029デフォルトの名無しさん
2011/09/01(木) 14:12:03.97デバッガでアタッチ汁
0031デフォルトの名無しさん
2011/09/01(木) 18:51:36.730032デフォルトの名無しさん
2011/09/01(木) 18:55:38.180033デフォルトの名無しさん
2011/09/01(木) 21:07:44.92その配列の次のアドレスは必ず、NULL(\0)で初期化されるのでしょうか?
#include <stdio.h>
int main(void) {
char s[] = {'H','e','l','l','o',',','w','o','r','l','d'};
printf("[%s](%d)\n", s, sizeof(s) );
return 0;
}
これをコンパイル、実行をすると、出力は
>[Hello,world](11)
となり、配列のサイズとしてはNULL終端分のエリアは確保されていないように見えます。
ところが、下のように、配列の次のアドレスに文字を書き込むと、出力は、
int main(void) {
char s[] = {'H','e','l','l','o',',','w','o','r','l','d'};
char *p = s;
*(p+11) = 'A';
printf("[%s](%d)\n", s, sizeof(s) );
return 0;
}
>[Hello,worldA?Z$a[$a](11)
と'A'以降のゴミが出力され、'A'を書き込んでいた部分に'\0'が書かれていたように見えます。
また、printf()はその配列の次のアドレスまで読んで、'\0'の前まで出力していたように見えます。
0034デフォルトの名無しさん
2011/09/01(木) 21:16:26.130035デフォルトの名無しさん
2011/09/01(木) 21:28:11.540036デフォルトの名無しさん
2011/09/01(木) 21:51:14.78アセンブラほどじゃないにしても、GUI作るとかは、「成せばなる。千里の道も一歩から」って感じ
何でも(理論上)作れるけど、今や開発する規模が大きすぎて、高速化したい所だけCを使うとかが多い
0037デフォルトの名無しさん
2011/09/01(木) 21:55:08.29領域破壊起こしてるじゃん。
char s[] = {'H','e','l','l','o',',','w','o','r','l','d'};
これはchar s[11];であることを定義してるから、s[11] は最低でも'\0'じゃなくちゃいけない。
なのにs[11]に'A'なんか突っ込んだらまずいっしょ。ナル文字なくなっちゃうんだから。
0038!jinjya
2011/09/01(木) 22:01:41.73char s[11];なら
s[10] は最低でも'\0'じゃなくちゃいけない。
0040デフォルトの名無しさん
2011/09/01(木) 22:28:22.21char s[11];
0041デフォルトの名無しさん
2011/09/01(木) 22:34:06.50その考えが正しいなら、sにはナル文字が入らないことになる。
このパターンはコンパイラでナル文字までの領域を確保するJK。
0042デフォルトの名無しさん
2011/09/01(木) 22:39:34.560043デフォルトの名無しさん
2011/09/01(木) 22:41:27.33char s[] = {'H','e','l','l','o',',','w','o','r','l','d'};
これは、
char s[] = {72,101,108,108,111,44,119,111,114,108,100};
これと同じ
0044デフォルトの名無しさん
2011/09/01(木) 22:46:49.88これならいける
0045デフォルトの名無しさん
2011/09/01(木) 22:53:14.76char s[] = {'H','e','l','l','o',',','w','o','r','l','d'};
これは、
char s[] = {72,101,108,108,111,44,119,111,114,108,100};
と同じだし、
char s[] = "Hello,world";
と同じ。
0046デフォルトの名無しさん
2011/09/01(木) 22:57:05.71コードをよく見る。sizeof(s)は11を返している。つまり、ナル文字分のサイズじゃない。
0047デフォルトの名無しさん
2011/09/01(木) 22:57:50.54同じじゃないよ。sのサイズを確認しる。
0048デフォルトの名無しさん
2011/09/01(木) 22:59:14.81#include <stdio.h>
int main()
{
int i;
char s1[] = {'H','e','l','l','o',',','w','o','r','l','d'};
char s2[] = {72,101,108,108,111,44,119,111,114,108,100};
char s3[] = "Hello,world";
for (i = 0; i < sizeof(s1); i++)
printf("%d ", s1[i]);
printf("\n");
for (i = 0; i < sizeof(s2); i++)
printf("%d ", s2[i]);
printf("\n");
for (i = 0; i < sizeof(s3); i++)
printf("%d ", s3[i]);
printf("\n");
return 0;
}
これを実行してみて
0050デフォルトの名無しさん
2011/09/01(木) 23:12:50.24005133
2011/09/01(木) 23:17:58.000052デフォルトの名無しさん
2011/09/01(木) 23:21:19.29それだけ
0054デフォルトの名無しさん
2011/09/01(木) 23:32:05.76>>44のレスは試してみたの?
005544
2011/09/01(木) 23:37:18.01これでもいける
005644
2011/09/01(木) 23:41:50.09>char s[13] = "Hello,world";
>これでもいける
と思ったがローカル変数として初期化している場合どうなんだっけ?
間違えているかもしれん
0057デフォルトの名無しさん
2011/09/01(木) 23:44:36.22そうすれば正常に動くのはわかってます。質問はそんなことじゃありません。
0058デフォルトの名無しさん
2011/09/01(木) 23:52:59.63もう答え出てんじゃんw
0059デフォルトの名無しさん
2011/09/01(木) 23:57:13.30それは言語仕様なのでしょうか?ということです。
0060デフォルトの名無しさん
2011/09/02(金) 00:01:37.91どこに目ぇつけてんだ
0061デフォルトの名無しさん
2011/09/02(金) 00:04:05.260062デフォルトの名無しさん
2011/09/02(金) 00:30:54.680063!jinjya
2011/09/02(金) 00:34:40.7272 101 108 108 111 44 119 111 114 108 100 0 0
この最後の0は必ず0か?という質問ならいいんじゃない。
0064デフォルトの名無しさん
2011/09/02(金) 01:03:27.440065デフォルトの名無しさん
2011/09/02(金) 01:06:25.98これで0クリアさせてた。
やめた方がいいかな?
0066デフォルトの名無しさん
2011/09/02(金) 01:10:25.02(特殊な環境で)古いコンパイラを使うような場合にマズイかもしれない
0067デフォルトの名無しさん
2011/09/02(金) 01:16:50.66規格上は問題ない
0068デフォルトの名無しさん
2011/09/02(金) 05:21:53.730069デフォルトの名無しさん
2011/09/02(金) 05:24:01.58昔は bzero() / memset() でクリアするのがお作法だったが(socket プログラミングね)、なるほどそういう手もあったのか。
0071デフォルトの名無しさん
2011/09/02(金) 07:13:12.434byte 境界のおかげでたまたま '\0' が入ったのなら、
char s[] = {'H','e','l','l','o',',','w','o','r','l','d','!'}
これだと '\0' は入らない?
もちろんコンパイラに寄るのは承知の上で、>>33 のコンパイラだとどうなるのか気になる
007233
2011/09/02(金) 07:25:03.23int main(void) {
char s[] = {'H','e','l','l','o',',','w','o','r','l','d','!'};
printf("[%s](%d)\n", s, sizeof(s) );
return 0;
}
$ ./a.exe
[Hello,world!?C$aD$a](12)
'\0' 入らないみたいですね!ということは、「たまたま」と考えた方がいいということですね。
コンパイラは gcc 3.4.4 です。
0073デフォルトの名無しさん
2011/09/02(金) 07:37:11.16解決して良かった
007433
2011/09/02(金) 07:51:08.57つまり、この本のこの記述はウソってことですね。
完全にまちがえてますなあ。書名・著者名を晒してください。
0076デフォルトの名無しさん
2011/09/02(金) 08:16:15.35ねちねち粘ってたのかw
0077デフォルトの名無しさん
2011/09/02(金) 08:44:39.89まともな答えも出ずに見当違いのレスばっかり返ってきたらウズウズするだろうよ
0078デフォルトの名無しさん
2011/09/02(金) 09:01:11.26上のソース、C machineで実行したら
[Hello,world゚](11)
となった。
0079デフォルトの名無しさん
2011/09/02(金) 09:13:09.65#include <stdio.h>
int main(void) {
char s[] = {'H','e','l','l','o',',','w','o','r','l','d'};
char s2[] = {'H','e','l','l','o',',','w','o','r','l','d'};
printf("s :[%s](%d)\n", s, sizeof(s) );
printf("s2:[%s](%d)\n", s2, sizeof(s2) );
printf("s :0x%x\ns2:0x%x\n",(int)&s,(int)&s2);
return 0;
}
Output:
s :[Hello,world](11)
s2:[Hello,worldHello,world](11)
s :0xbfb5360d
s2:0xbfb53602
0080デフォルトの名無しさん
2011/09/02(金) 09:20:22.060081デフォルトの名無しさん
2011/09/02(金) 10:44:50.710082!ninjya
2011/09/02(金) 12:02:33.580083デフォルトの名無しさん
2011/09/02(金) 12:34:48.210084!ninjya
2011/09/02(金) 12:36:53.460085デフォルトの名無しさん
2011/09/02(金) 12:38:44.56a |= b は a = a | b
0086デフォルトの名無しさん
2011/09/02(金) 12:40:40.990087デフォルトの名無しさん
2011/09/02(金) 12:56:32.090088デフォルトの名無しさん
2011/09/02(金) 13:18:20.74C言語 演算子 とかで出てくるだろうよ
0089デフォルトの名無しさん
2011/09/02(金) 14:20:52.68別人なんだから
0090デフォルトの名無しさん
2011/09/02(金) 15:50:52.91なんか、まともな本は全部アメリカ人の本の様な希ガス・・・
0091デフォルトの名無しさん
2011/09/02(金) 16:26:25.61つか「コンピュータ関連の書籍って」範囲広すぎ。
0092デフォルトの名無しさん
2011/09/02(金) 17:38:48.420093デフォルトの名無しさん
2011/09/02(金) 17:40:02.260094デフォルトの名無しさん
2011/09/02(金) 20:06:43.610095デフォルトの名無しさん
2011/09/02(金) 20:10:37.040096デフォルトの名無しさん
2011/09/02(金) 20:15:06.10GUIはウィンドウ関連のAPIを使ってるだけだし。
0097デフォルトの名無しさん
2011/09/02(金) 20:34:23.06今時はやりのGUIライブラリとかないですか?
0098デフォルトの名無しさん
2011/09/02(金) 20:37:06.850099デフォルトの名無しさん
2011/09/02(金) 20:43:02.400100デフォルトの名無しさん
2011/09/02(金) 20:57:56.850101デフォルトの名無しさん
2011/09/02(金) 21:22:31.70DirectX
0102デフォルトの名無しさん
2011/09/02(金) 21:42:12.780103デフォルトの名無しさん
2011/09/02(金) 21:58:20.06HTML+CGIでもGUIじゃね?
0104デフォルトの名無しさん
2011/09/03(土) 00:03:35.560105デフォルトの名無しさん
2011/09/03(土) 00:07:29.25バッチ処理メインのバックオフィス系が主?他にある?
0106デフォルトの名無しさん
2011/09/03(土) 00:14:00.70関数のオーバーロードでエラー出そうだけど。
0107デフォルトの名無しさん
2011/09/03(土) 00:16:01.61C++Builderがかつて存在した
0108デフォルトの名無しさん
2011/09/03(土) 01:04:36.290109デフォルトの名無しさん
2011/09/03(土) 01:07:27.49http://homepage2.nifty.com/c_lang/index_sdk.html
0110デフォルトの名無しさん
2011/09/03(土) 01:09:27.23作法に則るならイベント駆動型で書きさえすればいい
作法無視(ゲーム等)ならポーリングすればいい
オブジェクト指向である必要は無いよ
0111デフォルトの名無しさん
2011/09/03(土) 01:18:18.21ポインタ使えば楽にできるのに、値渡しだと上手くいきません。
0112デフォルトの名無しさん
2011/09/03(土) 01:19:37.27return 構造体;
0113デフォルトの名無しさん
2011/09/03(土) 01:45:20.610114デフォルトの名無しさん
2011/09/03(土) 01:56:57.760115デフォルトの名無しさん
2011/09/03(土) 01:59:12.71むしろオブジェクト言語は邪魔というかマ様への負担にしかならんと思う
0116デフォルトの名無しさん
2011/09/03(土) 04:03:46.00どうやったら上手く動くでしょうか。
> coca cola 120
> coca cola 150
と出力されるようにしたいのですが。
コード:http://codepad.org/zYHhnfJ5
0117デフォルトの名無しさん
2011/09/03(土) 04:17:36.200118デフォルトの名無しさん
2011/09/03(土) 13:40:01.33この動画を見たのですが
プロトタイプ宣言のところでどうして
main関数のa,bにtasizan関数のx,yが代入されるのかわかりません・・
int main(void){
int a,b,add;
acanf("%d%d",&a,&b);
add=tasizan(a,b);
printf("add=%d\n",add);
return 0;
}
int tasizan(int x,int y){
int answer;
answer=x+y;
return answer;
}
誤字脱字が多いと思いますが脳内補正してください
0119デフォルトの名無しさん
2011/09/03(土) 13:45:47.280120デフォルトの名無しさん
2011/09/03(土) 13:57:13.34main関数に書いてるadd=tasizan(a,b);でどうして
addにanswerの値が代入されるのでしょうか
0121デフォルトの名無しさん
2011/09/03(土) 14:05:18.38add=tasizan(a,b); ここでtasizan関数を呼び出している。
tasizan関数はanswerを返す
よってaddにanswerが代入される
0122デフォルトの名無しさん
2011/09/03(土) 14:12:10.76最初のところに int ってあるだろ、これは関数tasizanがint型の数値を返すという事を示している。
関数tasizan 内に
return answer;
ってあるだろ。これが返す値だ。
0123デフォルトの名無しさん
2011/09/03(土) 14:24:04.15>122
return answerでanswerという変数?をtasizan関数に代入するという意味でいいでしょうか?
そしてどこかでtasizan関数を呼び出した?時にanswerを表示するでいいですか?
あともうひとつだけmain関数は変数abの値をどこでtasizan関数に渡しているんでしょうか
0124デフォルトの名無しさん
2011/09/03(土) 14:30:08.92見ろ
http://www9.plala.or.jp/sgwr-t/c/sec11.html
0125デフォルトの名無しさん
2011/09/03(土) 14:32:46.51ありがとうございます
早速みてみます
0126デフォルトの名無しさん
2011/09/03(土) 14:37:55.48なるほど理解できました!
>121
>122
みなさんありがとうございました
0127デフォルトの名無しさん
2011/09/03(土) 14:43:35.03そこ、丁寧だなぁww しかし、わかんない人って、そこからわかんないんだな。
0128デフォルトの名無しさん
2011/09/03(土) 14:52:05.43関数は数値に置き換えられるモノだとか。
0129デフォルトの名無しさん
2011/09/03(土) 15:06:56.51あぁ、ダメになるサイトだ。
0130デフォルトの名無しさん
2011/09/03(土) 15:11:43.75構造体の配列さっぱりです
>>129
ダメになっちゃうの?
0131デフォルトの名無しさん
2011/09/03(土) 15:14:38.63間違いが書かれているから指摘したら、切れられた。
更に指摘したら、言い訳が掲載された。
読んだ人がダメになるかどうかは、読んだ人次第。
0132デフォルトの名無しさん
2011/09/03(土) 15:16:07.260133デフォルトの名無しさん
2011/09/03(土) 15:20:47.39というか地頭のいい人はプログラミング言語なんてやる必要ないでしょ
マシン語とマクロアセンブラさえあれば他には何もいらん
阿呆が大きなコード管理出来ないから高級言語なんてもんに頼らなきゃいけないだけで
情報工学とかウンコだよね
0134デフォルトの名無しさん
2011/09/03(土) 15:24:02.200135デフォルトの名無しさん
2011/09/03(土) 15:32:55.31筆算でやれよ
0136デフォルトの名無しさん
2011/09/03(土) 16:00:19.820137デフォルトの名無しさん
2011/09/03(土) 16:43:05.42BASIC+アセンブラの不便さといったら…
0138デフォルトの名無しさん
2011/09/03(土) 16:44:35.94解説サンクス
でダメになるってんで見に行ったんだけど
void func(void)
{
処理
if (条件) return; ⇒ 省略不可
処理
return; ⇒ 省略可
}
返り値も引数も無い関数の途中にreturnってあり得るの?
return 0; って記述すると停止するとか?
って自分で実行すれば良いのか
ちょっとやってみるか
0139デフォルトの名無しさん
2011/09/03(土) 17:21:20.210140デフォルトの名無しさん
2011/09/03(土) 17:22:12.10CALL 〜 RET
0141デフォルトの名無しさん
2011/09/03(土) 17:29:19.45間違いの箇所教えてくれ。
0142デフォルトの名無しさん
2011/09/03(土) 18:36:12.86それでも売れるのかな???
0143デフォルトの名無しさん
2011/09/03(土) 18:42:22.64若者が騙されて入門して来るんだよ
毎年毎年
0144デフォルトの名無しさん
2011/09/03(土) 18:52:53.900145デフォルトの名無しさん
2011/09/03(土) 18:57:46.04○大学教授が院生に書かせる→出版→受講者に売る。
0146デフォルトの名無しさん
2011/09/03(土) 19:07:15.23このサイトの管理人が掲示板で切れたのを見たことないな。
へんなこと書いたんじゃないのか?
0147デフォルトの名無しさん
2011/09/03(土) 19:16:07.06有り得る。
例えば引数のチェックでNGの場合とか。
void func(int nArg)
{
// 引数がNGの場合は処理を行わない
if (nArg < 0) {
return;
}
処理
return;
}
0148!jinja
2011/09/03(土) 19:32:41.610149デフォルトの名無しさん
2011/09/03(土) 20:55:05.01>返り値も引数も無い関数
0150デフォルトの名無しさん
2011/09/03(土) 20:58:54.11答えてくれた方ありがとうございます
0151デフォルトの名無しさん
2011/09/03(土) 21:02:06.93グローバル変数を参照してれば途中で抜けるのもありなのかな?
0152デフォルトの名無しさん
2011/09/03(土) 21:21:25.20それは>>148が回答してるでしょ。
0153デフォルトの名無しさん
2011/09/03(土) 21:34:34.26{
return;
}
0154デフォルトの名無しさん
2011/09/03(土) 21:41:08.41{
char *Buf=(char *)malloc(1024*16);
if(Buf==NULL) {
return ;
}
...
}
0155デフォルトの名無しさん
2011/09/03(土) 21:48:59.480156デフォルトの名無しさん
2011/09/03(土) 23:58:09.84今C言語の基礎を終わせ、DXライブラリを今から勉強してゲームを作りたいと思っています。
もし完成したらベクター等で配布しようと思っているんですが、
やはりCで書いたプログラムは環境が整ってないと起動することはできないのでしょうか?
もし配布した後に起動できない、のようになったらちょっとまずいと思うんですが……
0157デフォルトの名無しさん
2011/09/04(日) 00:00:29.110158デフォルトの名無しさん
2011/09/04(日) 00:18:55.28そのvc…….dllというのは用意するのは簡単ですか?
0159デフォルトの名無しさん
2011/09/04(日) 03:28:10.74うほっ!
ご指摘有難うございます。
再確認したらそうでしたね
あの単語が脳内で理解されるまで時間がかかってしまいました…
>>154,155が意味不明だけど
おいおい理解出来る様になりたいです
皆さん有難うございます
精進してきまする
0160デフォルトの名無しさん
2011/09/04(日) 08:55:47.10個人でゲームを作るならCなんて選択はマゾ以外の何物でもないと思う。
ゲーム用によく使われているスクリプト言語の方が良いんじゃね?
最近だったらPythonやLuaとか。
0162デフォルトの名無しさん
2011/09/04(日) 15:02:26.06NIC2枚差したWindowsPCをブリッジのような形にして、
指定したパケットだけ落とすプログラムって作成可能でしょうか?
Linuxであればできますが、Windowsでの作り方が分からず困っています。
図
(NIC(1),NIC(2)をブリッジし、共に192.168.1.0ネットワーク)
NIC(1)
_____|____
|windowsPC| ×ここでHTTPパケットを落とす
NIC(2)|
|
|↑HTTPパケット
0163デフォルトの名無しさん
2011/09/04(日) 15:09:40.970164デフォルトの名無しさん
2011/09/04(日) 15:10:04.78よく分からんので検索ワードだけ
パケットフィルタリング C言語
0165デフォルトの名無しさん
2011/09/04(日) 15:13:52.10他の言語を覚えなくても、C言語でやってしまえばいいと
思うんだけど、どうかな?
0166デフォルトの名無しさん
2011/09/04(日) 15:18:58.730167デフォルトの名無しさん
2011/09/04(日) 15:24:28.86ttp://www.atmarkit.co.jp/fwin2k/win2ktips/450ipforw/ipforw.html
0168デフォルトの名無しさん
2011/09/04(日) 15:46:36.36文字解析なんぞは他の言語がうらやましくもある
0169デフォルトの名無しさん
2011/09/04(日) 16:42:56.600170デフォルトの名無しさん
2011/09/04(日) 18:08:28.260171デフォルトの名無しさん
2011/09/04(日) 18:25:09.05アメリカだと、ありそうな話
0172デフォルトの名無しさん
2011/09/04(日) 18:36:04.310173デフォルトの名無しさん
2011/09/04(日) 19:10:07.31ミスの指摘をお願い出来ますか
「ヘッダファイル内」
void cursor(struct button *btn);
「main関数内」
struct button{
int buttonX;
int buttonY;
}btn,*pbtn;
void cursor(struct button pbtn);
error:型"button *"の引数は型"button *"のパラメータと互換性がありません。
0174173
2011/09/04(日) 19:14:05.82「ヘッダファイル内」
void cursor(struct button *btn);
「main関数内」
struct button{
int buttonX;
int buttonY;
}btn,*pbtn;
pbtn = &btn;
cursor(pbtn);
error:型"button *"の引数は型"button *"のパラメータと互換性がありません。
0175デフォルトの名無しさん
2011/09/04(日) 19:23:24.86ヘッダの頭の辺りにstruct buttonの定義を書くといいと思う
よくわからないけど
0176デフォルトの名無しさん
2011/09/04(日) 19:30:23.71typedef struct{
int buttonX;
int buttonY;
} button;
void cursor(button *btn);
「main関数内」
button btn;
button * pbtn;
pbtn = &btn;
cursor(pbtn);
これじゃだめ?
0177デフォルトの名無しさん
2011/09/04(日) 19:32:38.110178173
2011/09/04(日) 19:36:34.09アドバイスどうも有難うございました。今コンパイル通りました。
えーと、つまりヘッダファイルで関数宣言する前に構造体を書いてなかったからエラー出てた、ってことなんでしょうかね
0179デフォルトの名無しさん
2011/09/04(日) 21:56:06.34因みにpbtnの役割ってなんなのかな?
コードは書けば書くほどバグが入り込むから一文字でも少なく書かないと。
可読性を損なう時は多少長くてもしょうがないと思うけど。
「main関数内」
button btn;
// button * pbtn;
//pbtn = &btn;
cursor(&btn);
0180デフォルトの名無しさん
2011/09/05(月) 00:29:23.39文字の扱いはたしかにCは苦手っぽいね。
かといって、それだけのために他の言語を覚えるのは
結構かったるい感じだね
0181デフォルトの名無しさん
2011/09/05(月) 01:00:12.43まぁテキストに対して複雑な処理をするなら当時だと
awkでも使っとけってことだったのか
0182デフォルトの名無しさん
2011/09/05(月) 01:34:13.71charという型名のせいで勘違いしやすいけど
0183デフォルトの名無しさん
2011/09/05(月) 01:54:07.300184デフォルトの名無しさん
2011/09/05(月) 04:01:20.68漢字とか扱うとCなんて使ってられない。
他の言語覚えた方がずっと近道。
0185デフォルトの名無しさん
2011/09/05(月) 07:52:58.620186デフォルトの名無しさん
2011/09/05(月) 08:12:08.960187デフォルトの名無しさん
2011/09/05(月) 09:30:21.37使い道あるかは知らん
0188デフォルトの名無しさん
2011/09/05(月) 09:51:35.90なにかツールを使っているなら、お勧めを教えてください
0189デフォルトの名無しさん
2011/09/05(月) 10:23:44.70タグジャンプを使わずに一旦関数名でプロジェクトファイル全体をgrepして
関数定義の部分を目で確かめて表示させるやつってなんなのなんでタグジャンプ使わないの馬鹿なの
0190デフォルトの名無しさん
2011/09/05(月) 15:10:41.81タグジャンプを知らないか慣れてないか信用できないのだろ。
0191デフォルトの名無しさん
2011/09/05(月) 17:35:43.750192デフォルトの名無しさん
2011/09/05(月) 17:43:03.530193デフォルトの名無しさん
2011/09/05(月) 17:56:23.460194デフォルトの名無しさん
2011/09/05(月) 18:00:48.350195デフォルトの名無しさん
2011/09/05(月) 18:03:30.54箱に決まっているだろ。常考
0196デフォルトの名無しさん
2011/09/05(月) 18:07:28.490197デフォルトの名無しさん
2011/09/05(月) 18:21:05.40アスペ乙ww
0198デフォルトの名無しさん
2011/09/05(月) 18:28:03.15おれだが>>162の質問が何をしてるのか全く分からない。
詳しい人教えて。NICってなに?Linuxってなに?
0199デフォルトの名無しさん
2011/09/05(月) 18:31:04.690200デフォルトの名無しさん
2011/09/05(月) 19:05:07.65自閉症とアスペルガーの区別もつかん奴に
煽られてもなぁ・・・
0201デフォルトの名無しさん
2011/09/05(月) 19:11:12.660202デフォルトの名無しさん
2011/09/05(月) 19:16:54.27取り敢えず入りやすいのはPHPかな。
大抵のレンタルサーバで使えるし。
Perlがあがってるけど、あれはややこしくておすすめできない。
Cと違うところがたくさんありすぎる。
0203デフォルトの名無しさん
2011/09/05(月) 21:50:49.53構造体のメンバ変数を全てファイル出力する場合
やはり1つ1つアクセスしてfprintなどで出力するしかないのでしょうか?
構造体などを引き渡すだけで一気に出力などをする方法などはないのでしょうか?
開発環境はVC++です。
0204デフォルトの名無しさん
2011/09/05(月) 21:54:13.790205デフォルトの名無しさん
2011/09/05(月) 22:01:05.50エンディアンの異なるデータを、構造体レベルで一気にコピーする簡単な方法はありませんか。記述量が少ないほど良いです。
(アライメントはgcc拡張で対応する前提です)
0206デフォルトの名無しさん
2011/09/05(月) 22:05:33.72メンバにポインタが含まれていたらまじはまれる
0207デフォルトの名無しさん
2011/09/05(月) 22:10:22.12黙って打て
0208デフォルトの名無しさん
2011/09/05(月) 22:38:55.45読み込み時にエンディアン変換かましたら?
0209デフォルトの名無しさん
2011/09/05(月) 22:40:28.31#progma
などでなんとかならないのなら、そしてコンパイラ依存をさけたいのなら、おっしゃるとおり、
「1つ1つアクセスしてfprintなどで出力する」
のが正解です。
0211デフォルトの名無しさん
2011/09/05(月) 22:43:55.250212デフォルトの名無しさん
2011/09/05(月) 23:23:14.65>>211
そうそう。FileIntとかFileDoubleなんてクラスを作ったりしてね。
エンコーディングの問題はそいつらに任せられるから、
上の方の処理では意識することが少なくて済む。
って、Cで同じようなことをやってもいいけどトリッキーにしかならないからなぁ。
×#progma
○#pragma
霧
0214デフォルトの名無しさん
2011/09/05(月) 23:27:21.15有名なやつとかある?
0215デフォルトの名無しさん
2011/09/05(月) 23:28:37.400216デフォルトの名無しさん
2011/09/05(月) 23:28:56.01いやもう事情が許すかぎりテキストにして出力するのが一番かと。それがだめなら仕方ありませんが。
0218デフォルトの名無しさん
2011/09/06(火) 00:06:00.29charポインタが指す内容をlong longで型キャストしてやりゃいいんじゃねぇの?
0219デフォルトの名無しさん
2011/09/06(火) 00:08:41.85何をやりたいのか、さっぱり?
0220デフォルトの名無しさん
2011/09/06(火) 00:12:30.55有名じゃなきゃって、意味わからん
0221デフォルトの名無しさん
2011/09/06(火) 00:58:18.390222デフォルトの名無しさん
2011/09/06(火) 01:00:51.67もしくは、見えそうで見えない小悪魔的演出をしてるから。
0223デフォルトの名無しさん
2011/09/06(火) 01:01:16.450224デフォルトの名無しさん
2011/09/06(火) 01:03:30.73>218 のようにポインタ使うか、サイズ決まってるならunion使うか。
0225デフォルトの名無しさん
2011/09/06(火) 01:07:47.140226デフォルトの名無しさん
2011/09/06(火) 01:13:26.810227デフォルトの名無しさん
2011/09/06(火) 01:16:45.830228デフォルトの名無しさん
2011/09/06(火) 01:22:18.26提供された範囲で答えるしか無いんだし。
具体的なコードが提示されれば又別だよ。
0229デフォルトの名無しさん
2011/09/06(火) 01:32:58.64カゴ⇒自分⇒アン⇒箱の順に探すに決まってるだろ。
0230214
2011/09/06(火) 05:53:50.02説明不足ですまん。
RSAやってて
数値⇔文字列
の処理を暗号復号の前後にしなくちゃいけないからその方法を探してた。
まぁ、いろいろやってみるわ。
0231デフォルトの名無しさん
2011/09/06(火) 10:20:56.950232214
2011/09/06(火) 12:58:11.820233デフォルトの名無しさん
2011/09/06(火) 17:03:22.24C言語なら俺に聞かないでくれ(お断りします編)にした方がいいんじゃね?
0234デフォルトの名無しさん
2011/09/06(火) 17:07:03.370235デフォルトの名無しさん
2011/09/06(火) 17:37:44.52このコードで構造体Bの中の構造体Aの値だけを変えたいんですがどこを直せばいいですか?
0236デフォルトの名無しさん
2011/09/06(火) 17:59:36.17何故たくさんの場所で聞くと答えが速くもらえると思うのか
0237デフォルトの名無しさん
2011/09/06(火) 18:10:35.28突っかかるみたいであれだけど、たくさんの場所で聞くこと自体は合理的な選択じゃね?
ただしローカルルールを理解しようとしない愚か者なわけだが
あんた馬鹿?
0239デフォルトの名無しさん
2011/09/06(火) 18:17:07.89結果的には適切なスレ見つけて、一箇所で聞いた方が教えてもらえるんだよ
0240デフォルトの名無しさん
2011/09/06(火) 18:24:36.72皮肉を言ってるのはわかるがマルチやっちゃうような初心者質問者には伝わらねーよって言いたいわけ
0241デフォルトの名無しさん
2011/09/06(火) 18:35:57.170242デフォルトの名無しさん
2011/09/06(火) 18:37:53.79マルチポストがばれない限りはマルチポストのほうが回答がつく確率は高いという話だと思う
嫌われないなんてことは誰も書いてないかと
0243デフォルトの名無しさん
2011/09/06(火) 18:39:42.860244デフォルトの名無しさん
2011/09/06(火) 18:40:00.20でも大抵ばれてるのを見かける
実はそうでもない。
例えばこのスレ辺りにピンポイントで質問すれば、間がよければマルチポストするより早くレスがつく。
0246デフォルトの名無しさん
2011/09/06(火) 18:49:48.52マルチ氏ねとレスをした人の行動を考える。
・質問を見る→2chおよびその他のサイトをみて、同じ質問があれば、マルチ氏ねとレスをする
・常に2chおよびその他のサイトを巡回しており、質問を見かけるが回答をせずに放置する
→同じ質問を見かける→マルチ氏ねとレスをする
・マルチポストをした上で、マルチ氏ねと自演をする
いずれにしても、マルチ氏ねとレスをした人は擁護されえない人物であろう。
0247デフォルトの名無しさん
2011/09/06(火) 18:50:07.130248デフォルトの名無しさん
2011/09/06(火) 18:54:24.62マルチポストしてる人同様、答える側も関連スレ巡回してるのは当然だと思うんだが。。。
バレないって考える根性が嫌われるんじゃないかねぇ。。。
0249デフォルトの名無しさん
2011/09/06(火) 19:00:24.72もしかするとマルチポストで、すでに回答がついているかもしれないから、回答せずに巡回をするってことだよね
0250デフォルトの名無しさん
2011/09/06(火) 19:03:36.12骨髄反射じゃなく、一通り見てレスするタイプなら気が付かない方がおかしいし、何度も見るとイラッとする。
0251デフォルトの名無しさん
2011/09/06(火) 19:21:35.14私?気が向いたらマルチの一つに答えています。
マルチに特に悪い感情はありません。というかマルチが嫌われる理由が想像できない。
0253デフォルトの名無しさん
2011/09/06(火) 19:46:23.14イラっとする人が何度も何度もイラっとする事を経験してるんだから、見た瞬間に怒り爆発って気持ちは分からなくはない
0254デフォルトの名無しさん
2011/09/06(火) 19:49:27.840255デフォルトの名無しさん
2011/09/06(火) 19:55:50.80別にお前を説得する必要はない
0256デフォルトの名無しさん
2011/09/06(火) 20:01:49.050257デフォルトの名無しさん
2011/09/06(火) 20:13:46.050258デフォルトの名無しさん
2011/09/06(火) 20:23:59.75どっちかと言うと、似たようなスレを巡回してる人が多い故に、何度も同じ質問されてる感覚にイラっと来る人が多いって感じかね
0259デフォルトの名無しさん
2011/09/06(火) 20:29:57.09まずは日本語ちゃんと理解できるようになろうな
0260デフォルトの名無しさん
2011/09/06(火) 20:43:32.18OS側は何かするんですか?
0261デフォルトの名無しさん
2011/09/06(火) 20:47:17.99呼び出し元のプログラムに伝えることはする。
0262デフォルトの名無しさん
2011/09/06(火) 21:03:06.40まあ、慣例に従いますが。
0263デフォルトの名無しさん
2011/09/06(火) 21:42:57.620264デフォルトの名無しさん
2011/09/06(火) 22:18:20.340265デフォルトの名無しさん
2011/09/06(火) 23:32:39.120266デフォルトの名無しさん
2011/09/07(水) 02:37:45.31例えば、EXIT_FAILUREに反応してアラートを上げるウィンドウシステムがかつてあった。
0267デフォルトの名無しさん
2011/09/07(水) 02:39:48.290268デフォルトの名無しさん
2011/09/07(水) 06:22:51.16とかよくやるもんね。
0269デフォルトの名無しさん
2011/09/07(水) 15:42:30.120270デフォルトの名無しさん
2011/09/07(水) 16:12:52.83一行でコンパイル実行
失敗しても古いのを実行は、しない
0271デフォルトの名無しさん
2011/09/07(水) 16:56:03.29成功は0だけど、エラーのリターン値はマイナスでエラーの種類ごとに
値が違うって感じの多いじゃん。
0272デフォルトの名無しさん
2011/09/07(水) 17:44:06.40そう
0273デフォルトの名無しさん
2011/09/07(水) 17:48:57.71うん
0274デフォルトの名無しさん
2011/09/07(水) 19:43:49.13プログラムを作る予定なんですが、参考になるサイト知りませんか?
0275デフォルトの名無しさん
2011/09/07(水) 19:45:12.27ん、学生君?
0276デフォルトの名無しさん
2011/09/07(水) 19:52:06.94ただ電気系なのでC言語は疎いです
0277デフォルトの名無しさん
2011/09/07(水) 20:07:40.44ソフトだけなら自力で調べればその程度はできるだろうが
0278デフォルトの名無しさん
2011/09/07(水) 20:08:58.38は言い訳にならんでしょ
ここで質問しても答えてくれる人はおらん気がするけど
回路図書くところからやらんとプログラムに行きつかんでしょ
0279デフォルトの名無しさん
2011/09/07(水) 20:24:45.92、というか難読化して訳わからなくしてもそのままコピペ→コンパイルされたらお終わりなんじゃ?
0280デフォルトの名無しさん
2011/09/07(水) 20:28:31.480281デフォルトの名無しさん
2011/09/07(水) 20:29:08.340282デフォルトの名無しさん
2011/09/07(水) 20:32:23.26いや・・だからハッキリわかってるところだけチョコチョコっと変えてアルゴリズムとかはそのまま使えちゃうでしょ?
0283デフォルトの名無しさん
2011/09/07(水) 20:32:26.85ローカルで動作するプログラムなら解読されるのは防げない
だけど解読のコストが高くなれば諦める可能性が高くなる
実行ファイルにしてしまえば変数名、関数名が消えるから難読化になってる
難読化ツールを使えば実行時に自己書き換えをするからもっと解読が面倒になる
0284デフォルトの名無しさん
2011/09/07(水) 20:36:45.06そっちに行ってみます
0285デフォルトの名無しさん
2011/09/07(水) 20:41:48.320286デフォルトの名無しさん
2011/09/07(水) 20:46:02.230287デフォルトの名無しさん
2011/09/07(水) 20:48:30.720288デフォルトの名無しさん
2011/09/07(水) 20:49:34.11自分で作った実行ファイルを自分で解析してみればいいと思うよ
0289デフォルトの名無しさん
2011/09/07(水) 20:50:39.60シナ人にパクられる
0290デフォルトの名無しさん
2011/09/07(水) 20:52:16.88さらにその値に応じて、関数の動作そのものを変えてしまう。
その関数が200行程度あれば、解読したいと思う意欲は相当そがれる。
0291デフォルトの名無しさん
2011/09/07(水) 20:57:16.830292デフォルトの名無しさん
2011/09/07(水) 21:06:22.87と言うか、盗まれたく無いのはファイルフォーマットの場合の方が多いんじゃ無いのかな
Officeとかadbe製品とか
0293デフォルトの名無しさん
2011/09/07(水) 21:10:45.390294デフォルトの名無しさん
2011/09/07(水) 21:30:00.41自分はやらんけど、変なこと
0295デフォルトの名無しさん
2011/09/07(水) 21:53:20.93おい
何か足りないぞ
0296デフォルトの名無しさん
2011/09/07(水) 22:26:27.59まぁ実行時には複合化されるからクラックの手間増やすぐらいにしか役立たないみたいだけど。
0297デフォルトの名無しさん
2011/09/07(水) 22:41:43.18何と複合するんだ
0298デフォルトの名無しさん
2011/09/07(水) 22:45:24.320299デフォルトの名無しさん
2011/09/07(水) 22:52:55.02これには利点が2つあって、
一つは、
コンパイル可能なソースコードをフル公開することにって、作者として信頼される。
変なウイルスやバックドアなどの仕掛けを仕組んでないことの証明になる。
exeやdllをパッと上げても、気味悪がって誰も使ってくれないのが普通。でもソース付きだとある程度信用して使ってもらえる。
もう一つは、
バグ修正や機能追加などの面倒な要望が来たときに、
「コードも公開してありますから、ご自由に改変してくれていいですよ(ニッコリ」と、自分が悪者にならずに断る口実にできるwww
もう一つ、
ソースコードのバグを見つけて、修正パッチを送ってもらえる。
という利点もあるはずなんだが、自分はこのメリットにあずかったことは一度も無いわ。
0300デフォルトの名無しさん
2011/09/07(水) 22:57:19.400301デフォルトの名無しさん
2011/09/07(水) 22:58:57.350302デフォルトの名無しさん
2011/09/07(水) 23:07:05.94バレたけどね
0303デフォルトの名無しさん
2011/09/08(木) 03:17:56.10Delphiユーザーとかに多い。
0304デフォルトの名無しさん
2011/09/08(木) 03:23:41.24の方がかっこいいと思うけどね
0305デフォルトの名無しさん
2011/09/08(木) 03:24:11.420306デフォルトの名無しさん
2011/09/08(木) 03:28:52.160307デフォルトの名無しさん
2011/09/08(木) 04:58:13.37ああいうのが難読化やらexepackerなんかを使うんだろうな。
0308デフォルトの名無しさん
2011/09/08(木) 05:05:49.150309デフォルトの名無しさん
2011/09/08(木) 06:19:28.620310デフォルトの名無しさん
2011/09/08(木) 06:27:33.770311デフォルトの名無しさん
2011/09/08(木) 06:31:06.75http://www.din.or.jp/~ohzaki/mail_regex.htm
0312デフォルトの名無しさん
2011/09/08(木) 08:41:19.330313デフォルトの名無しさん
2011/09/08(木) 08:48:24.88面倒臭がらずに読んだら理解は出来るだろうよ。
0314デフォルトの名無しさん
2011/09/08(木) 09:56:16.43それをエスケープさせて、わざとわかりにくくしているようにしか見えないw
0315デフォルトの名無しさん
2011/09/08(木) 12:05:46.14#include <stdio.h>
typedef struct{
int x;
int y;
} Coord;
typedef struct{
Coord coord[3];
} Block;
int main(void)
{
Block x = {{1,2},{3,4},{5,6}};
return 0;
}
とすると「初期化式が多すぎる」とエラーが出るのは何故なんでしょうか?
0316デフォルトの名無しさん
2011/09/08(木) 12:09:32.51括弧が足りないから
0317デフォルトの名無しさん
2011/09/08(木) 12:09:37.580318デフォルトの名無しさん
2011/09/08(木) 12:14:19.160319デフォルトの名無しさん
2011/09/08(木) 12:20:09.06誰でも一度は遭遇するミスだからチョット優しくなれるとおもう
0320デフォルトの名無しさん
2011/09/08(木) 12:32:04.710321デフォルトの名無しさん
2011/09/08(木) 12:42:37.99Block x =
{ //Block構造体の初期化
{ //Block内の配列の初期化
{1,2}, //Coord配列変数の初期化
{3,4},
{5,6}
}
};
0322デフォルトの名無しさん
2011/09/08(木) 12:55:21.80まぁ、こういう分かり易いくらいに
馬鹿丸出し初心者のミスは答える方も楽だしw
0323デフォルトの名無しさん
2011/09/08(木) 13:22:35.040324デフォルトの名無しさん
2011/09/08(木) 13:52:21.24MacのXcodeで勉強しているんですが
インクリメントのタイミングが意味不明なんで教えて下さい
int a=1,b=1;
printf("a=%d,%d,%d¥n",a,++a,a);
printf("b=%d,%d,%d¥n",b,b++,b);
アウトプットされた答えが
a=2,2,2
b=2,1,2
b++が1なのにソレより前にあるbが2になるのは何故でしょうか
同様に++aより前にあるaが2になるのも謎なんですけど
仕様と言われちゃうと仕方ないけど寂しいです
お願いします
0325デフォルトの名無しさん
2011/09/08(木) 13:56:13.69未定義です
鼻から悪魔が出ます
冒険の書が消えます
背が縮んで
彼女と別れて
宝くじをなくします
0326デフォルトの名無しさん
2011/09/08(木) 14:02:31.99>>324だけど
>未定義です //ソコを知りたい!
>鼻から悪魔が出ます //最近鼻血が止まりません
>冒険の書が消えます //外出してません
>背が縮んで //後2cm欲しい
>彼女と別れて //彼女なんて伝説だろ?
>宝くじをなくします //買ったこと無い
0327デフォルトの名無しさん
2011/09/08(木) 14:07:13.41http://oshiete1.watch.impress.co.jp/qa5168988.html
0328デフォルトの名無しさん
2011/09/08(木) 14:13:38.75printf("a=%d,%d,%d\n",++a);
printf("a=%d,%d,%d\n",a);
printf("b=%d,%d,%d\n",b);
printf("b=%d,%d,%d\n",b++);
printf("b=%d,%d,%d\n",b);
0329デフォルトの名無しさん
2011/09/08(木) 14:14:03.59>>325,327さんありがとうございました
0330デフォルトの名無しさん
2011/09/08(木) 14:18:21.72おぅ
メチャクチャな数字が出てきたぞい
そりゃそうだ、パラメータが足りてない。
0332デフォルトの名無しさん
2011/09/08(木) 14:22:40.620333デフォルトの名無しさん
2011/09/08(木) 14:35:39.85Block x = {1,2, 3,4, 5,6};
こっちでも通るんだよな。
0334デフォルトの名無しさん
2011/09/08(木) 14:36:46.37コレが鼻から悪魔っすか?
>>332
すまん男だしオッサンだ
0335デフォルトの名無しさん
2011/09/08(木) 15:00:02.14#define xyxx char
#define xyyxx putchar
#define xyyyxx while
#define xxyyyx int
#define xxxyyx main
#define xyxyxy if
#define xyyxyy '\n'
xyxx *xyx [] = {
"]I^x[I]k\\I^o[IZ~\\IZ~[I^|[I^l[I^j[I^}[I^n[I]m\\I]h",
"]IZx\\IZx[IZk\\IZk[IZo_IZ~\\IZ~[IZ|_IZl_IZj\\IZj]IZ}]IZn_IZm\\IZm_IZh",
"]IZx\\IZx[I^k[I\\o]IZ~\\IZ~\\I]|[IZl_I^j]IZ}]I^n[IZm\\IZm_IZh",
"]IZx\\IZx[IZk\\IZk[IZo_IZ~\\IZ~_IZ|[IZl_IZj\\IZj]IZ}]IZn_IZm\\IZm]IZh",
"]I^x[I]k\\IZo_I^~[I^|[I^l[IZj\\IZj]IZ}]I^n[I]m^IZh",'\0'};/*xyyxyxyxxxyxxxyy*/
xyxx *xyyx; xxyyyx xyyyx,xyyyyx,xyyyyyx=0x59,xyyyyyyx=0x29,/*yxxyxyyyxxyyyxyy*/
xxyx=0x68;xxxyyx(){xyyyyx=0;xyyyxx(xyx[xyyyyx]){xyyx=xyx[xyyyyx++];/*xyyyxxyx*/
xyyyxx(*xyyx){xyyyx= *xyyx++-xyyyyyx;xyyyxx(xyyyx--)xyyxx(*xyyx-xyyyyyyx);/*x*/
xyxyxy(*xyyx==xxyx)xyyxx(xyyxyy);*xyyx++;}}}/*xyxyxyyyyxxyxxxyyyxyyyxyxxyyy*/
0336デフォルトの名無しさん
2011/09/08(木) 15:45:37.98実際には動作させずに必死にどうなるか解析してしまった
0337デフォルトの名無しさん
2011/09/08(木) 15:52:01.480338デフォルトの名無しさん
2011/09/08(木) 15:55:19.040339デフォルトの名無しさん
2011/09/08(木) 16:06:45.42大体訳すとこんなことしてる
ttp://codepad.org/XhUt1Gjz
0340デフォルトの名無しさん
2011/09/08(木) 16:16:14.490341デフォルトの名無しさん
2011/09/08(木) 16:33:50.17後で突っ込んでいいぞ。
struct {
unsigned char n;// 出力する回数 + 'Y'(0x59) (4 + 0x59 = ']'(0x5d))
char c; // 出力する文字 + ')'(0x29) ('?'(0x3f) + 0x29='h'(0x68))
// '?'文字を指定回数出力したら、次は改行する
];
0342デフォルトの名無しさん
2011/09/08(木) 16:42:41.330343デフォルトの名無しさん
2011/09/08(木) 16:48:10.410344デフォルトの名無しさん
2011/09/08(木) 19:52:26.05.jpg→.wavで新たなファイルを作り、
.wav→.jpgと再び同じ方法で戻したらファイルを開けなくなりました。
コピー先のメモリの容量も足りていたのにどこが問題なのでしょうか?
0345デフォルトの名無しさん
2011/09/08(木) 19:56:19.360346デフォルトの名無しさん
2011/09/08(木) 19:59:00.52本来ならできるはずということで?
0347デフォルトの名無しさん
2011/09/08(木) 19:59:29.440348デフォルトの名無しさん
2011/09/08(木) 20:01:09.430349デフォルトの名無しさん
2011/09/08(木) 20:06:09.30できるよ。ファイル読み書きの課題3ぐらいで出てきてもおかしくないレベル。
0350デフォルトの名無しさん
2011/09/08(木) 20:39:26.56windowsか?
バイナリで開いたのは読む側だけとかそういうことはないよな。
0351デフォルトの名無しさん
2011/09/08(木) 20:50:50.88コードを貼れ。
ttp://codepad.org
0352デフォルトの名無しさん
2011/09/09(金) 02:07:58.940353デフォルトの名無しさん
2011/09/09(金) 23:36:40.93みたいに関数ポインタを引数に取る関数のプロトタイプは、
void hoge(int, void (*)(void));
みたいにしていいの?
0354デフォルトの名無しさん
2011/09/09(金) 23:37:50.62それでもいいけど typedef するのを勧める
0355デフォルトの名無しさん
2011/09/10(土) 00:05:28.51以下のように書いてあります。
>さらに前述の改行コードがストリームに残る問題を考慮すると
>char a[20];
>scanf("%19s%*[^\n]%*c", a);
>となるが、この場合はaに入る文字列が 19バイト以下の場合には、入力ストリームにやはり改行文字が残る。
そこで,
#include <stdio.h>
int main(void){
char a[5];
scanf("%4s%*[^\n]%*c", a);
getchar();
return 0;
}
というプログラムを実行して,scanfの入力時に例えば「12<ENTER>」と入力すると,
上の文章に従えば,aに入る文字列が4バイト以下だから,入力ストリーム上に<ENTER>が残って,
getcharによる入力待ちは無いはずです.
しかし,実際にはgetcharの所で入力待ちになります.
wikipediaの説明が間違っていると思っていいでしょうか.
wikipediaの脚注にあるサイトにも上で引用したことと同じようなことが書いてあります.
そのサイトはソフトウェア開発会社のものなので,そうそう間違ったことは書かれないだろうと思います.
だから,本当に説明が間違っているのか自信が持てません.実行結果は上記の通りなのですが.
0356デフォルトの名無しさん
2011/09/10(土) 00:10:45.51おお、なるほど
ありがとうございました
typedef void (*hage_callback)(void);
void hoge(int, hage_callback);
void hoge(int n, hage_callback hage)
{
int i;
for (i=0; i<n; i++) hage();
}
void hage_proc(void) { }
int main(void)
{
hoge(1, hage_proc);
return 0;
}
0357デフォルトの名無しさん
2011/09/10(土) 02:44:22.64WinVistaの cmd 上と、cygwin端末上で確認したけど、入力待ちにならなかった。
どんな端末で動かしてるの?
0358デフォルトの名無しさん
2011/09/10(土) 03:22:44.32はげはげうるせーんだボケ(泣
0359デフォルトの名無しさん
2011/09/10(土) 03:27:25.05やぁ はげ
0360デフォルトの名無しさん
2011/09/10(土) 10:05:06.18wikipediaに書いてあるのと違ってるからさっさと見なおしてこい
>>357
>>355のコピペで入力待ちにならなかったってのは改行がwin風だからだろうかね
0361デフォルトの名無しさん
2011/09/10(土) 10:34:03.49正しく表示されません。
どうしたら全桁表示出来るでしょうか。
#include <stdio.h>
int main(int argc, char *args[])
{
unsigned long long data;
data = atoll(args[1]);
printf("result: %#llx\n", data);
return 0;
}
0362デフォルトの名無しさん
2011/09/10(土) 10:39:05.35でちゃよ?
0364デフォルトの名無しさん
2011/09/10(土) 11:22:08.43いんや特に無い
あとstdlib.h入れてリンクしてる?
0365デフォルトの名無しさん
2011/09/10(土) 11:28:11.62gcc 361.c -std=c99
0367デフォルトの名無しさん
2011/09/10(土) 16:44:42.02やっぱりWin32APIの関数でも逆コンパイルとかアセンブルしたらすぐわかってしまうのでしょうか?
0368デフォルトの名無しさん
2011/09/10(土) 16:46:02.790369デフォルトの名無しさん
2011/09/10(土) 16:47:34.81を心配してます
0370デフォルトの名無しさん
2011/09/10(土) 16:55:19.820371デフォルトの名無しさん
2011/09/10(土) 17:01:21.020372デフォルトの名無しさん
2011/09/10(土) 17:09:07.450373デフォルトの名無しさん
2011/09/10(土) 17:15:55.62当たり前だろ
ゴミしか作れない奴にはわからんだろうけどな
0374デフォルトの名無しさん
2011/09/10(土) 17:20:18.890375デフォルトの名無しさん
2011/09/10(土) 17:41:06.34ゴミみたいなゲームでも作ってベクターあたりに上げようかと思ってんじゃね?
GPL違反発覚を誤魔化すために対策検討してるという事も考えられるが
それにしては質問がお粗末すぎるし・・・
0376デフォルトの名無しさん
2011/09/10(土) 18:45:46.88逆コンパイラ使ってトリッキーなアルゴリズムの動きを見ようって奴もいるだろうけど、
そういうのってよりよい方法が文書で存在してるので正直逆コンパイル面倒ってなる
あとデバッグ情報無いのに変数名とか分かるっけ?
0377デフォルトの名無しさん
2011/09/10(土) 18:51:02.450378デフォルトの名無しさん
2011/09/10(土) 19:35:37.83シリアルコード認証あたりだろうけど、入門スレで聞くような題材じゃ無いよな。
0379デフォルトの名無しさん
2011/09/10(土) 20:35:19.080380デフォルトの名無しさん
2011/09/10(土) 20:37:38.440381デフォルトの名無しさん
2011/09/10(土) 23:48:07.850x46を受け取ったら、0xFにするような感じです。
0382デフォルトの名無しさん
2011/09/11(日) 00:25:57.730383デフォルトの名無しさん
2011/09/11(日) 00:31:01.75strtol() + sprintf()
0384デフォルトの名無しさん
2011/09/11(日) 00:31:33.480385デフォルトの名無しさん
2011/09/11(日) 00:41:31.22#define ASCII_CODE_2 "F" /* 文字列 */
#include <stdio.h>
#include <string.h>
int main(void) {
char buf[2], c['F'][4];
int k, i['F'];
strcpy(&c['0'][0], "0x0"); i['0'] = 0x0;
strcpy(&c['1'][0], "0x1"); i['1'] = 0x1;
strcpy(&c['2'][0], "0x2"); i['2'] = 0x2;
strcpy(&c['3'][0], "0x3"); i['3'] = 0x3;
strcpy(&c['4'][0], "0x4"); i['4'] = 0x4;
strcpy(&c['5'][0], "0x5"); i['5'] = 0x5;
strcpy(&c['6'][0], "0x6"); i['6'] = 0x6;
strcpy(&c['7'][0], "0x7"); i['7'] = 0x7;
strcpy(&c['8'][0], "0x8"); i['8'] = 0x8;
strcpy(&c['9'][0], "0x9"); i['9'] = 0x9;
strcpy(&c['A'][0], "0xA"); i['A'] = 0xA;
strcpy(&c['B'][0], "0xB"); i['B'] = 0xB;
strcpy(&c['C'][0], "0xC"); i['C'] = 0xC;
strcpy(&c['D'][0], "0xD"); i['D'] = 0xD;
strcpy(&c['E'][0], "0xE"); i['E'] = 0xE;
strcpy(&c['F'][0], "0xF"); i['F'] = 0xF;
k = ASCII_CODE_1;
printf("%d: %0X / %s\n", i[k], i[k], &c[k][0]);
strcpy(&buf[0], ASCII_CODE_2);
k= buf[0];
printf("%d: %0X / %s\n", i[k], i[k], &c[k][0]);
return 0;
}
0386デフォルトの名無しさん
2011/09/11(日) 01:25:52.07バッファオーバーフロー
0387デフォルトの名無しさん
2011/09/11(日) 01:36:37.49#include<string.h>
#include<ctype.h>
int ascii2num(int ascii_code){
if(!isxdigit(ascii_code)) return -1;
if(isdigit(ascii_code)) return ascii_code-'0';
return toupper(ascii_code)-'A'+10;
}
int main(void){
int x;
x=0x46;
printf("ascii2num(0x%02x)=%d\n", x, ascii2num(x));
x=0x66;
printf("ascii2num(0x%02x)=%d\n", x, ascii2num(x));
x=0x10;
printf("ascii2num(0x%02x)=%d\n", x, ascii2num(x));
return 0;
}
0388デフォルトの名無しさん
2011/09/11(日) 01:37:33.57#include <stdio.h>
int main(void){
char s;
printf("s = ");
s = getchar();
if (s >= 0x30 && s <= 0x39)
s -= 0x30;
if (s >= 0x41 && s <= 0x46)
s -= 0x37;
printf("%p¥n", s);
return 0;
}
0389デフォルトの名無しさん
2011/09/11(日) 01:55:10.740390デフォルトの名無しさん
2011/09/11(日) 12:11:30.770391デフォルトの名無しさん
2011/09/11(日) 21:45:40.680392デフォルトの名無しさん
2011/09/11(日) 21:50:44.28プログラミングなんかできても就職にも何にも役に立たない
0393デフォルトの名無しさん
2011/09/11(日) 22:09:51.620394デフォルトの名無しさん
2011/09/11(日) 22:55:18.63自分は中学の時に独学で覚えたけど、作りたいものが無かったら、覚えても無意味だよ
0395デフォルトの名無しさん
2011/09/11(日) 23:59:31.03アセンブラよりCの方が簡単…かな?
>また、習得したら何に使うのですか?
「英語は何に使うのですか?」レベルの質問。
やりたい事に使え。
0396デフォルトの名無しさん
2011/09/12(月) 00:59:49.79しかし、入門書では、コマンドプロンプトでコンパイルする方法で説明されていますが、
VSを使ってコマンドプロンプト方式で勉強する方法がわかりません。
Projectを作成する時にもCLRコンソールアプリケーションというのを選択すると
ソースに以下のような表示が出てしまい、これで、コンソールに表示する状態になっている
ようですが、本に書いてある内容と違います。
本には、以下のようなソースがかかれています
----------------------------
#include <iostream>
using namespace std;
cout << "こんにちは世界";
------------------------------
VS2010には以下のようなソースが表示されてしまいます。
本のような表示で勉強するにはどうしたらいいのでしょうか?
------------------------------------
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
Console::WriteLine(L"Hello World");
return 0;
}
0397デフォルトの名無しさん
2011/09/12(月) 01:12:07.400398デフォルトの名無しさん
2011/09/12(月) 01:51:39.39それはC++じゃなくてC++/CLRという別の言語にさせられてる
なので、>>397のいうとおり、CLRを禁止する
0399デフォルトの名無しさん
2011/09/12(月) 05:29:32.16C++の話題はスレ違いだろ。
後、基礎的な勉強ならVCよりMinGWやCygwin導入した方が良いな。
0400デフォルトの名無しさん
2011/09/12(月) 07:06:00.19空のプロジェクトを選択
0401デフォルトの名無しさん
2011/09/12(月) 11:30:38.320402デフォルトの名無しさん
2011/09/12(月) 12:55:00.80だいたい0.0になるから
0403デフォルトの名無しさん
2011/09/12(月) 16:47:19.30逆に気持ち悪い
0404デフォルトの名無しさん
2011/09/12(月) 17:11:23.20OSからもらった直後はゼロでクリアする環境もある。
free/mallocを繰り返せばゼロ以外になるかも。
0405デフォルトの名無しさん
2011/09/12(月) 20:53:06.990406デフォルトの名無しさん
2011/09/12(月) 21:37:40.53それ以外の環境ってどんなのがあるの
0407396
2011/09/12(月) 21:43:36.55>>398
>>399
>>400
ありがとうございます。
指示通り空のプロジェクトを作ってみたのですが、
ファイルから、ソースコードを追加して、以下の
ようなコードを書いて、デバッグをしてみましたが、
「visual studio2010\Projects\test3\Debug\test.exeを開始できません。」
「指定されたファイルが見つかりません」
と表示されてエラーになります。
これはどうしたらいいのでしょう・・・
コマンドプロンプトみたいな形で勉強することはVSではできないのでしょうか?
-------------------------------
#include <iostream>
using namespace std;
int main()
{
cout << "こんにちは世界";
}
-------------------------------
0408デフォルトの名無しさん
2011/09/12(月) 21:46:16.780409デフォルトの名無しさん
2011/09/12(月) 21:55:25.88下手な事するな
空のプロジェクトに新規ソースで作って打ち直せ
そしたら動くと思うから、そのソースを書き換えてまずは入門書の内容を進めろ
ツールの使い方は最低限に留めて、言語の学習に専念しろ
ツールの使い方は、入門書終わってからでも遅くない
(元々mfcや.net使うために複雑なんだから)
0410デフォルトの名無しさん
2011/09/12(月) 22:06:32.84自分はlinuxでgccのみなので詳しくないですが、
VC++ってiostream使うときにライブラリーのリンク指定する必要があったような記憶。
テンプレート実装以前のC++しか知らないけど、coutって今でも現役なのか・・・(感涙
0411デフォルトの名無しさん
2011/09/12(月) 22:13:14.32>>396,407
↓で聞け
【初心者歓迎】C/C++室 Ver.76【環境依存OK
http://hibari.2ch.net/test/read.cgi/tech/1312621728/
くだすれC++/CLI(初心者用)part2
http://hibari.2ch.net/test/read.cgi/tech/1268613679/
★初心者にVisual C++を教えるスレ★ Part37
http://hibari.2ch.net/test/read.cgi/tech/1299982561/
0412396
2011/09/12(月) 22:34:42.64なんか、そのほうがいい気がしてきました・・
>>409
空プロジェクトに新規ソースを作ったのですが・・うまくいかないのです・・
>>410
おっしゃるとおり、iostreamのリンクが指定されていないのかもしれません。
というか、ライブラリのリンク先を指定する必要があるんですね・・
鬱です・・
>>411
ご迷惑おかけしました・・・C++はここではやはりだめでしょうか・・
2.ファイルメニュー⇒新規作成→プロジェクト
3.Visual C++→全般→空のプロジェクト プロジェクト名と場所を入れる <OK>
プロジェクト名:test3
場所:...\visual studio2010\Projects
4.ソースファイル→右クリック⇒追加→新しい項目
5.コード→C++ファイル ファイル名を入れる <追加>
ファイル名:test3.cpp
#include <iostream>
6.ビルドメニュー⇒ソリューションのビルド
0414396
2011/09/12(月) 23:14:25.11今からやってみます。
あと、ちなみにLinuxでビルドしてみましたら、Linuxではできました
Linuxではg++っていうコンパイラを入れないといけないんですね。
よく知らなかったので驚きました。また報告します
0415396
2011/09/12(月) 23:27:31.03ありがとうございます。
はじめは言われたとおりにやってもだめだったのですが、
何度か行うと、ヘッダファイルが読み込まれて、うまくいくようになりました。
ただ、ビルドしたあとでデバッグを実行すると、一瞬黒いDOS窓が出て、
チラっとHelloWorldと出ただけですぐに消えてしまうのですが、これは仕方ないのでしょうか?
質問ばかりですみません・・・
0416デフォルトの名無しさん
2011/09/12(月) 23:29:08.290417396
2011/09/12(月) 23:29:19.90また、すれ違いだったようですみません。
統合開発環境って以外と難しいんですね
0418デフォルトの名無しさん
2011/09/12(月) 23:37:37.77#include <iostream>
using namespace std;
int main()
{
cout << "こんにちは世界";
while(1){}
}
こうしたら終わらない
表示されてる時間がチョット伸びる
Visual Studio 2010 Part16
http://hibari.2ch.net/test/read.cgi/tech/1312046969/l5
0420デフォルトの名無しさん
2011/09/13(火) 00:21:41.560421デフォルトの名無しさん
2011/09/13(火) 00:26:51.02K&R, ubuntu
0422355
2011/09/13(火) 00:43:39.77WindowsXPのコマンドプロンプトで、コンパイラがBorland c++ Compilerです。
>>360
改行はあまり関係ないみたいです。例えば次のプログラム
#include <stdio.h>
int main(void){
char a[8] = "A";
char b[8] = {'\0'};
char c = '\0';
sscanf(a, "%[B]%c", b, &c);
printf("b:%s.\n", b); /* 「b:.」と表示されるはず */
printf("c:%x.\n", c); /* 「c:0.」と表示されるはず */
return 0;
}
を実行すると、自分の環境では
b:.
c:41.
と出力されてしまいます。
0423396
2011/09/13(火) 01:25:39.51全然のびません・・・
>>418
ありがとうございまう。参考にしました
>>419
CLRを使うだけで若干こわいんですが・・
0424デフォルトの名無しさん
2011/09/13(火) 01:27:36.360425デフォルトの名無しさん
2011/09/13(火) 02:25:54.89統合開発環境は関係ないよ(ヘルプは便利かも)
コマンドラインでやるには、
パスがとおってるか、そういう問題を解決するべき
0426デフォルトの名無しさん
2011/09/13(火) 04:14:21.51なんでスレ違いだってわかっていながら延々話してんだ?
0427デフォルトの名無しさん
2011/09/13(火) 05:02:10.110428デフォルトの名無しさん
2011/09/13(火) 08:52:23.88char array[6] = "Apple";
ここで、printf("%p")で表示すると"array"と"&array"とで表示されるアドレスが同じになります。
"array"と"&array[0]"で表示される値が同じなのはなんとなく理解できるのですが、
"array"と"&array"で表示される値が同じになる理由がよく理解できません。
この二つの表記ってプログラム上どっちを書いても全く同じになるのでしょうか?
よろしくお願いします。
0429デフォルトの名無しさん
2011/09/13(火) 08:54:14.340430デフォルトの名無しさん
2011/09/13(火) 09:13:25.10http://c-production.com/contents/c/sec10.html
勉強中でココを見てます
配列についても解説してるよ
0431デフォルトの名無しさん
2011/09/13(火) 09:22:19.54素早いレスどうもです。
ただ申し訳ないのですが、こちら側の力不足で未だに理解できませんです...orz
「指した先の型」とは、"array""&array"の指している先の型ということでしょうか?
"array"が指している先の型はchar型のアドレス(配列の先頭アドレス)だと思うのですが、
"&array"が指している先の型とは何になるのでしょうか?
すみませんがよろしくです。
0432デフォルトの名無しさん
2011/09/13(火) 09:23:42.78ありがとうございます。
早速読ませていただきます!
0433デフォルトの名無しさん
2011/09/13(火) 09:31:48.050434デフォルトの名無しさん
2011/09/13(火) 09:44:58.91printf("%p", array)はarray配列のアドレスを出力
printf("%p", &array)はarray配列のアドレスを得てそれを出力
・・・同じ事だろ
0435デフォルトの名無しさん
2011/09/13(火) 09:48:55.42別人だけど
結局の所、そうゆう仕様だよって覚えるしか無いんですよね
0436デフォルトの名無しさん
2011/09/13(火) 09:49:53.86仕様でもなんでもなくて、単に同じ事をしてるだけじゃん
0437デフォルトの名無しさん
2011/09/13(火) 09:50:17.58違います
0438デフォルトの名無しさん
2011/09/13(火) 10:15:54.67printf("%p", &array + 1);
をしてみればわかるかも
0439デフォルトの名無しさん
2011/09/13(火) 10:31:21.66printf("%p¥n",*array+1);もね
それとそれぞれの+1を取った場合も出力してみるといいかもって
さっき紹介したページの受け売りだけどさ
多少理解出来たけど
何でそうなるのとか、この後どう使えばいいのかってのが全然浮かばない
0440デフォルトの名無しさん
2011/09/13(火) 11:00:49.05charは何を指し、printfは何を指すのか
説明書を見比べた方が早い
0441デフォルトの名無しさん
2011/09/13(火) 11:33:04.570442デフォルトの名無しさん
2011/09/13(火) 11:40:28.790443デフォルトの名無しさん
2011/09/13(火) 11:41:11.070444デフォルトの名無しさん
2011/09/13(火) 11:44:40.670445デフォルトの名無しさん
2011/09/13(火) 11:46:42.240446428
2011/09/13(火) 12:00:33.39レス本当に感謝です!
色々調べてみた結果、自分が何で悩んでいたのかが分かった気がします。
自分の混乱の原因を説明すると
「配列とは変数(小さな箱)を格納する大きな箱で、変数とは別個に実体を持つ」
という風に考えていた点だと思います。
「別個に実体を持つ」と考えたのは、ポインタと同一視していた為だと思います。
〜次〜
0447428
2011/09/13(火) 12:01:49.14「部屋に小さな箱が敷き詰めてあり、その一番先頭にある箱をAした場合、
この"箱群"の一番先頭にある箱のアドレス(array)は箱Aのアドレスであり、
この"部屋"の一番先頭にある箱のアドレス(&array)も箱Aのアドレスである。」
といった感じです。意味不かもしれません^^;
でも謎が少し解けました。皆さんご助言感謝です!
0448デフォルトの名無しさん
2011/09/13(火) 12:23:43.090449428
2011/09/13(火) 12:42:24.64箱群(array)
箱A == array
箱B == (array+1)
箱C == (array+2)
部屋(&array)
部屋Aの箱A == *(&array)
部屋Bの箱A == *(&array+1)
部屋Cの箱B == (*(&array+2)+1)
という風に理解しました。
未だしっかり理解できてるか分からないのに、意味不な例えをして
すみません^^;
0450デフォルトの名無しさん
2011/09/13(火) 12:48:24.620451デフォルトの名無しさん
2011/09/13(火) 13:06:06.06struct ___A {
char a0;
char a1;
char a2;
char a3;
};
struct ___A A;
printf("%p\n", &(A.a0) ); // printf("%p\n", aaa);
printf("%p\n", &A ); // printf("%p\n", &aaa);
こんなイメージであってますか
0452デフォルトの名無しさん
2011/09/13(火) 13:21:21.04実はコンソールアプリケーションでDOSプロンプト画面にhollow worldって表示することだよな
0453デフォルトの名無しさん
2011/09/13(火) 14:08:44.14難しく考えすぎ
0454デフォルトの名無しさん
2011/09/13(火) 14:34:30.750455デフォルトの名無しさん
2011/09/13(火) 15:41:13.31ああ、うん、ぴっちりつまってるから、最初の箱のアドレスは部屋のアドレスと同じ。
ちなみに、 arrayは配列の要素の型に対するポインタを生むけれど、&array は配列型のポインタを生む。
それを実感することはしばらくないかもしれないけれど、
&array という記述は、それが必要になるまでしないほうがいいと思う。
0456デフォルトの名無しさん
2011/09/13(火) 16:33:05.54&arrayの型は (char (*)[6])
いずれにしろ生成されるバイナリは一緒。
0457デフォルトの名無しさん
2011/09/13(火) 18:35:09.620458デフォルトの名無しさん
2011/09/13(火) 18:36:04.09基本的な事しか答えられないからって、スレ違いの質問に一生懸命答える必要は無い。
0459デフォルトの名無しさん
2011/09/13(火) 18:38:02.260460デフォルトの名無しさん
2011/09/13(火) 18:41:07.380461デフォルトの名無しさん
2011/09/13(火) 18:58:49.44こんにちはマイコンとシャープのポケコンと情報処理試験のテキスト買って勉強した方が早いよ
0462デフォルトの名無しさん
2011/09/13(火) 18:58:51.820463デフォルトの名無しさん
2011/09/13(火) 19:04:14.53配列のポインタ変換についてのルールは3つ。
�@式中の配列名は配列の最初の要素へのポインタとして扱われる
�A添え字は常にポインタへのオフセットと同じ
�B関数の引数宣言中の配列名は配列の最初の要素へのポインタとして扱われる
0464デフォルトの名無しさん
2011/09/13(火) 19:05:29.39ためせばいいやん。
その程度のプログラム書けないなら考えない方がいい。
0465デフォルトの名無しさん
2011/09/13(火) 19:17:16.21arrayで渡されるのは配列の最初の要素へのポインタ
&arrayで得られるのも配列の最初の要素へのポインタ
printfから見ればどちらも同じという事?
0466デフォルトの名無しさん
2011/09/13(火) 19:45:11.93>>>463
>arrayで渡されるのは配列の最初の要素へのポインタ
Yes.
>&arrayで得られるのも配列の最初の要素へのポインタ
No.
>
>printfから見ればどちらも同じという事?
Yes.
0467デフォルトの名無しさん
2011/09/13(火) 19:52:24.180468デフォルトの名無しさん
2011/09/13(火) 20:25:36.40規格ではそういう想定をしてないとは思うけど
0469460
2011/09/13(火) 20:26:08.22こんな結果だった gcc -O0
tasizan [2231050796]clock 1 4 9
kakezan [1190589036]clock 25.000000 36.000000 49.000000
掛け算の方が所要クロックが少なくて速かった。
掛け算のほうが2倍くらい速かった。
0470デフォルトの名無しさん
2011/09/13(火) 20:34:20.66array は配列だよ (>>428)
0471デフォルトの名無しさん
2011/09/13(火) 20:45:51.53int main()
{
char array[6] = "Apple";
printf("sizeof(array)=%d\n", sizeof(array));
printf("sizeof(&array)=%d\n", sizeof(&array));
printf("sizeof(*&array)=%d\n", sizeof(*&array));
printf("sizeof(&array[0])=%d\n", sizeof(&array[0]));
printf("sizeof(*&array[0])=%d\n", sizeof(*&array[0]));
return 0;
}
0472デフォルトの名無しさん
2011/09/13(火) 20:50:52.44例外(>>428)を除き、宣言時の型になる。
&arrayはそのままだったらポインタのサイズ
逆参照したら配列のサイズ
0473460
2011/09/13(火) 20:55:47.74足し算かとおもったら掛け算してた。なおした。
tasizan [1520466571]clock 2 4 6
kakezan [1150270199]clock 25.000000 36.000000 49.000000
やっぱり掛け算の方が速い。
足し算おせえーーーーーーーーーーwwwwwwwwwwwwwww
0474460
2011/09/13(火) 21:10:23.99話はかわって、乱数で、1か−1の乱数で、全部足していくと、できた波形がブラウンノイズになりますか。
とおもってやったら、なったけど、これは変だとおもった。
乱数があるていど周期的ってことだから乱数じゃないよ。っておもった。もし乱数だったら、すごく大きな風になったり、おおきなところで揺れ続けたりすることもあるはずだとおもったから。
そこで、すく乱数な乱数でも波がちゃんと範囲内に収まるように補正することが必要だとおもった。どうやればいいですか。
0475463
2011/09/13(火) 21:33:01.87配列のポインタ変換についてのルールは3つ。
�@式中の配列名は配列の最初の要素へのポインタとして扱われる
�A添え字は常にポインタへのオフセットと同じ
�B関数の引数宣言中の配列名は配列の最初の要素へのポインタとして扱われる
�@にも例外が3つある。後は全て配列の先頭要素へのポインタになる。
a. sizeofの対象になる (配列全体が対象)
b. &演算子の対象となる (配列全体が対象)
c. 初期化文字列 (char *)
0476デフォルトの名無しさん
2011/09/13(火) 21:36:40.12すく乱数ってなんですか?
0477デフォルトの名無しさん
2011/09/13(火) 21:40:24.21"array[0]" ・・・ �@→配列の先頭へのポインタ (char)
"&array" ・・・ a→配列そのものへのポインタ (char[6])
0479デフォルトの名無しさん
2011/09/13(火) 21:54:45.36サイトや参考書で良いのあったら教えてください
0480デフォルトの名無しさん
2011/09/13(火) 22:01:16.03凄くスレ違いです。
0481デフォルトの名無しさん
2011/09/13(火) 22:03:12.71独学でVBA(Excel)使って書いたプログラムをCに書き直したいのだが、
なにかいい、本とかサイトとかあれば教えてほしい。
Cに関しては「C言語プログラミング能力認定試験」2級程度には理解した。
今引っかかってるのは、Formの作成。ボタンやらコンボボックスやらを配置したアレ。
よろしくおながいします。
0482デフォルトの名無しさん
2011/09/13(火) 22:05:30.93C#かJavaがいいんじゃね
0483460
2011/09/13(火) 22:10:17.34ここは英語だったです
https://github.com/torvalds/linux/tree/master/Documentation/input
>>480
乱数はC言語じゃないのか…むずかしい(・_;ノシ
0484デフォルトの名無しさん
2011/09/13(火) 22:22:50.56フリーソフトをダウンロードすると、操作フォームが必ずあるけど
(コマンドプロンプト入力ではユーザーの大半が使えないと思う)
あれはC言語以外で書いてるのかな?
0485デフォルトの名無しさん
2011/09/13(火) 22:26:04.54Cの標準ライブラリにはGUIがないので
なんらかの外部ライブラリが必要です
0486デフォルトの名無しさん
2011/09/13(火) 22:30:46.60* Cソース mt19937ar.c ,
* その出力 mt19937ar.out ,
* および readme-file readme-mt.txt です。
使い方は、上記readme-mt.txtファイル(英語)を読んで下さい。
日本語による説明 readme-mt-jp.html
Mersenne Twister
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/mt19937ar.html
0487デフォルトの名無しさん
2011/09/13(火) 23:28:20.41Windowsの話なら、APIを使えばCでも書けるけど割りと面倒。
>>483
例えばあんたは、不思議の国のアリスの言葉遊びについて英語の初心者板で質問するのか?
つまり、そういうことだ。
0488460
2011/09/14(水) 00:57:21.16gtkだからC言語だからprontfもつかえるしスタジオ.hも動くからQtとかよりCっぽくてGTKいいとおもいます。おすすめ。
さっきの一億回のやつをGUIにしたみました GTK+3ってのをリンクするようになってるます
a.c
http://codepad.org/5KZOP3LW
a.glade
http://codepad.org/gYy1IuPZ
Makefile
http://codepad.org/54Ujrt6i
3こを同じとこにいれてmakeってやれば作れるた
0489460
2011/09/14(水) 00:58:26.70ありがとうございました今度やってみます
>>487
不思議の国のアリス読んだこと無いです。ありがとうございます。こんど読んでみます。
ねま0す
0490デフォルトの名無しさん
2011/09/14(水) 03:50:04.860491デフォルトの名無しさん
2011/09/14(水) 03:57:18.310492デフォルトの名無しさん
2011/09/14(水) 04:55:04.510493デフォルトの名無しさん
2011/09/14(水) 08:03:41.670494デフォルトの名無しさん
2011/09/14(水) 08:18:12.00理解できん
0495デフォルトの名無しさん
2011/09/14(水) 09:02:55.02解析する技能持ってる人なら見た目の動作なら簡単に再現できるんじゃね?
0496428
2011/09/14(水) 09:07:37.29レス付け足して頂いた方々ありがとうございますです!
コード上での配列名の取り扱いに関してたくさん誤解してる部分が
あったと認識できました。後"&"なども何も考えず使ってました・・・(;;
もっとデータ型とかポインタ、演算子の働き等をしっかり意識して勉強していこうと思います!
0497デフォルトの名無しさん
2011/09/14(水) 09:16:45.82Borlandとgccでsizeof(&array)の値が異なるけど何故でしょうか?
コンパイラオプション?
[Borland C++ 5.5.1 for Win32]
sizeof(array)=6
sizeof(&array)=6
sizeof(*&array)=6
sizeof(&array[0])=4
sizeof(*&array[0])=1
Target: i686-w64-mingw32
Thread model: win32
gcc version 4.4.3 (GCC)
sizeof(array)=6
sizeof(&array)=4
sizeof(*&array)=6
sizeof(&array[0])=4
sizeof(*&array[0])=1
0498デフォルトの名無しさん
2011/09/14(水) 09:39:22.290499デフォルトの名無しさん
2011/09/14(水) 09:54:16.76試しにint[5]の配列作ってsizeofしたら20になってた。
__int64とかは4だったから、配列の時にだけ指してる先のサイズが返るみたい。
0500デフォルトの名無しさん
2011/09/14(水) 10:20:48.220501デフォルトの名無しさん
2011/09/14(水) 10:24:19.57sizeof(&array)=4
だった。
旧Borlandだけ違う挙動をするのかな?
0502デフォルトの名無しさん
2011/09/14(水) 11:23:52.03DOS 16Bit用でそういうメモリーモデルあるのかな?
0503デフォルトの名無しさん
2011/09/14(水) 11:35:22.04Watcom C/C++32 Compile and Link Utility Version 11.0
Copyright by Sybase, Inc., and its subsidiaries, 1988, 1997.
All rights reserved. Watcom is a trademark of Sybase, Inc.
wcc386 bug.c
Watcom C32 Optimizing Compiler Version 11.0
Copyright by Sybase, Inc., and its subsidiaries, 1984, 1997.
All rights reserved. Watcom is a trademark of Sybase, Inc.
bug.c: 6 lines, included 476, 0 warnings, 0 errors
コードサイズ: 34
WATCOM Linker Version 11.0
Copyright by Sybase, Inc., and its subsidiaries, 1985, 1997.
All rights reserved. Watcom is a trademark of Sybase, Inc.
オブジェクトファイルを読込み中
ライブラリを検索中
a Windows NT character-mode 実行可能 を作成中
D:\work>bug
sizeof(&array)=4
D:\work>
0504デフォルトの名無しさん
2011/09/14(水) 12:07:43.74やはりボーランド系実装特有の挙動か
0505デフォルトの名無しさん
2011/09/14(水) 12:14:22.73sizeof(&array)=6
C:\>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
0506デフォルトの名無しさん
2011/09/14(水) 12:17:31.740507デフォルトの名無しさん
2011/09/14(水) 12:27:16.42Copyright (C) Microsoft Corporation. All rights reserved.
sizeof(&array)=4
この辺りで変わった?
0508デフォルトの名無しさん
2011/09/14(水) 12:33:02.39LSI C-86 Ver.3.30だと2になるw
D:\LSIC86\BIN>lcc test.c
lld @link.i
D:\LSIC86\BIN>test.exe
sizeof(array)=6
sizeof(&array)=2
sizeof(*&array)=6
sizeof(&array[0])=2
sizeof(*&array[0])=1
0509デフォルトの名無しさん
2011/09/14(水) 12:50:19.86sizeof(array)=6
sizeof(&array)=4
sizeof(*&array)=6
sizeof(&array[0])=4
sizeof(*&array[0])=1
0510デフォルトの名無しさん
2011/09/14(水) 13:04:31.73(C) Copyright Microsoft Corporation, 1992
C:\C700\BIN>
sizeof(array)=6
sizeof(&array)=6
sizeof(*&array)=6
sizeof(&array[0])=2
sizeof(*&array[0])=1
Borland Turbo C++ Version 4.0
sizeof(array)=6
sizeof(&array)=6
sizeof(*&array)=6
sizeof(&array[0])=2
sizeof(*&array[0])=1
0511デフォルトの名無しさん
2011/09/14(水) 13:10:35.46Borlandのコンパイラの内部処理は10年以上同じで変わってないという話を聞いた事がある。
Cの仕様書ではどうなってんの?
これだけバラバラだと実装依存かな。
0512デフォルトの名無しさん
2011/09/14(水) 14:03:28.190513デフォルトの名無しさん
2011/09/14(水) 14:20:15.350514デフォルトの名無しさん
2011/09/14(水) 16:01:16.07__int64 i = 0;
printf("%d\n", sizeof(&i));
としたら返ってきたのは4だった。
参照先のサイズが返るのは配列名の時だけみたい。
Borland系のコンパイラだけsizeof(&配列名)した時にsizeof(*(&配列名))になってしまうという事か?
0515デフォルトの名無しさん
2011/09/14(水) 16:19:00.830516デフォルトの名無しさん
2011/09/14(水) 16:53:35.64sizeof(array)=6
sizeof(&array)=6
sizeof(*&array)=6
sizeof(&array[0])=2
sizeof(*&array[0])=1
sizeof(&c)=2
Borland Turbo C++ 4.0 (1995)
sizeof(array)=6
sizeof(&array)=6
sizeof(*&array)=6
sizeof(&array[0])=2
sizeof(*&array[0])=1
sizeof(&c)=2
Borland C++ Compiler
sizeof(array)=6
sizeof(&array)=6
sizeof(*&array)=6
sizeof(&array[0])=4
sizeof(*&array[0])=1
sizeof(&c)=4
MinGW+GCC 4.5.2
sizeof(array)=6
sizeof(&array)=4
sizeof(*&array)=6
sizeof(&array[0])=4
sizeof(*&array[0])=1
sizeof(&c)=4
0517デフォルトの名無しさん
2011/09/14(水) 16:54:53.190518デフォルトの名無しさん
2011/09/14(水) 17:14:52.100519デフォルトの名無しさん
2011/09/14(水) 17:16:38.730520デフォルトの名無しさん
2011/09/14(水) 17:18:50.30なんでそんな結論になるんだ?
一致するコンパイラがないってことは実装依存ってことだから、
BCCだけおかしいというよりsizeofの結果に期待したコードは書かない方がいいってことじゃね
0521デフォルトの名無しさん
2011/09/14(水) 17:22:39.57BCCだけ一貫してないから。
他のコンパイラはアドレッシングしてる先のサイズか、ポインタのサイズを返してるが
BCCだけは配列だけ違う挙動をしてる。
0522デフォルトの名無しさん
2011/09/14(水) 17:30:28.09ちょっと自信ないからエロイ人の解説待ち
0523デフォルトの名無しさん
2011/09/14(水) 17:31:12.40って、おかしくねえか
0524デフォルトの名無しさん
2011/09/14(水) 17:33:43.47仕様書のsizeofの部分だけ書いてよ。
持ってないから見てみたい。
それとも何処かで見られるのかな?
仕様書ってどのCの仕様書?
0525デフォルトの名無しさん
2011/09/14(水) 17:34:08.26p = &array;
で、右辺と左辺のサイズが違うとかw
0526デフォルトの名無しさん
2011/09/14(水) 17:34:23.62sizeof(&array)=6
sizeof(&array+1)=4
0527デフォルトの名無しさん
2011/09/14(水) 17:38:37.21&arrayって何を指してるの?
0528デフォルトの名無しさん
2011/09/14(水) 17:43:28.44>>475
0529デフォルトの名無しさん
2011/09/14(水) 17:45:08.290530デフォルトの名無しさん
2011/09/14(水) 17:46:54.690531デフォルトの名無しさん
2011/09/14(水) 18:40:35.30普通は *array++ = とかだろ。 arrayだろ。
&arrayなんてコンパイル通さないでワーニングにしてくれた方がありがたいわ。
0532デフォルトの名無しさん
2011/09/14(水) 19:21:08.23char array[6];
char *p=&array;
error C2440: '初期化中' : 'char (*)[6]' から 'char *' に変換できません。
ってなるな。
エラーレベルいじるか、キャストすれば通るんだろうけど。
0533デフォルトの名無しさん
2011/09/14(水) 19:26:18.23型を一致させないと
0534デフォルトの名無しさん
2011/09/14(水) 19:27:59.95当たり前だ。
もう一回ポインタ勉強し直してこい。
char (*p)[6];
char array[6];
p = &array;
0535デフォルトの名無しさん
2011/09/14(水) 20:57:10.280536デフォルトの名無しさん
2011/09/14(水) 21:02:41.160537デフォルトの名無しさん
2011/09/14(水) 21:15:40.140538デフォルトの名無しさん
2011/09/14(水) 23:44:48.940539デフォルトの名無しさん
2011/09/14(水) 23:50:47.64グローバル、ファイル、関数、ブロック
0540デフォルトの名無しさん
2011/09/14(水) 23:56:10.460541デフォルトの名無しさん
2011/09/14(水) 23:57:07.89Main.cからRib.hをincludeし、Cit.cで定義されているグローバル変数を呼び出したいのですが、
undefined reference to〜コンパイル時にエラーを吐きます。
どうすればコンパイルすることができるのでしょうか?
0542デフォルトの名無しさん
2011/09/15(木) 00:02:28.12OperaTorで落とせたよ
0543デフォルトの名無しさん
2011/09/15(木) 00:22:31.870544デフォルトの名無しさん
2011/09/15(木) 00:23:20.68昔は警告で、エラーじゃなかったんだがな。
>543
0546デフォルトの名無しさん
2011/09/15(木) 00:47:12.39Cだとワーニングも出ないけど、
C++だとエラーになるってことだろ。
0547デフォルトの名無しさん
2011/09/15(木) 00:47:34.66main()
{
struct S {char s[9999];};
void f(struct S* a) {printf("%s\n", a->s);}
struct S a = {"hello world"};
int i;
for(i=0; i < 5; i++) {
f(&a);
}
}
関数の中で関数定義すると、ソースファイル中でさらに細かくスコープを限定できて便利だと
思うんだけど、これってGCCの方言かもしれないって最近気づいた。
もしかして構造体の方も方言ですか?(自信ない)
0548デフォルトの名無しさん
2011/09/15(木) 00:51:41.01C++だとエラーになるの?
0549デフォルトの名無しさん
2011/09/15(木) 00:54:52.93sizeof(array) = 6
sizeof(&array) = 4
sizeof(*&array) = 6
sizeof(&array[0]) = 4
sizeof(*&array[0]) = 1
ポインタ4byteでした。
OSが64bit版だとやっぱり8とかになるんですかね?
0550デフォルトの名無しさん
2011/09/15(木) 01:02:35.36試した。
http://codepad.org/zw8jSGUC
int main(void)
{
char array[6];
char *p=&array;
return 0;
}
Line 4: error: cannot convert 'char (*)[6]' to 'char*' in initialization
コンパイラのエラーレベル設定でなんとでもなりそうだけど。
0551デフォルトの名無しさん
2011/09/15(木) 01:18:38.130552デフォルトの名無しさん
2011/09/15(木) 01:22:16.03warning C4047: '初期化中' : 間接参照のレベルが 'char *' と 'char (*)[6]' で異なっています。
どっちにしろ、型宣言を正しくすれば、出ない。
0553デフォルトの名無しさん
2011/09/15(木) 06:30:03.870554デフォルトの名無しさん
2011/09/15(木) 06:56:34.76↓を持ってたので使おうと考えてるのですが問題無いですか?
もっといい本が出てたりしてますか?
http://www.amazon.co.jp/dp/4320026926
0555デフォルトの名無しさん
2011/09/15(木) 07:19:30.460556デフォルトの名無しさん
2011/09/15(木) 07:49:03.72だから、Cなら警告、C++ならエラーだろ。
0557デフォルトの名無しさん
2011/09/15(木) 08:04:52.08どっちみち型が合ってない事に変わりはない。
0558デフォルトの名無しさん
2011/09/15(木) 08:18:03.570559デフォルトの名無しさん
2011/09/15(木) 08:50:15.08こういう配列の要素数固定のポインタ定義って使う場面ある?
自分はchar *でなんとかしちゃうけど。
0560デフォルトの名無しさん
2011/09/15(木) 08:53:42.710561デフォルトの名無しさん
2011/09/15(木) 09:41:57.12どういう事か説明しろw
0562デフォルトの名無しさん
2011/09/15(木) 11:03:32.24固定フォーマットのテーブルを渡す時の引数とかに使うかな。
別に無くても書けるし、趣味の範囲じゃね?
0563デフォルトの名無しさん
2011/09/15(木) 12:17:02.35static char s[10][6]={{…;
char (:*p)[6]=&s[x];
0564デフォルトの名無しさん
2011/09/15(木) 15:47:16.37問題が解けるようになるには、どうしたらいい??
0565デフォルトの名無しさん
2011/09/15(木) 15:52:03.72勉強終わってないからやり直せ
0566デフォルトの名無しさん
2011/09/15(木) 16:40:59.96他人のソースを読む。
そのソースを自分流に書き換えてみる。
0567デフォルトの名無しさん
2011/09/15(木) 17:18:12.39なにも示さずに質問できる神経を直せ。
0568デフォルトの名無しさん
2011/09/15(木) 18:14:39.060569デフォルトの名無しさん
2011/09/15(木) 18:32:48.86たとえば、WindowsのSORTコマンドは、フィールドではなく、文字番号でソートできる(/+n)
やっぱり、フィールドでソートしたい場合がよくあるから不満だ。
そんな不満があったら、自作するしかないだろ
0570デフォルトの名無しさん
2011/09/15(木) 19:45:03.48あれってどこに定義してます? ヘッダかソースかいつも悩む
0571デフォルトの名無しさん
2011/09/15(木) 19:48:53.99awk使えば2分でできるよ。
0572デフォルトの名無しさん
2011/09/15(木) 19:50:25.470573デフォルトの名無しさん
2011/09/15(木) 20:20:41.580574デフォルトの名無しさん
2011/09/15(木) 20:25:12.400575デフォルトの名無しさん
2011/09/15(木) 21:59:01.12特定の関数の中でしか使わないなら定義はその中でも。
0576デフォルトの名無しさん
2011/09/15(木) 23:08:05.45>できるだけスコープは狭く。
これ言わんとするところはわかるんだけどさ、
究極に突き詰めると、即値になるよね。
0577デフォルトの名無しさん
2011/09/16(金) 01:14:40.84その通りだけどさ、なら、なんでC++逝かないの?
0578デフォルトの名無しさん
2011/09/16(金) 01:14:46.32そのリテラルがそこでしか利用されないなら即値で良いんじゃないの?
0579デフォルトの名無しさん
2011/09/16(金) 01:22:51.190580デフォルトの名無しさん
2011/09/16(金) 01:44:56.10C++みたいなネーム空間が無いので、Cだとプリフィックスでそれと同じことをするから、
Cではなるべく、ソースの外にまでスコープを広げるのは節約した方がいいと思うわ。
ソース内でのスコープは、構造体の定義なら、むしろソース内でならグローバル定義した方が便利なんじゃね?
関数内でローカルに定義するよりも。
0581デフォルトの名無しさん
2011/09/16(金) 09:05:57.940582デフォルトの名無しさん
2011/09/16(金) 09:49:24.950583デフォルトの名無しさん
2011/09/16(金) 10:51:07.82for(int i = 0; i < N; i++){
for( int j = i+1; j < N; j++){
r = sqrt((x[i]-x[j])*(x[i]-x[j]) +
(y[i]-y[j])*(y[i]-y[j]) +
(z[i]-z[j])*(z[i]-z[j]))+0.5;
XY[r] += b[i]*b[j];
}
}
ボトルネックはここなのですが、ここを高速化する書き方はないでしょうか?
x,y,zはdouble, bはintです。
0584デフォルトの名無しさん
2011/09/16(金) 10:57:50.53rは実数?
0585デフォルトの名無しさん
2011/09/16(金) 11:10:57.09ごめんなさい、書き忘れました
rはインデックスなのでintです
0586デフォルトの名無しさん
2011/09/16(金) 12:08:30.527% 程度高速化
for(i=0;i<N;i++)
{
double bi, xi, yi, zi, xij, yij, zij;
bi=b[i];
xi=x[i];
yi=y[i];
zi=z[i];
for(j=i+1;j<N;j++)
{
xij=xi-x[j];
yij=yi-y[j];
zij=zi-z[j];
r = sqrt(xij*xij+yij*yij+zij*zij)+0.5;
XY[r] += bi*b[j];
}
}
0587デフォルトの名無しさん
2011/09/16(金) 12:11:13.99>>586 の bi は整数型に直しておいてね
0588デフォルトの名無しさん
2011/09/16(金) 12:30:38.15x[i]-x[j]が
・x[n]-x[m] (i=n, j=m)のときと、
・x[m]-x[n] (i=m, j=n)のときは、
符号が逆になるだけ。
0589デフォルトの名無しさん
2011/09/16(金) 12:32:04.530590デフォルトの名無しさん
2011/09/16(金) 12:38:11.20キャッシュのミスヒットが減るから
0591デフォルトの名無しさん
2011/09/16(金) 13:11:32.54半分くらいは計算しなくていいってことじゃないのか
0592デフォルトの名無しさん
2011/09/16(金) 13:12:46.790593デフォルトの名無しさん
2011/09/16(金) 13:15:18.530594デフォルトの名無しさん
2011/09/16(金) 13:38:18.260595デフォルトの名無しさん
2011/09/16(金) 16:12:49.97回数がある程度分かっているんならアンロールすると効果的だぞ
条件分岐でキャッシュをフラッシュしてしまうバカCPUがまだ多い
分岐予測と投機実行は実際にベンチマークを取ってみればいいが
本当に遅いぞ
0596デフォルトの名無しさん
2011/09/16(金) 16:21:15.100597デフォルトの名無しさん
2011/09/16(金) 17:00:08.820598デフォルトの名無しさん
2011/09/16(金) 18:01:04.950599デフォルトの名無しさん
2011/09/16(金) 18:02:49.940600デフォルトの名無しさん
2011/09/16(金) 18:11:37.71どうでしょうか?
非再帰、再帰でしょ。自分流のクイックソートとか可能なの
0601デフォルトの名無しさん
2011/09/16(金) 20:34:01.260602デフォルトの名無しさん
2011/09/16(金) 20:47:48.18あんなの人手で最適化してたらどれだけ時間がかかるかわからん
0603デフォルトの名無しさん
2011/09/16(金) 20:54:35.37別ファイルのinline関数を使うことはできますか?
0604デフォルトの名無しさん
2011/09/16(金) 21:09:58.430605デフォルトの名無しさん
2011/09/16(金) 21:13:46.51コピペですむうちは、ベタ書きしてればいいんじゃねの
量が多くなってきたら、その時考えればいいような
0606デフォルトの名無しさん
2011/09/16(金) 22:05:50.07最適化オプションってなんですか?それってコードと関係ありますか?
Cygwin gcc ですが・・最適化ってどうやってやるんですか?
C言語を勉強してC言語マスター、C言語文法整理の達人と言われてますが
コンパイラとかよくわからないんですが・・・文法書にのってない・・・
>>602
フローチャートとかのフローですか?解析って何の解析ですか?
0607デフォルトの名無しさん
2011/09/16(金) 22:12:39.17よーするに機械語とか、言語のアセンブリじゃん
どんな言語でも結局CPUへの命令列作ってるだけだから、
無駄なく無理なく機械語吐けるのが最適化された言語解釈器、つまりはコンパイラだよ
0608デフォルトの名無しさん
2011/09/16(金) 22:14:04.150609デフォルトの名無しさん
2011/09/16(金) 22:14:20.28gcc オプション でぐぐればいくらでも出てくる
テキストも英文だけど付いてたはずだけどなあ
フロー解析とはプログラムの実行過程をシミュレートしてCPUに都合の良いように
命令を並べ替えてしまう事
元のプログラムのフレーバーがすっかり消えてしまう場合もしばしば
0610デフォルトの名無しさん
2011/09/16(金) 22:16:25.400611デフォルトの名無しさん
2011/09/16(金) 22:24:08.07んじゃあAOTのおはなし聞かせてくれよ
0612デフォルトの名無しさん
2011/09/16(金) 22:24:22.33いやforやらwhileやらprintfやら関数は何でもしってるって意味です・・・
コンパイラとか解析とかよくわからないです。自分はメモ帳で言語書いてる
だけなんで。
質問なんですが、機械語に法則性のある動きをしたものを、言語にまとめたのが
プログラミング言語ですよね?言語作るときは機械語を理解してないとだめなん
ですか?機械語はどんなCPUでも一緒ですよね?
0613デフォルトの名無しさん
2011/09/16(金) 22:28:41.430614デフォルトの名無しさん
2011/09/16(金) 22:28:50.73機械語がどんなCPUでも同じわけないだろ
x86は上位互換性はあるけどな(完全ではないけど)
機械語を知らなくても高速に実行できて開発期間も短縮出来、
バグも取りやすいようにしたのがプログラミング言語
もちろん機械語を知っていた方がクリティカルな部分を直接機械を
叩いて実行させなければならない場合もある(ドライバとか特にね)
0615デフォルトの名無しさん
2011/09/16(金) 22:31:59.70「移植性の高さ」な
C言語はその低レベルさにも関わらず移植性が高い
だからLinuxがこれだけいろんなハードウェアで広まった
0616デフォルトの名無しさん
2011/09/16(金) 22:32:10.85でもどんなパソコンにもC言語使えますよね?マザーボールの種類は
多様ですが機械語の法則性の共通の上でC言語って作られたってこと
でOKですか?
0617デフォルトの名無しさん
2011/09/16(金) 22:36:15.820618デフォルトの名無しさん
2011/09/16(金) 22:36:29.020619デフォルトの名無しさん
2011/09/16(金) 22:41:41.820620デフォルトの名無しさん
2011/09/16(金) 22:54:54.25それをオブジェクトパッケージにしたのがマザーボールというパソ
コンの部品になると思ってるんだが間違いですか?
だからパソコンのブレインであるCPUの機械語はCPUによって違うと
思うんですが、マザーボールの開発ってのはどうやってするんですか?
0621デフォルトの名無しさん
2011/09/16(金) 22:56:07.960622デフォルトの名無しさん
2011/09/16(金) 23:08:21.38機械語を理解してないとマザーボールは作れないんですか?
0623デフォルトの名無しさん
2011/09/16(金) 23:16:39.70http://www.google.co.jp/search?q=%E3%83%9E%E3%82%B6%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%AB&tbm=isch
がんばれば作れないことはないと思った
機械語の知識は不要ですね
0624デフォルトの名無しさん
2011/09/16(金) 23:20:29.56マザーボード自作するにはどんな知識いりますか?
0625デフォルトの名無しさん
2011/09/16(金) 23:27:18.440626デフォルトの名無しさん
2011/09/16(金) 23:29:14.590627デフォルトの名無しさん
2011/09/16(金) 23:29:57.10で機械語の知識いるでしょ?
0628デフォルトの名無しさん
2011/09/16(金) 23:31:25.53電気工学一般の知識が必要。
一人で自作できるのはおそらくポケコンのマザボあたりまでで、
それ以上のものとなれば高周波回路とか高度な電磁気学とかも必要になる。
はっきり言えば、今のレベルのマザボを一人で自作するのは無理。
0629デフォルトの名無しさん
2011/09/16(金) 23:36:21.81やっぱりか・・・
所詮C言語なんてツールなんだよな・・・
俺は根源的なものがつくりたい・・
0630デフォルトの名無しさん
2011/09/16(金) 23:42:02.95forもwhileも関数じゃないだろ。
0631デフォルトの名無しさん
2011/09/16(金) 23:46:23.370632デフォルトの名無しさん
2011/09/16(金) 23:48:55.030633デフォルトの名無しさん
2011/09/17(土) 00:47:43.67論理回路を形而上、実装を形而下というなら根源的なモノは論理回路の理論、すなわち数学のブール代数あたり。
とあるアルゴリズムと形而上、そのC言語での実装を形而下とするならやはり根源的なモノは数学になる。
理論と実装、その二つの形而上と形而下の組み合わさったモノである形も、
やはり現実世界においては根源というしかない。
だからこそ、根源を生成できるような人間は一握りの、数十年に一度の天才に限られている。
コンピュータの出来る以前にその限界を示したチューリングのように。
0634デフォルトの名無しさん
2011/09/17(土) 00:54:53.91返答ありがとうございました
結論から言うと自分のPCとコンパイラでは逆に7%ほど遅くなりました
XY[r]を仮にXY[100]などに変えたところ速度が飛躍的に上がることは確認していたのでインデックスの参照に何か遅くする要因があるとは思っていましたが、おかげで理由がわかりました
参照を減らして、sqrt内の計算量も減らしても遅くなっているのでこれはコンパイラの設定の問題かと思います
ちなみにdouble bi~zij;の部分はループの外で行いました
>>595
回数はデータによって異なるので、一番回すのがこのくらいです。
MMXは後々インテルコンパイラでコンパイルするときに勝手にやってくれそうなので
いまはやるつもりはないです。
0635デフォルトの名無しさん
2011/09/17(土) 02:08:27.53入門の域を超えているから仕切り直すなら最適化スレがお勧め。
rの値の範囲がどの辺りか判らんけど、誰かが書いていた通りsqrt()は省略できる可能性が高いね。
あと、メモリ空間との相談になるけどb[i]*b[j]を予め計算しておくとか。
0636デフォルトの名無しさん
2011/09/17(土) 03:41:53.52ありがとうございます、そっちでも質問してみます
rの値は最大で200000くらいです、計算量が10億回なのに対して、
rの最大値がその程度なのでここで計算数を減らしています
r^2でかなりの大きさになるので、sqrtをテーブル化するような方法も厳しいかと思います。
またsqrtの精度を下げて四則演算だけで行う方法も考えてみましたが、これも余計に時間がかかってしまいそうです。
0637デフォルトの名無しさん
2011/09/17(土) 11:35:27.43知識よりも常識とコミュ力とコネだな
しゅうかつがんばってください
0638デフォルトの名無しさん
2011/09/17(土) 12:22:50.70統計に見えるけど。
0639デフォルトの名無しさん
2011/09/17(土) 12:35:08.81ソロバンや指を折って数えるやり方も同じ。
高級言語って い+ろ をAと、は+に をBと置きかえて
さらにA+Bを Δと置き換えてって繰り返してるだけだし
置き換え方式や細かいルールが違うからソースを変えないと動かないけど、やってることは一緒
0640デフォルトの名無しさん
2011/09/17(土) 12:38:01.510641デフォルトの名無しさん
2011/09/17(土) 12:38:51.52どう考えてもどれもが一緒なわけがない
0642デフォルトの名無しさん
2011/09/17(土) 12:40:52.18だれか突っ込んでやれよ
デカくて巨大で手に負えないelephantな実装かよ
0643デフォルトの名無しさん
2011/09/17(土) 12:50:17.970644デフォルトの名無しさん
2011/09/17(土) 12:56:51.87Neumann
最初の標本は明治時代初期に横須賀で発見され、ドイツのお雇い外国人ハインリッヒ・エドムント・ナウマン
(Heinrich Edmund Naumann: 1854年-1927年)によって研究、報告された[2]
ナウマンゾウ - Wikipedia
ノイマン型の名は、最初にこれを広めたEDVACに関する報告書 First Draft of a Report on the EDVAC
の著者がジョン・フォン・ノイマン(ひとり)になっていることに由来
ノイマン型(-がた、von Neumann architecture)
ノイマン型 - Wikipedia
0645デフォルトの名無しさん
2011/09/17(土) 13:01:09.52原子配置です、これを複数のデータついて比較することで内部構造がわかります
0646デフォルトの名無しさん
2011/09/17(土) 16:13:24.30ってただの配列のインデックスなんだよね?
そもそも XY[] を XY[(x[i]-x[j])][(y[i]-y[j])][(z[i]-z[j])] の三次元配列にすれば委員で内科医?
0647デフォルトの名無しさん
2011/09/17(土) 16:51:57.75いまだにこういうアホがいるんだね
0648デフォルトの名無しさん
2011/09/17(土) 16:58:09.05おまえ稀に道に転がってる虫を見るような目で見られないか?
0649デフォルトの名無しさん
2011/09/17(土) 16:59:11.82メモリ使用量の概算出してみてよ
0650デフォルトの名無しさん
2011/09/17(土) 17:01:47.650651デフォルトの名無しさん
2011/09/17(土) 17:03:22.97もはや実体じゃなくて定義扱いってことで
0652デフォルトの名無しさん
2011/09/17(土) 17:05:19.970653デフォルトの名無しさん
2011/09/17(土) 17:08:14.95おりこうさんなコンパイラなら纏めてくれるかもしれんけど
0654デフォルトの名無しさん
2011/09/17(土) 21:57:53.13いいよ、おれは
0655デフォルトの名無しさん
2011/09/17(土) 23:48:34.82なにがある?
0656デフォルトの名無しさん
2011/09/17(土) 23:50:22.030657デフォルトの名無しさん
2011/09/17(土) 23:57:43.02linuxだとデバイスファイルというのでwin32apiよりは
簡潔にディスプレイへの描画等できるとききました。
例えば指定ピクセルの色を○○に変更とかも
簡素に実現可能なんでしょうか?
ライブラリ次第だろ。
0659デフォルトの名無しさん
2011/09/17(土) 23:59:53.69簡単だよ。端から塗り潰す位は。
0660デフォルトの名無しさん
2011/09/18(日) 00:03:37.62目的は並列計算で円周率の計算をする課題があるのですが
再帰では並列化ができそうにないからです
再帰で並列化できる方法でも構いません
何かいいものはありませんか?
0661デフォルトの名無しさん
2011/09/18(日) 00:04:30.93もしよかったら何と言うデバイスファイルを利用するかだけでも
ヒントを頂きたいです
0662普通は、1からその数までの積と言う
2011/09/18(日) 00:12:09.93階乗を他人に説明することを考えて、
その通り実装すればいいよ。
0663デフォルトの名無しさん
2011/09/18(日) 00:16:09.83/dev/fb*
0664デフォルトの名無しさん
2011/09/18(日) 00:17:16.13ありがとうございます
さっそくトライしてみようと思います
0665デフォルトの名無しさん
2011/09/18(日) 00:19:09.48n*(n-1)*(n-2)*(n-3)・・・*(n-(n-1))
という感じでやって
a = n*(n-1)
b = (n-2)*(n-3)
c = a*b
みたいに実装するということですかね?
0666デフォルトの名無しさん
2011/09/18(日) 00:42:28.96計算する階乗ってどれくらい? n=100位?として long ans[100+1]={0}; を利用。
long calc(int n){
if(ans[n]>0) return ans[n];
if(n==0) return ans[n]=1;
return ans[n]=n*calc(n-1);
}
なんてのはどうかな?
ans[]を更新する時に排他制御とか必要になると思うけど。
0667デフォルトの名無しさん
2011/09/18(日) 00:52:00.02nは10000以上になりますね
すいませんまだはじめったばっかなので再帰とどう違うかわかりません
0668666
2011/09/18(日) 00:58:08.23いや再帰だよw
0669デフォルトの名無しさん
2011/09/18(日) 00:59:58.63ですよねw
これは並列化が可能なんでしょうか?
0670デフォルトの名無しさん
2011/09/18(日) 01:03:17.580671デフォルトの名無しさん
2011/09/18(日) 01:05:19.91なるほどやっと理解しましたわ
ありがとうございます
0672デフォルトの名無しさん
2011/09/18(日) 01:07:48.69並列化できるのか・・・?
0673デフォルトの名無しさん
2011/09/18(日) 01:11:39.601)1から10000までの数字が入った、大きさ10000の配列を作る
2)その配列をシャッフルする
3)その配列をたとえば4等分して、小配列を四つ作る
4)小配列の数値をそれぞれ掛け算する(ここら辺が並列化)
5)求めた小配列の掛け算の値を、さらにまとめて掛け算する
0674デフォルトの名無しさん
2011/09/18(日) 01:13:24.53なるほど、そしたら負荷も分散してよさそうですね
ありがとうございます
0675デフォルトの名無しさん
2011/09/18(日) 01:13:42.12乗算の計算量がO(1)とするとn!はO(n)で求まる
並列化して速くできるとすればO(log(n))とかO(n^1/k)とかにしなければならないんだけど
無理にスレッドなりMPIなり使って並列化しちゃうと,同期ポイントで時間食うか,
「N個の部分問題に分割してN個を統合する」みたいな無駄なことしそう
0676デフォルトの名無しさん
2011/09/18(日) 01:14:24.03まぁ、並列にするのはそこじゃないだろ。
0677デフォルトの名無しさん
2011/09/18(日) 01:57:41.56ガンマ関数の(関数電卓などの)計算機向けの近似として次の式がある。
http://upload.wikimedia.org/math/e/2/f/e2f4c4d72dfdb83a6c86fe6a85d9ac58.png
これは、次と同等である。
http://upload.wikimedia.org/math/9/9/3/99368b5db572d18cdf46127879c0fd69.png
これらはスターリングの公式を組み替えて、その結果生じる冪級数と双曲線正弦関数のテイラー展開の間の合致を観察することで得られる。
この近似は z の実数部が 8 以上のとき、小数点以下 8 桁を超える精度を持つ。
2002年、Robert H. Windschitl がリソースの制限された計算機(電卓など)でのそれなりの正確性を持った近似としてこれを示した(参考文献の 'Toth' 参照)。
スターリングの近似 - Wikipedia
0678デフォルトの名無しさん
2011/09/18(日) 02:00:17.12スターリングの公式は以下の級数(スターリング級数)の近似(初項で打ち切ったもの)である。
http://upload.wikimedia.org/math/b/6/c/b6cfe52ef1c859645d3ce349d67b11bc.png
としたとき、省かれた級数はその最初の項とそれ以降が相殺するように漸近していく。これは漸近展開の一例である。
以下のような階乗の対数の漸近展開も「スターリング級数」と呼ぶ。
http://upload.wikimedia.org/math/c/c/d/ccd0853b73b07db5881c2c1ea0618f65.png
この場合、誤差は打ち切った級数の初項と同じ符号で同程度の大きさであることが知られている。
スターリングの近似 - Wikipedia
0679デフォルトの名無しさん
2011/09/18(日) 02:03:18.87階乗計算するのに十分だろ。これならループも再帰をいらないよ。
0680デフォルトの名無しさん
2011/09/18(日) 03:48:18.27目的は円周率を求めることなのに8桁精度でいいの?
0681デフォルトの名無しさん
2011/09/18(日) 04:02:39.560682デフォルトの名無しさん
2011/09/18(日) 05:04:38.310683デフォルトの名無しさん
2011/09/18(日) 06:23:16.050684デフォルトの名無しさん
2011/09/18(日) 09:46:52.17階乗を、自然数から複素数に拡張したときの精度が、小数点以下8桁以上。整数部分は一致するだろう。
0685デフォルトの名無しさん
2011/09/18(日) 13:06:22.71一箇所になればいいんだろ?
0686デフォルトの名無しさん
2011/09/18(日) 13:07:32.09そのくらいの精度があればどこまでも求められるよ
0687デフォルトの名無しさん
2011/09/18(日) 13:09:19.47しかし log の精度が足りなかった!
0688デフォルトの名無しさん
2011/09/18(日) 13:10:29.00書き換えない同一データがいくつもあるのは無駄だよね?
0689デフォルトの名無しさん
2011/09/18(日) 13:45:49.170690デフォルトの名無しさん
2011/09/18(日) 18:31:44.33だから一箇所になればいいんだろ?
0691デフォルトの名無しさん
2011/09/18(日) 19:21:02.68結論言うとそうなんだけど、
ヘッダをインクルードする方法に違いがない状態で、
コンパイラが生成したオブジェクトファイルの
どれに実体が入るか、指定する方法があるの?
もしかして、リンカでするの?あるなら、教えて
extern は正直いって使わない。本当に必要なんですか?
>コンパイラが生成したオブジェクトファイルのどれに実体が入るか
条件つきだが、リンカにお任せで大丈夫な場合もあります。
つ前スレ:http://pc12.2ch.net/test/read.cgi/tech/1201153965/139
つ「仮定義(tentative definition)」
0693デフォルトの名無しさん
2011/09/18(日) 23:19:51.40>const staticな文字列の配列ならヘッダに書いてもいい?
これから始まってる話なので、初期化が伴います。
0694デフォルトの名無しさん
2011/09/18(日) 23:38:49.38初心者は使う必要ない。初心者は。
失礼。ご指摘感謝。
extern を使うメリットは?そんなものあるのですかね?
0697デフォルトの名無しさん
2011/09/18(日) 23:55:46.480698デフォルトの名無しさん
2011/09/18(日) 23:58:51.52使う必要がない人は、使わなくてもいい。
複数ソースに分割しているときに、
共通設定をグローバル変数においているときは、
多分使いたいと思うだろう。
そういう時も、共通なグローバル変数の宣言だけをヘッダに書いて、
そのグローバル変数を使うモジュールだけがそのヘッダを読み込むようにすれば、特に extern はいらないのでは?
グローバル変数の初期化はちゃんとコードとして表現しなければならないのだけれども、むしろその方が好ましいと思います。
>>697
変数名に約束事をつけたほうが、まし。読みやすいし。
0700デフォルトの名無しさん
2011/09/19(月) 00:08:17.080701デフォルトの名無しさん
2011/09/19(月) 00:16:33.90非staticという意味で明示的にやってるだけ。
省略できる状況なのに
this->や::でアクセスするのと同じだよ。
プリプロセスで
extern
__declspec(dllexport)
__declspec(dllimport)
を切り替えるのなんてよくあることでしょ。
0702デフォルトの名無しさん
2011/09/19(月) 00:20:24.86やーだお
0703デフォルトの名無しさん
2011/09/19(月) 00:22:23.27変数の*宣言だけ*するためには extern が必要だよ
0704デフォルトの名無しさん
2011/09/19(月) 00:30:18.78コーディングしている人間のためであって、言語仕様ではない。
一人で趣味として作るならともかく、チームでするときは
個人的な好き嫌いでプログラムは書いてはいけない。
0705デフォルトの名無しさん
2011/09/19(月) 00:44:12.490706デフォルトの名無しさん
2011/09/19(月) 00:46:17.320707デフォルトの名無しさん
2011/09/19(月) 00:49:10.44{
}
で動くのに
int main(void)
0708デフォルトの名無しさん
2011/09/19(月) 00:51:18.40main()
{
...
}
で動くのに
int main(void)
{
...
return 0:
}
と書く必要あるんですかー(棒)。
いや、初期化しなければ省略できる。仮定義は宣言ではない、というのであれば話は別ですが、それは字面の話。
実際の作業はリンカがする点ではなんらかわりない。
>>704
それはそのとおりだと思います。しかし、チームで作成するとき(経験はありませんが)を仮定しても、わざわざ extern を使う利点が想像しがたいのですが。
というか、extern を陽に記述することと、チームで作成することとになんらの相関を見出せないのですが。
extern を使うと、そのグローバル変数の帰属を決めなくてはなりませんが、たくさんモジュール分割すると、その作業で混乱しませんか?
0710デフォルトの名無しさん
2011/09/19(月) 03:51:51.180711デフォルトの名無しさん
2011/09/19(月) 07:47:48.85さすが無職の趣味プログラマが言う事は一味違いますなあ(笑)
0712デフォルトの名無しさん
2011/09/19(月) 08:00:47.370713デフォルトの名無しさん
2011/09/19(月) 08:02:35.36static = private
具体的に論拠を示せないのですね。がんばってください。
>>712
どうなんでしょう?
コンパイルの生成物であるオブジェクトファイルにはグローバル変数のアドレスだけ載ってきますから、変数のサイズで両者に矛盾がなければ、extern つけなくても OK だという気がします。
masm には EXTERNDEF というディレクティブがありました。
0715デフォルトの名無しさん
2011/09/19(月) 08:38:51.32extern無しの仮定義とかC++と互換性のない機能を使うのって面倒だからいや
C++のサブセットの範囲内の機能しか使いたくない。
0716デフォルトの名無しさん
2011/09/19(月) 09:01:45.51元の
不変定数だけどそれが文字列の配列で(enum とペアで)一か所で定義運用したいという意図とは外れるだろうが
0717デフォルトの名無しさん
2011/09/19(月) 11:04:03.92その名前の付け方の統一の為にexternが必要なんだよね。
0718デフォルトの名無しさん
2011/09/19(月) 11:08:33.540719デフォルトの名無しさん
2011/09/19(月) 13:06:54.430720デフォルトの名無しさん
2011/09/19(月) 13:13:51.49お前の書き込み時間見てりゃ馬鹿でも分かるって
平日の昼間から平気であれだけ多量の書き込みが会社から出来るわけねー
0721デフォルトの名無しさん
2011/09/19(月) 13:29:17.490722デフォルトの名無しさん
2011/09/19(月) 13:35:36.410723デフォルトの名無しさん
2011/09/19(月) 13:36:38.21宿題スレ見てみ
0724デフォルトの名無しさん
2011/09/19(月) 13:42:55.60夜中3時とか早朝4時、昼間の書き込みが多いな
最近は日曜日の書き込みが多く、平日は早朝か夜7時過ぎか夜中だ
もしかして最近就職したのか?
0725デフォルトの名無しさん
2011/09/19(月) 14:21:39.740726デフォルトの名無しさん
2011/09/19(月) 14:25:55.140727デフォルトの名無しさん
2011/09/19(月) 14:43:41.280728デフォルトの名無しさん
2011/09/19(月) 14:44:52.7710万行のソース書くのは御免こうむりたい。
どうしてもなら、プログラム書いて自動生成。
0729デフォルトの名無しさん
2011/09/19(月) 15:18:48.410730デフォルトの名無しさん
2011/09/19(月) 15:46:01.87事でしょうなあ〜
0731デフォルトの名無しさん
2011/09/19(月) 15:56:12.960732デフォルトの名無しさん
2011/09/19(月) 15:58:21.523交代かねえw
で、QZは自分のPCのCPU-Zのスクリーンショット晒しはまだ?
0733デフォルトの名無しさん
2011/09/19(月) 16:39:48.860734デフォルトの名無しさん
2011/09/19(月) 17:33:00.660735デフォルトの名無しさん
2011/09/19(月) 17:47:53.100736デフォルトの名無しさん
2011/09/19(月) 17:53:00.58おまえ、すこしは緩急のバランス考えて、たまには引くことも考えろよ…
延々と押しばっかりだから、正誤関係なく嫌われるんだっつーの…
もっと人に物言う時の上手いやりかたとか、人との関わり方とか心とか、C言語以前にそういうこと学んだ方が…
0737デフォルトの名無しさん
2011/09/19(月) 18:07:31.50言っても無駄でしょう
こいつは重度の人格障害で中年ニートですから
0738デフォルトの名無しさん
2011/09/19(月) 18:18:22.240739デフォルトの名無しさん
2011/09/19(月) 19:50:37.570740デフォルトの名無しさん
2011/09/19(月) 19:52:55.870741デフォルトの名無しさん
2011/09/20(火) 01:19:38.33PC側でその信号が来た時にいろいろ処理がしたいと思っています
USBを監視するにあたってどういう風な記述が必要かよくわかりません
お願いします
0742デフォルトの名無しさん
2011/09/20(火) 01:31:53.61http://msdn.microsoft.com/en-us/library/ff540196.aspx
http://winusb.at.webry.info/200709/article_3.html
USBドライバの作成に関する資料を漁るほかないと思いますけど
0743デフォルトの名無しさん
2011/09/20(火) 01:52:41.86USB操るとかは上級者レヴェルだ
ちなみにUSBのチップはなんなんだよ
0744デフォルトの名無しさん
2011/09/20(火) 01:55:08.50>おまえ、すこしは緩急のバランス考えて、たまには引くことも考えろよ…
たしかに。
でも、匿名掲示板にぐらいなら過激側にふって書いたほうが、いろいろと面白いでしょう?
>延々と押しばっかりだから、正誤関係なく嫌われるんだっつーの…
そっかなあ?素直に誤りを認めるときには認めているつもりなんですが。先日のバッファーオーバーランのときとか。
>もっと人に物言う時の上手いやりかたとか、人との関わり方とか心とか、C言語以前にそういうこと学んだ方が…
そうしたほうがいいみたいですね。今マイブームの吉村昭とかじゃだめですか?
0746デフォルトの名無しさん
2011/09/20(火) 02:32:53.160747デフォルトの名無しさん
2011/09/20(火) 10:27:40.110という初期化子でファイルスコープ宣言したかのように振る舞うと書いてあるので、翻訳単位
で実体が作られるとも取れるね。
A declaration of an identifier for an object that has file scope without an initializer, and
without a storage-class specifier or with the storage-class specifier static, constitutes a
tentative definition. If a translation unit contains one or more tentative definitions for an
identifier, and the translation unit contains no external definition for that identifier, then
the behavior is exactly as if the translation unit contains a file scope declaration of that
identifier, with the composite type as of the end of the translation unit, with an initializer
equal to 0.
複数の翻訳単位にまたがっている場合の明確な定義が書かれていないように思うので、自分も
未定義だと思う。
[C99] 第2回 オブジェクトの宣言 | 株試ョ会社きじねこ
http://www.kijineko.co.jp/tech/cpp2c/c99/part2
0748デフォルトの名無しさん
2011/09/21(水) 18:25:53.280749デフォルトの名無しさん
2011/09/21(水) 18:29:43.17判じ物の様相を呈してきていますが、
ISO/IEC 9899:1999 6.2.2.2
In the set of translation units and libraries that constitutes an entire program, each
declaration of a particular identifier with external linkage denotes the same object or
function. (後略)
とある以上、external linkage に属する識別子(それがISO/IEC 9899:1999 6.9.2.2 >>747 の tentative
definition で宣言されようとも)は一つのアドレスに結び付けられている、と思います。
0751デフォルトの名無しさん
2011/09/21(水) 20:16:32.820752デフォルトの名無しさん
2011/09/21(水) 20:38:35.28typedef enum Hoge {
Hoge_hoge,
Hoge_foo,
Hoge_bar
} Hoge;
0753デフォルトの名無しさん
2011/09/22(木) 00:01:13.520754デフォルトの名無しさん
2011/09/22(木) 00:58:08.610755デフォルトの名無しさん
2011/09/22(木) 01:33:31.63どうしてワンツーさんしーなんだよ
0756デフォルトの名無しさん
2011/09/22(木) 09:10:53.810757デフォルトの名無しさん
2011/09/22(木) 09:39:05.35「過去を知らずして未来を語ることは出来ない」 by σ(゚∀゚ )オレ
0758デフォルトの名無しさん
2011/09/22(木) 10:00:35.160759デフォルトの名無しさん
2011/09/22(木) 10:04:40.43それは(定義でなく)宣言についてでしょ?
definitionもしくはtentative definitionが複数翻訳にまたがって1つにまとめられるかの文がないと
やはり未定義だと思う。
0760デフォルトの名無しさん
2011/09/22(木) 14:24:40.52旧約だけどな
0761デフォルトの名無しさん
2011/09/22(木) 16:36:45.80どうしたらいいかな
sscanf("5678","%3d",&val); // val=567
↑この3を可変にしたい
0762デフォルトの名無しさん
2011/09/22(木) 17:27:57.31sscanf("5678","%1d",&val);
}
else if (val>99) {
sscanf("5678","%2d",&val);
}
else if (val>999) {
sscanf("5678","%3d",&val);
}
……
0763デフォルトの名無しさん
2011/09/22(木) 17:30:56.740764デフォルトの名無しさん
2011/09/22(木) 17:39:12.31えっ?
0765デフォルトの名無しさん
2011/09/22(木) 17:41:37.691点目
valが10以上のときは常に最初にヒットしてしまう
2点目
なんでval使うん?
0766デフォルトの名無しさん
2011/09/22(木) 17:42:36.80まず、CFAQに
C FAQ 1
http://www.kouno.jp/home/c_faq/c1.html#7
>Unixのコンパイラやリンカーは「共通モデル (common model)」を使う、
>これは2回以上初期化されないかぎり複数の定義を許すものである。
>この動作は「共通の拡張(common extension)」としてANSI C規格に出てくる。
共通の拡張(common extension)とは、
J.5 Common extensions
The following extensions are widely used in many systems, but are not portable to all
implementations. The inclusion of any extension that may cause a strictly conforming
program to become invalid renders an implementation nonconforming. Examples of such
extensions are new keywords, extra library functions declared in standard headers, or
predefined macros with names that do not begin with an underscore.
J.5.11 Multiple external definitions
There may be more than one external definition for the identifier of an object, with or
without the explicit use of the keyword extern; if the definitions disagree, or more than
one is initialized, the behavior is undefined (6.9.2).
仮定義をどう解釈するかは置いといて、複数定義に関しては、Unixでは許されており、
C規格においても、common extensionとして多くのシステムが採用しているとされている。
0767デフォルトの名無しさん
2011/09/22(木) 17:52:07.97その文字列をsprintfで作るとかしないと無理じゃないかなぁ。
0768デフォルトの名無しさん
2011/09/22(木) 18:35:47.84// フォーマット文字列じゃなくて変換対称文字列を加工してしまう手はどう?
int foo(const char * str, int len) {
char buf[len + 1];
sprintf(buf, "%.*s", len, str);
sscanf(buf, "%d", & val);
return val;
}
0769デフォルトの名無しさん
2011/09/22(木) 19:52:20.93char buf[len + 1];
Cだから、ここは変えないとというのはさておき、発想的には、それで>>761の要求を満たせるのかどうかかと
うしろ切っていいのっていう
0770デフォルトの名無しさん
2011/09/22(木) 20:20:35.99761の例でうしろ切ってるジャン
0771デフォルトの名無しさん
2011/09/22(木) 20:24:05.34printfみたいに、引数で文字数を渡したいんじゃない?
0772デフォルトの名無しさん
2011/09/22(木) 20:43:37.92&& fflush (stdin) == 0)
{
fseeko (stdin, 0, SEEK_CUR);
}
これ一体何やってんの?
同じ事2回やってる気が…
0773デフォルトの名無しさん
2011/09/22(木) 20:50:34.41%3dは例で、実のところは%3d%sかもしれない
ありえるのがこのスレ。
0774デフォルトの名無しさん
2011/09/22(木) 20:55:05.53指定した数だけgetch()したら良いんじゃね?後は必要な文字が来るまでで読み飛ばす
0775デフォルトの名無しさん
2011/09/22(木) 20:59:19.35後から後から文字が付け足されて入ってくるぞ
0776デフォルトの名無しさん
2011/09/22(木) 21:00:10.54移植を含めたつぎはぎだらけのコードなんじゃないのかなぁ。
「何がしたいのか」がコメントに書かれて無いとそういう疑問を後世に残すハメに。
ちなみにそのfflushは未定義
0777デフォルトの名無しさん
2011/09/22(木) 21:08:44.270778デフォルトの名無しさん
2011/09/22(木) 21:14:31.91これを言うと知らなかった奴が結構多くて驚く
0779デフォルトの名無しさん
2011/09/22(木) 21:18:15.450780デフォルトの名無しさん
2011/09/22(木) 21:32:12.120781デフォルトの名無しさん
2011/09/22(木) 21:45:09.370782デフォルトの名無しさん
2011/09/22(木) 21:54:40.79未定義なものを独自に定義されていた、それだけのことなのに驚くなんてどうかしてるよね
0783デフォルトの名無しさん
2011/09/22(木) 21:59:18.53学校の先生も知らずに教えてたりするよ
どうなってるのかと思う
0784デフォルトの名無しさん
2011/09/22(木) 22:00:39.030785デフォルトの名無しさん
2011/09/22(木) 22:35:57.87問題なくコンパイル通ったけど?
gcc version 4.5.2 (GCC)
0786デフォルトの名無しさん
2011/09/22(木) 22:44:38.260787デフォルトの名無しさん
2011/09/22(木) 22:47:31.86実行結果が未定義なだけで
0788デフォルトの名無しさん
2011/09/22(木) 22:49:03.420789デフォルトの名無しさん
2011/09/22(木) 22:50:34.490790デフォルトの名無しさん
2011/09/22(木) 23:07:33.04HDDをフォーマットされても文句は言えない
0791デフォルトの名無しさん
2011/09/22(木) 23:22:00.91sprintf(fmt, "%%%dd", len);
sscanf("5678", fmt, &val);
0792デフォルトの名無しさん
2011/09/22(木) 23:58:02.38fflush(NULL)ってするとstdinも一緒にflushされるのか?
0793デフォルトの名無しさん
2011/09/23(金) 00:06:07.81意味が分かんない
0794デフォルトの名無しさん
2011/09/23(金) 00:13:41.15閉じられるのは出力ストリームだけのようだが
0795デフォルトの名無しさん
2011/09/23(金) 00:22:44.02フラッシュボタンを押しただけで便座が閉まっちまったら挟まっちまうじゃないか。
0796デフォルトの名無しさん
2011/09/23(金) 03:23:48.64を定義しようという運動はありますか?
0797デフォルトの名無しさん
2011/09/23(金) 07:06:58.79むしろコンパイルエラーにして欲しいけど。
それとも「エラーとする」と定義して欲しいってこと?
Cコンパイラを実装しやすくしようという方針に反するからやらないだろうけど。
0798デフォルトの名無しさん
2011/09/23(金) 08:17:07.4290年代に入ってまた下火になり、2000年代にまた再燃してる。
0799デフォルトの名無しさん
2011/09/23(金) 09:56:43.20JISのCでfflushのとこをみると
>streamが空ポインタのとき、fflush関数は、この箇条で動作が定義されているすべてのストリームに対して、
>その定義されている動作を行う。
って書いてあるから、stdinに対しての動作が定義されてるってことはそれもやっちゃうのかと思ったんだ
ちゃんと出力だけって定義に変えてあるのね
0800デフォルトの名無しさん
2011/09/23(金) 15:14:43.62あなたのHDDをフォーマットするようにする事は出来ますよ
0801デフォルトの名無しさん
2011/09/23(金) 15:46:55.380802デフォルトの名無しさん
2011/09/23(金) 15:51:34.28エラーでも可。
とにかく、言語レベルであいまいさが残されてるのはいやじゃね?
実際のところ、i=i++はコンパイルでwarningになるんだし。
0803デフォルトの名無しさん
2011/09/23(金) 15:57:11.60*p=i++;
みたいなのはどうすんの?
0804デフォルトの名無しさん
2011/09/23(金) 17:12:07.62できる。なぜできないと思った?
0805デフォルトの名無しさん
2011/09/23(金) 17:33:32.32ごめん、勘違いしてた。
static struct {
int a;
} data;
こんな感じのを別の関数の中に定義してmain関数から data.a でアクセスできると思ってた
0806デフォルトの名無しさん
2011/09/23(金) 17:44:41.81それを定義しろって言ってんだよ
0807デフォルトの名無しさん
2011/09/23(金) 18:53:49.22翻訳単位は左から右へ進み
参照直後に加算することを保障する (現状では 参照直後 から 副作用完了点の間)
ってことか?
0808807
2011/09/23(金) 18:57:27.320809デフォルトの名無しさん
2011/09/23(金) 18:59:29.69C言語以外の言語でやってほしい
0810デフォルトの名無しさん
2011/09/23(金) 19:13:49.16でも、これで最適化が効かなくなる状況ってほとんどないよ
0811デフォルトの名無しさん
2011/09/23(金) 19:57:29.23void func(&a, &b) {
a = ++b;
}
func(i, i);
みたいのは?
0812デフォルトの名無しさん
2011/09/23(金) 20:00:43.03イミフ。
>こんな感じのを別の関数の中に定義して
関数の中で定義するのだから、ローカル変数になっているよね。
>main関数から data.a でアクセスできると思ってた
ローカル変数だからその変数はmainでは見えない。
staticが付けば静的変数にはなるけど、mainから見える見えないは関係ないよ。
0813デフォルトの名無しさん
2011/09/23(金) 20:04:11.39そういうのをコンパイラがチェックするのは、Cのポリシーに合わないと思う。
そういうことはしないでね、と決めてコンパイラの実装を軽くするのが、Cっぽいのでは?
0814デフォルトの名無しさん
2011/09/23(金) 20:16:26.13なにもしないとmainから見えてしまうと勘違いしていた
(上記勘違いを前提にして)staticをつければ見えなくできるのかどうか聞いた
ってことだろ 会話を読め
0815デフォルトの名無しさん
2011/09/23(金) 20:19:35.54結局C/C++はプログラマの「うっかりミス」からバグの生成を出来るだけ
排除しようとするけども、プログラマが「故意に」バグらせようとしたら無力
#define private public
↑
これでカプセル化など簡単に破れる
0816デフォルトの名無しさん
2011/09/23(金) 20:21:23.00それだと関数内の組み込み型なローカル変数も main で見えるハズ という理解からのスタートにならない?
構造体って static にできる? と聞く動機に欠けるような。。。
0817812
2011/09/23(金) 20:33:54.53皆さんごめんなさい><
0818デフォルトの名無しさん
2011/09/23(金) 21:29:47.48>staticをつけることでグローバル変数と同じように扱えると思ったんです。
staticはグローバル変数にがつく時とローカル変数につく時で意味が変わる。
グローバル変数につくと、内部結合になるので、俗にファイルスコープになって、
グローバルよりスコープは狭くなる。
>>814
いやー、そうは読めないでしょ。ま、本人が出てきているので、水掛け論は止めましょ。
0819デフォルトの名無しさん
2011/09/24(土) 00:57:46.360820デフォルトの名無しさん
2011/09/24(土) 01:01:12.730821デフォルトの名無しさん
2011/09/24(土) 01:04:33.50分からないなら無理しなくていいですよ^^;
0822デフォルトの名無しさん
2011/09/24(土) 01:07:09.580823デフォルトの名無しさん
2011/09/24(土) 02:22:57.35表示の仕方が微妙に違うくらい?
0824デフォルトの名無しさん
2011/09/24(土) 02:25:35.51ポインタのサイズ≠intのサイズ
だ。
0825デフォルトの名無しさん
2011/09/24(土) 02:26:59.52マジで?
0826デフォルトの名無しさん
2011/09/24(土) 02:32:48.630827デフォルトの名無しさん
2011/09/24(土) 02:34:46.37win7 64bit : int = 32bit , pointer = 64bit
0828デフォルトの名無しさん
2011/09/24(土) 02:44:21.900829デフォルトの名無しさん
2011/09/24(土) 02:54:04.59むしろIP64な環境の方がめったに無いから。
っていうか、「Windowsだから」じゃねーし。
処理系とOSの区別もつかないバカ。
0830デフォルトの名無しさん
2011/09/24(土) 02:57:16.040831デフォルトの名無しさん
2011/09/24(土) 08:13:20.030832デフォルトの名無しさん
2011/09/24(土) 12:34:36.79「Windowsだから」じゃなくて「WindowsはLLP64」ってあるだろ
何を当たり前のことを得意気に「処理系とOSの区別もつかないバカ(キリッ」だ
馬鹿かw
0833デフォルトの名無しさん
2011/09/24(土) 15:02:04.20int main(void){
int tajigen[2][2];
a(tajigen);
return 0;
}
int a(int tazigen[][2]){
多次元配列を引数にする場合、二個目の要素数を[][2]みたいに書くけど
int a(int[][?]);
int main(void){
int hairetuA[2][2],hairetuA[3][3],hairetuC[4][4]
a(hairetuA);
a(hairetuB);
a(hairetuC);
return 0;
}
int a(int hairetuX[][?]){
こういう場合、?に何を入れたらいいの
0834デフォルトの名無しさん
2011/09/24(土) 15:09:04.17それ無理
配列の一番最初の列は固定
0835デフォルトの名無しさん
2011/09/24(土) 15:14:55.16どうしょうもない。
代わりに↓とか。
間違えてたらスマン。
int a(int *hairetuX[], int elemNum)
{
// hairetuX[a][b]
*(hairetuX + a*elemNum + b);
}
0836デフォルトの名無しさん
2011/09/24(土) 15:51:06.78ありがとうございます
0837デフォルトの名無しさん
2011/09/24(土) 17:59:20.830838デフォルトの名無しさん
2011/09/24(土) 18:20:02.580839デフォルトの名無しさん
2011/09/24(土) 18:41:11.22>>838
言われてみれば型おかしいね。
すんまへん。
あと俺は「が」と「の」が逆の認識。
0840デフォルトの名無しさん
2011/09/24(土) 18:45:21.01つまりどういうことかといいますと
0841デフォルトの名無しさん
2011/09/24(土) 19:02:29.88糖衣構文なの? 完全に等価だと思ってたんだけど
0842デフォルトの名無しさん
2011/09/24(土) 19:04:10.99どういうことだ!?
0843第三者
2011/09/24(土) 19:11:13.31{
// hairetuX[a][b]
*(((int *)hairetuX)+ a*elemNum + b)= ... ;
}
こんな感じか?
0844デフォルトの名無しさん
2011/09/24(土) 20:26:19.59hoge.cの中で使ってる標準関数のincludeって
hoge.hに書く派? それとも、hoge.cに書く派?
0845デフォルトの名無しさん
2011/09/24(土) 20:29:10.840846デフォルトの名無しさん
2011/09/24(土) 20:35:05.570847デフォルトの名無しさん
2011/09/24(土) 20:40:04.01それはないでしょ。
0848デフォルトの名無しさん
2011/09/24(土) 20:50:40.450849デフォルトの名無しさん
2011/09/24(土) 21:13:00.99規格でidenticalと書かれているからじゃないのかな?
The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).
0850デフォルトの名無しさん
2011/09/24(土) 21:16:19.51製作者ならhoge.cに
#include <stdio.h>
#include "hoge.h"
と書いても、他人は
#include "hoge.h"
#include <stdio.h>
と書くかもしれんし。
重複展開もどうせキャッシュに載るだろうし、そんなにコンパイルに時間かからんと思うし。
0851デフォルトの名無しさん
2011/09/24(土) 21:19:19.360852デフォルトの名無しさん
2011/09/24(土) 21:25:17.37// stdafx.h : 標準のシステム インクルード ファイル、
// または参照回数が多く、かつあまり変更されない
// プロジェクト専用のインクルード ファイルを記述します。
0853デフォルトの名無しさん
2011/09/24(土) 21:55:31.05階層構造がぐちゃぐちゃになるきがするから
俺は最小限にしてるわ
システムインクルードをヘッダファイルでやるのは俺ルール(笑)だとありえないな
適切な順番でインクルードするのは使いたいCファイル側の責任だと思ってる
0854デフォルトの名無しさん
2011/09/24(土) 21:55:42.33そりゃ、h内でstdio.h使ってたら、hの中でincludeしないとだめでしょ。
0855デフォルトの名無しさん
2011/09/24(土) 21:57:39.77hoge.hが標準関数のヘッダに依存するならhoge.hに書くべき。
つまりhoge.hに先立ってstdio.hをインクルードすることが必要ならhoge.hに書いてしまう。
例えばhoge.hに
void hoge(FILE *);
という宣言がある場合は、hoge.hの中でstdio.hをインクルードしてしまう。
こんな感じ
#ifdef HOGE_H__
#define HOGE_H__
#include <stdio.h>
void hoge(FILE *);
#endif
0856デフォルトの名無しさん
2011/09/24(土) 22:01:21.16hoge.hをインクルードする際に
どのライブラリに依存しているか把握する必要がなくなる。
<...>でインクルードするようなライブラリは
基本的に修正する事はないので
無駄なビルドが発生するというデメリットもない。
まぁ、pchを使ったらいいよ。
c ファイルの方に #include <windows.h> と記述し、ユーザー側 .h ではシステムファイルのインクルードは行っていません。
そうしておけば、windows.h に依存する記述をユーザーヘッダに含ませても無問題。
インクルードガードは必要に応じて行いますが。
0858デフォルトの名無しさん
2011/09/24(土) 22:51:33.20そのヘッダ内の宣言記述で確定してないと困るものは include に含ませるようにしてる
0859デフォルトの名無しさん
2011/09/24(土) 23:08:39.02FILE* のみ存在するヘッダ ← 前方宣言で処理
FILE の実体が存在するヘッダ ← ヘッダ内でインクルード
かな。
後者のパターンで、インクルードしないメリットって何かあるの?個人的な好み以外で
0860デフォルトの名無しさん
2011/09/24(土) 23:20:09.390861デフォルトの名無しさん
2011/09/24(土) 23:23:52.19FILEはtypedefで処理系によりタグがマチマチだから
#ifdef A
struct a;
typedef struct a FILE;
#elif B
struct b;
typedef struct b FILE;
#elif C
struct c;
typedef struct c FILE;
....
#endif
とかだね
まぁヤル馬鹿はいない
0862デフォルトの名無しさん
2011/09/24(土) 23:28:30.18順番間違わないように定番自作関数のヘッダファイルにinclude書いた記憶がある。
0863デフォルトの名無しさん
2011/09/24(土) 23:36:59.59#ifndefだろ
0864デフォルトの名無しさん
2011/09/24(土) 23:51:09.73#if defined(A)
#elif defined(B)
だろとか言われそう
0865デフォルトの名無しさん
2011/09/25(日) 00:19:01.23ごめん、単純ミスです。
#ifndefが正しい。
>>853
>ヘッダファイルでヘッダファイルをインクルードしだすと
>階層構造がぐちゃぐちゃになるきがするから
自分にとっては
「XXXヘッダを使うに先立って、YYYヘッダをインクルードしておくこと」
などという約束事が必要なのがぐちゃぐちゃになっていると思う。
XXXヘッダにYYYヘッダをインクルードしておけば、ソースがその依存関係を語ってくれる。
0866デフォルトの名無しさん
2011/09/25(日) 00:23:25.94もしかしてstdio.hをインクルードしないですむように、勝手に
FILEを宣言しようとしている?
カプセル化を破ろうとする行為だよ。
ヘッダをインクルードするのは、公開して何を隠すかを
ソースで表すためにしている。
FILEが使いたいならstdio.hをインクルードすべき。
ユーザプログラムでFILE構造体の中身が気になることは無いはず。
0867デフォルトの名無しさん
2011/09/25(日) 00:25:25.02stdio.hをインクルードすると分単位でコンパイル時間が延びるような貧弱な環境かもしれないだろ
0868デフォルトの名無しさん
2011/09/25(日) 01:47:30.71自分は基本的にifndefの内側にはincludeを書かないルールにしてる
#include "bbb.h" // 外に書く
#ifndef __AAA_H__
#define __AAA_H__
// #include "bbb.h" //中ではなく
#endif // __AAA_H__
あまり一般的ではないかもしれないが。
自分のケースだとこれで循環や宣言順などの面倒な問題の多くがクリアーできる。
0869デフォルトの名無しさん
2011/09/25(日) 05:49:49.18longのサイズを決定するのはOSじゃないよ。
まだわかってないんだね。
最近知った言葉を使ってみたかっただけなんだろうけど
無理しないほうが恥かかないで済むよ。
0870デフォルトの名無しさん
2011/09/25(日) 06:52:26.710871デフォルトの名無しさん
2011/09/25(日) 07:14:52.410872デフォルトの名無しさん
2011/09/25(日) 07:32:01.19Pen4は窓から投げてコア2拾って来いよ
たぶんそこらへんに落ちてるw
0873デフォルトの名無しさん
2011/09/25(日) 07:35:28.34誤爆でしょうか
いいえ、誰でも
0874デフォルトの名無しさん
2011/09/25(日) 09:39:16.70int main(void){
_tag tag[4][4];
for(int i=0;i<=3;i++){
for(int j=0;j<=3;j++){
tag[i][j] = {1,1,1}; //6行目
}
}
return 0;
}
なんか6行目に「構文エラー : ';' が '{' の前にありません。構文エラー : ';' が '}' の前にありません。」
ってなるんだけど…
for文使って 「構造体[i][j]={ , , , };」 ってできないの?
0875デフォルトの名無しさん
2011/09/25(日) 09:48:15.230876デフォルトの名無しさん
2011/09/25(日) 09:52:31.540877デフォルトの名無しさん
2011/09/25(日) 09:53:17.60二重の配列に二重のループなんだから、入れるのは値一つで充分だろ。
0878デフォルトの名無しさん
2011/09/25(日) 10:20:12.98C90からできるんだっけ?
0879デフォルトの名無しさん
2011/09/25(日) 10:22:18.67一行の長さがバラバラだからfreadが使えないし
0880デフォルトの名無しさん
2011/09/25(日) 10:52:39.41typedef struct _tag {int a, b, c;} _tag;
static _tag init(int ta, int tb, int tc)
{
static _tag t;
t.a = ta, t.b = tb, t.c = tc;
return t;
}
#define N 4
int main(){
_tag tag[N][N];
int i, j;
for(i=0; i<N; i++){
for(j=0; j<N; j++){
tag[i][j] = init(1,1,1);
}
}
}
0881デフォルトの名無しさん
2011/09/25(日) 11:05:04.990883デフォルトの名無しさん
2011/09/25(日) 12:20:27.71どんなバージョンでも初期化には中括弧を使えるから
素人は死んでてください
0884デフォルトの名無しさん
2011/09/25(日) 12:36:12.46どうぞあなたの番です
0885デフォルトの名無しさん
2011/09/25(日) 13:14:08.75-ansi -pedantic
0886デフォルトの名無しさん
2011/09/25(日) 13:38:28.13あまり「名が体を表していない」ような気がする。
誰かその由来を教えてください。
0887デフォルトの名無しさん
2011/09/25(日) 14:47:39.770888880
2011/09/25(日) 15:47:32.72gcc の -c89 って、何故 "89" なんだろう? その由来を教えてください。
-std=
c89
iso9899:1990
ISO C90 (same as -ansi).
gnu89
Default, ISO C90 plus GNU extensions (including some C99 features).
0889デフォルトの名無しさん
2011/09/25(日) 15:48:08.43FILE*でポインタだからそんなことする必要ないだろ。
0890デフォルトの名無しさん
2011/09/25(日) 16:10:26.450891デフォルトの名無しさん
2011/09/25(日) 16:37:34.65いみわからない
0892デフォルトの名無しさん
2011/09/25(日) 16:40:59.090893デフォルトの名無しさん
2011/09/25(日) 18:38:14.42ANSIで制定されたのが1989年。ISOで制定されたのが1990年。
0894デフォルトの名無しさん
2011/09/25(日) 19:54:57.95当時訳分からん単語だと思って調べて、すんなり理解できた俺とはまるで逆なんだな
名か体のどっちかを勘違いしてんのか?
0895デフォルトの名無しさん
2011/09/25(日) 19:59:50.85泥沼の議論をしたりするところをみてないとわからないんじゃないかな。
それこそ昔のfj.lang.cあたりを見てたら一発でわかると思うw
0896デフォルトの名無しさん
2011/09/25(日) 20:09:40.58いや、>>887 的な意味だろうとは思うのだが、
ちょっと皮肉が過ぎるかな、と。
実際、このオプションを必要としているのは
規格厨だけじゃないからね。
0897844
2011/09/25(日) 20:54:04.46それは今でもよくみられることです、ええ。
0899デフォルトの名無しさん
2011/09/25(日) 21:57:56.81アホはすっこんでろ
あばばばばぁ
0901デフォルトの名無しさん
2011/09/25(日) 22:28:00.91getchar()とかでどうよ
getchar()が速いかは知らんけど
0902デフォルトの名無しさん
2011/09/25(日) 23:43:05.15遅いよ。
>>879
1行当たり文字数が少ないなら、fread()で一括で読んでから自前でばらした方が速くなる可能性はある。
でも、cygwinみたいなシミュレーション環境でもない限りfgets()より大幅に速くするのは難しいと思う。
0903デフォルトの名無しさん
2011/09/25(日) 23:51:22.69pedanticスイッチをつけなければならない理由は?
0904デフォルトの名無しさん
2011/09/26(月) 00:04:41.32getchar() の速度は、マルチスレッドか否かで大幅に変わるだろ。
まずは >>879 の環境を聞かないと。
>>879
とりあえず setvbuf() で、バッファサイズを大きくしておけ。
0905デフォルトの名無しさん
2011/09/26(月) 00:09:22.59あと、Windows 環境ならば、fopen() の時に
バイナリモードにするのもよいかも。
0906デフォルトの名無しさん
2011/09/26(月) 00:42:26.50それはマルチスレッドだと遅くなるという解釈でいいんだよな
0907デフォルトの名無しさん
2011/09/26(月) 18:25:52.33別人だけど移植性
0908デフォルトの名無しさん
2011/09/26(月) 18:39:19.09それこそ>>896に対する皮肉だよな
0909デフォルトの名無しさん
2011/09/26(月) 20:07:47.690910デフォルトの名無しさん
2011/09/26(月) 20:13:16.38秀丸で保存する
0911デフォルトの名無しさん
2011/09/26(月) 20:15:26.380912デフォルトの名無しさん
2011/09/26(月) 20:16:44.39S-JISを2byteずつ読みこんでいって、それをUTFの該当のコードに照らし合わせりゃいい。
ただし、その簡単な変換表を作る作業はまぎれもなくクソ。
がんばってね。
0913デフォルトの名無しさん
2011/09/26(月) 20:22:40.130914デフォルトの名無しさん
2011/09/26(月) 20:28:02.66じゃあそのヨゴレ仕事の内実を是非とも今ここで教えてくれ
できればソーース付きで
0915デフォルトの名無しさん
2011/09/26(月) 20:37:47.70ソースをコピペしてかさ増しするとか
0916デフォルトの名無しさん
2011/09/26(月) 20:54:18.26無駄部分をそれとなーく紛れ込ませたり
無意味な判定を紛れ込ませたり
何もしない大掛かりなループ挿入したり
0917デフォルトの名無しさん
2011/09/26(月) 23:04:22.940918デフォルトの名無しさん
2011/09/26(月) 23:46:04.310919デフォルトの名無しさん
2011/09/27(火) 00:13:25.760920デフォルトの名無しさん
2011/09/27(火) 02:54:17.420921デフォルトの名無しさん
2011/09/27(火) 03:28:25.810922デフォルトの名無しさん
2011/09/27(火) 15:09:02.10毎日使ってるよ
0923デフォルトの名無しさん
2011/09/27(火) 15:57:08.740924デフォルトの名無しさん
2011/09/27(火) 18:29:24.560925デフォルトの名無しさん
2011/09/27(火) 21:39:31.810926デフォルトの名無しさん
2011/09/27(火) 22:47:06.38以下のような、2種類の入力を処理する安直なテストプログラムを書いてみたのですが、
二個目のwhileループが一個目のwhileループを抜けた直後にすぐ抜けてしまいます。
while (scanf(fmt1, ...) != EOF) { func1(...); }
while (scanf(fmt2, ...) != EOF) { func2(...); }
どうやら二個目のwhileにはscanfがEOFの状態を保持したまま入っているようです。
こういう場合はどうするのが一般的でしょうか。
とりあえずstdioの関数を眺めるとEOFをクリアする作用のある関数がいくつかあるので、
どれかを二個目のループの前で呼べばいいでしょうか? その場合はどの関数でしょうか?
ちなみにMac OS X 10.6.8の上でやっています。
0927デフォルトの名無しさん
2011/09/27(火) 23:52:34.01fgetsしてsscanf
0928デフォルトの名無しさん
2011/09/28(水) 00:15:24.62関数の引数や戻り値、ローカル変数はすべてスタック領域に格納ですか?
それともコンパイラによっては汎用レジスタとかに格納とかもありますか?
0929デフォルトの名無しさん
2011/09/28(水) 00:19:15.180930デフォルトの名無しさん
2011/09/28(水) 00:27:12.05registerで明示的にレジスタ使う変数定義できたり
最適化すればコンパイラの判断でよく使う値や変数をレジスタに入れたままで使ったり
てかローカル変数も引数も何もしなくてもいくつかまではレジスタに入るものじゃなかったっけ
0931928
2011/09/28(水) 00:43:25.44グローバル変数は品質や安全面を考慮するとあまり使わないほうがいいとよく聞きます。
でも、レジスタかスタックかわからないローカル変数よりも
グローバル変数を静的メモリ配置(できればアドレスも決めて)したほうが
コンパイラ依存も無く、どこのメモリに格納されているか把握できるので、
そっちのほうが安全かなと思ったんですがいかがでしょ?
0932デフォルトの名無しさん
2011/09/28(水) 00:45:42.99どうしてもその区別が必要なら volatile で修飾するといい
組み込みのことはわかりませんが、いにしえの lsi-c の時点で、すでにデフォでレジスタだったりしてました。
RISC 系はレジスタが馬鹿みたいに多かったので、これまたデフォでレジスタだったりしてました。
gcc も -O2 さてどうなっているのか。
#include <stdio.h>
int f(int c) {
return c + 1;
}
int main() {
int a = 1, b = 2;
return f(a + b);
}
/* end */
_main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $4, %esp
call ___main
ここからプログラム本文
addl $4, %esp
movl $4, %eax あれま、f(a + b) = 4 であることをこの時点で計算してしまっている。f() の呼び出しのかけらもない。
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
0934デフォルトの名無しさん
2011/09/28(水) 00:51:37.09学生実験で SPARC/Sun OS 4.1.1 を触っていたんですけどねえ。これって RISC じゃなかったんでしたっけ。
0936デフォルトの名無しさん
2011/09/28(水) 00:59:44.620937デフォルトの名無しさん
2011/09/28(水) 02:12:25.27「デフォでレジスタだった」ら、どうなの。
すべてregister修飾すればいいと言ってるつもりはないんだろうけど、そう読める書き方はどうかとおもう。
てか、QZっていつぞやにどっかのサイトから丸パクリしたregister修飾されてるコード貼ってたろ。
register修飾が無意味のような思想を持っているなら、おかしいよな。
0938デフォルトの名無しさん
2011/09/28(水) 02:19:38.140939デフォルトの名無しさん
2011/09/28(水) 02:48:51.35皆さん最適化の話しかしてないけど関数の呼び出し規約(ABI)の問題もある。
関数の引数や戻り値に関しては勝手にレジスタを使ったりはできない場合もある。
0940デフォルトの名無しさん
2011/09/28(水) 03:06:09.51おお確かに。ありがとうございます。
ところで、どうやらこれはscanfの「処理できない入力がバッファに残る問題」が関連して
いるようなんですが、これってEOFに関してはどうなんですかね。
というのは今、ふとUbuntuの上で試したら元のコードでも問題なかったので...
Mac OS Xの方はある意味EOFが処理できずにバッファに残っている状態のような...
まあ「そもそもscanfの挙動に頼るんじゃねーよ」と言われればそれまでなんですがw
でも、例えば他人のバグを指摘するときに自信を持ってバグの指摘をしたい場合もありw
0941デフォルトの名無しさん
2011/09/28(水) 07:35:45.74実際に違う挙動を起こしたと言うコードを見ていないからなんともいえないが、何か勘違いしていると思う。
入力が本当に終了して最初のループを抜けているのなら、
二番目のループでも当然入力が終了したままだからそのまま抜けて当然。
0942デフォルトの名無しさん
2011/09/28(水) 07:38:52.49確かに戻り値はレジスタ経由の実装が多いね。
APIのように、OSなどシステム側から提供される場合はABIで引き数がスタック経由である場合が多い。
これも、前から積むか、後ろから積むか、などの違いがあることもあるが。
一方、コンパイラ側から提供されるライブラリならコンパイラ側の自由が利くから、
それこそLSI-Cのようにレジスタ経由で引き数を渡すのが前提になっている場合もある。
0943デフォルトの名無しさん
2011/09/28(水) 07:47:50.14うーむ、それってscanf()特有の事情は関係ない、純粋にstdinの扱いということですか?
とすると>>927さんのアドバイスも無効ということになり...
念のためですが、入力はターミナルから対話的に行っていて、EOFというのは
ターミナルからctrl-Dを入力するという事です。
0945デフォルトの名無しさん
2011/09/28(水) 07:58:06.210946デフォルトの名無しさん
2011/09/28(水) 07:59:36.38OSXで動けばいいってだけなら、間にrewind(stdin);をかませる。
0947デフォルトの名無しさん
2011/09/28(水) 08:10:32.430948デフォルトの名無しさん
2011/09/28(水) 08:20:18.71普通のファイルだと考えた場合
一度EOFが帰ってきたらもう後はいくら読み込もうとしてもEOFじゃないの?
0949デフォルトの名無しさん
2011/09/28(水) 09:43:02.65Exactly!
0950デフォルトの名無しさん
2011/09/28(水) 12:01:27.06EOFと改行を混同してるっぽいよ
普通のファイルと端末=stdin とはまた違うようです。
0952デフォルトの名無しさん
2011/09/28(水) 12:47:54.43scanf() の戻り EOF(ストリームの終端、ASCIIコードEOFに非ず) を入力のセパレータに使うべきではないような感じ
0953デフォルトの名無しさん
2011/09/28(水) 12:51:32.720954デフォルトの名無しさん
2011/09/28(水) 13:02:31.44さすが自己愛性人格障害
0955デフォルトの名無しさん
2011/09/28(水) 13:50:23.88シークできないって程度じゃね?
0956デフォルトの名無しさん
2011/09/28(水) 15:15:06.44http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1272246182
0957デフォルトの名無しさん
2011/09/28(水) 15:33:27.260958デフォルトの名無しさん
2011/09/28(水) 15:35:43.27予測も何も、%表示は線形と定義して、順次平均を出していくだけ。
初期パラメータに、切り捨て、四捨五入、切り上げ の3つを選べばより正確さがますだけ。
悩むようなアルゴリズムじゃない。
0959デフォルトの名無しさん
2011/09/28(水) 16:05:33.400960デフォルトの名無しさん
2011/09/28(水) 16:20:33.64%表示の誤差を単純に処理していいのかは
悩む所だろうなあ
0961デフォルトの名無しさん
2011/09/28(水) 17:05:54.55一匹づつの結果より累計の結果の方が精度高いと思う。
0962デフォルトの名無しさん
2011/09/28(水) 17:17:04.41>敵を倒し、1230の経験値を得て「50%」になったとします、そして
>1.1230→「52%」
>2..1230→「54%」
>3...1230→「57%」
(1230*4)/(57-48)≒1%分の経験値
0963デフォルトの名無しさん
2011/09/28(水) 17:40:48.580964デフォルトの名無しさん
2011/09/28(水) 18:12:16.41分からない問題はここに書いてね360
http://kamome.2ch.net/test/read.cgi/math/1316096657/
0965デフォルトの名無しさん
2011/09/28(水) 18:15:51.690966デフォルトの名無しさん
2011/09/28(水) 18:16:13.400967デフォルトの名無しさん
2011/09/28(水) 18:23:04.350968デフォルトの名無しさん
2011/09/28(水) 23:31:43.51しています。アプリ関係は他言語で、OSや組み込みレベルはCでっていうふうに
分かれていくような気がしてきませんか?
0969デフォルトの名無しさん
2011/09/28(水) 23:36:40.380970デフォルトの名無しさん
2011/09/28(水) 23:37:08.510971デフォルトの名無しさん
2011/09/28(水) 23:37:24.16それよりHTML5勉強しろよ
0972デフォルトの名無しさん
2011/09/28(水) 23:41:50.290973デフォルトの名無しさん
2011/09/28(水) 23:43:13.76高度なオーディオエフェクトをJavaScriptで実現できるAPI“Web Audio”に対応
http://www.forest.impress.co.jp/docs/news/20110920_478758.html
こんなのもあるんだからWebアプリはまだまだ未知数だよ
0974デフォルトの名無しさん
2011/09/28(水) 23:44:30.710975デフォルトの名無しさん
2011/09/28(水) 23:45:26.93特にFirefoxやOpera当たり
0976デフォルトの名無しさん
2011/09/29(木) 01:48:47.87operaはどうだろ・・・
あいつら「自分こそが正しい」の一点張りで、見れないサイトあっても
ガン無視決め込むからな・・・
0977デフォルトの名無しさん
2011/09/29(木) 03:20:46.88(valueは正、digitsは0〜5が保証される)
これ以上速くできる?
double NormalizeDouble(double value, int digits) {
static double t0[] = { 1, 10, 100, 1000, 10000, 100000 };
static double t1[] = { 1, 0.1, 0.01, 0.001, 0.0001, 0.00001 };
return (int)(value * t0[digits] + 0.5) * t1[digits];
}
0978デフォルトの名無しさん
2011/09/29(木) 03:53:21.48static int t0[] = { 1, 10, 100, 1000, 10000, 100000 };
int t;
t=t0[digits];
return (int)(value * t + 0.5) / t;
}
0979デフォルトの名無しさん
2011/09/29(木) 03:53:54.64やってみたけど無理だった
0980デフォルトの名無しさん
2011/09/29(木) 03:54:47.63おいw
0981デフォルトの名無しさん
2011/09/29(木) 07:22:56.66なに?
0982デフォルトの名無しさん
2011/09/29(木) 07:24:00.820983デフォルトの名無しさん
2011/09/29(木) 07:30:03.990984デフォルトの名無しさん
2011/09/29(木) 07:31:13.42C言語なら俺に聞け(入門編)Part 90
http://hibari.2ch.net/test/read.cgi/tech/1317249060/
0985デフォルトの名無しさん
2011/09/29(木) 08:10:48.95double NormalizeDouble(double value, int digits) {
static double t0[] = { 1.5, 10.5, 100.5, 1000.5, 10000.5, 100000.5 };
static double t1[] = { 1, 0.1, 0.01, 0.001, 0.0001, 0.00001 };
return (int)(value * t0[digits]) * t1[digits];
}
0986デフォルトの名無しさん
2011/09/29(木) 09:52:30.870987デフォルトの名無しさん
2011/09/29(木) 10:31:50.34>>948
私もそう思ったんですが... どうなんでしょうかね。標準入力に関して。
ちなみに stdio でなく read() で同じコードを書いてみると、一旦EOF(ctrl-D)を
入力したあとに後に再び read() を呼ぶことで、引き続き標準入力を読めました。
これは Ubuntu も Mac OS X も同じ。
ということは scanf() も同じ挙動をした方がいいのかな、と思ったり...
0988デフォルトの名無しさん
2011/09/29(木) 10:37:24.28標準入力をリダイレクトしてファイルから読んでいたら、そんな振る舞いはしないと思う。
0989デフォルトの名無しさん
2011/09/29(木) 10:57:40.79read()の戻り値が0の時にEOFと判断するのはstdioがやってること。
(cookedモードの)端末I/Oは行の先頭で^Dが入力されたときに0バイトが読み込まれたと返すだけで、
次にread()が呼び出されたら、入力に応じた値を返す。
現象から推測してreadが0を返したときに、
Linux(glibc?)はEOFフラグをたてないけど、OS XはEOFフラグを立てておき
EOFフラグが立っている状態でさらにscanf等を呼び出すとreadせずに
そのまま-1を返しているんじゃないのかな。
0990デフォルトの名無しさん
2011/09/29(木) 11:21:39.70ポインタ変数の宣言をする時なんで皆「void *i」なの?
「void* i」の方がポインタ変数って分かりやすくね?
0991デフォルトの名無しさん
2011/09/29(木) 11:37:10.10void* i, j;
みたいに間違うから。
C++だとvoid*形式のが好まれてるけどね。
0992デフォルトの名無しさん
2011/09/29(木) 11:46:34.690993デフォルトの名無しさん
2011/09/29(木) 14:22:43.19意味分かりません
0994デフォルトの名無しさん
2011/09/29(木) 14:24:55.500995デフォルトの名無しさん
2011/09/29(木) 15:03:50.20void* i,j; だと void*という型に見えちゃうけど実際には
void *i,j; だということを認識しろという話だろボケ
0996デフォルトの名無しさん
2011/09/29(木) 15:18:51.27こっちの話じゃね?
0997デフォルトの名無しさん
2011/09/29(木) 15:24:50.07俺は中間を取って void * p;
と真ん中に書く、どちらからも文句言わせんw
0998デフォルトの名無しさん
2011/09/29(木) 15:26:57.35どうでもいいと思うならわざわざ出てくるなよ。
0999デフォルトの名無しさん
2011/09/29(木) 15:39:48.741000デフォルトの名無しさん
2011/09/29(木) 15:41:15.7310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。