C言語なら俺に聞け(入門篇) Part 55
レス数が1000を超えています。これ以上書き込みはできません。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。
教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 131代目
http://pc12.2ch.net/test/read.cgi/tech/1255709298/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 54
http://pc12.2ch.net/test/read.cgi/tech/1254829314/
過去スレ
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
0002デフォルトの名無しさん
2009/10/29(木) 21:25:050003デフォルトの名無しさん
2009/10/29(木) 21:51:200004デフォルトの名無しさん
2009/10/29(木) 22:41:250005デフォルトの名無しさん
2009/10/29(木) 23:04:440006デフォルトの名無しさん
2009/10/29(木) 23:05:220007>1乙
2009/10/29(木) 23:26:00初心者、初級者の方は他の質問スレのほうが良いかもしれません。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること、サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
【初心者歓迎】C/C++室 Ver.69【環境依存OK】http://pc12.2ch.net/test/read.cgi/tech/1256022655/
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 131代目 http://pc12.2ch.net/test/read.cgi/tech/1255709298/
[ 前スレ ]
C言語なら俺に聞け(入門篇) Part 54 http://pc12.2ch.net/test/read.cgi/tech/1254829314/
[ 過去スレ ]
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専用スレ Part134 http://pc12.2ch.net/test/read.cgi/tech/1246115922/
C/C++小心者スレッドPart1 http://pc12.2ch.net/test/read.cgi/tech/1186262298/
[ 雑談スレは雑談スレで ]
malloc http://pc12.2ch.net/test/read.cgi/tech/1228462009/
break文の是非について http://pc12.2ch.net/test/read.cgi/tech/1245658400/
ポインタ死ねよ。 http://pc12.2ch.net/test/read.cgi/tech/1171172537/
Cでプログラム言語は完成した http://pc12.2ch.net/test/read.cgi/tech/1218012085/
C言語を始めるのに良いサイトってありますか? http://pc12.2ch.net/test/read.cgi/tech/1169824084/
C/C++ Coding Style Thread http://pc12.2ch.net/test/read.cgi/tech/1096687703/
C言語は関数ができなくても、理解可能か? http://pc12.2ch.net/test/read.cgi/tech/1090089115/
cとc++どっちがいいの? http://pc12.2ch.net/test/read.cgi/tech/1245506307/
Vim vs Emacs Part2 http://pc12.2ch.net/test/read.cgi/tech/1200654758/
0008デフォルトの名無しさん
2009/10/29(木) 23:45:35↓
ここではC++言語は別言語と考えますので、スレ違いになります。
ただしC++言語のコード(拡張子=.cpp)をリネームしてC言語の
コードとしてコンパイルできる場合はC言語のコードとみなします。
0009デフォルトの名無しさん
2009/10/30(金) 00:19:07.C
.cc
0010デフォルトの名無しさん
2009/10/30(金) 01:09:53文字化けして見れないんですがウィンドウズ上で見る方法ないですか?
0011デフォルトの名無しさん
2009/10/30(金) 01:12:32ブラウザにドロップしてみる
0012デフォルトの名無しさん
2009/10/30(金) 01:18:52できました!こんな簡単な方法があったとは・・・
0013デフォルトの名無しさん
2009/10/30(金) 01:20:08それと、真の場合は1とは限らないんでしょうか
int x = ( 1+2 == 2 ); これはint x = 0と同じでいいのか、
int x = ( 1+2 == 3 ); これだと常にx = 1になるのか、教えてください
0014デフォルトの名無しさん
2009/10/30(金) 01:21:28いい
>int x = ( 1+2 == 3 ); これだと常にx = 1になるのか、教えてください
なる
001513
2009/10/30(金) 01:25:30だとすると、今まで簡単に書ける式をわざわざif文とか必要ない変数とか宣言して書いてました
0016デフォルトの名無しさん
2009/10/30(金) 09:53:57曰く、
int x = (1 + 2 == 2) ? 1 : 0;
int y = (1 + 2 == 3) ? 1 : 0;
尤も、boolean型を作ってしまう手もありますが。
そもそもc99では標準で使えることですし。
stdbool.hが見つからないならこんな感じで作れます。
typedef enum {false, true} bool;
bool x = 1 + 2 == 2;
bool y = 1 + 2 == 3;
0017デフォルトの名無しさん
2009/10/30(金) 12:18:21下のほうはものすごく気持ち悪い
0018デフォルトの名無しさん
2009/10/30(金) 13:00:110019デフォルトの名無しさん
2009/10/30(金) 21:21:24dSData = new double*[100];
for(int i=0; i<100; i++){
dSData[i] = new double[100];
}
という感じで動的な二次元配列を作ったのですが、
sizeof(dSmokeData[0]);
とやるのと
double dTest[100];
sizeof(dTest);
とやるのとでは、sizeofの結果が違うのですが、なぜでしょうか?
0020デフォルトの名無しさん
2009/10/30(金) 21:23:41002119
2009/10/30(金) 21:27:03sizeof(dSmokeData[0]);
↓
sizeof(dSData[0]);
0022デフォルトの名無しさん
2009/10/30(金) 21:31:25dSData の型をみるよろし
002319
2009/10/30(金) 21:36:18確かに型は違っています。
dSDataを使って
double dTest[100];
sizeof(dTest);
とした状態と同じ結果を表すにはどうしたらよいでしょうか?
0024デフォルトの名無しさん
2009/10/30(金) 21:39:29double (*dSData)[100] = NULL;
002519
2009/10/30(金) 21:43:34double **dSData = NULL;
ではできないんでしょうか?
dSDataはグローバル変数で、要素の数はソースの途中で決まるため、宣言時には指定できないのです。。
0026デフォルトの名無しさん
2009/10/30(金) 21:48:19new とか使うってことは C++ でしょ?
STL の vector 使えばいいよ
002719
2009/10/30(金) 21:57:04vector<int> v(100);
sizeof(v);
double dTest[100];
sizeof(dTest);
sizeof(v);とsizeof(dTest);の結果がやはり違います。
002819
2009/10/30(金) 21:58:28vector<int> v(100);
↓
vector<double> v(100);
0029デフォルトの名無しさん
2009/10/30(金) 21:59:540030デフォルトの名無しさん
2009/10/30(金) 22:01:57i = sizeof (int);
i = sizeof i;
だっけか?
0031デフォルトの名無しさん
2009/10/30(金) 22:03:51なんで sizeof に拘るのさ?
0033デフォルトの名無しさん
2009/10/30(金) 22:12:35.size() で大きさは分かる
が、古いコンパイラだと vector の中身が連続領域じゃない可能性もある
0034デフォルトの名無しさん
2009/10/30(金) 22:16:090035デフォルトの名無しさん
2009/10/30(金) 22:18:310036デフォルトの名無しさん
2009/10/30(金) 22:20:59古い仕様書には明記されていなかったから
実装がどうなっているかはコンパイラ次第とかなんとか
0037デフォルトの名無しさん
2009/10/30(金) 22:36:280038デフォルトの名無しさん
2009/10/30(金) 22:51:59003919
2009/10/30(金) 23:05:41sizeof(dTest1[0]);
と
double dTest2[100];
sizeof(dTest2);
とやっても
sizeofの結果が異なります。。
004019
2009/10/30(金) 23:30:45誤爆です。間違ってました。合ってます。
0041デフォルトの名無しさん
2009/10/31(土) 03:42:450042デフォルトの名無しさん
2009/10/31(土) 07:06:03sizeofにこだわる必要はない
0043デフォルトの名無しさん
2009/10/31(土) 07:10:58関数じゃないんだからね
0044デフォルトの名無しさん
2009/10/31(土) 11:32:35これって何かおかしい?
0045デフォルトの名無しさん
2009/10/31(土) 11:36:430046デフォルトの名無しさん
2009/10/31(土) 11:47:54キャストされてないってコンパイラに怒られたから
test.c:11: warning: passing arg 2 of `strcpy' makes pointer from integer without a cast
0047デフォルトの名無しさん
2009/10/31(土) 12:14:27crypt.hをインクルードしてないだろ。
0048デフォルトの名無しさん
2009/10/31(土) 12:23:03#define _XOPEN_SOURCE
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main()
{
char a[100];
strcpy(a, (char)crypt("hogehoge", "EV"));
printf("%s", a);
return 0;
}
これで問題ないはずなんだけど一応全文を
0049デフォルトの名無しさん
2009/10/31(土) 13:20:140050デフォルトの名無しさん
2009/10/31(土) 13:53:01ありがとうございます
とりあえず生成できるようになったのはいいけど結果が2chと食い違ってて泣いた
でもhttp://age.s22.xrea.com/talk2ch/trip_new.txtの例どうりにやったらあってたんだよなぁ
0051デフォルトの名無しさん
2009/10/31(土) 14:01:180052デフォルトの名無しさん
2009/10/31(土) 14:12:580054デフォルトの名無しさん
2009/10/31(土) 14:52:170055デフォルトの名無しさん
2009/10/31(土) 15:07:230056デフォルトの名無しさん
2009/10/31(土) 15:10:420057デフォルトの名無しさん
2009/11/01(日) 01:33:45自動で生成されるシンプルなテキストエディタって何かないですか?
IDEじゃなくて、コマンドプロンプトから実行できる、あと軽いやつで
なにかおすすめはないですか?自分よくコードを打ち間違えるんすよ。
0058デフォルトの名無しさん
2009/11/01(日) 01:49:340059デフォルトの名無しさん
2009/11/01(日) 01:55:570060デフォルトの名無しさん
2009/11/01(日) 02:11:050061デフォルトの名無しさん
2009/11/01(日) 02:46:480062デフォルトの名無しさん
2009/11/01(日) 03:21:280063デフォルトの名無しさん
2009/11/01(日) 03:46:140064デフォルトの名無しさん
2009/11/01(日) 03:54:47makeしたときのコンパイルエラーをちょろっと直す程度ならいいんだけどね
ctagsですね、わかります
0065デフォルトの名無しさん
2009/11/01(日) 08:15:220066デフォルトの名無しさん
2009/11/01(日) 09:12:45客先から縛りをつけられたことがなくコードは常に1人で書いてるんだろうな
0067デフォルトの名無しさん
2009/11/01(日) 09:36:58なかなか高機能だよな。
0068デフォルトの名無しさん
2009/11/01(日) 13:18:330069デフォルトの名無しさん
2009/11/01(日) 13:22:570070デフォルトの名無しさん
2009/11/01(日) 13:27:180071デフォルトの名無しさん
2009/11/01(日) 13:28:240072デフォルトの名無しさん
2009/11/01(日) 13:28:410073デフォルトの名無しさん
2009/11/01(日) 13:29:16いくら道具にこだわっても、そんな脳ミソじゃその人生自体無駄だろうね
0074デフォルトの名無しさん
2009/11/01(日) 13:51:320075デフォルトの名無しさん
2009/11/01(日) 14:07:04こんなキチガイが回答者の質問スレとか始まる前から終わってるわ
0076デフォルトの名無しさん
2009/11/01(日) 14:16:430077デフォルトの名無しさん
2009/11/01(日) 14:18:440078デフォルトの名無しさん
2009/11/01(日) 14:21:31俺はどのエディタ以外は屑とか思ってないから。
0079デフォルトの名無しさん
2009/11/01(日) 14:34:050080デフォルトの名無しさん
2009/11/01(日) 14:37:540081デフォルトの名無しさん
2009/11/01(日) 14:42:110082デフォルトの名無しさん
2009/11/01(日) 14:44:38お前がそう思うんならそうなんだろう、お前ん中ではな
0083デフォルトの名無しさん
2009/11/01(日) 15:16:350084デフォルトの名無しさん
2009/11/01(日) 15:31:250085デフォルトの名無しさん
2009/11/01(日) 16:21:18思ったけど、やっぱり果てしなく面倒くさい。
テキストエディタってどれも安っぽくて、萎えるし。
シンプルで高級感があるソフトないんですかー><1日で挫折しましたよー。
誰かIDEのおすすめを教えてください。ちなみにC言語を勉強してます。
無駄な機能を省いた使いやすいやつないですか?
0086デフォルトの名無しさん
2009/11/01(日) 16:24:440087デフォルトの名無しさん
2009/11/01(日) 16:34:11Turbo C++ 1.01
0088デフォルトの名無しさん
2009/11/01(日) 16:37:02VisualStudio2008ExpressEdition
0089デフォルトの名無しさん
2009/11/01(日) 16:45:37「14歳からはじめるC++」という本で勉強しているんですが、エラーでコンパイルできなくてこまっています。
BCC DeveloperでDXライブラリをインクルードする設定をしました。
#include"DXLib.h"
int WINAPI WhnMain(HINSTANCE hi, HHNSTANCE hp, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE);
if (DXLib_lnit() == -1)return(-1);
WaitKey();
DXLib_End();
return(0);
}
以上のソースをコンパイルすると
エラー E2268 〜 6:未定議の関数'DXLIb_lnit' 〜
エラー E2268 〜 8:未定議の関数'DXLIb_End' 〜
とエラーになります。かなりググッたんですがまったくわからず...
どなたかアドバイスいただけませんか。
よろしくお願いします。
0090デフォルトの名無しさん
2009/11/01(日) 16:54:21シンプルで高級感があるソフトを作れるようになるまでがんばれ!
いい目標ができたじゃないか
0091デフォルトの名無しさん
2009/11/01(日) 16:55:22あいとえるの区別をつけよう
0092デフォルトの名無しさん
2009/11/01(日) 16:59:44大文字と小文字間違えてるんだろ。
そも、誤字がひどいから明言は出来ない。
0093デフォルトの名無しさん
2009/11/01(日) 17:23:48ソースとコンパイラの出力を全部そのままコピペして
0094デフォルトの名無しさん
2009/11/01(日) 17:31:15コピペで聞きなおせつったの俺だ。どこだっけか。
ttp://homepage2.nifty.com/natupaji/DxLib/dxfunc.html
ここみると、DXLib_Init → DxLib_Init だなXとxの違い。
0095デフォルトの名無しさん
2009/11/01(日) 17:32:530096デフォルトの名無しさん
2009/11/01(日) 17:33:540097デフォルトの名無しさん
2009/11/01(日) 17:43:10みなさんのおかげで解決できました。誤字でエラーだったんですね。xも小文字で。
丁重にみなさん教えていただき本当に本当にありがとうございました。
助かりました。
0098デフォルトの名無しさん
2009/11/01(日) 20:51:02初めてなので、なんていうか度合いがわかりません。簡単な計算プログラムしか作れない。。
0099デフォルトの名無しさん
2009/11/01(日) 20:58:24ヒットアンドブロー(マスターマインド)とか呼ばれる数当てゲーム
0100デフォルトの名無しさん
2009/11/01(日) 21:25:29例えば
int i = 8;で
char型のポインタにint型のiを代入したいんですが
上手くいきません
どうすればいいでしょうか?
0101デフォルトの名無しさん
2009/11/01(日) 21:29:16int i = 8;
char* p = (char*)i;
でいいの?
0102デフォルトの名無しさん
2009/11/01(日) 21:33:110103デフォルトの名無しさん
2009/11/01(日) 21:42:54unsigned char AAA[10]:
unsigend shor int aa;
}BB
unsgined char buf[500];
こういった変数があったとして、
struct BBの全12バイト、配列buf[300]-[500]の値を2バイトずつ加算して足して行き
最終的に足したものの2の補数を計算したいとおもうのですが
引数を一つとしてうまく渡す方法はないでしょうか?
struct BBを足したあと、配列[300]からまた順次足していくみたいな
structBBの終わりのアドレスの次が、配列buf[300]の先頭になるとかどうすればよいのでしょうか?
0104デフォルトの名無しさん
2009/11/01(日) 21:48:380105デフォルトの名無しさん
2009/11/01(日) 21:52:34多分、期待してるようなのは無理。
0106100
2009/11/01(日) 22:00:44>>101
たぶんそうなんですが、うまくいきません
>>102
学校の宿題で自分なりに書いてみたんですが、うまくいきません
16行目です
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10038.txt
何か根本的なところを間違えているかもしれません
実行結果
http://codepad.org/0xazNy9b
0107デフォルトの名無しさん
2009/11/01(日) 22:04:11ではstructBBあるいは配列[300]以降のデータを書き換えると、それらのコピーが書き換えられるというのは
どうすればよいのでしょうか?
コピーstructBBの次が、コピーの配列[300]以降で、コピー元をかえると、自動的にコピー先も書き換えられるという
0108デフォルトの名無しさん
2009/11/01(日) 22:06:52制御文字
0109デフォルトの名無しさん
2009/11/01(日) 22:07:31C言語の範疇では無理。
0110デフォルトの名無しさん
2009/11/01(日) 22:09:30>>110
0112デフォルトの名無しさん
2009/11/01(日) 22:35:28とりあえず、日本語の勉強をすると良いよ。
0113デフォルトの名無しさん
2009/11/01(日) 22:37:42コードの目的を明確に言葉で表せないなら
それをロジックで組むのも不可能だよ。
0114デフォルトの名無しさん
2009/11/01(日) 22:47:070115デフォルトの名無しさん
2009/11/01(日) 23:07:58じゃんけんが作れたなら次は格ゲーでもどうかな?
ほとんど同じ論理でグーチョキパーの数を増やしていくだけだぞ
0116デフォルトの名無しさん
2009/11/01(日) 23:08:45こういうこと?
違ったらごめん
http://0x72.net/upload/src/0001.c.txt
0117デフォルトの名無しさん
2009/11/01(日) 23:09:16もしかしてこうゆうことがしたい?
struct {
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB;
unsgined char buf[500];
} wholeParam;
こうやって関数の仮引数としてwholeParamを渡す。
0118デフォルトの名無しさん
2009/11/01(日) 23:26:13unsigned char AAA[10]:
unsigend shor int aa;
}BB;
unsgined char buf[500];
short int f(int x)
{
return x>=0 && x<6 ? ((short *)&BB)[x]:((short *)(buf+300))[x];
}
buf[300]〜[500] だと突き抜けるから、
多分 [299]〜[499]のつもりなんだろうけど、
一応、書いてある通りに。
0119デフォルトの名無しさん
2009/11/01(日) 23:30:09数字としてなのか値としてなのか。
関数通せば整数一つから擬似的に不連続を繋げられるけど、
その後どうしたいのか不明確すぎる。
0120デフォルトの名無しさん
2009/11/01(日) 23:33:42sizeof(struct BB)が12byteである保証は無いんで、運が悪ければハマるかもね。
0121デフォルトの名無しさん
2009/11/01(日) 23:34:540122100
2009/11/01(日) 23:41:06>>116
ありがとうございます!
そういうことです!
自分のレス見返したら問題文書いてなくて
すいませんでした。
もう一度勉強してきます
0123デフォルトの名無しさん
2009/11/01(日) 23:41:39#define unsigend unsigned
#define unsgined ;unsigned
struct{
unsigned char AAA[10]:
unsigend shor int aa;
}BB
unsgined char buf[500];
unsigned short int f(int x)
{
return x>=0 && x<5 ? ((short *)BB.AAA)[x]:x==6?(BB.aa:(short *)(buf+300))[x];
}
0124デフォルトの名無しさん
2009/11/02(月) 07:44:030125デフォルトの名無しさん
2009/11/02(月) 08:34:00BCCでも使えるよ
0126デフォルトの名無しさん
2009/11/02(月) 10:04:530127デフォルトの名無しさん
2009/11/02(月) 11:22:040128デフォルトの名無しさん
2009/11/02(月) 11:27:20Wintelの場合、ライブラリファイルフォーマットは事実上共通
だろ?だからリンカで繋げられれば動く筈だが...ダメなのか?
0129デフォルトの名無しさん
2009/11/02(月) 12:20:530130デフォルトの名無しさん
2009/11/02(月) 13:28:09明らかに API ではなく CRT なわけだが、それが何の関係が?
0131質問!
2009/11/02(月) 13:30:230132デフォルトの名無しさん
2009/11/02(月) 13:41:120133デフォルトの名無しさん
2009/11/02(月) 13:54:31C実行時ライブラリ
0134デフォルトの名無しさん
2009/11/02(月) 14:03:14条件付でYES。 VCのランタイムのソース見ればわかる。
_beginthread(ex) は、
VCで提供している標準関数をスレッドセーフにするために、 TLSを作ったり
浮動小数点関連や 構造化例外(API)→C++例外配送機構 の初期化を行った後
CreateThread を呼び出してる。 (callback 関数も内部のものを利用)
thread が死んだ時、上記の後始末もやってる。
つまり、標準関数周辺のランタイムも VC のを使うなら動くわけだが…
なお、BCC は同じ名前で似たような機能の _beginthread(ex) を自前で用意しているんじゃなかったかな
0135デフォルトの名無しさん
2009/11/02(月) 15:29:560136デフォルトの名無しさん
2009/11/02(月) 15:34:410137デフォルトの名無しさん
2009/11/02(月) 15:55:20本当なの?
0138デフォルトの名無しさん
2009/11/02(月) 16:06:36うそだよ
・・・って一気に切り捨てるのもなんだから問おう。
> 関数内で定義した変数
ってなんだ?
0139デフォルトの名無しさん
2009/11/02(月) 16:14:27スタック上に確保される実装が多いから、
ネスト深くしすぎるとスタック溢れするからってことだろ。
まあ、普通に使う分には気にしなくていいよ。
ただし、ローカル自動変数にあまり巨大な領域を使うなってことは言える。
void func(){
int a[1000][1000][1000]; // こういうのは止めろってこと。
return;
}
0140デフォルトの名無しさん
2009/11/02(月) 16:17:23ヒープでもありえねーよw
0141138
2009/11/02(月) 16:17:39まあ入門編スレだしな。
>>137
しかしローカル自動変数を削除っていったい何をどうしたいんだ?
そういう間違ったことを教えてきたクソに
聞くべきじゃないか?
0142デフォルトの名無しさん
2009/11/02(月) 16:19:10int a[1000][1000][1000]
が欲しい場合どうすればいいんでしょうか?
newでヒープに確保しようにも無茶ですよね。
0143デフォルトの名無しさん
2009/11/02(月) 16:20:54mmap 使うべし
0144デフォルトの名無しさん
2009/11/02(月) 16:27:27UNIX系OS独自のものですか?
クロスプラットフォームに使える
mmapみたいなものはありませんでしょうか?
C++ライブラリでもいいんで。
0145デフォルトの名無しさん
2009/11/02(月) 16:36:32K&R とコンパイラのマニュアル、& スペシャルボーナスで Google
これでダメなら、せっかく頑張っても先はないから、他の科目で優をとるために力を回すべき
ちなみに C++ の禿本は K&R の3倍くらい難しい
0146デフォルトの名無しさん
2009/11/02(月) 16:46:51ヒープに取れない→2次記憶としてファイルを使う→ファイル操作に縛りがでるかも?
で、汎用性の高いものは作りにくいんでないかな?
0147デフォルトの名無しさん
2009/11/02(月) 16:55:03CでなくなってしまうがC++でプロキシクラスでoperator[]を
オーバーロードすればディスク上に巨大な配列が取れる
ただし激遅なのはもちろん
0148デフォルトの名無しさん
2009/11/02(月) 16:56:2832bit 空間に 1GB なら基本的に無理はない
そういうオーダーでいくつも取る気なら 64bit を選択しれ
0149デフォルトの名無しさん
2009/11/02(月) 16:56:53なるほど、確かに。
>>147
あー擬似的にクラスで実現するってことですか。
0150デフォルトの名無しさん
2009/11/02(月) 16:56:560151デフォルトの名無しさん
2009/11/02(月) 16:58:25型が int なんで… 微妙にアウト? (べき指数のベースが 1000 vs 1024 で違うけど)
0152デフォルトの名無しさん
2009/11/02(月) 16:58:52Windows と Linux で関数名が違うから
自分でラッパー書けばいいよ
0153デフォルトの名無しさん
2009/11/02(月) 17:06:24あとその巨大な配列の全部に要素を入れるのではなく
ガラガラな使い方をするのなら、疎行列(sparse matrix)という技法がある
0154142
2009/11/02(月) 17:09:20なんか私の知識をずっと超えたレベルになって来たようで、
勉強不足を痛感する限りです。
0155デフォルトの名無しさん
2009/11/02(月) 17:13:36ローカルスコープでも使わせたいのかしらん
void func () {
int foo; /* 関数全域で使う変数 */
{ int a; /* a を使うコード */ }
}
C++ なら コンストラクタ/デストラクタの都合があるので意味ありそうだけど(それでも PODはあやしいが…)
C でローカルスコープ脱出後に戻されるという保証はないよね?
0156デフォルトの名無しさん
2009/11/02(月) 17:21:52というか
int a[1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000][1000];
でもC/C++の仕様上は問題はないんだよね。
単に現実を見ろよって話なだけで。
0157デフォルトの名無しさん
2009/11/02(月) 17:25:49コンパイルされたコードを見ると笑えてくるけど
0158デフォルトの名無しさん
2009/11/02(月) 17:27:36賢いコンパイラなら、以下のiとjは同じ領域を使いまわすかもしレナ。
void func(int para)
{
{
int i = para;
}
{
int j = para;
}
}
0159デフォルトの名無しさん
2009/11/02(月) 17:32:32言えてる。
とくにそれが配列だったりしたらそうするかもしれないね。
0160デフォルトの名無しさん
2009/11/02(月) 17:39:12領域の使いまわしが発生しているとすると、削除には該当しないんだよねー
(スコープ脱出後もメモリ上は存在している という意で)
なおさら
「関数内で定義した変数は削除しないとスタックオーバーフローとかいうのになる」
の意図が見えないな
0161デフォルトの名無しさん
2009/11/02(月) 18:00:110162デフォルトの名無しさん
2009/11/02(月) 18:01:390163デフォルトの名無しさん
2009/11/02(月) 20:51:28CRT なら陰極線管と翻訳すべきだった
0164デフォルトの名無しさん
2009/11/02(月) 21:03:190165デフォルトの名無しさん
2009/11/03(火) 07:10:51ってことでは
0166デフォルトの名無しさん
2009/11/03(火) 11:29:36スタックオーバーフローにはならんのでは
0167デフォルトの名無しさん
2009/11/03(火) 12:29:47このプログラムだと最初の文字が評価されなくて困っています。
アドバイスをお願いします。
#include <stdio.h>
int runlength(int length, char *str_org, char* str_enc){
int i,j = 0;
char *RLE = str_enc;
while(length--){
if(str_org[i] == str_org[i + 1]){
i++;
j++;
}
else{
*str_enc++ = str_org[i];
*str_enc++ = '1' + j;
i++;
j = 0;
}
if(str_org[i] == 0)
break;
}
str_enc = 0;
return(*RLE);
}
0168続きです。
2009/11/03(火) 12:30:32char buf_r[1024] = {0};
char buf_w[1024] = {0};
int length;
printf("文字列の入力\n");
scanf("%s",buf_r);
runlength(1024,buf_r,buf_w);
printf("[ランレングス符号化]\n%s\n",buf_w);
return(0);
}
0169デフォルトの名無しさん
2009/11/03(火) 12:37:240170デフォルトの名無しさん
2009/11/03(火) 12:37:57とか?
0171デフォルトの名無しさん
2009/11/03(火) 12:44:55ゲームではどういうところで使われてるんですか?
具体例を教えてください。
0172デフォルトの名無しさん
2009/11/03(火) 12:45:450173デフォルトの名無しさん
2009/11/03(火) 12:47:460174デフォルトの名無しさん
2009/11/03(火) 12:49:090175デフォルトの名無しさん
2009/11/03(火) 13:07:36>>116 を参考にしてみて
同じ学校なのかな?
0176デフォルトの名無しさん
2009/11/03(火) 13:37:000177デフォルトの名無しさん
2009/11/03(火) 13:47:39暇だからやってみた。参考になれば
http://0x72.net/upload/src/0002.c.txt
0178デフォルトの名無しさん
2009/11/03(火) 16:06:440179デフォルトの名無しさん
2009/11/03(火) 16:10:330180デフォルトの名無しさん
2009/11/03(火) 17:16:24↑*って何
0181デフォルトの名無しさん
2009/11/03(火) 17:17:050182デフォルトの名無しさん
2009/11/03(火) 17:22:060183デフォルトの名無しさん
2009/11/03(火) 17:36:070184デフォルトの名無しさん
2009/11/03(火) 17:48:510185デフォルトの名無しさん
2009/11/03(火) 17:58:050186デフォルトの名無しさん
2009/11/03(火) 19:37:460187デフォルトの名無しさん
2009/11/03(火) 20:19:45○ アヌス
「アナル」は形容詞形。
「アナル○○○」と後ろに続く場合の活用形。
単体で名詞として使うなら「アヌス」とするべき。
0188デフォルトの名無しさん
2009/11/03(火) 20:24:04英語弱者って電子土方やってても辛そう
0189デフォルトの名無しさん
2009/11/03(火) 20:28:350190デフォルトの名無しさん
2009/11/03(火) 21:12:34最近の2chって>>188みたいに無意味に突っ掛かってくるヤシが多いよな。
氏ねばいいのに。
0191デフォルトの名無しさん
2009/11/03(火) 21:14:50みんなタヒねばいいのに
くそが
0192デフォルトの名無しさん
2009/11/03(火) 21:15:230193デフォルトの名無しさん
2009/11/03(火) 21:16:110194デフォルトの名無しさん
2009/11/03(火) 21:17:35仕様書ある夫さんですか?
0195仕様書ある夫さん
2009/11/03(火) 21:23:190196デフォルトの名無しさん
2009/11/04(水) 14:32:31{
SOCKET SOCK = (SOCKET)buf;
voidポインタで渡された値をソケット型にキャストしたいんだけど
これだとうまくいかない
0197デフォルトの名無しさん
2009/11/04(水) 14:38:19SOCKETって構造体か何かじゃねーの?
0198デフォルトの名無しさん
2009/11/04(水) 14:38:41Func( (void*) sock );
呼ぶ側はもちろんこうだよな?
0199デフォルトの名無しさん
2009/11/04(水) 14:39:290200デフォルトの名無しさん
2009/11/04(水) 14:46:160201デフォルトの名無しさん
2009/11/04(水) 14:51:260202デフォルトの名無しさん
2009/11/04(水) 15:14:080203デフォルトの名無しさん
2009/11/04(水) 15:52:19C FAQでも読んどけ
0204デフォルトの名無しさん
2009/11/04(水) 15:55:48C FAQのどれ?項番教えて
0205デフォルトの名無しさん
2009/11/04(水) 16:12:13int main(){
int i = f(1); /* できるの? */
return 0;
}
0206デフォルトの名無しさん
2009/11/04(水) 16:16:25少なくともGNU CとC++では使える。
0207デフォルトの名無しさん
2009/11/04(水) 16:17:410208デフォルトの名無しさん
2009/11/04(水) 16:20:19自動変数の初期化なんてのは所詮は普通に代入してるだけだからな。
0209デフォルトの名無しさん
2009/11/04(水) 18:43:100210デフォルトの名無しさん
2009/11/04(水) 18:56:02できない、と思っているなら
なぜそう思うのかを開陳すべき
0211デフォルトの名無しさん
2009/11/04(水) 19:27:24( )
ノω|
__[警]
( ) ('A`)
( )Vノ )
| | | |
0212デフォルトの名無しさん
2009/11/04(水) 19:54:14;
このコードの意味を説明してもらえませんか?
自己解釈
1 qの値をpに代入する
2 その値が0でなければwhileループ内を実行する
3 p及びqのアドレスを1インクリメントする
こういう意味ですか?
0213デフォルトの名無しさん
2009/11/04(水) 20:05:342. p及びqのアドレスを1インクリメントする
3. 1の値が0でなければwhileループ内を実行する
インクリメントは*qの値が0であってもそうでなくても行われる
whileループ内の文が実行されるのはインクリメントが行われた後
0214デフォルトの名無しさん
2009/11/04(水) 20:14:06thx
0215デフォルトの名無しさん
2009/11/04(水) 20:51:17そういうトリッキーなコードを書いてウケたのは1980年代
なんでw
30年前は兎も角現在そういうコードを書いてもプロセッサ
までその努力が全く届かないので
do{ *p=*q; p++,q++ }while(*q!='¥0');
とかの演算子の優先順位を記憶していない人でも読めるコード
で書くのが吉
0216デフォルトの名無しさん
2009/11/04(水) 20:53:53うっせはげ
うっせはげ
うっせはげ
0217デフォルトの名無しさん
2009/11/04(水) 20:54:01for(;;){ *q=*p;p++,q++; if(*p=='¥0')break; }
0218デフォルトの名無しさん
2009/11/04(水) 20:56:030219デフォルトの名無しさん
2009/11/04(水) 21:02:010220デフォルトの名無しさん
2009/11/04(水) 21:02:42あの程度をトリッキーという技量で論じた結果がそれ
演算子の優先順位くらい理解していないから間違えた
a = 1 + 2 * 3; の優先順位くらい頼むから理解してくれ
というのと五十歩百歩の域を出ない
0221デフォルトの名無しさん
2009/11/04(水) 21:05:120222デフォルトの名無しさん
2009/11/04(水) 21:15:330223デフォルトの名無しさん
2009/11/04(水) 21:21:01while(*p++ = *q++);
これで必要かつ充分
0224デフォルトの名無しさん
2009/11/04(水) 21:24:290225デフォルトの名無しさん
2009/11/04(水) 21:26:450226デフォルトの名無しさん
2009/11/04(水) 21:29:33ワロタ
本当だw
0227デフォルトの名無しさん
2009/11/04(水) 21:35:02いえ、お願いします
0228デフォルトの名無しさん
2009/11/04(水) 21:36:33自分で書いたんだろう
動作テストしてみな
ちゃんと動くかどうか
0229デフォルトの名無しさん
2009/11/04(水) 21:53:35分解するとこんな感じか
普通に>>212のままの方がいいな
0230デフォルトの名無しさん
2009/11/04(水) 22:35:12冥途の土産に持っていけ
0231デフォルトの名無しさん
2009/11/04(水) 22:53:130232デフォルトの名無しさん
2009/11/04(水) 23:24:49. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .
記念
0233デフォルトの名無しさん
2009/11/05(木) 01:03:15わかる
0234デフォルトの名無しさん
2009/11/05(木) 02:52:310235デフォルトの名無しさん
2009/11/05(木) 04:33:07そうでなく、int *などなら>>223で充分。イディオムとして成立している書き方が読めないのは単に経験不足。
それでもトリッキーだというのなら、
while(*p++ = *q++) {
; /* 空 */
}
とでもしておけばいい。
0236デフォルトの名無しさん
2009/11/05(木) 05:07:39アドレス12345678の値をFBにせよ
みたいな。
こういうこと難しい?
0237デフォルトの名無しさん
2009/11/05(木) 05:42:28簡単にできる。
0238デフォルトの名無しさん
2009/11/05(木) 10:18:25でいいのだろうか
0239デフォルトの名無しさん
2009/11/05(木) 10:24:45* (char *) 0x12345678 = 0xfb;
0240デフォルトの名無しさん
2009/11/05(木) 10:26:050241デフォルトの名無しさん
2009/11/05(木) 10:45:490242デフォルトの名無しさん
2009/11/05(木) 10:50:580243デフォルトの名無しさん
2009/11/05(木) 11:09:2916進ではない、と思うのが自然な飢餓する。
0244デフォルトの名無しさん
2009/11/05(木) 12:11:12>>217の糞コードじゃ0がコピーされないだろ
0245デフォルトの名無しさん
2009/11/05(木) 14:08:280246デフォルトの名無しさん
2009/11/05(木) 14:17:460247デフォルトの名無しさん
2009/11/05(木) 15:14:38それだと最終的なp, qの値が違う
for(;;) {
*q=*p;
if(*p=='\0') {
p++;
q++;
break;
}
p++,q++;
}
0248デフォルトの名無しさん
2009/11/05(木) 15:55:24つ情報処理技術者試験
0249デフォルトの名無しさん
2009/11/05(木) 16:18:28この課題の『Aについて』でいきなり詰まってしまいました。
少しずつ理解しながらやりたいので、だれか協力お願いします。
なんどかこのスレで質問することになると思います。
0250デフォルトの名無しさん
2009/11/05(木) 16:27:24協力お願いしますでは何を答えていいのかわかりませんので
0251249
2009/11/05(木) 16:33:130252デフォルトの名無しさん
2009/11/05(木) 16:42:030253249
2009/11/05(木) 16:56:59整数乱数とはなんですか?
Aについてですが、今までは
int kansuu(int x)
{
return x*x;
}
のように数式を作るような使い方しかして来ませんでした
問題文にあるように関数の中で、min,maxを定義できるんですか?
0254デフォルトの名無しさん
2009/11/05(木) 17:03:30int randomNumber (int min, int max) {
return rand() % (max - min + 1) + min;
}
0255デフォルトの名無しさん
2009/11/05(木) 17:17:48剰余を使うな。
0256デフォルトの名無しさん
2009/11/05(木) 17:18:54{
return (int)(rand() / (RAND_MAX + 1.0) * (max - min + 1)) + min;
}
0257デフォルトの名無しさん
2009/11/05(木) 17:20:40今更気にする必要なし。
0258デフォルトの名無しさん
2009/11/05(木) 18:00:43振り直し法を使わないと均等にはならないよ。
例えば RAND_MAX が 7 として、
それで 1〜6 の乱数を求めたら
1/8 の確率のものと 2/8 の確率のものが混ざってしまうだろ。
これは RAND_MAX を大きくしても解決しない問題だろ。
0259デフォルトの名無しさん
2009/11/05(木) 18:09:31それはない。rand() の線形合同法では mod を使うのはご法度。
0260デフォルトの名無しさん
2009/11/05(木) 18:16:040261デフォルトの名無しさん
2009/11/05(木) 18:51:49実数を使っても無駄だよ。
int randomNumber(int min, int max)
{
return rand() / (RAND_MAX / (max-min+1)) + min;
}
整数でも変わらん。
どうしても均等にしたければ振り直し法を使うしかない。
0262デフォルトの名無しさん
2009/11/05(木) 18:54:310263デフォルトの名無しさん
2009/11/05(木) 19:02:14奥山晴彦氏の乱数の改良でも使えばいいだろ
http://www.vector.co.jp/soft/data/prog/se002453.html
0264デフォルトの名無しさん
2009/11/05(木) 19:09:44if(m>0 && n>0 && m<=999999999 && n<=999999999)
これでいいんでしょうか?
もっとスマートになりそうな気が…
0265デフォルトの名無しさん
2009/11/05(木) 19:15:070266264
2009/11/05(木) 19:20:53えっとつまり
if(m>0 && m<=999999999 && n>0 && n<=999999999)
ってことですか?
個人的に「999999999なんて入力しないんじゃなかろうか」と思ったのですが…
0267デフォルトの名無しさん
2009/11/05(木) 19:24:430268デフォルトの名無しさん
2009/11/05(木) 19:34:10とりあえずはね
ただし >>267 が言っているような問題がまだ残っているし
入力は屈指のこわーい所で、範囲チェックだけで済むかどうかも怪しいぞ
0269264
2009/11/05(木) 19:45:26急いでソース全部打ってきました
/* 9桁以下の2つの正の整数m,nを入力して、m/nの小数部分 */
/* を四捨五入して得られる整数値を出力するプログラム */
#include <stdio.h>
int main(void)
{
int m,n,quotient;
printf("\n9桁以下の正の整数を2つ入力して下さい\n");
scanf("%d%d",&m,&n);
if(m>0 && n>0 && m<=999999999 && n<=999999999){
quotient = (m+n/2)/n;
printf("\n%d/%dの小数部分を四捨五入して得られる整数値は、%dです。\n\n",m,n,quotient);
}else{
printf("\n入力する値は9桁以下の正の整数にして下さい。\n"
"プログラムを終了します。\n\n");
}
return 0;
}
コメント内のプログラムを作成するのが課題なのですが、ループ処理はまだ習っていないので終了という形にしてみました。
mとn分けたほうがいいでしょうか?
0270デフォルトの名無しさん
2009/11/05(木) 19:51:44今んとこそこまでかな
0272デフォルトの名無しさん
2009/11/05(木) 20:49:5411桁とかの数入力されときどうなるんだっけ?
0273デフォルトの名無しさん
2009/11/05(木) 21:18:5910の位および1の位を四捨五入することによって得られる2つの整数を表示するプログラムを作成せよ。
例)『425』を入力した場合、『400, 430』が画面に表示される。
宿題でこんなのが出たのですがどうしても出来ません!!
どなたか教えてください!!
0274デフォルトの名無しさん
2009/11/05(木) 21:19:58#include<stdio.h>
#include<math.h>
int main(void){
int x,a,b;
scanf("%d",&x);
a=(x/100)+0.5;
a=((int)a)*100;
b=(x/10)+0.5;
b=((int)b)*10;
printf("10の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",a);
printf("1の位を四捨五入して整数で表します.\n");
printf("結果=%d\n",b);
return 0;
}
0275デフォルトの名無しさん
2009/11/05(木) 21:25:03惜しい!
0276デフォルトの名無しさん
2009/11/05(木) 21:34:03あれみたいに、
右から順にボタンLEDが点灯していき左端で停止
停止したら右からまたLEDが順に点灯していきスタック
スタックしたら右からまたLEDが・・・
ってのをやりたいのですが、「一行で」やるにはどうすればいいのですか。
ifを使うとビットシフトでできるのですが
「一行でやれよバカ」だそうです。
0277デフォルトの名無しさん
2009/11/05(木) 21:38:33質問の内容が意味不明だが
改行しなきゃいいんじゃないかな?
0278デフォルトの名無しさん
2009/11/05(木) 21:39:590279デフォルトの名無しさん
2009/11/05(木) 21:42:06日!本!語!で!お!k!
0280デフォルトの名無しさん
2009/11/05(木) 21:45:36char LED = 0x01;
Fuckintosh = LED << 1;
で、左端のLEDまで点灯させます。 2進数で10000000です
じゃあ左端を点けたまま再度右から点灯させていくなら 10000001 -> 10000010とシフトしていけばいいのか、と
別に変数を用意し、+ したのですが
なぜかこれだと 二個同時に点いたります。
ifで分けてやると思い通りの点灯パターンを行うのですが
「(ifとか使わず)一行でやれよバカ」だそうです。
0281デフォルトの名無しさん
2009/11/05(木) 21:47:09シフトしていくLEDと隣り合ったLEDが点いて消えたり点いたり、
一緒にシフトして行ったり
shます
0282デフォルトの名無しさん
2009/11/05(木) 21:53:050283デフォルトの名無しさん
2009/11/05(木) 21:54:30if使ったコード晒せよ
0284デフォルトの名無しさん
2009/11/05(木) 22:02:38でけたwww
int i,j,hoge;for(i=0,LED=0;i<8;i++){hoge=LED;for(j=0;j<8-i;j++)(LED=hoge|(1<<j)),*p=LED;}
その説明では状況が分からん
0285デフォルトの名無しさん
2009/11/05(木) 22:03:1900000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
10000001
10000010
10000100
10001000
10010000
10100000
11000000
11000001
11000010
11000100
11001000
11010000
11100000
こんな感じ?
0286デフォルトの名無しさん
2009/11/05(木) 22:06:50LEDが16コあって、そのうちの8つがLEDコントローラA
残りの8つがBに繋がっちょります
が、8つ点ける時点でつまずきました
0287デフォルトの名無しさん
2009/11/05(木) 22:08:38よしここから右端から点けよう
10000001 点いた
10000011 あれ?
10000110 あれ?
10000111 おや?
10001101 なんじゃ
なんてことになってます。
0288デフォルトの名無しさん
2009/11/05(木) 22:11:50コードを晒すんだ!
そのほうが日本語より直接的で分かりやすいと思う
0289デフォルトの名無しさん
2009/11/05(木) 22:15:53Fuckintosh = 10000000 + (FuckOSX << 1) とかしたらどうかな、と思ったのですが
上のようにワケのわからんパターンで点灯し
ならORで、とやってもだめでした
>>288
仕事場に置いてきてまってるもんで
自販機を思い浮かべてもらえれば。
あの多段ボタンLEDそのままなので。
そのLEDは2進数00000000に対応しており、点けたい部位のビットを1にすれば光ります
10000000なら左端、00001000なら右から4番目、というふうに
0290デフォルトの名無しさん
2009/11/05(木) 22:17:530291デフォルトの名無しさん
2009/11/05(木) 22:18:19この時期まで研修とは…
大企業だな
裏山鹿
>>284 でおk
0292デフォルトの名無しさん
2009/11/05(木) 22:18:26Fuckintosh = 10000000 + (FuckOSX << 1)の 10000000 の部分は決め打ちではありません。
変数です。
if(FuckMac >= 10000000)
Fuckintosh = (FuckMac + (FuckOSX << 1));
という感じですかね
0293デフォルトの名無しさん
2009/11/05(木) 22:21:35左端と右端を点けるには10000001、つまり0x81
やはり左端の値を保持して、新たにシフトさせていく変数を用意し
左端の値と足していけば順次シフトできるんじゃなかろうか、
と思ったのです。
0294デフォルトの名無しさん
2009/11/05(木) 22:39:350295デフォルトの名無しさん
2009/11/05(木) 22:58:53101100110
110011101
011111011
になるのはいいんですが、この計算はたとえばどんな時に使用されるの?
0296デフォルトの名無しさん
2009/11/05(木) 22:59:47ではprintfやsacanfとかって.....
語源とか気になる関数とか多いです
0297デフォルトの名無しさん
2009/11/05(木) 23:03:17フラグの入れ替えとかハッシュ計算とか
0299デフォルトの名無しさん
2009/11/05(木) 23:09:48特定のビットだけ反転させたいときだな。
あまり使う機会はない。
>>296
print や scan に format の f 付けただけ。
0300デフォルトの名無しさん
2009/11/05(木) 23:14:03おお、こんなに早くお返事が!!!
サンクスです
検索かけても語源とかなかなか出てこなくって
「UNIXの古い資料調べれば全部分かる」
みたいな話はどこかに書いてありましたが
それもちょっとよく分からん話だったんで
0301デフォルトの名無しさん
2009/11/05(木) 23:27:380302デフォルトの名無しさん
2009/11/05(木) 23:43:26print formatted output
その他気になるのは↓で探すよろし
http://www.opengroup.org/onlinepubs/009695399/mindex.html
0303デフォルトの名無しさん
2009/11/06(金) 00:09:44画面の出し方は死ぬほどサンプルあるけれど
0304デフォルトの名無しさん
2009/11/06(金) 00:34:17windowclass にボタン指定しろよw
0305デフォルトの名無しさん
2009/11/06(金) 00:39:220306デフォルトの名無しさん
2009/11/06(金) 00:45:15RAID5の計算とか
CRCとか
画像処理とか
A = 101100110
B = 110011101
A xor B = C
C = 011111011
C xor A = ...
C xor B = ...
0307デフォルトの名無しさん
2009/11/06(金) 02:55:03リンク先までありがとうございます
正直、英語は読めないので何をどう見たらよいやら分かりませんが調べてみます
やはりプログラマーは英語必須なんでしょうなあ
0308デフォルトの名無しさん
2009/11/06(金) 02:59:12カスばっかだけど
0309デフォルトの名無しさん
2009/11/06(金) 03:03:42プログラミング以前の段階で淘汰されてて面白い
0310デフォルトの名無しさん
2009/11/06(金) 03:08:20英検三級ありゃやっていける。
0311デフォルトの名無しさん
2009/11/06(金) 03:39:30{
unsigned char LED = 0x01;
int i,j,n;
for (i = n = 0; i <= 36; n=++i)
{
LED = 0;
for (j = 8; j > 0; n-=j*(n>=j),j--)
{
LED |= (n>=j)<<(j-1);
}
for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}
return 0;
}
どうしてこうなった
0312デフォルトの名無しさん
2009/11/06(金) 04:21:24{
unsigned char LED = 0;
int i, stack = 0;
for (i = 8; n > i; n-=i--, stack++);
LED = ~0 << (8-stack) | !!n << (n-1);
return LED;
}
int main()
{
int i,j;
unsigned char LED;
for (i = 0; i <= 36; ++i)
{
LED = func(i);
for (j = 7; j >= 0; j--)
{
printf("%d", LED >> j & 1);
}
printf("\n");
}
return 0;
}
がんばってこれか
0313デフォルトの名無しさん
2009/11/06(金) 06:00:480314デフォルトの名無しさん
2009/11/06(金) 15:15:26関数に飛ぶことはできないの
0315デフォルトの名無しさん
2009/11/06(金) 15:16:460316デフォルトの名無しさん
2009/11/06(金) 15:17:11日本語でOK。
0317デフォルトの名無しさん
2009/11/06(金) 15:20:07signal()
0318デフォルトの名無しさん
2009/11/06(金) 15:45:210319デフォルトの名無しさん
2009/11/06(金) 16:01:100320デフォルトの名無しさん
2009/11/06(金) 16:02:26atexit()
0321デフォルトの名無しさん
2009/11/06(金) 16:12:23標準Cには、そういう仕掛けはない。
Win32 API なり、Pthreads なりを使うわけだが
OS が特定できんことには。
0322デフォルトの名無しさん
2009/11/06(金) 17:15:23無知は黙ってろよカス
0323デフォルトの名無しさん
2009/11/06(金) 17:31:42では一つ、signal()の標準的な使い方を教えてくだされ。
0324デフォルトの名無しさん
2009/11/06(金) 17:37:51引数の内容が長文化した場合、(継続文字?)について教えてください。
例えば、プリントエフ関数で、長文を表示させる場合、
printf("1行目から2行目\n3行目から4行目\n");
といったように書いていったのですが、
当然ながらだんだん見えなくなってくるので、
printf("・・・・3行目から4行目\n"
"5行目から6行目\n6行目から7行目\n・・・・");
と、表示していくことになりますが、
他によい方法はないのでしょうか。
こういう場合、どういう方法が一般的なのでしょうか。
プリントエフで一個ずつ表示するものなのでしょうか。
0325デフォルトの名無しさん
2009/11/06(金) 17:41:12質問の「何か」っていうのが具体的に何かわからないと何ともいえないが
0326デフォルトの名無しさん
2009/11/06(金) 17:43:30俺なら1行ごとに分ける
printf(
"1行目\n"
"2行目\n"
"3行目\n"
・・・・
"最終行\n");
それか、問題文を別ファイルから読み込む
0327デフォルトの名無しさん
2009/11/06(金) 17:52:34なるほど1行ずつですか。
>>それか、問題文を別ファイルから読み込む
買ってきた本でもファイルの入出力を最後のほうで取り上げています。
なんとかそこまで早くたどり着きたいものです。
最終的にはプロンプトでサウンドノベルみたく動く文字出力を実現したいです。
あの、1文字、1文字、動いていく感じがたまらなくいいので。
たぶん繰り返し処理とか使うんだろうなあとは思っているのですが。
0328デフォルトの名無しさん
2009/11/06(金) 18:08:36if((A >> B) |= C) != ( ((D >> E) << F) &= (G | H)){
VAR = I >> (J |= (K + L));
}
0329デフォルトの名無しさん
2009/11/06(金) 18:10:13馬鹿?
0330デフォルトの名無しさん
2009/11/06(金) 18:11:20if()
if()
if()
if()
if()
else if()
if()
if()
else if()
ifを判定するだけで最低1クロック無駄にする
0331デフォルトの名無しさん
2009/11/06(金) 18:18:100332デフォルトの名無しさん
2009/11/06(金) 18:39:470333デフォルトの名無しさん
2009/11/06(金) 18:43:02まだ減らせるぞw
((A >> B) |= C) != ( ((D >> E) << F) &= (G | H))&&(VAR = I >> (J |= (K + L)));
0334デフォルトの名無しさん
2009/11/06(金) 19:22:57ふつーは
printf("一行目\n");
printf("二行目\n");
printf("三行目\n");
printf("四行目\n");
0335デフォルトの名無しさん
2009/11/06(金) 19:46:240336デフォルトの名無しさん
2009/11/06(金) 20:05:35一回で済むことを4回もやるな。
0337デフォルトの名無しさん
2009/11/06(金) 20:15:430338デフォルトの名無しさん
2009/11/06(金) 20:18:320339デフォルトの名無しさん
2009/11/06(金) 20:20:03そりゃ俺も C 始める前にアセンブラで PRINT マクロ作ってたさ、そのアセンブラも自作でね
けど今どうなんだろう? C の printf には BASIC の PRINT コマンドほどの教育力あるんかね
俺個人としては、かえって饒舌すぎるところがあるように思えるんだが
0340デフォルトの名無しさん
2009/11/06(金) 20:24:320341デフォルトの名無しさん
2009/11/06(金) 20:50:570342デフォルトの名無しさん
2009/11/06(金) 20:53:290343デフォルトの名無しさん
2009/11/06(金) 21:11:570344デフォルトの名無しさん
2009/11/06(金) 21:49:550345デフォルトの名無しさん
2009/11/06(金) 22:06:530346デフォルトの名無しさん
2009/11/06(金) 22:14:14マクロとか変数名とか名前-アドレスマップとか
0347デフォルトの名無しさん
2009/11/06(金) 22:15:570348デフォルトの名無しさん
2009/11/06(金) 22:19:10初心者は黙ってろ。
0349デフォルトの名無しさん
2009/11/06(金) 22:28:10○ DIV = (300 >> 1)
0350デフォルトの名無しさん
2009/11/06(金) 22:39:15#define 90000000 adressV125
0351デフォルトの名無しさん
2009/11/06(金) 22:41:20ぬるぽ
0352デフォルトの名無しさん
2009/11/06(金) 22:42:13釣り針でかすぎw
0353デフォルトの名無しさん
2009/11/06(金) 22:47:28でもプラズマは本当に「そのプラットフォーム専用」でないと用意されていない。
0354デフォルトの名無しさん
2009/11/06(金) 22:53:320355デフォルトの名無しさん
2009/11/06(金) 22:59:590356デフォルトの名無しさん
2009/11/07(土) 00:46:37Fatal: ファイル VORBISFILE_STATIC.LIB が開けません
とメイク結果に表示されコンパイルできなくなってしまいました。
エディンタの再設定もしてあり、必要なファイルはあると思うんですが...
だれかアドバイスいただけないでしょうか。
0357デフォルトの名無しさん
2009/11/07(土) 00:55:410358デフォルトの名無しさん
2009/11/07(土) 01:04:48考えたんですが、stringsコマンドでバレてしまいますよね。
通常は暗号化したパスワードを文字列として持たせるのがベターなんでしょうか?
0359デフォルトの名無しさん
2009/11/07(土) 01:39:49すみません初心者用の本でライブラリを使いなさいと書いてあったんです...
本の通りにやり直してもできないんです
0360デフォルトの名無しさん
2009/11/07(土) 01:41:280361デフォルトの名無しさん
2009/11/07(土) 02:39:250362デフォルトの名無しさん
2009/11/07(土) 10:18:050363デフォルトの名無しさん
2009/11/07(土) 11:09:180364デフォルトの名無しさん
2009/11/07(土) 11:46:42自分で書いて面白いと思ってんの?
0365デフォルトの名無しさん
2009/11/07(土) 11:50:140366デフォルトの名無しさん
2009/11/07(土) 13:17:461行目\n\
2行目\n\
3行目\n\
・・・・
最終行\n\
");
0367デフォルトの名無しさん
2009/11/07(土) 13:20:210368デフォルトの名無しさん
2009/11/07(土) 14:31:46"1行目\n"
"2行目\n"
"3行目\n"
・・・・
"最終行\n"
);
0369デフォルトの名無しさん
2009/11/07(土) 15:06:46#include "hoge.txt"
";
printf(s);
0370デフォルトの名無しさん
2009/11/07(土) 17:34:37が成り立つことってあるのでしょうか。
0371デフォルトの名無しさん
2009/11/07(土) 17:45:410372370
2009/11/07(土) 17:50:170373デフォルトの名無しさん
2009/11/07(土) 17:54:11Ctrl-Z とか Ctrl-D とか ファイルリダイレクト とか
0374デフォルトの名無しさん
2009/11/07(土) 17:54:12Windows なら ctrl + z
*nix なら ctrl + d だっけか?
0375370
2009/11/07(土) 18:02:170376デフォルトの名無しさん
2009/11/07(土) 18:47:31char buffA[BUF], buffB[BUF];
char** str;
int needss, i, j, x, y;
質問です。上記の変数を利用しプログラムを記述しました。
まったく問題なく実行でき、さらに処理を追加しようと新たに
char buffC[BUF]という配列を宣言すると、エラーを吐くようになりました。
どうも、char型の変数を増やすとbuffBに文字列が格納された瞬間にエラーがでます。
変数名を変えても改善しませんでした。
プログラム自体には問題なく、当然コンパイラーは警告すらでません。
何が問題なのかまったく分からず困惑しています。
変数名が悪いのか、配列の要素数が全体で見れば多すぎるのかと思いましたが、そんなことはないはずですよね・・。
環境はUbuntu9.04 コンパイラGCC エディタEmacsです。
エラーの考えられる原因はなんでしょうか。
0377デフォルトの名無しさん
2009/11/07(土) 18:50:07iMacポチって待機中なんだけど…
0378デフォルトの名無しさん
2009/11/07(土) 18:53:18スタックオーバーフローか未初期化のポインタで何か操作しようとしてる可能性が高い
0379デフォルトの名無しさん
2009/11/07(土) 19:07:01ポインタはmallocでメモリを確保しています。
というか、変数を追加しなくても、実行できなくなりました・・。
mallocで確保したメモリがfreeで解放できずスタックオーバーフローになっているという落ちとかでしょうか。。
0380デフォルトの名無しさん
2009/11/07(土) 19:13:010381デフォルトの名無しさん
2009/11/07(土) 19:13:11bufBに文字列が格納された時にエラーが発生という
場合、格納しようとしている文字列に問題があると
考えられる。多分読み出してはならない領域を
指すポインタだとか....
正確なことはソース見なければわからないんで
うpローダ使ってアげてみたら?
0382デフォルトの名無しさん
2009/11/07(土) 19:15:040383デフォルトの名無しさん
2009/11/07(土) 19:18:200384デフォルトの名無しさん
2009/11/07(土) 19:19:29というが、
>define BUF 1024
>char buffA[BUF], buffB[BUF];
>char** str;
>int needss, i, j, x, y;
の中にあるポインタはstrしかなく、
そこにmallocの戻り値を格納するとしたら、多分
(charの配列ではなく)char*の配列を確保しているわけで
何かもうそもそもソースがおもしろいことに?^^
0385376
2009/11/07(土) 19:22:310386デフォルトの名無しさん
2009/11/07(土) 19:24:04これどういう意味ですか。
ポインタ型charにキャストするなら最初からそうやったらいかんのですか。
0387デフォルトの名無しさん
2009/11/07(土) 19:25:56関数のポインタだろうけど、なんぞこれw
0388376
2009/11/07(土) 19:33:16うpしました。ダメ出しお願いします。
0389デフォルトの名無しさん
2009/11/07(土) 19:34:35{
// ・・・
};
と書けばいいのになんで
typedef struct
{
// ・・・
}
SomeStruct;
と書くのが巷で流行ってるの?
0390デフォルトの名無しさん
2009/11/07(土) 19:39:41使うのはダサイかも
0391デフォルトの名無しさん
2009/11/07(土) 19:40:350392デフォルトの名無しさん
2009/11/07(土) 19:42:56これで宣言したのはタグ付きの構造体の中身であって、
型として認められていない。
ここでtypedef を用いると、「SomeStruct型の構造体である」ことを認めさせることになる。
typedefを使わないと、
struct SomeStruct MyStruct;
と別に一行必要になり。これでようやくSomeStruct型の構造体と認められるわけだ
つまり、構造体の「型宣言」と同時に「構造体として使えるように名前もつけてしまおう」という横着した手法なだけだ。
構造体は、述べたように最初の段階では使用できる構造体として認められない。
必ず、「SomeStruct型の構造を持つ○○」という名前をつけてやらなければ使用できない。
だからtypedefで型と名前を同時に決めることもよくある話。
0393デフォルトの名無しさん
2009/11/07(土) 19:47:01Cの頃からtypedef structでやっていればC++って何て便利なんだ!と思うかもしれないが
あれは余計なお世話といってよい。
0394デフォルトの名無しさん
2009/11/07(土) 19:47:040395デフォルトの名無しさん
2009/11/07(土) 19:49:40/*ここで必要な箱の数が分かったのでmallocで領域を確保*/
/*forで必要な行数回、1行の文字数のchar型の領域を作成*/
str = ( char ** )malloc( sizeof( char * ) * ( needBr + 1 ) );
for (i = 0; i <= needBr; i++){
str[i] = ( char * )malloc(oneLineLen * sizeof (char) + 1);
}
0396デフォルトの名無しさん
2009/11/07(土) 19:52:04なんか勘違いしてるっぽいな。
0397デフォルトの名無しさん
2009/11/07(土) 19:53:530398デフォルトの名無しさん
2009/11/07(土) 19:57:45↑
思いっきり書き忘れていました・・。
しかも括弧付けわすれで評価が意図しない形になる(はず)になっていました。
charが1バイトなので+1で大丈夫だっただけですよね・・。
0399デフォルトの名無しさん
2009/11/07(土) 20:01:040400デフォルトの名無しさん
2009/11/07(土) 20:03:020401376
2009/11/07(土) 20:11:20*** glibc detected *** ./a.out: double free or corruption (out): 0x082b9018 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7dfc604]
/lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7dfe5b6]
./a.out[0x8048823]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7da3775]
./a.out[0x8048521]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
08049000-0804a000 r--p 00000000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
0804a000-0804b000 rw-p 00001000 08:08 69284 /home/mint/Desktop/Cprogram/pr4/a.out
082b9000-082da000 rw-p 082b9000 00:00 0 [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7d8c000-b7d8d000 rw-p b7d8c000 00:00 0
b7d8d000-b7ee9000 r-xp 00000000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7ee9000-b7eea000 ---p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eea000-b7eec000 r--p 0015c000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eec000-b7eed000 rw-p 0015e000 08:08 1864 /lib/tls/i686/cmov/libc-2.9.so
b7eed000-b7ef0000 rw-p b7eed000 00:00 0
b7ef0000-b7efd000 r-xp 00000000 08:08 2779 /lib/libgcc_s.so.1
b7efd000-b7efe000 r--p 0000c000 08:08 2779 /lib/libgcc_s.so.1
b7efe000-b7eff000 rw-p 0000d000 08:08 2779 /lib/libgcc_s.so.1
b7eff000-b7f03000 rw-p b7eff000 00:00 0
b7f03000-b7f04000 r-xp b7f03000 00:00 0 [vdso]
b7f04000-b7f20000 r-xp 00000000 08:08 6255 /lib/ld-2.9.so
b7f20000-b7f21000 r--p 0001b000 08:08 6255 /lib/ld-2.9.so
b7f21000-b7f22000 rw-p 0001c000 08:08 6255 /lib/ld-2.9.so
bf80c000-bf821000 rw-p bffeb000 00:00 0 [stack]
Aborted
とかもうね・・・。
0402376
2009/11/07(土) 20:15:23395さんはじめありがとうございました・・。
0403デフォルトの名無しさん
2009/11/07(土) 20:34:31CってポインターがINTで4294967295までしか設定できないよね
それ以上のアドレスは指定できないけどどうすんの?アドレスが5000000000とかの指定できなくね?おわた
0404デフォルトの名無しさん
2009/11/07(土) 20:41:560405デフォルトの名無しさん
2009/11/07(土) 20:44:30ポインタはポインタであってポインタでしかない。
多くの実装でlong intに変換可能だというだけ。
なんだったら見たこともない宇宙文字列で実装してもいいのだ。
0406デフォルトの名無しさん
2009/11/07(土) 20:54:08どれでもいいから 64bit 版のコンパイラで sizeof(void*) を表示してみそ
0407デフォルトの名無しさん
2009/11/07(土) 20:56:100408デフォルトの名無しさん
2009/11/07(土) 20:57:50メモリが10GB(仮想記憶含まず)ならCPUもそれを指定できないとダメ子さんになるから
(intは何ビットか計算するの面倒だからやらないまぁ、64bitで十分だろうけど)
CPUのbit数xが10G < pow(2, x)を満たす必要がある
intはpow(2, x)なるbit数であるのが一般的である
また、規格ではポインタがintに変換できるとは書かれていない
C99からintptr_tとか入った気もするけど、マジックリストにでも使うんですか
とか思って特に調べていない
0409デフォルトの名無しさん
2009/11/07(土) 21:02:02long longが使えない
0410デフォルトの名無しさん
2009/11/07(土) 21:04:170411デフォルトの名無しさん
2009/11/07(土) 21:07:072038年までにはCは終わってる
0412デフォルトの名無しさん
2009/11/07(土) 21:09:47long long 使えるよ
C99には対応してないけど
ECC6.1.0(Embarcadero C++ Compiler)な
0413デフォルトの名無しさん
2009/11/07(土) 21:16:440414デフォルトの名無しさん
2009/11/07(土) 21:20:51もっと新しいいい言語が出ていればそっちに変わっているだろうが、
2038年にまだC言語が使われていれば何とかするしかない
0415デフォルトの名無しさん
2009/11/07(土) 21:22:270416デフォルトの名無しさん
2009/11/07(土) 21:25:080417デフォルトの名無しさん
2009/11/07(土) 21:28:060418デフォルトの名無しさん
2009/11/07(土) 21:28:45time_tを変えて再コンパイル、リンクするか64bitCPUに移行すれば、2038年問題なんて大したことではない
30年後もx86さまさまの人は時代後れを認識した方がいいと予言しておく
0419デフォルトの名無しさん
2009/11/07(土) 21:29:490420デフォルトの名無しさん
2009/11/07(土) 21:31:160421デフォルトの名無しさん
2009/11/07(土) 21:35:090422デフォルトの名無しさん
2009/11/07(土) 21:40:350423デフォルトの名無しさん
2009/11/07(土) 21:44:570424デフォルトの名無しさん
2009/11/07(土) 21:49:410425デフォルトの名無しさん
2009/11/07(土) 21:50:370426デフォルトの名無しさん
2009/11/07(土) 22:01:290427デフォルトの名無しさん
2009/11/07(土) 22:04:340428デフォルトの名無しさん
2009/11/07(土) 22:04:51その頃にはさすがに人類は死滅してるよ
0429デフォルトの名無しさん
2009/11/07(土) 22:07:17CPU関係ねーよカス
0430デフォルトの名無しさん
2009/11/07(土) 22:08:230431デフォルトの名無しさん
2009/11/07(土) 22:08:38今仮に18歳のぴちぴち大学1年生でも
30年後は48歳だよ?
48歳の人はあんまりもうプログラムはしてないんじゃないかな。
経営側か、現場であっても少なくとも設計よりの仕事をしていて
もうやりたくてもプログラムなんてさせてもらえなくて
夜遅く家に帰ると妻はうるさく、娘には嫌われ、
トイレ横の物置を改造して作った名ばかりのパソコンルームに
30年前に自作したコンピュータがおいてあって、
それの電源をいれてほそぼそと趣味のコードを打ち込むのが日課だったり^^
0432デフォルトの名無しさん
2009/11/07(土) 22:11:43そう思うと勿体ないよな。
これだけの科学技術を創り出すのに、どれだけの時間がかかったことか。
再び文明が生まれたとしても、車輪の再発明をするだけだ。
0433デフォルトの名無しさん
2009/11/07(土) 22:13:290434デフォルトの名無しさん
2009/11/07(土) 22:21:49人間が生まれて600万年
だが技術革命はここほんの100年余りの事だ
0435デフォルトの名無しさん
2009/11/07(土) 22:22:40どうかしてるかもしれないって話
0436デフォルトの名無しさん
2009/11/07(土) 22:23:450437デフォルトの名無しさん
2009/11/07(土) 22:23:580438デフォルトの名無しさん
2009/11/07(土) 22:24:550439デフォルトの名無しさん
2009/11/07(土) 22:53:51これ以上はオカルト板でしようぜ
0440249
2009/11/07(土) 23:38:09まず1列目に1〜9の数字を入れようとして
以下のようなプログラムを作りました。
http://www.dotup.org/uploda/www.dotup.org339690.c.html
しかし上のプログラムでは1列目に同じ数字が出てしまうので
1行目に出た数字は2,3行目には出ないようにしたいです。
それを改良したいのですが方法が分かりません。
教えてください。
0441デフォルトの名無しさん
2009/11/08(日) 00:12:03何がどうなって欲しいの?
0442デフォルトの名無しさん
2009/11/08(日) 00:19:228とか16進数なら表示できるのわかるんだけど、2進数って簡単に表示できないんだっけ?
0443デフォルトの名無しさん
2009/11/08(日) 00:21:060444デフォルトの名無しさん
2009/11/08(日) 00:22:000445デフォルトの名無しさん
2009/11/08(日) 00:22:530446デフォルトの名無しさん
2009/11/08(日) 00:24:300447デフォルトの名無しさん
2009/11/08(日) 00:27:08limits.hをインクルードしてsizeof(int) * CHAR_BITで
intのビット数を求め、10進数をunsignedにキャストして←ここ重要
1UL << (sizeof(int) * CHAR_BIT - 1)のマスクとandを取った結果が
0か1かを書きだして行く
マスクは>>で右シフトしてループ
0448デフォルトの名無しさん
2009/11/08(日) 00:27:48>>440のプログラムでは
100
100
300
など一列目に同じ数字が出ることがあるので
500
600
200
のように一列目の各行におなじ数字が出ないように改造したいです
0449デフォルトの名無しさん
2009/11/08(日) 00:32:10int main() {
int beam = 10; // チゲ
int i, n ; // counter
for ( n = 0; n != 1024; ++n ) {
printf( "%d : ", n );
for ( i = 0; i != beam; ++i ) {
printf( "%d", n >> ( beam - i - 1 ) & 1 );
}
printf( "\n" );
}
}
0450デフォルトの名無しさん
2009/11/08(日) 00:44:321〜9 までの重複しない3つの数字が欲しいだけ?
もしそうならこれでおk
{
int i, x, n[9];
for(i=0;i<9;i++) n[i]=i+1;
for(i=0;i<9;i++)
{
x=rand()%(i+1);
t=n[i];
n[i]=n[x];
n[x]=t;
}
for(i=0;i<3;i++) cardForNumbers[i+1][1]=n[i];
}
0451デフォルトの名無しさん
2009/11/08(日) 00:52:23char *ptrを引数として他の関数に渡す時は
other_Kansu (&ptr); ですよね?
char **ptrを引数として渡すときはどうなるんでしょうか?
other_Kansu (&*ptr)ですか?
0452デフォルトの名無しさん
2009/11/08(日) 00:58:19ちょっくら驚く豆知識
なんと!
なんとなんとなんと!
なんとなんとなんとなんとなんとなんと!
4bit CPUでも128bitデータなどを扱えるのである!!!!!!!!!!!!
何をバカな、と思ってるのは素人である。ド素人である。
4bit CPUでは、128bitデータを「1サイクルで」レジスタなどに格納できないだけであって
128 / 4サイクル使って上位4bitもしくは下位4bitから順番にメモリに128bitぶん格納していけばよいのだ。
バカか手前等。
0453デフォルトの名無しさん
2009/11/08(日) 00:58:22void other_Kansu( char ** ) に char *ptr を渡したいときは other_Kansu( &ptr ) です。
void other_Kansu( char ** ) に char **ptr を渡したいときは other_Kansu( ptr ) です。
&*ptr でもいいですが、それは結局 ptr です。
多分。
0454デフォルトの名無しさん
2009/11/08(日) 01:01:19両方違うともいえるし、両方合っているともいえる
0455デフォルトの名無しさん
2009/11/08(日) 01:07:16非常にややこしいですね・・。
>void other_Kansu( char ** ) に char **ptr を渡したいときは other_Kansu( ptr ) です。
passing argument 1 of ‘ptr' makes integer from pointer without a cast
って言われるんですが無視でいいんでしょうか・・?
>>454
正解は存在しますか・・?
0456デフォルトの名無しさん
2009/11/08(日) 01:27:21int a=10, *p=&a;
のとき
&*p って &10 でしょ
0457デフォルトの名無しさん
2009/11/08(日) 01:36:22依然としてアドレス演算は可能でしょう^^
>passing argument 1 of ‘ptr' makes integer from pointer without a cast
その警告は今回の件とは直接には無関係です^^
0458デフォルトの名無しさん
2009/11/08(日) 01:37:03右シフト使わない前者のでunsignedにする理由って何?
0459デフォルトの名無しさん
2009/11/08(日) 01:38:430460デフォルトの名無しさん
2009/11/08(日) 01:39:010461デフォルトの名無しさん
2009/11/08(日) 01:39:27*p は a のアドレス(仮に1000番地)を保持
&*p は 1000番地のアドレスを指すので
&10ではなくて &(1000番地)で結局1000番地
1000番地は10
ってなる気がする
0462457
2009/11/08(日) 01:40:41ごっちゃになってしまいました^^
0463デフォルトの名無しさん
2009/11/08(日) 01:42:11いきなり何の話してんの?
上のメモリに関する話にしては話がズレすぎてるし、その豆知識をどうしたいんだ。
>>455
深く考えすぎ。
0464デフォルトの名無しさん
2009/11/08(日) 01:44:48キャストなしで整数になるの意味が分からないんですが、引数の受け渡し方があってるならどっか根本的に勘違いが発生してそうです・・。
違う視点から警告と向き合ってみますです。
どうもありがとうございました><
0465デフォルトの名無しさん
2009/11/08(日) 01:50:11変数の宣言部、関数のプロトタイプ、関数の実装部を見直してみてはどうか。
0466デフォルトの名無しさん
2009/11/08(日) 01:53:13今ちょうど見直してましたが、間違っては無さそうです。
他の関数へは上手く**ptrが渡せてるみたいなのですが・・。
該当部分をもう一度書き直して見ます・・。
0467デフォルトの名無しさん
2009/11/08(日) 01:54:38ソースきぼん
0468デフォルトの名無しさん
2009/11/08(日) 02:02:05変数名とか・・・かなり恥ずかしいんですが(/////)
ttp://codepad.org/Pb1xslqO
0469デフォルトの名無しさん
2009/11/08(日) 02:02:55hoge.c:68: 警告: passing argument 1 of ‘addStr’ makes integer from pointer without a cast
書き忘れました。。
0470デフォルトの名無しさん
2009/11/08(日) 02:07:300471デフォルトの名無しさん
2009/11/08(日) 02:11:06お、お見事です・・。
0472デフォルトの名無しさん
2009/11/08(日) 02:16:36ゴールが見えそうです。
ありがとうございました><
0473デフォルトの名無しさん
2009/11/08(日) 02:21:08ちゃんと警告よみましょうねっていう。
0474デフォルトの名無しさん
2009/11/08(日) 02:23:230475デフォルトの名無しさん
2009/11/08(日) 02:26:34そうすれば、次に同じ警告が表示されたとき、やっぱり読めないけど、
一個目のパラメータに変なの渡してるんだなということが分かるようになる。
これはこれで慣れ。ガンガレ
0476デフォルトの名無しさん
2009/11/08(日) 02:32:29今回のでまた1つ覚えました><
C言語歴というか、言語歴2ヶ月なんで始めて出会すエラーが多く、エラー文が読めても意味がわからないことばっかりです。
頑張って完成させます。。
0477デフォルトの名無しさん
2009/11/08(日) 04:40:09遅レスだけど
intだと環境依存だが符号ビットが立っていると右シフトすると
おかしなマスクになる事があるから
0478デフォルトの名無しさん
2009/11/08(日) 11:07:52Cのシフトは問答無用、見境なく全部シフトさせてしまうが
アセンブラなら大抵、符号ビットを残したままシフトさせることができる。算術式シフトってやつだな!
0479デフォルトの名無しさん
2009/11/08(日) 11:11:510480デフォルトの名無しさん
2009/11/08(日) 11:12:440481デフォルトの名無しさん
2009/11/08(日) 11:18:090482デフォルトの名無しさん
2009/11/08(日) 11:21:45一文字ずつ比較する文字列比較を、開始位置を一文字ずつずらしながらループする。
0483デフォルトの名無しさん
2009/11/08(日) 11:29:55s="abcdef";
ってやったら、最初の行で作ったabcdeがメモリ上にのこっちゃって効率悪いんでしょ?
ガベージコレタクに頼らず自分でメモリに残ってるゴミを消す方法ないの?
0484デフォルトの名無しさん
2009/11/08(日) 11:30:02BM法とか勉強した記憶が。
0485デフォルトの名無しさん
2009/11/08(日) 11:33:04リテラルを使わなきゃいいんじゃねw
0486デフォルトの名無しさん
2009/11/08(日) 11:40:24*s = "abcdef";
delete s;
0487デフォルトの名無しさん
2009/11/08(日) 11:44:160488デフォルトの名無しさん
2009/11/08(日) 13:00:40ただやりたいのが、配列1番目が1byte、2つめが4byte、最後が4byteとなっているのですが、これらを管理する上でいい方法はないでしょうか?
0489デフォルトの名無しさん
2009/11/08(日) 13:01:09おまえは にほんごが よめないのか?
0490デフォルトの名無しさん
2009/11/08(日) 13:04:010491デフォルトの名無しさん
2009/11/08(日) 13:05:55ポインタへのポインタ
0492デフォルトの名無しさん
2009/11/08(日) 13:18:41配列で異なるサイズのデータを扱う方法を訊ねてるとして
普通は、1)最大に合わせる、2)unionで全部をひとつの型にまとめる
あたり
0493デフォルトの名無しさん
2009/11/08(日) 13:55:13*は何個でも付けれるぞ
int ************p;
みたいなのもok
0494デフォルトの名無しさん
2009/11/08(日) 14:04:450495デフォルトの名無しさん
2009/11/08(日) 14:18:19char** pptr;
char strA;
int num1,num2;
//領域確保
pptr = calloc ( (num) , sizeof (char));
for (i = 0; i <= num1; i++){
pptr[i] = calloc ( (num2 + 1) , sizeof (char));
}
//文字代入
for (i = 0, j = 0; i < num; i++, j += num2){
strncpy (pptr[i], strA + j, num2);
}
この処理でnum1に5以上の値が入るとSegmentationFaultになります。
デバッガではstrncpyのラインがSegmentationFaultの原因ラインとでます。
printfで表示して確認してみると、num1でnum2が割りきれ、かつnum1が5以上のときに
pptr[0][0]に領域以上の文字化け表示が出るときが有ります。
この部分の記述で不味い点があるのでしょうか?
0496デフォルトの名無しさん
2009/11/08(日) 14:20:37ポインタのポインタと言えどもポインタであることは間違いがないので
ポインタのポインタとするのではなく、ポインタへのポインタでしても
ポインタのポインタであることは変わりがないじゃないの。
0497デフォルトの名無しさん
2009/11/08(日) 14:22:35ポインポインポインポインポインポインポインポインポインポイン
ポインポインポインポインポインポインポインポインポインポイン
ポインポインポインポインポインポインポインポインポインポイン
ポインポインポインポインポインポインポインポインポインポイン
インポ
0498デフォルトの名無しさん
2009/11/08(日) 14:25:28pptr = calloc ( (num) , sizeof (char *));
にしろ
0499デフォルトの名無しさん
2009/11/08(日) 14:32:27typedef int *pint;
pint *p = N;
0500デフォルトの名無しさん
2009/11/08(日) 14:32:36int *p;
*p = Hogeragecho;
とするときと
p = hogeragecho;
とするときがありますが
何が違うのですか。
どういうときにアスタリスクを意識しないといけないのですか。
明らかにアドレスを要求している文脈のときはアスタリスクつけなくていいのは分かりますが
明らかにアドレスではないものを要求しているときでさえアスタリスクつけないソースもあります。
0501デフォルトの名無しさん
2009/11/08(日) 14:34:59見せてみ
0502デフォルトの名無しさん
2009/11/08(日) 14:35:09見事に改善しました・・。
ありがとうございます!
sizeof (char) と sizeof (char*)では確保される領域の大きさが変わるのですか?
ggr先生に聞いてみますが、よろしければ後学の為ご教授ください。。
0503デフォルトの名無しさん
2009/11/08(日) 14:38:310504デフォルトの名無しさん
2009/11/08(日) 14:42:02sizeof(char) = 1, sizeof(char*) = 4
になりました。
char*は1バイトじゃないのですね。
0505デフォルトの名無しさん
2009/11/08(日) 14:53:03アドレスが32bit環境なら32bit(=4バイト)
0506デフォルトの名無しさん
2009/11/08(日) 14:56:19とてもわかりやすい説明ありがとうございます。
ポインタのサイズにも気をつけます
0507デフォルトの名無しさん
2009/11/08(日) 15:03:450508デフォルトの名無しさん
2009/11/08(日) 16:39:19shortだとかlongだとかじゃなく
8bitにしたいなら、int8
16bitにしたいならint16
とか、明確にサイズを決められると見易く、いろいろ便利なのに
0509デフォルトの名無しさん
2009/11/08(日) 16:43:590510デフォルトの名無しさん
2009/11/08(日) 16:45:050511デフォルトの名無しさん
2009/11/08(日) 16:45:150512デフォルトの名無しさん
2009/11/08(日) 17:27:460513デフォルトの名無しさん
2009/11/08(日) 19:27:00しってる。だから「右シフト使わない前者」に限ったんだ。
0514デフォルトの名無しさん
2009/11/08(日) 19:29:04> unsigned charは1byteで
うん
> malloc(size)はunsigned char [size]と同じ大きさの連続メモリを返す
管理領域を含むから少し大きいかも。少ないことはないし、連続していることも確実
0515デフォルトの名無しさん
2009/11/08(日) 20:54:22「ツェーたすたす」とか「風呂釜掃除用薬剤」で発狂すんぞ
0516デフォルトの名無しさん
2009/11/08(日) 21:07:140517デフォルトの名無しさん
2009/11/08(日) 21:09:120518デフォルトの名無しさん
2009/11/08(日) 21:48:41数値をしっかり指定すれば表示されるようになるのですが、forで0から1023まで繰り返してやろうとするとうまくいかないみたいです
アドバイスお願いします
#include <stdio.h>
int main(void){
int nisin[10];
int i, j, k;
/*入力*/
for(k=0; k<=1023; k++){
k=j;
/*変換*/
for(i=0; i<10; i++){
nisin[i] = j % 2;
j = j / 2;
}
/*出力*/
for(i=10-1; i>=0; i--){
printf("%d",nisin[i]);
}
}
return 0;
}
0519デフォルトの名無しさん
2009/11/08(日) 21:50:100520デフォルトの名無しさん
2009/11/08(日) 21:51:210521デフォルトの名無しさん
2009/11/08(日) 21:51:30k=j; // 逆?
0522デフォルトの名無しさん
2009/11/08(日) 21:58:040523デフォルトの名無しさん
2009/11/08(日) 21:59:291023 じゃね?
0524デフォルトの名無しさん
2009/11/08(日) 22:00:20まず10進数にするところから始めないとダメじゃん。
0525デフォルトの名無しさん
2009/11/08(日) 22:42:010526デフォルトの名無しさん
2009/11/09(月) 01:14:23なんだかわけがわからなくなりました
aとbはわかったのでcの部分を教えて下さい
#include <stdio.h>
extern int a;
int b = 2;
int func(){
int b;
extern int c;
b = 3;
printf("func: a = %d, b = %d, c = %d\n, a, b, c);
c = 6;
return 0;
}
int c = 4;
int main(){
extern int c;
func();
a = 5;
printf("main: a = %d, b = %d, c = %d\n", a, b, c);
return 0;
}
int a = 1;
0527デフォルトの名無しさん
2009/11/09(月) 01:19:21ただし見える範囲が main とか func の中に限られる
0528デフォルトの名無しさん
2009/11/09(月) 01:23:17ということはfuncの中では6
mainの中では4ということですか?
でも実行すると
func: 〜〜c = 4
main: 〜〜c = 6
となるのですが
0529デフォルトの名無しさん
2009/11/09(月) 01:28:52> int c = 4;
とあるので、cの初期値は4だ
funcのprintfが実行される時点ではまだ初期値のままだから4が表示される
その後
> c = 6;
が実行され、それからmainのprintfが実行されるので6が表示される
0530デフォルトの名無しさん
2009/11/09(月) 01:41:03あ〜何となくわかった気がします
ありがとうございます
0531デフォルトの名無しさん
2009/11/09(月) 03:26:01n件のデータを配列に入力しその平均値を出力するプログラムをつくり、
実行部において添字演算子は用いず、*(p+i)と*p++それぞれを用いるパターンを作る
ただし、入出力処理をファイル処理に、入出力ファイル名はコマンドラインで指定する
作れません、教えてください
0532デフォルトの名無しさん
2009/11/09(月) 03:29:00作った所までどこかにあげれば答えないこともない
0533デフォルトの名無しさん
2009/11/09(月) 03:38:02iどこで使おうか。
0534デフォルトの名無しさん
2009/11/09(月) 03:38:55int main(void)
{
int A[100];
int a,b,i,n,*p;
*p=A[0];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",*(p+i));
}
for(i=0;i<n;i++){
b+=*(p+i);
}
a=b/n;
printf("%d",a);
return(0);
}
です
0535デフォルトの名無しさん
2009/11/09(月) 03:41:19無理矢理使えって話だろうか
0536デフォルトの名無しさん
2009/11/09(月) 03:41:270537デフォルトの名無しさん
2009/11/09(月) 03:43:03コマンドラインも無視してるな
0538デフォルトの名無しさん
2009/11/09(月) 03:45:45それぞれのパターンを作れってことです
0539デフォルトの名無しさん
2009/11/09(月) 03:46:51自分で新しい型をつくることってできるんの?
6バイト扱える型とか
0540デフォルトの名無しさん
2009/11/09(月) 03:48:01無理
C++みたいにclassが使えないと
構造体とか共用体で無理矢理関数で似たような事は出来るが
0541デフォルトの名無しさん
2009/11/09(月) 03:49:23http://pc12.2ch.net/test/read.cgi/tech/1255709298/657
貼って来てやったからあっちへ逝け
0542デフォルトの名無しさん
2009/11/09(月) 03:51:06typedef char newtype[6];
0543デフォルトの名無しさん
2009/11/09(月) 03:53:20どうもです
0544デフォルトの名無しさん
2009/11/09(月) 03:58:24どんだけ親切なんだよ
0545デフォルトの名無しさん
2009/11/09(月) 04:06:410546デフォルトの名無しさん
2009/11/09(月) 04:41:400547デフォルトの名無しさん
2009/11/09(月) 04:54:190548デフォルトの名無しさん
2009/11/09(月) 12:47:200549デフォルトの名無しさん
2009/11/09(月) 12:52:14大量の変数を一括管理するための機能
でいいの?100点?
0550デフォルトの名無しさん
2009/11/09(月) 12:53:100551デフォルトの名無しさん
2009/11/09(月) 12:54:150552デフォルトの名無しさん
2009/11/09(月) 13:02:59れたコンパイラの便宜でつ
0553デフォルトの名無しさん
2009/11/09(月) 13:14:59配列の添え字と使用目的を関連づけるのにマクロを使う羽目になるので
たくさんの変数名をつけるのがマクロ名になるだけで利点がないばかりか
マクロであるがゆえの欠点も抱え込むことになる
正解は >>552 が2番目に挙げた「数字との対応性」
0554デフォルトの名無しさん
2009/11/09(月) 13:25:53データ構造化序論を読むべし
0555デフォルトの名無しさん
2009/11/09(月) 13:29:51プログラムを作ってみて、如何にコンパイラが名前のルックアップ
処理に時間をかけているかがわかる筈。
0556デフォルトの名無しさん
2009/11/09(月) 13:33:010557デフォルトの名無しさん
2009/11/09(月) 14:13:32ふつーにありそうだが?
float real;
float imag;
//...
が10万とか100万とかある状況下で、
これでどうやって名前のルックアップが軽くできるんだ?
float array[100000];
#define real 0
#define imag 1
//...
0558デフォルトの名無しさん
2009/11/09(月) 14:21:08プログラムってそうはないだろw
0559デフォルトの名無しさん
2009/11/09(月) 14:28:53double B,W,H;
int born;
int age
int virgine;
}JK00001,JK00002,JK000003,.............JK100000;
とするのか
struct{
double B,W,H;
int born;
int age;
int virgine;
}JK[100000];
とするのか、同じことをするのでもずいぶんと違うんだろな
0560デフォルトの名無しさん
2009/11/09(月) 14:42:30プリプロセッサのシンボルルックアップは重くなるが
コンパイラのシンボルルックアップは軽くなるんじゃないか?
0561デフォルトの名無しさん
2009/11/09(月) 14:51:420562デフォルトの名無しさん
2009/11/09(月) 15:25:01そーだよな
「名前のルックアップ」でいちいち10万エントリをサーチせずに済むようにローカル化するよな
プログラム全体で何万エントリあろうが1時点でのルックアップ範囲は狭く済むようにね
# ルックアップは何もコンパイラだけじゃなく PG 自身もやるわけで
>>559
いや、ここで論じている問題は
struct{
double a[3];
int b[3];
};
#define B 0
#define W 1
#define H 2
#define born 0
#define age 1
#define virgine 2
という配列の用法の是非だる?
0563デフォルトの名無しさん
2009/11/09(月) 15:28:01オレは #define より enum を使うぜ
0564デフォルトの名無しさん
2009/11/09(月) 16:23:57列挙子の数が配列のサイズを超えたかどうか、どうやって調べる?
0565デフォルトの名無しさん
2009/11/09(月) 16:37:39sizeof(配列)と比較する
0566デフォルトの名無しさん
2009/11/09(月) 18:03:52つまり、配列は連続領域を(静的に)確保及び参照するときに使う複合データ型
規格書に書いてあることでも書いたら100点もらえるんじゃないの
ISO/IEC 9899:1999 (E)
6.2.5 Types
20
― An array type describes a contiguously allocated nonempty set of objects with a
particular member object type, called the element type.36) Array types are
characterized by their element type and by the number of elements in the array. An
array type is said to be derived from its element type, and if its element type is T , the
array type is sometimes called ‘‘array of T ’’. The construction of an array type from
an element type is called ‘‘array type derivation’’.
C99でごめんねごめんね
0567デフォルトの名無しさん
2009/11/09(月) 18:36:16列挙子を増やすとサイズが自動的に増加する配列があったらなあ・・・
って要求にほぼ答えられる機能があるわけだが、それでも配列でと頑張ると
別に B へのポインタに +1 で W にアクセスなんかできなくていいけど、
レジスタ割付くらい可能なところでは当然やって欲しいなあ・・・
って要求は諦めることになるよな
0568デフォルトの名無しさん
2009/11/09(月) 18:38:25DisplayInside_of_TheVariables = p;
DisplayInside_of_TheVariables = *p;
これは何がどう違うのですか。
0569デフォルトの名無しさん
2009/11/09(月) 18:42:090570デフォルトの名無しさん
2009/11/09(月) 18:44:19上はint*型の代入で下はint型の代入
0571デフォルトの名無しさん
2009/11/09(月) 22:51:58こんなんでどや?
gcc でならコンパイルできるぞ
#include <stdio.h>
enum{HOGE0, HOGE1, HOGE2, HOGE_MAX};
int main(void){
int i, a[HOGE_MAX];
for(i=0;i<HOGE_MAX;i++) a[i]=i;
printf("%d\n", a[HOGE_MAX-1]);
return 0;
}
0572デフォルトの名無しさん
2009/11/09(月) 23:10:56その HOGE_MAX ってのを自動というかどうかだが、
その例で HOGE_MAX としている列挙子がいかなる識別子とも干渉しないことを担保する
普遍的な方法論はあるのか?
0573デフォルトの名無しさん
2009/11/09(月) 23:56:07そんなのある訳無いじゃん
強いて言うなら命名規則で頑張る
0574デフォルトの名無しさん
2009/11/10(火) 00:04:530575デフォルトの名無しさん
2009/11/10(火) 00:09:31そんな僕は、JPEGやCore Foundationの書き方をリスペクトしている
0576デフォルトの名無しさん
2009/11/10(火) 00:27:40#define a b
int a, b; //oops!
・・・て、そういう意図じゃなくwww
enum hage {HOGE0, HOGE1, HOGE2};
int a[sizeof(enum hage)];
で自動的に int a[3]; になるような方法ね
仮に HOGE3 を追加する場合、HOGE3 自身と HOGE0, HOGE1, HOGE2 との間に
どんな関係を保証させればよいのか、さらに保証させなくてよい(保証させてはいけない)のか、
によって色んな構文・機能を使い分けるわけだよな
そこで配列という選択に至る、なるべく仮定の少ない例を聞いているわけだ
0577デフォルトの名無しさん
2009/11/10(火) 00:41:320578デフォルトの名無しさん
2009/11/10(火) 00:43:010579デフォルトの名無しさん
2009/11/10(火) 00:50:36sizeof(enum hage)ってなんだよ
0580デフォルトの名無しさん
2009/11/10(火) 01:01:44配列なら
int a[3];
sizeof a / sizeof a[0]
で要素の数 3 がとれるだろ?
それと同様に、
列挙型から列挙子の数をとる一般的な方法はあるかって話
ちなみに今んとこなさそうって思いながら聞いている
0581デフォルトの名無しさん
2009/11/10(火) 01:09:20列挙型の列挙子の数をとる方法ない(気がする)
しばしば、一番最後にダミーを入れたりするが、
enum {
foo = 128,
bar,
baz,
dummy
};
とかしているときには終わっている
そもそも何の目的で列挙子の数を知りたいのかによって、
別の解決方法があるかもしれない
0582デフォルトの名無しさん
2009/11/10(火) 01:42:16ことの発端は >>549 でさ
俺が >>557 と返したら >>571 ときたわけよ
ダミー列挙子みたいな不純物を必要としない
きれいな方法はバラ変数か構造体で、
配列の用途じゃねえだろって立場をとってたんだ
それで仮に列挙子と配列の要素をきれいに対応させる
バラ変数や構造体よりも合理的な方法を誰か示したら
俺の負けかなって思って詰ろを作って待っていたんだが
みんな寝ちまったみたいだし、俺も眠いし・・・
0583デフォルトの名無しさん
2009/11/10(火) 01:55:49グローバル変数が構造体で1億個とかあるらしい>某住基ネット上アプリ
0584デフォルトの名無しさん
2009/11/10(火) 02:10:11ネタだと思いたいが、ひょっとして子[1]、子[2]...は駄目で、
長男、次男、三男...とかになってるのだろうか。
0585デフォルトの名無しさん
2009/11/10(火) 02:59:01>それで仮に列挙子と配列の要素をきれいに対応させる
つまり、それは写像だな
列挙子集合E = {x | x e _N}, 配列A = {y | y e _R}が存在し、
f: x e E -> y e Aなるfを定義すれば良い
最初は全単射と思ったが、単に単射(|E| ≧|A|)であればよかった
f def= ∀y e A [∃x e E]ごめん、数学そんなにやってないんだ
C言語では、
type_t f(enum E x) {
int x_dash;
/* do_something */
/* 例えば、x_dash = x / 2; */
x_dash = x / 2;
return A[x_dash];
}
もっとも、
type_t A[N]; /* N = 128とか */
type_t *map(type_t *array, enum E x)
{
return (array+hash(x));
}
int hash(int x)
{
return x % sizeof A;
}
となるが、これが合理的かと問われたら、
まったく合理的ではありませんでした、ありがとうございました
と言うよりこれは、整数のハッシュ法じゃないかよ
0586デフォルトの名無しさん
2009/11/10(火) 03:21:26になってしまっている件と、生半可な集合論数学表現とか
振り回す人が出てきてる件について、この話題はいったん休止が
良いかと
0587デフォルトの名無しさん
2009/11/10(火) 03:28:57普通についてる>>560を何でスルーしたんだろうなぁ
それはそれとして、cのenumはやっぱ不便だよね。
他言語で改良されてる点はまさに改良だなと思う。
0588デフォルトの名無しさん
2009/11/10(火) 03:31:36しかもあさっての方向の話はじめちゃってるしね
0589デフォルトの名無しさん
2009/11/10(火) 03:43:19理由から配列を使うというのは古き良きアカデミズムな世界の話。
現実のプログラミング現場では名前空間管理の負荷が大幅に
軽減されるというコード作成上のメリットが絶望的に大きいので、
エレガントになろうがなるまいが構造体配列を使わざるを得ない
ことが多い。(てかほぼ全て)
しかしそこには問題の無理な構造化、規格化による現実との乖離の
危険性が伴うので、問題視する人も多い。
0590デフォルトの名無しさん
2009/11/10(火) 03:46:40苦し紛れに作られたシンタックスシュガーに近い
0591249
2009/11/10(火) 10:13:04>>450をどこにいれればいいかわかりません…
>>440を基盤に作りたいんですが>>450はどこにいれるんですか?
0592デフォルトの名無しさん
2009/11/10(火) 10:16:53ここで出てきている配列と列挙子は、
C に特有の性質を十分に使っているし、
性能面の評価も C 流だが?
>>587
コンパイラのシンボルルックアップが
実行時のアドレス計算として持ち越されるわけだが
全レスの義務はないし個人的につまらなかったんで・・・
0593デフォルトの名無しさん
2009/11/10(火) 11:06:19消したコードを元に何を言ってるんだ?
>>592
プロセッサレベルで元コードが配列として表現
されていたのかそうでないのかを区別することが出来る
とでも思っているのか?
0594デフォルトの名無しさん
2009/11/10(火) 11:14:35色々仮定をおけば区別がつかなくなる場合はありそうだが
この流れの中でそんなのに構うつもりはない
0595デフォルトの名無しさん
2009/11/10(火) 12:24:11実行時のアドレス計算は関係ないよね。
コンパイル時のシンボルルックアップ負荷の話でしょう?
0596デフォルトの名無しさん
2009/11/10(火) 12:25:39今でもそういうことって気にすべきものなの?
0597デフォルトの名無しさん
2009/11/10(火) 12:47:290598デフォルトの名無しさん
2009/11/10(火) 13:32:59けれど、今でもビルドにやたら(数時間でいい?)と時間がかかる場合は少なくともC++でまれによくある
あえてこういう表現にしてみた。
0599デフォルトの名無しさん
2009/11/10(火) 13:41:48シンボルルックアップのせいでやたらと時間がかかる場合があるということではないです。
もしそうなった場合にそれをコードの面で解決しようとすることはないでしょうね
0600249
2009/11/10(火) 13:43:31>>249>>440>>448ですが
>>450をどこにいれればいいかわかりません…
http://www.dotup.org/uploda/www.dotup.org348416.txt.html
を基盤に作りたいんですが>>450はどこにいれるんですか?
0601デフォルトの名無しさん
2009/11/10(火) 14:22:070602デフォルトの名無しさん
2009/11/10(火) 14:22:35http://codepad.org/TuCBekq8
0603デフォルトの名無しさん
2009/11/10(火) 14:23:582ちゃんではまれによく見るね
0604デフォルトの名無しさん
2009/11/10(火) 14:26:34ググればすぐ答えが出るようなものを、一々質問してんなよw
0605デフォルトの名無しさん
2009/11/10(火) 14:27:48の解釈
数的には実はよくある がそういうのは集積されており
目にすることは意外に少ない
0606デフォルトの名無しさん
2009/11/10(火) 14:34:470607デフォルトの名無しさん
2009/11/10(火) 14:37:550608デフォルトの名無しさん
2009/11/10(火) 15:04:500609デフォルトの名無しさん
2009/11/10(火) 15:21:290610デフォルトの名無しさん
2009/11/10(火) 15:58:42だから何つっちゃうよ?
プログラム中に何万だかあるシンボルを同一空間に置けつったんだろ >>560 はよ、でそれを俺はつまんねつったわけ
つーか、#define から enum へもう流れが変わってるんだが、まだ翻訳フェーズ(4)にこだわりたがるのは何でだ?
255歩譲って、翻訳フェーズ(4)の話に戻っても、翻訳環境の負荷を軽くって定量的にどのくらいやるべきだと思っている?
それは配列が向かない用途(断言)に、理を曲げてまで配列を使わせるほどの事情たりえたことが、おまえさん自身あったのか?
そのうえでだが、それは配列の存在意義を聞かれたときの答えとして妥当だと思うか?
0611デフォルトの名無しさん
2009/11/10(火) 16:26:110612デフォルトの名無しさん
2009/11/10(火) 16:48:25情報処理2種ですか?
0613デフォルトの名無しさん
2009/11/10(火) 16:52:27C言語以外もいろいろ選択できるようになってるけど
それでいいんじゃないでしょうか。
0614デフォルトの名無しさん
2009/11/10(火) 16:58:30みた【実況解説】」という動画が人気を集めている(写真1)。公開されてから2週間ちょっとで
15万回以上も再生され,コメントも数多く寄せられている。
内容は,開発ツールのインストールからスタートしてWindows環境でC言語を使い,わずか1時間強
でテトリスを完成させるというもの。そのあざやかな手腕には,感嘆の声がコメントで寄せら
れている。プログラミングそのものがエンタテインメントになっており,1時間強見ていても全く
飽きることがない。
ニコニコ動画で「うp主」と呼ばれる動画投稿者はどんなプログラマなのだろうか?と思い,インタ
ビューを申し込んでみた。うp主の名前は,紀平拓男さん。東京・南青山で携帯電話向けのソフト
ウエア開発会社ブロードテイルを経営する若きプログラマCEO(最高経営責任者)だ。きっとプログラ
ミング初心者の参考になる話を聞けるに違いない,と期待しながらインタビューを始めたが,予想以上に
“すごい”紀平さんのプログラミング歴に圧倒される結果となった。
──1時間強でテトリスを作れるのはすごいですね。プログラミング歴を教えてください。
幼稚園のころからですね。当時,セガが「SC-3000」というパソコンを出していて,これが家にあり
ました。あるとき,親が「ベーマガDX」(注:電波新聞社が発行していたプログラミング雑誌「マイコン
BASICマガジン」の別冊。様々なパソコン用のゲーム・プログラムなどを掲載していた)を買ってきた
ので,そこに載っているプログラムを打ち込んでいました。
当時は「これを打ち込むとゲームができる」という認識しかなかったですが。SC-3000には顔のキャラ
クタがあってそれをBASICのPRINT文で表示して親に自慢げに見せていたそうです。
テトリスを1時間強で作ってみた(ニコニコ動画)
http://www.nicovideo.jp/watch/sm8517855
http://itpro.nikkeibp.co.jp/article/Interview/20091104/340019/
0615デフォルトの名無しさん
2009/11/10(火) 17:03:360616デフォルトの名無しさん
2009/11/10(火) 17:07:520617デフォルトの名無しさん
2009/11/10(火) 17:09:33おお、どうしたんだい?
そもそもの、プログラム中に何万だかあるシンボルが同一空間にないという仮定を持ち出してはならんぞ。
0618デフォルトの名無しさん
2009/11/10(火) 17:29:06なんだそりゃ
どっから出てきた? 配列を使うからか?
違うね、配列を使うにしても分割のしようはあるが
おまえさん翻訳フェーズ(4)にご執心なんだっけ
#undef という手はあるが、前述のとおり俺は興味ない
面白そうな話でも出てくれば別だが今んとこ否定する
0619デフォルトの名無しさん
2009/11/10(火) 17:49:59ちがうちがう。
配列にする前の、数万だか数十万だかの変数が、同一空間にある可能性を元の話題で否定していないのよ。
0620デフォルトの名無しさん
2009/11/10(火) 17:51:27> 配列が向かない用途(断言)に、理を曲げてまで配列を使わせるほどの事情たりえたことが、おまえさん自身あったのか?
もちろんない。
0621デフォルトの名無しさん
2009/11/10(火) 18:25:11元々が同一空間にぶちまけられた瓦礫の山でも何とかするのが俺らの仕事
そこで配列の出番かどうかが、この流れでの論点だったはずだが、違うかい?
0622デフォルトの名無しさん
2009/11/10(火) 18:27:160623デフォルトの名無しさん
2009/11/10(火) 18:33:010624デフォルトの名無しさん
2009/11/10(火) 18:53:39何のことはない暗記してきたコードを再生していたに過ぎない(本人談
0625デフォルトの名無しさん
2009/11/10(火) 19:00:51かなり困ったもの。程度問題。メリット、デメリットのバランス
で決めるべき問題だろ
0626デフォルトの名無しさん
2009/11/10(火) 19:01:29ちょっと目をはなした隙に画面中央にその文字列を色を変えながら表示するプログラムに
書き換えられていたでござる。
0627デフォルトの名無しさん
2009/11/10(火) 19:03:02相手は嫁です。
0628デフォルトの名無しさん
2009/11/10(火) 19:08:54cls
0629デフォルトの名無しさん
2009/11/10(火) 19:12:31POKE 文でアトリビュート変えたんだろな
0630デフォルトの名無しさん
2009/11/10(火) 19:40:31実は私が犯人かもしれないw
詰まらないデモが動いてたら今で言う「伝言板スクリーンセーバー」的な
プログラムを動かすくらいはよくやってたから。
それも、リストを覗かれないように一行野郎で。
0631デフォルトの名無しさん
2009/11/11(水) 01:00:13one, two, three, four, five,
six, seven, nine, zero
};
0632デフォルトの名無しさん
2009/11/11(水) 20:12:090633デフォルトの名無しさん
2009/11/11(水) 20:30:10アドレッシング単位のプロセッサやメモリバスとのミスマッチの
問題は本来はかなり深刻。アドレスによって処理速度がかなり
極端に変わってしまう。
ただPCに限って言えばプロセッサのキャッシュが多層化され、
アドレッシング単位の違いによる相違を吸収されてしまっている
現在あんまし寝た子を起こすような質問をしないこと
0634デフォルトの名無しさん
2009/11/11(水) 21:13:55境界要求に違反するアクセスの結果を C は言語規則として定めない
0635デフォルトの名無しさん
2009/11/11(水) 21:36:29char a, b, c;
int d;
とやったら c のあとに1バイトの未使用領域作ったり、
d a b c の順にするとか。
0636デフォルトの名無しさん
2009/11/11(水) 21:44:530637デフォルトの名無しさん
2009/11/11(水) 21:51:540638デフォルトの名無しさん
2009/11/11(水) 21:52:170639デフォルトの名無しさん
2009/11/11(水) 22:38:15今思うとハァ?な叱られ
「構造体は必ずビットフィールド使え! メモリは少しでも節約するのが常識だ!」
「mallocを無駄がないように確保しろ!」
0640デフォルトの名無しさん
2009/11/11(水) 22:40:55と宣言したものを、
*(long int *)uint;
とキャストするとuintは何になるのですか。
long int **uintですか。
int int32;
(int *)int32;
とか、何になるのかよくわからないのですが。
0641デフォルトの名無しさん
2009/11/11(水) 22:50:170642デフォルトの名無しさん
2009/11/11(水) 22:50:21「ビットフィールド、ビット演算とは実体が何かよく理解して使え」
「詳細に着手する前にシステム全体のキャパシティとストラテジを把握しておけ」
「malloc の計算間違いは以ての外、超最低なので絶対にやるなよ」
といっているつもりなんだが、この原発信が
昼下がりに心がすでにアフター5な「ニュータイプ」たちの脳内で
どんな減衰劣化を受けているかは、近頃なかなか驚きゃせん
だからスパイラルを何回回れるかで道はまだあったりする
甘くも苦くもね
0643デフォルトの名無しさん
2009/11/11(水) 22:56:230644632
2009/11/11(水) 23:01:33ホンとはだめだけどPCなら気にスンナってことか
0645デフォルトの名無しさん
2009/11/11(水) 23:17:45平然とビットズレを一切何の警告もなくやってのけたり
例外をつかまえるのにシステムコールが必要だったり
0646デフォルトの名無しさん
2009/11/11(水) 23:18:230647デフォルトの名無しさん
2009/11/12(木) 06:25:16本当にそれだけ確保したか分からないし中の挙動も分かってない
でなきゃフラグメントなんか起こり得ない
0648デフォルトの名無しさん
2009/11/12(木) 07:13:04別に C++ でなくとも C でもやっぱり解ってなきゃいかん
0649デフォルトの名無しさん
2009/11/12(木) 08:27:32#include <stdio.h>
int main(){
int a,b;
a = 10;
b = 10;
printf("a のアドレスは:%p\n",&a);
printf("b のアドレスは:%p\n",&b);
return 0;
}
実行結果
0012FF60
0012FF54
参考サイト
http://itpro.nikkeibp.co.jp/article/COLUMN/20061023/251565/?ST=develop&P=2
参考サイトの説明を読んでいるとintは4byteのメモリを確保するので
実行結果の下二桁の差が4になると思うのですが6になります
この値は環境や処理系によって変わるのでしょうか?
ちなみにグローバル変数として宣言すると差は4になります
0650デフォルトの名無しさん
2009/11/12(木) 08:32:1416進数ってしってる?
0651デフォルトの名無しさん
2009/11/12(木) 08:35:25なんで下二桁だけ十進で引き算するんだ? w
0653デフォルトの名無しさん
2009/11/12(木) 09:19:288 バイトは何に使ってるんだ。
0654デフォルトの名無しさん
2009/11/12(木) 09:22:18レジスタに割り付けられた自動変数って、アドレスはどうなんの?
0655デフォルトの名無しさん
2009/11/12(木) 09:31:09うちでも試したが 4 byte しか差がない
なんかソースに変なもの書いてないか
0656649
2009/11/12(木) 10:13:210012FF60と0012FF54の間は55,56,57,58,59,5A,5B,5C,5D,5E,5Fになると思うのですが…
>>655
とくに余計なものは書いてません。インデント等も削除してみましたが変わりません。
0657デフォルトの名無しさん
2009/11/12(木) 10:17:170659デフォルトの名無しさん
2009/11/12(木) 12:16:02# って、言うまでもないのかな?
0660デフォルトの名無しさん
2009/11/12(木) 12:25:11しかしバスエラーとは懐かしい響きだ
0661デフォルトの名無しさん
2009/11/12(木) 12:43:280662デフォルトの名無しさん
2009/11/12(木) 17:28:08そのアクセス用変数をcharなどでキャストすると
4バイトアクセスのはずが1バイトアクセスになるので
CPUとコンパイラによってはエラーで落ちる
0663デフォルトの名無しさん
2009/11/12(木) 17:30:38そんなん誰でも知ってるから
0664デフォルトの名無しさん
2009/11/12(木) 17:44:40「\f」は改ページとありますが、実行してみたところ何らの効果もないように見えます。
てっきり実行後はカーソルがコンソールの一番上に戻るのかなと思ったのですが。
0665デフォルトの名無しさん
2009/11/12(木) 17:46:500666デフォルトの名無しさん
2009/11/12(木) 17:49:12今じゃ大学でも教えてないからな
そもそもツェーのポインタ機能ってのは、アセンブラになりたかったから付けた機能だ。
アセンブラを置き換える言語にしたかったので、メモリをいじれる機能としてポインタを付けた。
決してどっかの変数や関数のアドレスを覚えておくためじゃない。
メモリをいじれるようにしたら覚えておけるようになっただけだ。
0667デフォルトの名無しさん
2009/11/12(木) 17:52:12(char*)(long*)pがACVになるってことは規格上で可能?
0668デフォルトの名無しさん
2009/11/12(木) 17:52:16一部の端末エミュレータ以外は多分無視されます。プリンタなら改ページ(或いはページ長に相当する縦タブ動作)するけどねぇ。
0669デフォルトの名無しさん
2009/11/12(木) 18:54:59改行は必須としても、アラームとか必要あるのか。「ペ」とかつって。
そんなものよりも、好きな位置にカーソルが合わせられる機能のほうが重要ではないか。
直前の文字だけ更新したくてもできねえ
0670デフォルトの名無しさん
2009/11/12(木) 19:00:300671デフォルトの名無しさん
2009/11/12(木) 19:02:05あるよ
ただ、標準 C ライブラリにないというだけ
C は元々そういうのを【作る立場】の言語であって、その気がない人は別の言語を選択すべき
# GC がないのは云々という大たわけを昔よく見かけたが、最近減った?
0672デフォルトの名無しさん
2009/11/12(木) 19:04:05便利だから標準ライブラリと言うものは存在するわけで
これも便利だから標準であるべきだった。
0673デフォルトの名無しさん
2009/11/12(木) 19:04:14宣言をした場合、乱数もしくは未定義の値に設定される。
でおk?
0674デフォルトの名無しさん
2009/11/12(木) 19:06:440675デフォルトの名無しさん
2009/11/12(木) 19:07:33「そのアドレスに確保した際、そこにあるデータを使う」
前のやつがウンコ流してない公衆トイレ左端の部屋に hoge 変数さんが確保されたら、
hogeさんは「前のやつが流してないウンコ」を得る。
なので、初期化しないでhogeさんを参照すると「前のやつが流してないウンコ」を見ることになる。
だから、正確に言えば未定義とか不定値ではない。
0676デフォルトの名無しさん
2009/11/12(木) 19:12:53変数が、そのアドレスに確保されるとき、「前のやつが流していないウンコ」があろうが
「ややもすると将来は立派なウンコになったやも知れぬゲロ」があろうが
それら全部適当な値で壊して適当な値になる
ってんなら未定義とか不定値と言うが、
「前のやつが残していったものをそのまま持ってしまう」ので
正確厳密に言えば不定値ではない。ということである。
0677デフォルトの名無しさん
2009/11/12(木) 19:19:59と言ったほうがいいだろう。
ウンコを要求するプログラムを実行しようとしていて、
hogeを確保したら その番地に丁度よくウンコがありました
ラッキー
と、無意味でないこともあるかもしれないが、それはたまたまだ。
0678デフォルトの名無しさん
2009/11/12(木) 19:27:01どんな範囲のものを標準で用意すべきだと思う?
C は色んな分野で色んな使われ方をしているのは言うまでもないが、
おまえさんはそれらの和集合を求めているのか、それとも積集合か?
択一選択のような言い方が鼻につくかも知れんが、そこにはっきりとポリシーを持っている点が、
C がバカウケした理由だぞ
0679デフォルトの名無しさん
2009/11/12(木) 19:32:32C99でいろいろ追加されたが、あれだって「最初から標準であるべきだった」からだ
0680デフォルトの名無しさん
2009/11/12(木) 19:55:06あれがねえ・・・
どっちかつーと、古い C にあったメタボ成分を強制から任意へ緩和して欲しかったが
ふたを開けたら逆方向に走っていた、というのが正直な感想だが
例1: 構造体型の返却値
例2: 浮動小数点すべて
0681デフォルトの名無しさん
2009/11/12(木) 19:57:18といってclsを実行するぐらいでいいんですけど
0682デフォルトの名無しさん
2009/11/12(木) 20:02:10だめ?
0683デフォルトの名無しさん
2009/11/12(木) 20:06:43ありがとう。大成功だったよ〜!!
これってOS共通のパスなんですか?
0684デフォルトの名無しさん
2009/11/12(木) 20:09:190685デフォルトの名無しさん
2009/11/12(木) 20:13:090686デフォルトの名無しさん
2009/11/12(木) 20:13:28そうなんですか
OSバージョンも伝えてなかったのに凄いなと思って
ちなみにVISTA HOME BASICでした
0687デフォルトの名無しさん
2009/11/12(木) 20:21:46いろいろとメッセージが出てくるだろw
0688デフォルトの名無しさん
2009/11/12(木) 20:21:54直前の文字だけなら\bで、行の先頭に戻りたいなら\rでできないか?
0689デフォルトの名無しさん
2009/11/12(木) 22:12:13Borland のコンパイラセットなら conio に色々用意してあるよ。
画面消去からカーソル移動、他にも便利なのが色々と。
MS の VC++ でやるなら API を直に使うしかない。
と言っても、特に難しくはないから wincon.h 読め。
0690デフォルトの名無しさん
2009/11/12(木) 22:15:060691デフォルトの名無しさん
2009/11/12(木) 22:16:22みんな知ってるはずなのに言われないと分からない豆知識
conio
conioは熱血硬派である。
0692デフォルトの名無しさん
2009/11/12(木) 22:17:510693デフォルトの名無しさん
2009/11/12(木) 22:19:07リバーシといったような簡単なゲームの類で構いません
またみなさんは初めてアプリケーションを作った時はどんなものを作りましたか?
よかったらアドバイス等よろしくお願いします
0694デフォルトの名無しさん
2009/11/12(木) 22:30:42テキストブラウザ
0695デフォルトの名無しさん
2009/11/12(木) 22:31:35↓
ブラウザー
0696デフォルトの名無しさん
2009/11/12(木) 22:38:100697デフォルトの名無しさん
2009/11/12(木) 22:53:460698デフォルトの名無しさん
2009/11/12(木) 22:55:40当時、あまりにもアンチウィルスソフトが反応しなかったので
「ホンマにウィルスを止めるのか」
ということでやってみた
ちゃんと止めた
感動した
0699デフォルトの名無しさん
2009/11/12(木) 23:20:580700デフォルトの名無しさん
2009/11/12(木) 23:24:25エロ画をdlするプログラム
スレ指定するだけでそこに貼られているものを取ってきてほしい
同じのを何度も取ってこないようにしてほしい
取ってきたものを整理できる簡易viewerとfiler内蔵だとうれしい
0701デフォルトの名無しさん
2009/11/12(木) 23:27:23フリーオのドライバをおながいします
0702デフォルトの名無しさん
2009/11/12(木) 23:31:14ロックマン
0703デフォルトの名無しさん
2009/11/13(金) 06:14:02俺の口座にひたすら金を振り込むプログラムお願いします
0704ニンテンドー(笑)
2009/11/13(金) 09:47:540705デフォルトの名無しさん
2009/11/13(金) 10:44:02使いかってが悪い。
簡単なWindowsアプリケーション作るのもやたら知識が必要だしメンドクサ
0706デフォルトの名無しさん
2009/11/13(金) 11:11:42GUIはC#でもDelphiでも何でも作れる
速度の必要とする部分だけDLL化してC/C++で作ればよい
0707デフォルトの名無しさん
2009/11/13(金) 11:26:320708デフォルトの名無しさん
2009/11/13(金) 12:08:31裏で実行するのではなく、
バナーが見れるようにシェルを起動してそのシェルでshを実行したいです。
0709デフォルトの名無しさん
2009/11/13(金) 12:17:30つ[system()]
0710デフォルトの名無しさん
2009/11/13(金) 12:23:51UNIX機の名前をunix、rshデーモンが動いているとして、
system("rsh unix /bin/sh -c shファイル")で実行できる。
標準入出力はリダイレクトしていないので、実行する端末をそのまま使う。
もし、入力或いは出力を呼び出すプログラムで利用したいのなら、popen()を使えばいい。
0711デフォルトの名無しさん
2009/11/13(金) 12:41:23system("xterm -c hoge.sh");
じゃないかな
0712デフォルトの名無しさん
2009/11/13(金) 12:57:080713デフォルトの名無しさん
2009/11/13(金) 14:29:12system()を忘れてました
しかしあまりsystem関数に馴染みがないもので…
私がやりたい具体例をあげると
コンパイルしたEXEファイルをLinuxで実行すると
まず、シェルが立ち上がり
そのシェルでwgetを実行します。
同シェルでダウンロードしている状況を見れるようにしたいのです。
(=======>59%
などの返事、、)
0714デフォルトの名無しさん
2009/11/13(金) 14:33:11シェルを立ち上げる作業とwgetと入力する作業
の二つを自動化したいってことです
0715デフォルトの名無しさん
2009/11/13(金) 14:33:420716デフォルトの名無しさん
2009/11/13(金) 14:52:000717デフォルトの名無しさん
2009/11/13(金) 14:54:080718デフォルトの名無しさん
2009/11/13(金) 14:55:440719デフォルトの名無しさん
2009/11/13(金) 15:04:06例えば
#include<stdio.h>
int main()
{
printf("ipcofig /all\n");
return 0;
}
みたいなかんじで
0720デフォルトの名無しさん
2009/11/13(金) 15:05:02>709
0721719
2009/11/13(金) 15:10:24なぜ出来ないかわかりやすく説明してください。
0722デフォルトの名無しさん
2009/11/13(金) 15:12:38printf()ではできないけど、他の手段できるよ。
0723デフォルトの名無しさん
2009/11/13(金) 15:17:52いやシェルスクリプトを実行するシェルスクリプトはいらないです
wgetはシェルスクリプトとして書かれているものとします。
0724デフォルトの名無しさん
2009/11/13(金) 15:18:30Unix系なら、そのプログラムの実行モジュールをfooとすると`foo`でできるよ。
0725デフォルトの名無しさん
2009/11/13(金) 15:19:11ぐだぐだ能書きはいいから、今までについたレスを全部検討して鯉。
0726デフォルトの名無しさん
2009/11/13(金) 15:23:00それもそうですねww
わかた
0727デフォルトの名無しさん
2009/11/13(金) 17:27:11計算処理速度遅くなったりコンパイラが混乱を起こして誤作動したりしないのかなぁ?
0728デフォルトの名無しさん
2009/11/13(金) 17:29:09#include <stdio.h>
int main()
{
int i;
int f(int a,int b){return a+b;}
for(i=0;i<100;i++)printf("%d ",f(i,i+1));
return 0;
}
0729デフォルトの名無しさん
2009/11/13(金) 17:39:02Cにおいては特定の関数mainのみから呼び出せる関数fを定義するこ
とは出来ません。
0730デフォルトの名無しさん
2009/11/13(金) 17:39:470731デフォルトの名無しさん
2009/11/13(金) 17:50:490732デフォルトの名無しさん
2009/11/13(金) 17:53:35コンパイラが混乱を起こして誤作動したりはしないけど、
プログラマが誤動作することがしばしばある。
0733デフォルトの名無しさん
2009/11/13(金) 17:57:360734デフォルトの名無しさん
2009/11/13(金) 20:09:07B は遅かったが混乱したからではなかったな
0735デフォルトの名無しさん
2009/11/13(金) 20:12:12なく、むしろ徹底して暗黙化するものとそうでないものの二極に
分化している件について
0736デフォルトの名無しさん
2009/11/13(金) 20:49:29#include "textfile.txt"
";
みたいなことやりたいときはどうしたら良い?
0737デフォルトの名無しさん
2009/11/13(金) 20:53:430738デフォルトの名無しさん
2009/11/13(金) 21:30:33#define hoge "\
#include "textfile.txt"\
"
const char *s = hoge;
0739デフォルトの名無しさん
2009/11/13(金) 21:54:58__struct {
________int b;
________int c;
} a;
};
こういう書き方をしてるプログラムを見つけたんですが、古い書き方なんでしょうか?
0740デフォルトの名無しさん
2009/11/13(金) 22:31:060741デフォルトの名無しさん
2009/11/13(金) 22:55:290742デフォルトの名無しさん
2009/11/13(金) 23:07:130743デフォルトの名無しさん
2009/11/13(金) 23:44:100744デフォルトの名無しさん
2009/11/13(金) 23:45:32まあライトユーザには無意味というのは正しいが。
0745デフォルトの名無しさん
2009/11/14(土) 00:24:550746デフォルトの名無しさん
2009/11/14(土) 00:29:320747デフォルトの名無しさん
2009/11/14(土) 01:31:310748デフォルトの名無しさん
2009/11/14(土) 01:34:280749デフォルトの名無しさん
2009/11/14(土) 03:53:32実行時コストはかからない。
0750デフォルトの名無しさん
2009/11/14(土) 04:04:160751デフォルトの名無しさん
2009/11/14(土) 04:33:53規格票には何も書かれてない以上断言するのはどうかと
0752デフォルトの名無しさん
2009/11/14(土) 05:05:160753デフォルトの名無しさん
2009/11/14(土) 05:53:00馬鹿発見
0754デフォルトの名無しさん
2009/11/14(土) 11:04:10記述方法とかはわかるんですけど
どういう時に使うものなの?
0755デフォルトの名無しさん
2009/11/14(土) 11:10:420756デフォルトの名無しさん
2009/11/14(土) 11:12:310757デフォルトの名無しさん
2009/11/14(土) 11:13:27{
*p = malloc(s);
}
0758デフォルトの名無しさん
2009/11/14(土) 11:15:58たとえば
main(){
x=20;
func(x);
}
void func(x){
x=10;
}
これを実行してもxの値は変わらなかったからポインタ使ったよな?
このfuncの引数xがそのままポインタにした場合を考えればいい
0759デフォルトの名無しさん
2009/11/14(土) 11:20:24ポインタを使うとき、を考えれば、ポインタのポインタを使うときも分かるはず
関数の参照渡しで、ポインタを渡したい場合とかね
>>758
?
0760デフォルトの名無しさん
2009/11/14(土) 11:26:55少し混乱しやすいけどな。
0761デフォルトの名無しさん
2009/11/14(土) 11:29:44char型とint型とdouble型だけでよくね?
ほかって何に使うの?
0762デフォルトの名無しさん
2009/11/14(土) 11:33:52線形リストや二分木でいやというほど使うので、まあそのときにでも。
0763デフォルトの名無しさん
2009/11/14(土) 11:41:080764デフォルトの名無しさん
2009/11/14(土) 11:50:00ディスプレイの電源が落ちてるんじゃね?
0765デフォルトの名無しさん
2009/11/14(土) 11:50:43I/Oのレジスタをアクセスするときって、たいていアクセス幅は決まってる
ハーフワードのレジスタは、バイトx2ではアクセス出来ない(エラーが出る)
そうでなくても、データ構造体の中に16ビット長のデータがあることは
普通にあるから、欲しくなるでしょ。IPヘッダとか見てみれば?
0766デフォルトの名無しさん
2009/11/14(土) 12:07:200767デフォルトの名無しさん
2009/11/14(土) 12:20:030768デフォルトの名無しさん
2009/11/14(土) 12:30:110769デフォルトの名無しさん
2009/11/14(土) 12:33:53あくまで任意の拡張扱いにしておくべきだった。
0770デフォルトの名無しさん
2009/11/14(土) 12:53:28よく「C言語はコンパイル時の型チェックが厳密」と聞きますが、以下の例などでは人間が気をつけるしかないのでしょうか?
#include <stdio.h>
int func1(int);
int main(void)
{
printf("%d\n", func1(3));
printf("%d\n", func1(3.0)); //<--勘違い部分
return 0;
}
int func1(int n)
{
return n + 1;
}
0771デフォルトの名無しさん
2009/11/14(土) 12:57:310772デフォルトの名無しさん
2009/11/14(土) 14:11:30死ね
0773デフォルトの名無しさん
2009/11/14(土) 14:36:300774デフォルトの名無しさん
2009/11/14(土) 14:55:080775デフォルトの名無しさん
2009/11/14(土) 15:17:48int f1(int min, int max){
return rand()/(RAND_MAX+1.0)*(max-min+1)+min;
}
int f2(int min, int max){
return rand()/((RAND_MAX+1.0)/(max-min+1))+min;
}
0776デフォルトの名無しさん
2009/11/14(土) 15:20:30一般的に除算は乗算よりも遅い
0777デフォルトの名無しさん
2009/11/14(土) 15:27:410778デフォルトの名無しさん
2009/11/14(土) 15:31:33下位バイトの精度が云々と言うなら下は捨ててしまえば良い。
int f3(int min, int max){
return (rand()>>1)%(max-min+1)+min;
}
0779デフォルトの名無しさん
2009/11/14(土) 15:34:22min=0 max=100000 RAND_MAX=65535 であるときに出ない値の分布が…
0780デフォルトの名無しさん
2009/11/14(土) 15:54:28最大値で撥ねれば良いだろ。
剰余で充分。
0781デフォルトの名無しさん
2009/11/14(土) 15:56:372の累乗以外の結果を求めるなら振り直し法を使うしかない。
0782デフォルトの名無しさん
2009/11/14(土) 16:03:01unsigned int xorshift() {
static unsigned int t, x=123456789UL,y=362436069UL,z=521288629UL,w=88675123UL;
t=x^(x<<11); x=y; y=z; z=w; return w^=(w>>19)^t^(t>>8); }
0783デフォルトの名無しさん
2009/11/14(土) 16:06:050784デフォルトの名無しさん
2009/11/14(土) 16:08:15この三つを組み合わせれば最強乱数になる。
精度がいい乱数を使えば右シフトは不要だが。
0785デフォルトの名無しさん
2009/11/14(土) 16:14:09さまざまな要因で速度は変化する。
0786デフォルトの名無しさん
2009/11/14(土) 16:17:590787デフォルトの名無しさん
2009/11/14(土) 16:27:12これって RAND_MAX に 1 足しちゃうと精度悪くなんね?
>return rand()/(RAND_MAX+0.00001)*(max-min+1)+min;
くらいで良いんじゃね?
0788デフォルトの名無しさん
2009/11/14(土) 17:04:30手元では
cycle=1630806039
2^32=4294967296
0789788
2009/11/14(土) 17:06:00http://codepad.org/IinpiWcy
0790デフォルトの名無しさん
2009/11/14(土) 17:10:410791デフォルトの名無しさん
2009/11/14(土) 17:13:340792デフォルトの名無しさん
2009/11/14(土) 17:56:56CPUの除算ステップを見ればよい。
俺の大好きなSH4は、除算も1ステップ実行なので
除算に対してビットシフトとかせんでよい。
除算に対して3〜10サイクルもかかっていた頃はビットシフトしか選択肢がなかった
0793デフォルトの名無しさん
2009/11/14(土) 18:02:210794デフォルトの名無しさん
2009/11/14(土) 18:05:320795デフォルトの名無しさん
2009/11/14(土) 18:08:4510倍にするなら X = ((A << 2) + A) << 1 でいいじゃないか。
0796デフォルトの名無しさん
2009/11/14(土) 18:21:49つ
#include <stdio.h>
double nijyo(unsigned int n){
double sum=1; unsigned int i;for(i=0;i<n;i++)sum*=2; return sum; }
void f(unsigned int N){
unsigned int n,Y,d ;
double X, NJ;
if( N<=0 || N>=(1<<16) ) return ;
for( n=0; ( (unsigned int)1<<n ) < N ; n++ ); n += 15;
NJ=nijyo(n);
X = NJ / N ;
Y = (unsigned int) X;
d = 0;
if( X-Y > 0.5 ) Y++; else d = (unsigned int) ( NJ - (N-1) * Y ) - 1;
printf("x/%5d = (%5d*x + %5d) >> %2d\n", N, Y, d, n ); }
main(){ for(unsigned int N=1; N<65000 ; N++)f(N); }
0797デフォルトの名無しさん
2009/11/14(土) 18:51:3332bit数対応版も出来た。64bit演算仕うがな。
#include <iostream>
using namespace std;
void f(unsigned int N){
unsigned int n; unsigned long long NJ,d,Y;
for( n=0; (1<<n) < N ; n++ );
n += 31;
NJ = (unsigned long long)1<<n;
double X = (double)NJ/N;
Y = (unsigned long long) X;
d = 0;
if( X-Y > 0.5 ) Y++; else d = (unsigned long long) ( NJ - (N-1) * Y ) - 1;
cout<<"x/"<< N <<" = (" << Y <<"*x + "<<d<<") >> "<<n<<endl;
//for( int k=(1<<20) ; k < (1<<25) ; k++ ) if ( k/N!=(Y*k+d)>>n ) cout<<"err "<<N<<endl;
}
main(){ for(unsigned int N=(1<<16); N<(1<<18) ; N++) f(N); }
0798デフォルトの名無しさん
2009/11/14(土) 19:02:00どうすればI/Oを取り戻せますか。
0799デフォルトの名無しさん
2009/11/14(土) 19:02:39貼付けるのか問うてみたい...)
0800デフォルトの名無しさん
2009/11/14(土) 19:04:52ポーリングをやめて割り込み駆動にする
0801デフォルトの名無しさん
2009/11/14(土) 19:08:28見たくはないさ
I/O取り戻せ!
0802デフォルトの名無しさん
2009/11/14(土) 19:27:30スレ違い
0803デフォルトの名無しさん
2009/11/14(土) 19:41:360804デフォルトの名無しさん
2009/11/14(土) 20:30:26Iで空が落ちてくる!
0805デフォルトの名無しさん
2009/11/14(土) 21:59:26i とか t とか
0806デフォルトの名無しさん
2009/11/14(土) 22:08:000807デフォルトの名無しさん
2009/11/14(土) 22:13:31K&R C が長かったり、長くもなかったりする奴の return(0); は許してるんだろ?
0808デフォルトの名無しさん
2009/11/14(土) 22:14:55もうちょっと何とかならんのかい。
long double ConvertGeometryMatrix(void)
というところでインクリメント用変数を使うのだとしたら、
ConvertGeometryMatrix_InclementValue
などとすれば一発で分かるのに。
0809デフォルトの名無しさん
2009/11/14(土) 22:16:460810デフォルトの名無しさん
2009/11/14(土) 22:27:43IntegerVariable MainFunction(IntegerVariable ArgumentCount, CharacterVariable *ArgumentVector[])
{
return 0;
}
0811デフォルトの名無しさん
2009/11/14(土) 22:33:240812デフォルトの名無しさん
2009/11/14(土) 22:37:02中二病みたいなもんだから
その内に治まるだろ。
無意味だと気付くまでやりたいようにやらせとけ。
0813デフォルトの名無しさん
2009/11/14(土) 22:38:04人それぞれ好みが違う
ンなことは分かりきってるし、散々いろんなところで議論されてきたのに
やっぱ目の前でモメるとイライラする。それも
int First, Second;
なのか、
int first,
Second;
なのか程度で
0814デフォルトの名無しさん
2009/11/14(土) 22:48:25なんだよInclementって。わかんねーよ
0815デフォルトの名無しさん
2009/11/14(土) 22:52:08int first;
int second;
0816デフォルトの名無しさん
2009/11/15(日) 00:10:30もういちどスタートラインに戻って考え直してみてはいかが?
0817デフォルトの名無しさん
2009/11/15(日) 00:16:54だれに言ってるの?
0818デフォルトの名無しさん
2009/11/15(日) 00:52:510819デフォルトの名無しさん
2009/11/15(日) 01:16:140820デフォルトの名無しさん
2009/11/15(日) 02:37:55かまいたちの夜とか風なサウンドノベルはゲーム用ライブラリなしで作れるものでしょうか?
0821デフォルトの名無しさん
2009/11/15(日) 02:46:140822デフォルトの名無しさん
2009/11/15(日) 02:48:08いや聞く前にプログラム系の本を買って来い
0823デフォルトの名無しさん
2009/11/15(日) 04:22:21コンソールで詩を流しながらみたいな感じで
0824デフォルトの名無しさん
2009/11/15(日) 05:09:26Windowsをはじめ、多くのMIDIライブラリはC言語で記述されて
ているが、そのようなライブラリとその使用法の情報が入手でき
ることとCコンパイラを持っていることとは同じことではない
0825デフォルトの名無しさん
2009/11/15(日) 06:00:56グラフィックスやサウンド、ディスプレイなど何に対してもいえるが、
ここにデータを入れると表示するぞ!っていうレジスタがある。
そこに対してアクセスし、データを入れてやれば望みどおりに動くのである。
そのレジスタがどこにあるのか、制御方法は、などは公開されているなら
自分で組むことは可能だが、本来それをやるのはドライバだ。
こういうのは本来何の言語でもできる、特にレジスタいじりやメモリいじりを得意とするアセンブラが最適だが
OS上で、という条件があるのなら、あらかじめ用意されている関数群を使うのが早い。
そういうのをAPIという。
0826デフォルトの名無しさん
2009/11/15(日) 06:10:570827デフォルトの名無しさん
2009/11/15(日) 06:20:060828デフォルトの名無しさん
2009/11/15(日) 06:24:54結局、特定のレジスタに値を入れて演算させ、アキュームレータから取り出す
これを延々繰り返しているだけ。
であることからCでも書けるが、じゃあどこのレジスタに入れるんですか
アクセスするときのお約束事はなんですか
っていうのは統一されていないので、分からなければドライバやAPIに頼るしかない。
0829デフォルトの名無しさん
2009/11/15(日) 06:26:29そこでレジスタが出てくること自体が変だ
0830デフォルトの名無しさん
2009/11/15(日) 06:37:01レジスタってのは、CPUだけにあるもんじゃない。
産業用のコントロールICにも必ずあるし、GPUにも必ずあるし、サウンドチップにも必ずあるし、USBチップにも(ry
そのレジスタとの橋渡しをしているのがドライバである。
ドライバはプログラマに専用の制御関数、つまりAPIを提供する。
プログラマが「普段」直接触れるのはAPIだけなので、ハードをまったく知らない素人は気づきにくいが
結局は何であってもレジスタにアクセスし、値を入れているのだ。
0831デフォルトの名無しさん
2009/11/15(日) 06:41:46いまどきのプログラマには想像できないかもしれないが
プログラマが書いたコードが直接ハードを制御しに行ってるわけではない。
API越しにプログラマが値を入れようとする
OSを介すならAPIがOSに値が入ったことを通知する
OSがAPIから受け取り、適切ならばドライバに値を渡す
ドライバはトランスコードを行う
ハードウェアに値が渡る
結果を返す
ドライバが結果を読み取る
(ry
「そのようなことは分かっている」とたいてい言うが、ハードウェアがどのように動いているかまで分かってなければ素人だ。
0832デフォルトの名無しさん
2009/11/15(日) 06:45:000833デフォルトの名無しさん
2009/11/15(日) 06:46:040834デフォルトの名無しさん
2009/11/15(日) 06:56:150835デフォルトの名無しさん
2009/11/15(日) 07:12:28なんか根本的なところが間違ってる、とまではいわないまでも、考え違いをしているような気がする。
もういちどスタートラインに戻って考え直してみてはいかが?
0836デフォルトの名無しさん
2009/11/15(日) 07:14:120837デフォルトの名無しさん
2009/11/15(日) 07:15:15さすがにここまでの無知は初めて見た。
0838デフォルトの名無しさん
2009/11/15(日) 07:42:02知識はありそうだが自分でも何をしたいのかわからないプログラマーの末路
0839デフォルトの名無しさん
2009/11/15(日) 07:44:120840デフォルトの名無しさん
2009/11/15(日) 07:46:36自分のプライドを優先してるからなw
0841デフォルトの名無しさん
2009/11/15(日) 08:44:06組み込み系以外だと、「レジスタ、なにそれ?」とか、「CPUの事でしょ?」というプログラマも多いよ。
ワンボードマイコンの時代に比べ、Cが広い分野で使われるようになった、という事でもあるんだが。
0842デフォルトの名無しさん
2009/11/15(日) 09:06:30このコメントが技術レベルを如実に語ってるな
0843デフォルトの名無しさん
2009/11/15(日) 10:41:38Nscripterで検索するんだ。
0845デフォルトの名無しさん
2009/11/15(日) 11:37:15がむばれ
0846デフォルトの名無しさん
2009/11/15(日) 11:53:050847デフォルトの名無しさん
2009/11/15(日) 14:21:24if(hoge){
uwaa();
}
と
if(hoge)
{
uwaa();
}
と記述する場合は他人から見るとどっちが読み易いんでしょうか?
0848デフォルトの名無しさん
2009/11/15(日) 14:26:33どっちでもいいけど、スペース無しでペタっとしてるほうが気になる。
0849デフォルトの名無しさん
2009/11/15(日) 14:26:570850デフォルトの名無しさん
2009/11/15(日) 14:28:57その2つであればどちらでも問題無い
0851デフォルトの名無しさん
2009/11/15(日) 14:31:31下を使うようにするます
0852デフォルトの名無しさん
2009/11/15(日) 14:31:37インデントを定義しろタコ!と言い返してやれ
0853デフォルトの名無しさん
2009/11/15(日) 14:42:530854デフォルトの名無しさん
2009/11/15(日) 15:03:070855デフォルトの名無しさん
2009/11/15(日) 15:52:06cソースの整形ツールに、krオプションとかあるから、好きな方で統一すればいいんでは?
0856デフォルトの名無しさん
2009/11/15(日) 15:54:23プログラマーと、業務アプリコーダーとの区別が付かない人が多いな。
0857デフォルトの名無しさん
2009/11/15(日) 20:57:06{
char flags[2];
};
これぐらいだったら参照渡しより値渡しのほうがはやいよね?
0858デフォルトの名無しさん
2009/11/15(日) 21:55:26今、コーダーって人いるの?
メインフレームの世界ではかつてコーダーがいたそうだが。
0859デフォルトの名無しさん
2009/11/15(日) 21:57:43読み取りしかしないのか?
0860デフォルトの名無しさん
2009/11/15(日) 22:03:510861デフォルトの名無しさん
2009/11/15(日) 23:14:48struct fuhihi func(struct fuhihi arg);
0862デフォルトの名無しさん
2009/11/16(月) 01:02:17現在のWebページでスクリプト使わないことは
殆ど無いので、JavaScriptが事実上必須となる。
JavaScriptはJavaとは別物と言えども、Javaの
素養があるのと無いのでは相当違うんで相当の
実力が必要。Cプログラマは決して見下すべき
ではないんじゃないかと
0863デフォルトの名無しさん
2009/11/16(月) 01:05:41タグで挟めばいいんだろ? 程度にしか考えていないのは、もうね...
0864デフォルトの名無しさん
2009/11/16(月) 01:12:10極めて動作の遅いWebブラウザ環境でのJavaScriptプログラミングは
意外にも、DOS全盛期の遅いPC向けのプログラミングに似たきわどい工夫が決め手なこともよくあるんで腕が立つ人じゃないと任せられ
ないと聞くね。
0865デフォルトの名無しさん
2009/11/16(月) 04:17:16C言語はボケ防止に繋がるでしょうか?
最近、警備員に就職し頭を使わないせいかボケかけています。
どうでしょうか?
0866デフォルトの名無しさん
2009/11/16(月) 04:45:28新しいことを始めるのはボケ防止になるよ
0867デフォルトの名無しさん
2009/11/16(月) 04:56:290868デフォルトの名無しさん
2009/11/16(月) 05:39:49ただのアドレスっしょ?
ポインタを利用したテクニックやアルゴリズムとかは難しいかもしれんが
ただポインタっていう概念はぜんぜん難しくないじゃん
何が難しいの?バカ?
0869デフォルトの名無しさん
2009/11/16(月) 05:42:07Cの文法上ポインタの扱いが糞なのは確か
理解している人もいれば混乱している人もいる
一部の混乱しているひとが「難しい」と言っているのが一人歩きしているだけ
0870デフォルトの名無しさん
2009/11/16(月) 07:07:47○めんどくせーよ
0871デフォルトの名無しさん
2009/11/16(月) 07:17:200872デフォルトの名無しさん
2009/11/16(月) 07:23:370873デフォルトの名無しさん
2009/11/16(月) 07:46:55いるってことだな。
0874デフォルトの名無しさん
2009/11/16(月) 07:56:560875デフォルトの名無しさん
2009/11/16(月) 09:10:17からであって決してそれがそんなにそれほどそうこうするわけ
でもないので、それほど難しいものでは無い筈なのどがあのように
このように難しいというそのいわゆるそれが出てくるわけで....
0876デフォルトの名無しさん
2009/11/16(月) 13:12:28ポインタも理解できないようなバカも
C言語を入門するようになったってこと
0877デフォルトの名無しさん
2009/11/16(月) 13:16:28情報が埋もれるだけだからマジ勘弁して
0878デフォルトの名無しさん
2009/11/16(月) 17:53:04全体あるいは周辺に対する関係がかなりわかっている
人にしか読めないと思ったほうが正解なのでは?
ディテールから入り最終的には全体を完璧に理解する
というボトムアップ方式で読んでいく対象としては全く
向かないと思う。「わかっている人にだけ読める文、あるいは
書いた本人しか読めない文」
0879デフォルトの名無しさん
2009/11/16(月) 18:01:300880デフォルトの名無しさん
2009/11/16(月) 18:05:38あるだろうな。とりわけアブソリュートアセンブラを使う
機会が失われた世代以降は。
0881デフォルトの名無しさん
2009/11/16(月) 22:45:53828 デフォルトの名無しさん [sage] 2009/11/16(月) 10:47:37 ID: Be:
>>826
>本来の「ハッキング」はム板では推奨される行為なので
使用許諾約款等、リバースエンジニアリングが禁止されている状況くらい
想像できないもんかね…
0882デフォルトの名無しさん
2009/11/16(月) 23:29:11どこの馬の骨とも知らん奴にあーしろこーしろと干渉する気はないんで
電子土方が自分の仕事をどう思っているかなんて人それぞれだし
いかにも学生風な発言を見ててもご覧のとおり
0883デフォルトの名無しさん
2009/11/16(月) 23:38:320884デフォルトの名無しさん
2009/11/17(火) 00:27:39i == KEY_INPUT_LEFT || i == KEY_INPUT_RIGHT ||
i == KEY_INPUT_UP || i == KEY_INPUT_DOWN ||
i == KEY_INPUT_NUMPAD1 || i == KEY_INPUT_NUMPAD2 || i == KEY_INPUT_NUMPAD3 ||
i == KEY_INPUT_NUMPAD4 || i == KEY_INPUT_NUMPAD5 || i == KEY_INPUT_NUMPAD6 ||
i == KEY_INPUT_NUMPAD7 || i == KEY_INPUT_NUMPAD8 || i == KEY_INPUT_NUMPAD9
)
break;
こういうのもっときれいに書く方法はないもんでしょうか?
ちなみにこのマクロはビットマスクではないです
0885デフォルトの名無しさん
2009/11/17(火) 00:28:360886デフォルトの名無しさん
2009/11/17(火) 00:30:580887デフォルトの名無しさん
2009/11/17(火) 01:48:39スタッティック外部でも扱わなくてはならなくなりました.
方法として,スタティック内でセンサー値が1の時Senser1.txt
センサー値が2のときSenser2.txt もしくは Senser.txtがあるとき1ないとき2のように
決めて外部でそのファイルがあるか無いかで判別しようと考えました.
とても,不細工なことをやっていると自覚しています.
何かよい方法をご存じありませんでしょうか?
0888デフォルトの名無しさん
2009/11/17(火) 01:55:27ファイルの有無で調べる程度なら
グローバル変数 と volatile 修飾でおk
0889デフォルトの名無しさん
2009/11/17(火) 01:56:26環境にあったスレに行って貰うほうがいいけどな
0890デフォルトの名無しさん
2009/11/17(火) 04:00:27判定をinline関数(orマクロ化)しちゃうかな。
方向キー・テンキー・ファンクションキーみたいな区切りで。
// Arrowキー or 0以外のNumキー
if(isArrowKey(i) || (i!=KEY_INPUT_NUMPAD0 && isNumKey(i))){
}
KEY_INPUT_NUMPAD1〜KEY_INPUT_NUMPAD9が連番であることが保障されているなら、
(i>=KEY_INPUT_NUMPAD1 && i<=KEY_INPUT_NUMPAD9)
としても不可じゃないかな?
俺はやらんが。
0891デフォルトの名無しさん
2009/11/17(火) 09:43:03再帰処理をした場合はスタックに大量の変数をつくるので
メモリを食う+速度が遅くなる+スタックオーバーフローの可能性とデメリットが多いように思うのですが
メリットは数式を単純化することで長々とコードを書かなくても良いくらいですか?
また上記の問題を解決するのに末尾再帰というのがあるようですが普通にforやwhileでループさせる以上に
メリットがあるものなのでしょうか?
0892デフォルトの名無しさん
2009/11/17(火) 09:46:10ループと再帰を比べたらって言う話?
0894デフォルトの名無しさん
2009/11/17(火) 09:54:480895デフォルトの名無しさん
2009/11/17(火) 09:57:03> メリットがあるものなのでしょうか?
末尾再帰は処理系によっては最適化でループにしてくれる
そうするとコードが見やすいというのはメリットだと思う
0896デフォルトの名無しさん
2009/11/17(火) 10:18:56簡単にループに直せるような再帰ならループで書けばいいし
クイックソートだってgoto文を使って再帰なしに書くのもそう難しくはないが
ループ終了条件が面倒だったりするとどうか
あまり再帰の例を知らないのだと思うが、もっと調べてみればメリット・デメリットについては納得がいくと思う
0897891
2009/11/17(火) 10:20:35ありがとうございます
オブジェクトコードを吐くときに処理系によっては最適化してくれるのですね
見やすいコードで書けるということが自体がメリットということで納得できました
0898デフォルトの名無しさん
2009/11/17(火) 10:37:31保存しなくていい情報まで記録する可能性、動作遅い可能性
いいことなし。
0900デフォルトの名無しさん
2009/11/17(火) 10:46:20それでいい
0901デフォルトの名無しさん
2009/11/17(火) 11:03:010902デフォルトの名無しさん
2009/11/17(火) 11:04:330903デフォルトの名無しさん
2009/11/17(火) 11:39:46可読性を優先した方が良いからな。
資源をケチるのは、本当にケチる必要のある時だけでいい。
0904デフォルトの名無しさん
2009/11/17(火) 12:05:00>また上記の問題を解決するのに末尾再帰というのがあるようですが
いや…
「処理が末尾再帰の形になっていたら、途中経過を保存するローカル変数は
それ以降使わないということなので、その処理はループに書き換え可能」
ではあるが。
0905デフォルトの名無しさん
2009/11/17(火) 12:13:31保守、バグ減らしに効果的
可読性の減る改行へら氏などはのぞく。
0906デフォルトの名無しさん
2009/11/17(火) 12:30:040907デフォルトの名無しさん
2009/11/17(火) 12:31:260908デフォルトの名無しさん
2009/11/17(火) 12:32:140909デフォルトの名無しさん
2009/11/17(火) 12:47:180910デフォルトの名無しさん
2009/11/17(火) 12:55:03前者は最適化されて後者と速度は変わらないといってたやつがいたが
実測すると大きな違い。
0911デフォルトの名無しさん
2009/11/17(火) 12:55:410912デフォルトの名無しさん
2009/11/17(火) 12:56:400913デフォルトの名無しさん
2009/11/17(火) 13:08:05勝手に発言を最適化しないで欲しい
0914デフォルトの名無しさん
2009/11/17(火) 13:29:01せいぜい、無駄な計算や同一計算の除去くらいに思っておくといい。
0915デフォルトの名無しさん
2009/11/17(火) 13:43:43頭の悪いコード書いといて言い訳に最適化を言う奴が許せんのよ
それと最適化と言える範囲を微妙に勘違いしてる奴とは話がかみ合わなかったりね
0916デフォルトの名無しさん
2009/11/17(火) 15:19:330917デフォルトの名無しさん
2009/11/17(火) 16:30:190918デフォルトの名無しさん
2009/11/17(火) 16:38:45そんな迂遠な揶揄が通じるとも思えませんが。
0919デフォルトの名無しさん
2009/11/17(火) 16:42:20まぁ、俺様プリプロセッサを通せばできそうだけどな
0920デフォルトの名無しさん
2009/11/17(火) 16:59:19化して構文に取り入れたのがC++
ってか、太古のC++は実質的にマクロ記述に過ぎず、C++記述を
Cのコードに変換してCとしてコンパイルしたものだとか。
その面影はMac-OS-Xの中心的開発言語 Objective-Cにも残ってる。
OCはオブジェクト指向の拡張部分を使わなければ完全にC互換だし
なぜC/C++とスレを分けるのか少々疑問
0921デフォルトの名無しさん
2009/11/17(火) 17:03:440922デフォルトの名無しさん
2009/11/17(火) 17:03:57http://sourceforge.jp/projects/cstl/releases/
0923デフォルトの名無しさん
2009/11/17(火) 17:24:170924デフォルトの名無しさん
2009/11/17(火) 21:44:28とか それに類似した構造のデータの総なめとか そんなケースは再帰しちゃうな。
構文解析とかも再帰のほうが記述しやすいんだろうけど、
俺の中では出番がほとんど無いので実感なし
0925デフォルトの名無しさん
2009/11/17(火) 21:48:58その意味では保存性は良いが、僅かな勘違いミスとかで破損すると
すぐに動かなくなるデリケートさも持つ。(だからと言って非再帰
は常にデリケートじゃないというのも嘘だが)
しかし問題は実は別のところにあるんじゃないかと
0926デフォルトの名無しさん
2009/11/17(火) 23:45:17//〜〜する処理
{
・・・
・・・
・・・
}
見たいな感じで
0927デフォルトの名無しさん
2009/11/18(水) 00:06:52もし見かけたら何の意図でそうしたのか悩むかもなぁ。
ただ改行入れるんじゃダメなん?
0928デフォルトの名無しさん
2009/11/18(水) 00:22:11関数のポインタを用いてしまうのだ。
まあ普通はビットシフトだな
ゲームパッドの入力は割り込みコントローラのレジスタを参照すれば何が来たか分かるのだが
その数値を見てしまうとマイク・バイソンのスーパーコンボである。
だから特定数ビットシフトする。
パッドキー上を入力すると0xFF80が、パッドキー右を入力すると0xFF7Fが、とか規則性があるから
これを多桁ビットシフトしても数値は規則どおりに並ぶ。
で、この数値にそってテーブルを書いて参照すればよい。
0929デフォルトの名無しさん
2009/11/18(水) 00:23:480930デフォルトの名無しさん
2009/11/18(水) 00:53:44NULLを受け付けてくれるかどうか調べる。
だめだったら、非表示のダミーのウィンドウを作ったりGetConsoleWindow関数を使ったりする。
0931デフォルトの名無しさん
2009/11/18(水) 01:16:11そんなもの無いだろ。
CUIアプリはウィンドウを持たない。
ウィンドウのオーナーはそのCUIアプリじゃなくて
conagent か何か、あくまで他のプログラムだろ。
0932デフォルトの名無しさん
2009/11/18(水) 05:39:130933デフォルトの名無しさん
2009/11/18(水) 08:54:090934デフォルトの名無しさん
2009/11/18(水) 13:10:59どうせsignalはグローバルなものだし
0935デフォルトの名無しさん
2009/11/18(水) 13:22:320936デフォルトの名無しさん
2009/11/18(水) 14:21:37これはたまたま動いてるの?
それとも正しいコードなの?
0937デフォルトの名無しさん
2009/11/18(水) 14:35:00厳密な解釈で言うなら、sizeof(long) == sizeof(int)でsizeof(long) == sizeof(float)なら問題ない。
尚、sizeof(int) != sizeof(long)の場合はメモリ確保ではなく出力が問題。
0938デフォルトの名無しさん
2009/11/18(水) 14:37:12たまたま。
CPUのアーキテクチャによっては、alignmentがあわなくてバスエラーを起こす可能性がある。
struct foo { int i[2]; long l[3]; float f[2] } x;
について &x.f[0] と &x.i[0] の差が sizeof(int)*2+sizeof(long)*3バイトであるとは限らないのと同じ。
0939デフォルトの名無しさん
2009/11/18(水) 14:51:29じゃあメモリをいっぺんに確保して細かく振り分けていく方法は場合によっては危険なわけか
0940デフォルトの名無しさん
2009/11/18(水) 14:54:450941デフォルトの名無しさん
2009/11/18(水) 15:05:53それ、初心者にはお勧めできない。
>937の2行目のようなミスを犯すような奴にもお勧めできない。
0942デフォルトの名無しさん
2009/11/18(水) 15:21:44アクセスできることは同じではない
その変数に
0943デフォルトの名無しさん
2009/11/18(水) 15:31:210944デフォルトの名無しさん
2009/11/18(水) 15:37:32変数を構造体に押し込んで外枠をallocする方法が定石?
0945デフォルトの名無しさん
2009/11/18(水) 15:45:480946デフォルトの名無しさん
2009/11/18(水) 15:46:040947デフォルトの名無しさん
2009/11/18(水) 15:58:420948デフォルトの名無しさん
2009/11/18(水) 16:15:06寧ろ初心者は自前で管理するべきでない。
0949デフォルトの名無しさん
2009/11/18(水) 16:21:04構造体が 環境依存によるバスエラーの回避としてメンバ配置に気を利かしてくれている ので
malloc は言われた大きさの連続した領域をかえしてあげるだけ
(だが、その戻すポインタが、いきなり上記のバスエラーを起こす値だったりすると都合が悪いので
ポインタ値が sizeof(int) や sizeof(long) 境界になるように実装していることもある)
0950デフォルトの名無しさん
2009/11/18(水) 16:27:47無知は黙ってろ
0951デフォルトの名無しさん
2009/11/18(水) 19:45:31環境依存によらないバスエラーってあるのか
0952デフォルトの名無しさん
2009/11/18(水) 19:49:380953デフォルトの名無しさん
2009/11/18(水) 21:36:54やるやる。
同じような用途の変数を複数使うときに、名前をそれぞれつけなくていいから便利。
0954デフォルトの名無しさん
2009/11/18(水) 22:39:26阿呆は黙って露。
って返すだけではなんなんで、まともな人に質問。
>937の2行目の条件を満たさない、初心者レベルで扱うような環境は何かある?
0955デフォルトの名無しさん
2009/11/18(水) 22:42:33少し前は無料でコンパクトなコンパイラとして lsi-c86 試食版が使われることが結構あった
0956デフォルトの名無しさん
2009/11/18(水) 22:48:12LSIC-86は、ディフォルトでは何らパディングをしなかったのでは?
そもそもx86は(ペナルティがあるかは兎も角)バスエラーは起こさないわけで。
0957デフォルトの名無しさん
2009/11/18(水) 22:55:34を出して落とすのはWin32のほうで、これは古いDOSアプリが不正な
(想定外な8086流儀に反する)アクセスをしている場合大抵怪しいアプリだったので、動作させて欲しく無いという願いが込められている
のではないかと
0958デフォルトの名無しさん
2009/11/18(水) 23:22:150959デフォルトの名無しさん
2009/11/18(水) 23:26:09Win16 on Win32はDOSアプリのすべてをエミュしてるわけじゃ
なく例えば旧AT互換機のBIOS領域直接アクセスとかは不正アクセス
として落としていたような記憶が...
0960デフォルトの名無しさん
2009/11/19(木) 07:18:19「ちょっと機能が変わってるINT型」
なんだな。
そのINT型の数値を利用してメモリの論理アドレスを操作できるというかそんな感じだな。
0961デフォルトの名無しさん
2009/11/19(木) 07:48:31C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。
【初心者歓迎】C/C++室 Ver.69【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1256022655/
教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 132代目
http://pc12.2ch.net/test/read.cgi/tech/1258158172/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 55
http://pc12.2ch.net/test/read.cgi/tech/1256818218/
過去スレ
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
0962デフォルトの名無しさん
2009/11/19(木) 07:59:38980ぐらいでいいだろ
0963デフォルトの名無しさん
2009/11/19(木) 12:59:35> C言語の*入門者*向け解説スレッドです。
> 初心者、初級者の方は他の質問スレのほうが良いかもしれません。
だぜ
0964デフォルトの名無しさん
2009/11/19(木) 15:41:46C++言語はなぜか余り使われていないので答えるスキルを
用意してません。
だろw
0965デフォルトの名無しさん
2009/11/19(木) 16:05:06f( char* &buf)
だと出来ますけど
0966デフォルトの名無しさん
2009/11/19(木) 16:07:34f(buf, &size);で値を受け取る場合があると思うのですが。
これは参照使うんですか。
C言語のDLLで参照は使えるんですか。
0967デフォルトの名無しさん
2009/11/19(木) 16:10:290968デフォルトの名無しさん
2009/11/19(木) 16:25:12ポインタ値渡しが、ポインタ参照渡しに自動で変換されるようですね。
確実かはわからないのですが。
0969デフォルトの名無しさん
2009/11/19(木) 16:28:30戻り値を使え。
char *buf;
buf = f(buf);
0970デフォルトの名無しさん
2009/11/19(木) 16:31:12戻り値を単なる成否チェックにしか使ってないの見るとイラっとくるよな。
0971デフォルトの名無しさん
2009/11/19(木) 16:37:33char *in , *out;
int insz, outsz;
f(in , insz, out, outsz);という値渡しでした。 だから>>968は間違えました。
>>969
その方法でサイズを取得したい場合は構造体にすればいいと思いますが
C言語から参照を使ったDLLは使えないんですか。
これがしりたいです。
0972デフォルトの名無しさん
2009/11/19(木) 16:40:09異なる戻り値の関数毎に構造体を定義しないといけないのが不便なのですが。
0973デフォルトの名無しさん
2009/11/19(木) 16:43:40どれとどれが同じ人の書き込みなんだ?
0974デフォルトの名無しさん
2009/11/19(木) 16:48:06C に参照なんざないのに、その辺の用語も怪しいのが
質問乱発してるのはもっとイラっとする。
0975デフォルトの名無しさん
2009/11/19(木) 16:54:05mov bx,[ax]
これがポインタや参照の正体だろ
0976デフォルトの名無しさん
2009/11/19(木) 16:54:43参照を使ったC++で作ったDLLはC言語で動作するのかしりたいんです。
0977デフォルトの名無しさん
2009/11/19(木) 16:55:12○○渡し:その変数の複製を参考資料の形で渡すこと。変数を
呼び出し先が変更しても、呼び出し元の変数には影響が出ない。
○渡し:その変数の価値、すなわちその変数そのものを呼び出し先に
変更することを許可する形式で渡すこと
0978デフォルトの名無しさん
2009/11/19(木) 16:55:40めんどくさいから、動作しないことにしておけ。
0979デフォルトの名無しさん
2009/11/19(木) 17:01:04大抵は動くだろうが、何の保証もない以上
やってみろ、としか言えない。
0980デフォルトの名無しさん
2009/11/19(木) 17:01:120981デフォルトの名無しさん
2009/11/19(木) 17:04:170982デフォルトの名無しさん
2009/11/19(木) 17:04:44C++の特徴の重複名称の改竄
この難所?をクリアすればC++でもDLLファイルは作れる。
がこれは完全にWinAPIスレの話題じゃないかと
0983デフォルトの名無しさん
2009/11/19(木) 17:05:21型のサイズに対してよきにはからってくれる機構の部分が…
ある場合では
mov bl,[ax]
別の場合では
mov bx,[ax]
mov cx,[ax+2]
0984デフォルトの名無しさん
2009/11/19(木) 17:09:20逆じゃね?
0985デフォルトの名無しさん
2009/11/19(木) 17:15:20DLL のエントリが実際にどういう引数をとるかなど
コンパイラの知ったこっちゃない。
プロトタイプに「ポインタである」と書かれていれば、その通りに呼び出す。
0986デフォルトの名無しさん
2009/11/19(木) 17:19:02造語ってみた 複製渡し 即渡し
即値じゃ リテラルしか取らない意味になっちゃうからなぁ…
0987デフォルトの名無しさん
2009/11/19(木) 17:19:170988デフォルトの名無しさん
2009/11/19(木) 17:50:39参照値複製渡し==>参照値をつまり複製を渡す
変数内部名称渡し==>変数そのものを渡す
Cは基本的に参照値複製渡し
C++で変数内部名称渡しが解禁された。
0989デフォルトの名無しさん
2009/11/19(木) 17:52:49参照渡しは出来なかった。
>>985
参照渡しなのにヘッダは値渡しで書いたら無理でした。
でもLCCが参照に対応してて&をいれたら動作したけど。
参照非対応、参照対応のどちらのコンパイラでも動作させるのは無理かも。
0990デフォルトの名無しさん
2009/11/19(木) 17:57:07Cでも記号&は変数に対するアドレス値変換演算子として定義されているお
C++での参照変数型であることを宣言する型接尾修飾子&とは
違うんで混同しないやうに
0991デフォルトの名無しさん
2009/11/19(木) 17:57:540992デフォルトの名無しさん
2009/11/19(木) 18:04:05スレ違いになるので詳細は説明せんが
もろにそういうのがある
0993989
2009/11/19(木) 18:05:41だから>>985の説は間違えてる。
//main.cpp
#include <windows.h>
extern "C" int WINAPI add(int &x,int &y){
int z;
z=x;x=y;y=z;
z=x+y;
return z; }
//main.def
LIBRARY DLL
EXPORTS
add
//test.c
#include<stdio.h>
#include<windows.h>
typedef int (WINAPI *fnc)(int&, int&);
main(){
HINSTANCE hd = LoadLibrary("dll.DLL");
fnc add = (fnc)GetProcAddress(hd,"add");
int a,b;
a=5; b=4;
printf("a+b=%d a=%d b=%d\n", add(a,b), a, b);
getchar(); }
0994デフォルトの名無しさん
2009/11/19(木) 18:07:520995デフォルトの名無しさん
2009/11/19(木) 18:09:56>typedef int (WINAPI *fnc)(int&, int&);
だからこれ参照渡しだっつの阿呆。
0996デフォルトの名無しさん
2009/11/19(木) 18:12:50add(&a, &b); で実際に呼び出す
これ以外の文法は Cの範疇外じゃないの?
0997デフォルトの名無しさん
2009/11/19(木) 18:23:340998デフォルトの名無しさん
2009/11/19(木) 18:28:49もう一つはC++独自の拡張(ただし、ある程度は混同できる)
Cでは一通りの意味しかない。
0999999
2009/11/19(木) 18:32:151000デフォルトの名無しさん
2009/11/19(木) 18:39:5610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。