スレを勃てるまでもないC/C++の質問はここで
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2006/12/30(土) 20:07:250002デフォルトの名無しさん
2006/12/30(土) 20:41:520003デフォルトの名無しさん
2006/12/30(土) 22:24:21#define size 1000000
typedef struct SELL{
int xp;
int yp;
}SELL;
void main(void){
SELL el[size];
}
見たいな事すると例えどんなにメインメモリが足りていたとしても動かないっぽいんですよ。
そこでmallocを使って必要な個数分だけメモリを確保したいと考えたのです。
構造体を
typedef struct SELL{
int xp;
int yp;
int *next_p;
}
見たいに変更してnext_pに次のSELLを確保するようにしたらいいのではないかと思いました。
と思ったのはいいのですが実際にどのように記述したらいいのか分かりません。
mallocに関してはまったくの初心者ですがどうかボクに教えてくださいご主人様!!
00043
2006/12/30(土) 22:31:4200053
2006/12/30(土) 22:32:480006デフォルトの名無しさん
2006/12/31(日) 00:59:080007デフォルトの名無しさん
2006/12/31(日) 13:00:430008デフォルトの名無しさん
2006/12/31(日) 13:30:13'´レ´ ̄ `ヽ
f iyl ノノノリ)))〉 / ̄ ̄ ̄ ̄ ̄
! iYl (i_[ [l |( |
i.lメjゝ" lフ/ ヽ < ご主人様。早く教えてくださいです。
,イノ/ヽゝ/}、ヾ i .|
fド〈 }jlー》 〉ノリ \_____
i水i/ / 〉、_|ヽ \ __
__ く_ゝ7i`ート、 くノ_ァ}
{i_ュノ゙// \
, '´,/ i __ヽ
/ /! ` ー-‐' , -‐〉
,' ,.-‐ ァ‐ -‐' \´
! ! / / | ヽ ヽ
i l ,' /! ! )ノ
ヽ^ , / .l l
/`f《 !‐il
ヽ ヽL `__、
0009デフォルトの名無しさん
2006/12/31(日) 17:21:570010デフォルトの名無しさん
2006/12/31(日) 20:46:24コンパイラのヘッダファイルなどに大量のdefineが使われているのは何故ですか?
0011デフォルトの名無しさん
2006/12/31(日) 22:22:48見〜た〜な〜
あれほど見ないでくださいと言いましたのに〜。
今あなたの後ろに立っています・・・。
フフフフフ・・・・・・。
0012デフォルトの名無しさん
2007/01/02(火) 09:44:52printf()とか使えるじゃないですか。
それってコンパイラが暗黙の了解で何かしてるからなんですか?
0013デフォルトの名無しさん
2007/01/02(火) 09:51:45??
printfは定義しなきゃ使えないでしょ?
ヘッダファイルってのはその定義を収めているに過ぎない。
0014デフォルトの名無しさん
2007/01/02(火) 13:51:29http://ysserve.int-univ.com/sugsi/Lecture/c2/e_08-01.html
0015デフォルトの名無しさん
2007/01/02(火) 14:01:24ところが"C言語"では宣言しなくても printf が使えるんだな。
未宣言の関数コールは暗黙で int を返す引数チェックなしの関数とされるのな。
"C++言語"だと文法エラーではじかれるが...
まぁあまりいい習慣でないことは確かだ。
001613
2007/01/02(火) 15:13:33ほんとだ。うちのgcc(cygwin)でも警告も出さずに通った。
これって処理系依存ではなく、Cの仕様?
だとしたら、今まで全然知らんかった。
0017デフォルトの名無しさん
2007/01/02(火) 18:53:45教科書的にはどれもこれも手放しで const マンセーしてるけど
実用的には define のほうが都合がいい場面があるのは確か。
例えば
#ifndef hoge
#define hoge ...
#endif
みたいなことをしておけばソースコードを変更せずに
コンパイル時にマクロを指定して動作を変更できる。
0018デフォルトの名無しさん
2007/01/03(水) 00:28:59それは正当な #define ディレクティブの使い方じゃない?
・defineの定数は、コンパイル時にリソースが無駄になる可能性がある (たぶんないけど)
・constの方が厳密な定義ができる。
ってことだと思うけど。
0019デフォルトの名無しさん
2007/01/03(水) 00:31:110020デフォルトの名無しさん
2007/01/03(水) 00:51:16%dは数値だな
%Sはアドレス
か?
0021のいまんさん
2007/01/03(水) 01:30:050022デフォルトの名無しさん
2007/01/03(水) 04:05:02int i;
for(i=2;i<12;++i){
((short*)vp)[i-2]=i*i+i;
}
for(i=0;i<10;++i){
printf("((short*)vp)[%d] : %d\n",i,((short*)vp)[i]);
ポインタの粘土細工 by 冬房
0023デフォルトの名無しさん
2007/01/03(水) 07:54:30static void Write(const char* comment, ...)const{
char buf[BUFFER_SIZE];
va_list ap;
FILE* pFile;
va_start(ap, comment);
if(vsnprintf(buf, BUFFER_SIZE, comment, ap) < 0){
return;
}
va_end(ap);
pFile = fopen(LOG_FILE_NAME, "at");
fprintf(pFile, "%s\n", buf);
fclose(pFile);
}
こんなかんじのフォーマットを指定して書き込む関数があるのですが、
これをC++的に変更するとどうなるでしょう?
ofstreamを使うのかと思うのですが、引数リストの扱いがわからず困っています
0024デフォルトの名無しさん
2007/01/03(水) 09:51:34C++使うならファイルの書き込みと、コメント生成部分は別クラスにするべき
0025デフォルトの名無しさん
2007/01/03(水) 10:00:58質問の意図は「fopenと引数リストを使ったファイルへの書き込みを
C++チックに書くとどうなるのか?」ということなんです
曖昧な書き方をして申し訳ありません。
0026デフォルトの名無しさん
2007/01/03(水) 10:27:27ファイル出力部分をofstreamにすればよいと思います。
0027デフォルトの名無しさん
2007/01/03(水) 10:28:48つ「壊れていないものを直すな(弄るな)」
別になんか困ってることでもなきゃ無理に修正せんでもそのままでいんじゃね?
0028デフォルトの名無しさん
2007/01/03(水) 12:57:28>>26-27ありがとうございました
0029デフォルトの名無しさん
2007/01/03(水) 15:07:41class Hoge {
public:
static std::ofstream Write;
};
static std::ofstream Hoge::Write(LOGFILE, std::ios::ate);
ateは追加出力を意味し、"a"相当、binaryを指定しなければテキストモードになる。textなどといった指定は無い。
前: Hoge::Write("Hoge: %d\n", 1);
後: Hoge::Write << "Hoge: " << 1 << std::endl;
0031デフォルトの名無しさん
2007/01/05(金) 17:32:37C++はCのスーパーセットだから、やっぱりOKなのですか?
0032デフォルトの名無しさん
2007/01/05(金) 17:43:370033デフォルトの名無しさん
2007/01/05(金) 17:45:150034デフォルトの名無しさん
2007/01/05(金) 18:20:510035デフォルトの名無しさん
2007/01/05(金) 19:15:16その課題を冬休み中に解かなければならなくなりました。(プログラム
の知識ゼロ)それで、C++とSDKをインストして、設定後に
とりあえず先生自作のサンプルを実行させようとしたら、下の画像の
ような表示になってしまい、動きませんでした。
http://bebe.run.buttobi.net/up/src/be_1800.jpg.html
また、先生の授業でのスライドでは、新しいプロジェクト作成時に
win32プロジェクトと出るはずなのに、出ませんでした↓
http://bebe.run.buttobi.net/up/src/be_1801.jpg
何が原因かわからないのですが、どなたか教えて頂けませんでしょうか?
0036デフォルトの名無しさん
2007/01/05(金) 19:45:090037デフォルトの名無しさん
2007/01/05(金) 20:02:45冬休みは、あと三日です。
ちなみに、nwg.hというのは標準では入ってないんですよね?
0038デフォルトの名無しさん
2007/01/05(金) 20:17:36nwg.hって先生自作のファイルでしょ?
持ってないなら無理でしょ。
サンプルなんか放っておいて課題やれば?
0039デフォルトの名無しさん
2007/01/05(金) 20:35:470040デフォルトの名無しさん
2007/01/05(金) 20:37:19√の中を計算してからsqrt()関数でその平方根を計算
http://www.bohyoh.com/CandCPP/C/Library/sqrt.html
0041デフォルトの名無しさん
2007/01/05(金) 20:46:05√2
とかはどうやって扱ったらいいですか?
0042デフォルトの名無しさん
2007/01/05(金) 21:01:52double sqr2 = sqrt( 2.0f );
0043デフォルトの名無しさん
2007/01/05(金) 21:10:39ありがとうございます。
それヒントにがんばってみます
0044ただ
2007/01/05(金) 21:20:360045デフォルトの名無しさん
2007/01/05(金) 21:57:29マルチはやめてください。お願いします。
0046デフォルトの名無しさん
2007/01/06(土) 09:45:14×2.0f
○2.0
0047デフォルトの名無しさん
2007/01/06(土) 11:37:47いちいちsin,cosで書かなきゃ行けないの?
0048デフォルトの名無しさん
2007/01/06(土) 11:41:18等を参考にして、別々に書きだしてやれば行けそうですが、冗長で好ましくないと思います。
0049デフォルトの名無しさん
2007/01/06(土) 11:44:22最初の疑問はComplex環境下でexp(0,3)とすればexp3iになるのかな?
0050デフォルトの名無しさん
2007/01/06(土) 13:40:43complex<double> A(0,3)
exp(A)
でおk。
0051デフォルトの名無しさん
2007/01/06(土) 14:27:28フラグ処理のコードを書いています。
wire_ack_acquirememt_bus[object_numb][wire_wsr_num]
はwire_wsr_num行の中で一つだけアサートすることになっています。
ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS);
で送信者がアサートさせているフラグを拾い、列番号object_numbをピックアップします。
後半コードでその列から若い列、古い列へフラグを埋めていきます(flag_fill(fill_data, fill_target, fill_width, fill_start_bit))。
VC++8でトレースして追ってみているのですが、挙動がおかしく、その問題点を探しているのですが、私には見つけることが出来ませんでした。
flag_pick()、flag_fill()も公開する必要があると思いますが、まずは下記のコードで分かることを教えていただけないでしょうか。
ff_event_check()はソースのアサートとネゲートイベントで1を返し続けます。
0052デフォルトの名無しさん
2007/01/06(土) 14:28:37/* ACKNOWLEDGE for ACQUIREMENT*/
i = 0;
sender_no_ack_acq_bus[wire_wsr_num] = 0;
for (wire_wsr_num=0; wire_wsr_num<WSRF_SIZE; wire_wsr_num++)
{
prev_sender_no_ack_acq_bus[wire_wsr_num] = sender_no_ack_acq_bus[wire_wsr_num];
for (object_numb=0; object_numb<SPACE_SIZE; object_numb++)
{
ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS);
if (ack_sender == ASSERT)
{
sender_no_ack_acq_bus[wire_wsr_num] = object_numb;
i = i | ASSERT;
}
}
if (object_numb == SPACE_SIZE && i == NEGATE)
{
wire_reset = NEGATE;
sender_no_ack_acq_bus[wire_wsr_num] = prev_sender_no_ack_acq_bus[wire_wsr_num];
}
else
wire_reset = ASSERT;
0053デフォルトの名無しさん
2007/01/06(土) 14:29:29wire_temp_ack_acq_bus = flag_pick(wire_ack_acquirememt_bus[sender_no_ack_acq_bus[wire_wsr_num]][wire_wsr_num], 1, SEND_ON_BUS);
wire_event_temp_ack_acq_bus = ff_event_check(&ff_event_temp_ack_acq_bus, 0, &ff_event_holder_temp_ack_acq_bus, 0, wire_temp_ack_acq_bus, 0);
wire_event_temp_ack_bus_assert = wire_event_temp_ack_acq_bus & wire_temp_ack_acq_bus & 1;
wire_event_temp_ack_bus_negate = wire_event_temp_ack_acq_bus & ~wire_temp_ack_acq_bus & 1;
for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb>0; object_numb--)
{
wire_ack_acquirememt_bus[object_numb -1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num -1], 1, 0);
}
for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb<SPACE_SIZE-1; object_numb++)
{
wire_ack_acquirememt_bus[object_numb +1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num +1], 1, 0);
}
}
0054デフォルトの名無しさん
2007/01/06(土) 15:10:15exp(complex<double>(0, 3))
005549
2007/01/06(土) 18:38:24あほかwそんな長ったらしい書き方するかよw
>54
できた。ありがと。
0056デフォルトの名無しさん
2007/01/08(月) 06:03:063つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。
□偽装派遣先の社員の意見にはたとえ間違っていても反対しない
□偽装派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□偽装派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□偽装派遣先社員より自分の生涯収入が低いのは当然だ
□偽装派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ偽装派遣先に常駐したい
0057デフォルトの名無しさん
2007/01/08(月) 06:46:39きっと本当の人生は来世!!
いや、人間じゃなくて鯨あたりになって、海を悠々自適にすごすのも良いな〜
ってことは、グリーンピース応援しなきゃ。
ビフィズス菌で、胃腸で大活躍ってのも悪くないな。
あー早くポックリいかねぇかな。
親が死んだ後、雷あたりにぶち当たっておっちぬのがベストなんだけどな〜・・・
0058デフォルトの名無しさん
2007/01/08(月) 12:07:010059デフォルトの名無しさん
2007/01/08(月) 12:29:15派遣元は「うちはプロです」と言っておきながら現実には昨日今日入社したばかりの
偽装派遣先に常駐させ、派遣先社員の指示の下で働かせる実質アルバイト派遣業だから
0060デフォルトの名無しさん
2007/01/08(月) 12:41:10あんた馬鹿でしょw
0061デフォルトの名無しさん
2007/01/08(月) 17:33:410062デフォルトの名無しさん
2007/01/08(月) 19:59:00オープンソースのSNSって何がありますかね?
開発言語別で教えて頂けませんでしょうか?
でも、失礼なのでC++でのオープンソースSNSだけでも教えて頂ければと思います
0063デフォルトの名無しさん
2007/01/08(月) 20:01:560064デフォルトの名無しさん
2007/01/08(月) 21:15:49あの本をマスターするとどれくらいのソフトが作れるようになるんですか?
0065デフォルトの名無しさん
2007/01/08(月) 21:20:543つくらい
0066デフォルトの名無しさん
2007/01/09(火) 11:38:54keybd_eventをつかっても動きません
メモ帳で試してみたら、動きました
何か他の方法があるのでしょうか
0067デフォルトの名無しさん
2007/01/09(火) 13:05:080068デフォルトの名無しさん
2007/01/09(火) 13:23:27staticがつくかつかないかです。
0069デフォルトの名無しさん
2007/01/09(火) 13:24:44それが何を修飾しているかによって異なります。
0070デフォルトの名無しさん
2007/01/09(火) 13:25:27Cですか? それともC++ですか?
0071デフォルトの名無しさん
2007/01/09(火) 13:31:140072デフォルトの名無しさん
2007/01/09(火) 13:41:450073デフォルトの名無しさん
2007/01/09(火) 16:40:210074デフォルトの名無しさん
2007/01/09(火) 16:51:000075デフォルトの名無しさん
2007/01/09(火) 16:57:090で始まる数値は8進リテラルと決められているからです。
従って、10進リテラルで0を表現することは(事実上)できません。
0076デフォルトの名無しさん
2007/01/09(火) 20:00:120077デフォルトの名無しさん
2007/01/10(水) 04:38:300でも
00でも
0x0でも
意味は一緒だから気にすんな
0078デフォルトの名無しさん
2007/01/10(水) 05:34:560079デフォルトの名無しさん
2007/01/10(水) 07:32:12意味は違います。同じように使えるだけです。
>>78
工学屋から言わせれば、精度が違う。
0080デフォルトの名無しさん
2007/01/10(水) 17:57:07{
for(int n=0;n<=10;n++){
for(int i=0;i<=10;i++){
cout<<n<<" "<<i<<endl;}
cout<<n<<" "<<i<<endl;}
}
とするとiが0から11まで出力されます。10じゃないのかな?なんでだろ。
0081デフォルトの名無しさん
2007/01/10(水) 18:00:310082デフォルトの名無しさん
2007/01/10(水) 18:02:24<=以下
<未満
0083デフォルトの名無しさん
2007/01/10(水) 18:09:20for構文だからi=10のときはi<=10を満たすので「cout<<n<<" "<<i<<endl;」を実行しこのときiは10となります。
その次にiを++するのでi=11となりi<=10を満たさなくなるので、i=11が出力されるはずがないと思ったのです。
なんでなんでしょうか。
0084デフォルトの名無しさん
2007/01/10(水) 18:11:510 1
0 2
・・・
0 9
0 10
0 11
・・・
10 1
・・・
10 10
10 11
となります。変だと思うのです。
0085デフォルトの名無しさん
2007/01/10(水) 18:19:162行目の
>cout<<n<<" "<<i<<endl;}
が余計だろう。ここのi は既に内側のforのスコープから外れてるぞ。
0086デフォルトの名無しさん
2007/01/10(水) 18:21:13>>84の実行例はiは1-11になってるように見えるが?
>>80で書いたコードと>>84で実行してるコードは違うだろ?
0087デフォルトの名無しさん
2007/01/10(水) 18:31:57int _tmain()
{
for(n=0;n<=10;n++){
for(i=0;i<=10;i++){
cout<<n<<" "<<i<<endl;}
//cout<<n<<" "<<endl;
}
}
[原因]
指摘をもとに2行目を削除したところ正しく出力されました。ありがとうございました。
[謝辞]
>85
ご指摘の通りでした。2行目が必要だと思っていましたが、実際には不要なものだったのですね。
>86
申し訳ないです。慌てていて>84でiが0の場合が抜けています。
みなさま迅速なご指導ありがとうございました。これで数時間悩んでいてほとほと困っていましたが
解決することが出来ました。
[結果]
n i
0 0
・・・
0 9
0 10
・・・
10 1
・・・
10 10
0088デフォルトの名無しさん
2007/01/11(木) 19:05:47\033[31m のような指定では無く
RGB指定で細かくして表示させたいのですが
そのようなことは可能でしょうか?
0089デフォルトの名無しさん
2007/01/11(木) 19:38:08或いは自分で作ればそういうことだってできるだろう。
0090よろおね
2007/01/11(木) 22:27:20コンパイルしようとしたら
$ gcc main.c
main.c:6:19: stdio.h: No such file or directory
main.c:7:20: string.h: No such file or directory
main.c:8:20: stdlib.h: No such file or directory
となりました。
「stdio.h, string.h stdlib.h も寄越せ ゴルラ!」と言って一週間。
未だに貰えません。
どうしたらいいでしょう?
0091デフォルトの名無しさん
2007/01/11(木) 23:03:480092デフォルトの名無しさん
2007/01/11(木) 23:07:36stdio.h, string.h stdlib.hは知人から貰うようなものじゃない。
コンパイラをダウンロード・インストールすれば付いてくるもの。
環境さえまともに整えられないのか?
0093デフォルトの名無しさん
2007/01/11(木) 23:14:020094デフォルトの名無しさん
2007/01/11(木) 23:16:11ホラヨ(w
つ http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.gz
0095デフォルトの名無しさん
2007/01/11(木) 23:18:11#include "stdio.h"
とか書いちゃってるオチだろ。
0096デフォルトの名無しさん
2007/01/11(木) 23:20:47その場合も、見付からなければ<stdio.h>と書いたのと同じ方法でヘッダを探すことになっており、
gccもそれに則っているから問題ない。
0097デフォルトの名無しさん
2007/01/12(金) 11:35:580098偽95
2007/01/12(金) 15:21:42かかったかかったーー!!
ん?あっれぇ〜
根掛かりだ〜
0099デフォルトの名無しさん
2007/01/12(金) 16:08:140100デフォルトの名無しさん
2007/01/12(金) 16:58:50かわいそす
0101デフォルトの名無しさん
2007/01/13(土) 14:28:22で.cppのファイル開いてもビルトがでない。
どーやってコンパイルすればいいの!!
0102デフォルトの名無しさん
2007/01/13(土) 16:07:57___ ‖
/ `ヽ‖
,:' 、ゑ
,' ; i 八、
|,! 、 ,! | ,' ,〃ヽ!;、
|!| l川 l リへ'==二二ト、
リ川 !| i′ ゙、 ', ',
lルl ||,レ′ ヽ ,ノ ,〉
|川'、 ,,.,.r'" ,,ン゙
`T" ! ,/ '.ノ,/|
/ ,!´ !゙ヾ{ |
/ ,' i ゙ ! ,l゙
,r‐'ヽ-、! ', l|
{ `ヽ ! 「゙フ
,>┬―/ ; i,`{
/ /リ川' ', ゙、
/ ,/ ゙、 ゙、
ノ / ', `、
\_/ ; ゙、ヽ、
l__ ! ___〕 ,、l
 ̄`‐┬―r┬‐r'´ `'‐'′
| .! | |
| | .| |
0103偽95
2007/01/13(土) 16:09:17→プロジェクト名(好きな名前で結構)[OKを押せば勝手に指定した場所の所にプロジェクトフォルダが出来る]
→OKを押して次を押す→windowsアプリケーションじゃないならプリコンパイル済みヘッダーのチェックを消す
→コンソールアプリケーションチェック、空のプロジェクトチェック、そんで完了押す
→左のソースファイルフォルダ右クリック新しい項目追加
→C++ファイルを選んで名前を付けて追加(C言語なら拡張子を.cにする)
→ソース書いてコンパイルしてビルドしてデバッグなしで開始(デバッグするならデバッグで)
0104デフォルトの名無しさん
2007/01/13(土) 21:06:16ありますか?
EX:
比較文字列 2ch
比較対象文字列(一致)
2ch close
比較対象文字列(不一致)
3ch open
こんな感じで判定できるような関数なのですが・・・・・?
Windows2000
VS2005 SDK
0105デフォルトの名無しさん
2007/01/13(土) 22:03:360106デフォルトの名無しさん
2007/01/13(土) 22:52:02原因はどの辺りにあるかわかりますか?
たとえば、グローバルで定義したint a、int bがあるとして、
プログラム中でa++したときに、なぜかbも一緒に++されてしまう。
aをaaaに変更してみたりその他の関係のない変数の変数名を変更してみたり、
int a=0;と定義するとエラーが出なくなることもある。
しばらくコーディングを進めると今度は違う変数同士が干渉し始める。
どの辺りに起因して同じ領域に違う変数が割り当てられてしまうのか、見当もつきません。
WinXP
gcc(cygwin)
0107デフォルトの名無しさん
2007/01/13(土) 23:27:22gccなんてクソコンパイラ使ってるからだよ。m9(^Д^) プギャー
0108デフォルトの名無しさん
2007/01/13(土) 23:36:02m9(^Д^) プギャー
0109デフォルトの名無しさん
2007/01/13(土) 23:37:55よくわからんで作ってることが原因だな
0111デフォルトの名無しさん
2007/01/14(日) 00:00:46とか?
0112デフォルトの名無しさん
2007/01/14(日) 13:25:420113デフォルトの名無しさん
2007/01/14(日) 14:06:06int main()
{
double d[5] = {0.0};
for(int i = 0; i < 5; i++)
std::cout << i << " : " << d[i] << std::endl;
return 0;
}
0114デフォルトの名無しさん
2007/01/14(日) 15:00:16ありがとうございます!けど実行すると、0が表示されてしまいます....
0115デフォルトの名無しさん
2007/01/14(日) 15:06:080116デフォルトの名無しさん
2007/01/14(日) 15:06:500117デフォルトの名無しさん
2007/01/14(日) 16:12:230118デフォルトの名無しさん
2007/01/14(日) 16:15:03#include <stdio.h>
int main()
{
double d[5] = {0.0};
for(int i = 0; i < 5; i++){
printf("%.1lf\n", d);
}
return 0;
}
0119デフォルトの名無しさん
2007/01/14(日) 16:52:50そうです。
>>118
すいません。それはC++の場合はどうすればいいんでしょうか?
0120デフォルトの名無しさん
2007/01/14(日) 16:57:39int main()
{
double d[5] = {0.0};
for(int i = 0; i < 5; i++){
printf("%.1lf\n", d);
}
return 0;
}
0121デフォルトの名無しさん
2007/01/14(日) 16:58:12ありがとうございます。
0122デフォルトの名無しさん
2007/01/14(日) 17:08:170123デフォルトの名無しさん
2007/01/14(日) 17:44:480124デフォルトの名無しさん
2007/01/14(日) 17:48:56まずはC++のコンパイラを入手し、お前が使ってるPCにインストールする。
0125デフォルトの名無しさん
2007/01/14(日) 20:08:020126デフォルトの名無しさん
2007/01/14(日) 22:47:07これをクラスで記述する方法ってあるんでしょうか
struct a{
int data[10];
a():??{}
};
0127デフォルトの名無しさん
2007/01/14(日) 23:44:50できないならおとなしく、コンストラクタのブロックの中でstd::fillでもするしかないな。
0128デフォルトの名無しさん
2007/01/15(月) 00:37:06出来ました!こんな書き方があったとは
ありがとう
0129デフォルトの名無しさん
2007/01/15(月) 04:20:32どうすれば取得できますか?
0130デフォルトの名無しさん
2007/01/15(月) 09:05:210131デフォルトの名無しさん
2007/01/15(月) 15:38:570132デフォルトの名無しさん
2007/01/15(月) 18:29:29BITMAPINFOを足がかりに
0133Cはできた(過去形)人
2007/01/15(月) 18:29:340134デフォルトの名無しさん
2007/01/15(月) 18:34:02お前じゃどうしようもないから諦めろ
0135デフォルトの名無しさん
2007/01/15(月) 18:46:29普通にググったら見落としに気づくかもよ。
0136デフォルトの名無しさん
2007/01/15(月) 18:54:30まとめた場合、一般にそのライブラリのみで実行ファイルをビルドすることは
できるのでしょうか?
GCCだとできたのですがVCやBCCだとどうなんでしょう?
libfoo.aがmain.o, hoge.oで構成されている場合、GCCの例だと
gcc -o exefile libfoo.a
でexefileという実行形式を作成できました。
0137デフォルトの名無しさん
2007/01/15(月) 18:57:51どうにか回避する方法はないでしょうか?
0138デフォルトの名無しさん
2007/01/15(月) 19:06:23ヒープに割り当てる
0139デフォルトの名無しさん
2007/01/15(月) 19:10:57Win32のスクリーンセーバライブラリがそんな感じだな。
0140137
2007/01/15(月) 19:36:29すみません。
ヒープに割り当てる方法を教えてください。
0141136
2007/01/15(月) 19:39:26具体的には
cl /EHsc /c main.cpp lib.cpp
lib /out:library.lib main.obj lib.obj
cl /Feout library.lib
out.objが開けないとエラーがでてしまいます。
0142デフォルトの名無しさん
2007/01/15(月) 19:46:55ヒープに割り当てるというのはmalloc(Cの場合)やnew(C++)などで
動的にメモリを確保することです。
あとは調べればわかるかと思います。
0143デフォルトの名無しさん
2007/01/15(月) 21:39:29できたぞ。
cl /EHsc /Zl /c test.cpp
lib /out:hoge.lib test.obj
link /machine:x86 /entry:mainCRTStartup /out:HOGE.EXE msvcrt.lib hoge.lib
/entryの代わりに/subsystem:consoleでもうまくいった。
またcl経由でリンカを呼び出してもできる。
cl /MD hoge.lib /link msvcrt.lib /machine:x86 /subsystem:console
いずれにしてもLNK4001(オブジェクトファイルがない)という警告が出る。
0144デフォルトの名無しさん
2007/01/16(火) 15:11:25どこでなにやってるか全然ワカランので、中盤以降に説明つけてください!
あともう少し素人が作ったっぽくなりませんか?
0145デフォルトの名無しさん
2007/01/16(火) 16:04:06それだけ素人丸出しなら充分だと思うが。
0146デフォルトの名無しさん
2007/01/16(火) 22:33:51プログラムからは仮想メモリしか見えないんだよね?
じゃあメモリエディタってどうやってんの?
0147デフォルトの名無しさん
2007/01/16(火) 22:50:39大抵は権限の設定なんてやっていないから、同じユーザのプロセスならだいたい読み書きできると思っていい。
0148デフォルトの名無しさん
2007/01/17(水) 00:14:54API叩いて教えてもらうんだよ。
0149デフォルトの名無しさん
2007/01/17(水) 11:27:50ひょっとするとあなたの書き換えた場所はディスク上の一部かも知れない
0150デフォルトの名無しさん
2007/01/21(日) 00:10:28参考にしたいのでお願いします。
0151デフォルトの名無しさん
2007/01/21(日) 03:22:51C/C++問題集スレ
http://pc10.2ch.net/test/read.cgi/tech/1168663908/
0152デフォルトの名無しさん
2007/01/21(日) 13:53:15ワロタ
0153デフォルトの名無しさん
2007/01/22(月) 12:08:48憂鬱なプログラマのためのオブジェクト指向開発講座(第2部第5章p116)で、
「コンストラクタを使って、定数メンバの初期化を行うことができます」
と書いてありました。定数の初期化って、定数はあらかじめ
定義されているものだと思うんですけど、
どういうことでしょう?
0154デフォルトの名無しさん
2007/01/22(月) 12:21:080155デフォルトの名無しさん
2007/01/22(月) 15:25:31じゃだめなのですか?
0156デフォルトの名無しさん
2007/01/22(月) 16:04:030157デフォルトの名無しさん
2007/01/22(月) 17:09:46>定数メンバと定数は違うだろ
定数って
const int a;
とかですか?
0158デフォルトの名無しさん
2007/01/22(月) 17:29:36メンバ初期化の方法はLIST6のように考えるのが普通でしょう.
確かにこのように書くことは可能です.・・・しかし,これは進められる書き方ではありません.なぜならば,これでは定数のデータメンバを初期化することができないからです.
クラスのメンバデータには定数も使用することができます.その初期化を行うのも当然コンストラクタということになるでしょう.しかし,コンストラクタとはいえ,やはり関数です.その中で定数を書き換えることはやはりできません.
さてそれでは,別の方法で定数メンバを初期化することは出来るのでしょうか.そのような特別な方法が用意されているのでしょうか.
これはそのような方法が存在します.C++では,コンストラクタがメンバを初期化するために新しい構文が設けられています.メンバの初期化はLIST7のように行います.
0159デフォルトの名無しさん
2007/01/22(月) 17:31:59Person :: Person () // コンストラクタの実装部
{
age = 0 ; // 年齢の初期化
name = NULL ; // ポインタの初期化
} // しかしこの方法は薦められない!
LIST7:コンストラクタでのメンバ初期化
Person :: Person ()
: age ( 0 ) , name ( NULL ) // 正しい方法
{
// 何もしない
}
0160デフォルトの名無しさん
2007/01/22(月) 18:25:26(;゚ Д゚) …?
0161デフォルトの名無しさん
2007/01/22(月) 18:38:240162デフォルトの名無しさん
2007/01/22(月) 19:07:38>これはそのような方法が存在します
日本語でおk
0163デフォルトの名無しさん
2007/01/24(水) 12:09:24標準C++というのでしょうか、windowsコンソールアプリケーションの
文法で、Visual C++のよなwindowsプログラミング(ファイル[メニュー]や
ボタンを付けたいだけですが)をすることってできるでしょうか?
やはりそれはVisual C++でしかできないのでしょうか?
環境はVisual C++ 2005 Express Edition使っています。
0164デフォルトの名無しさん
2007/01/24(水) 12:26:27Visualという単語で勘違いしたのかな?VC++でコンソールアプリも書けます。
VC++でコンソールアプリを書いてもWindowsアプリを書いても、VC++の文法は同じです。
Windowsアプリの開発環境はVC++だけではありません。VB、Delphi等々色々あります。
0165デフォルトの名無しさん
2007/01/24(水) 12:53:02返信感謝します。
(私があまり理解していないので、言葉がうまく見つかりません)
普通(?)のC++(コンソールアプリ)は、やったことがあるんですが、
windowsアプリケーションのソースを見たところ、
“ハンドル”という言葉が出てきたりして、
私が今まで勉強したC++と少し違うと思いました。
文字列に関しても、宣言が下のように違うようです。
string word �@
↓
string^ word; �A
winwosアプリをする場合は、新たに�Aのような文法を勉強しなければ
ならないんですよね?
0166デフォルトの名無しさん
2007/01/24(水) 15:42:410167デフォルトの名無しさん
2007/01/24(水) 16:20:590168デフォルトの名無しさん
2007/01/24(水) 16:28:14どっちでしか?
0169デフォルトの名無しさん
2007/01/24(水) 17:54:33「string^ word;」がエラーにならないとはちょっと思えない。
“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。
それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。
まぁ、まずはWinアプリの入門書か解説ページを読んで。
0170165
2007/01/24(水) 18:11:36>“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。
>それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。
前者だと思います。
↓のように使用されていて、
文字列型のハンドル、オブジェクト方のハンドルがあると書いてありました。
private: System::Void buttonAdd_Click(System::Object^ sender, System::EventArgs^ e) {
Debug::WriteLine("追加ボタンをクリックしました");
// 品名、分類、金額を取得する
String^ name = textName->Text;
String^ kind = comboKind->Text;
String^ money = textMoney->Text;
String^ out;
out = String::Format("品名:{0} 分類:{1} 金額:{2}", name, kind, money );
Debug::WriteLine( out );
}
>まぁ、まずはWinアプリの入門書か解説ページを読んで。
普通のC++を知っているだけでは、windowsプログラミングは無理のようですね。
じっくりやってみようと思います。
0171デフォルトの名無しさん
2007/01/24(水) 19:03:37あぁぁ、C++/CLIですね。だと文法も拡張されてるそうです。
新しいことをあまり知らないくせにレスつけました。すいません。
でもWinアプリを書くのにC++/CLIじゃないとダメってことはないですよ。
0172デフォルトの名無しさん
2007/01/24(水) 20:38:23とりあえず、参考にしてみます。
0173デフォルトの名無しさん
2007/01/24(水) 22:12:01そのハンドルは169の言っているものとは違う。
171も言っているが、それは.NET Frameworkを使って動くプログラムを書くために作られたC++/CLIという言語のプログラム。
普通のCもしくはC++を使ったWindowsプログラムはまた別物。
0174デフォルトの名無しさん
2007/01/24(水) 22:38:23指摘していただき感謝します。
C++/CLIは別なんですね。知りませんでした。
私はC++/CLIでない普通のWindowsプログラミングをしたいのですが、
その場合は、普通のC++と同じ文法でやれるのでしょうか?
VC++2005Express使っているんですけど、
その場合、プロジェクトの作成の仕方は、
[ファイル]→[新規作成]→[プロジェクト]
から、[新しいプロジェクト]ダイアログで、
[プロジェクトの種類]で、[win32]で選ぶのかと思うんですが、
この時[テンプレート]で選択できるのが[win32コンソールアプリケーション]
だけになってしまいます。
やり方が違うと思うんですが、
教えていただけますか?
0175デフォルトの名無しさん
2007/01/24(水) 23:13:41VC++2005ExpressEditionでwin32アプリケーションを作るには
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
↑で環境をもうちょっと追加しなければならない。
ちなみに
.NETアプリってのはCLRとか書いてるやつね
win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、
window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。
http://www.kumei.ne.jp/c_lang/
↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。
VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変
WindowsSDKでの開発がめんどくさいから
MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。
.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
0176174
2007/01/24(水) 23:45:24丁寧な説明ありがとうございます。
>VC++2005ExpressEditionでwin32アプリケーションを作るには
>http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
>↑で環境をもうちょっと追加しなければならない。
早速入れました。
>win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、
>window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。
>http://www.kumei.ne.jp/c_lang/
>↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。
>VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変
>
やってみようと思います。
>WindowsSDKでの開発がめんどくさいから
>MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。
>.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
>
わかりました。
CLRも考えようかと思います。
0177デフォルトの名無しさん
2007/01/25(木) 00:46:29struct Test{
int nMem;
char strMem[20];
};
上記の構造体に、関数をひとつ追加します。
struct Test{
int nMem;
char strMem[20];
void Clear(){
nMem = 0;
strcpy(strMem, "");
}
};
そして両者のsizeofをとってみたのですが、両者とも24バイトとなりメンバ関数によるサイズの増大が見られません。
これは、コンパイラがTest::Clear()の呼び出しを該当するメモリアドレスに置換しているからなのでしょうか?
多分そうだと思うのですが、参考となるようなものが無く………詳しい方、宜しくお願い致します。
0178177
2007/01/25(木) 00:47:310179デフォルトの名無しさん
2007/01/25(木) 02:54:53メンバ関数も、機械語のレベルにすれば単なる関数であることに変わりはない。
Cで擬似的に書けばこんな感じになる。
struct Test {
int nMem;
char strMem[20];
};
void Test_Clear(Test* this) {
nMem = 0;
strcpy(strMem, "");
}
0180デフォルトの名無しさん
2007/01/25(木) 11:58:29文法自体の解説ではなく、使いこなしのテクニックなどについてです。
0181デフォルトの名無しさん
2007/01/26(金) 01:00:56例外の落とし穴的なことなら Exceptional C++ にあるよ。
# もし持ってないんだったら C++ 使いとして C++ in-Depth Series は
# 揃えておくことをオススメするですよ。
0182デフォルトの名無しさん
2007/01/26(金) 14:17:33ありがとうございます。
洋書には、知っておくべきノウハウの本があるのに、
和書には、言語仕様の解説本しかないんですよね。
洋書で足りてるから書く必要がないのかもしれないけど。
0183177
2007/01/26(金) 15:34:180184デフォルトの名無しさん
2007/01/28(日) 03:25:47void o(int **mem)
{
int i;
mem=(int **)calloc(10, sizeof(int));
for(i=0; i<10; i++)
mem[i]=(int **)calloc(10, sizeof(int));
}
int main()
{
int **mem;
o( );//この部分
}
0185デフォルトの名無しさん
2007/01/28(日) 04:06:30void o(int ***mem)
{
int i;
*mem=(int **)calloc(10, sizeof(int));
for(i=0; i<10; i++)
(*mem)[i]=(int **)calloc(10, sizeof(int));
}
int main()
{
int **mem;
o(&mem);//この部分
}
0186デフォルトの名無しさん
2007/01/28(日) 04:11:30それはやったのですが、
o内で数値を代入して、
メイン側でその数値を使おうとすると反映されていないみたいでエラーが・・・。
0187デフォルトの名無しさん
2007/01/28(日) 04:15:23後コンパイル時に引数が異なるというエラーが。
間接参照のレベルが 'int ***' と 'int ****__w64 ' で異なっています。
仮引数および実引数と異なります。
0188デフォルトの名無しさん
2007/01/28(日) 04:16:17だったらここだろ
void o(int ***mem)
{
int i;
*mem=(int **)calloc(10, sizeof(int *));
for(i=0; i<10; i++)
(*mem)[i]=(int *)calloc(10, sizeof(int));
}
ちなみにどんなエラーが出たのか明記しないとわからん
0189デフォルトの名無しさん
2007/01/28(日) 04:17:31メインで int ***mem; とやってるんじゃないか?
0191デフォルトの名無しさん
2007/01/28(日) 06:52:30クラス図を作れるものってありますか?
0192デフォルトの名無しさん
2007/01/28(日) 08:24:55umlmemo
0193デフォルトの名無しさん
2007/01/28(日) 08:29:200194デフォルトの名無しさん
2007/01/28(日) 09:07:100195デフォルトの名無しさん
2007/01/28(日) 11:33:04ありがとうございました。
>C/C++の質問しろよ
はい、すみません。
0196デフォルトの名無しさん
2007/01/28(日) 17:09:42↑のを自作で作りたいのですが、誰かサンプルを作っていただけないでしょうか?
初心者でスマソorz
0197デフォルトの名無しさん
2007/01/28(日) 17:14:38好きなのを持ってけ
0198デフォルトの名無しさん
2007/01/28(日) 17:20:36おススメの参考書を教えていただきたいです。
本屋に行ったのですが、何を買えばいいかわからずに退散してきましたorz
要望を挙げれば実際にゲーム制作しながら学べるような参考書。
RPGではなくアクションゲーに重きを置いた参考書を望んでいます。
プログラミング経験はJAVAを2年ほど、Perlを授業でかじった程度です。
よろしくお願いします
0199デフォルトの名無しさん
2007/01/28(日) 17:21:54どれが自作のやつかよく分かんないですorz
ほんと無知でスマソ
0200デフォルトの名無しさん
2007/01/28(日) 17:40:28チミが作ったわけじゃねーから、みんな他作だろう?
0201デフォルトの名無しさん
2007/01/28(日) 17:47:160202デフォルトの名無しさん
2007/01/28(日) 18:08:28なんか見ていてクラクラしてくるコードだなぁ。
サイズが固定なら配列を使ったほうがいいんじゃないか。
>>196
正しい日本語で。
qsortの使用例 と qsortの実装例 のどっちが欲しいの?
>>198
問題をしっかり切り分けよう。
ざっと乱暴に分けただけでも、
□ C++
□ OSのAPIのうち、ゲームで使うものについて
□ ゲーム特有のアルゴリズム
という3つに分けられる。
それぞれ独立した話なので、それぞれ別々に学んだほうがいい。
このスレで質問すべきなのは、
「Javaをある程度やった人にオススメのC++の教科書を教えてください」
ということだよ。
で、Javaを2年もやったのであれば、入門書的なのは無駄が多い。
まずは、↓のような簡単なものでいいので、CとC++の文法の概要を、軽く読む。
ttp://www5c.biglobe.ne.jp/~ecb/c/c00.html
ttp://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html
その上で、C++の有名な参考書群を読めば習得は速い。
0203196
2007/01/28(日) 18:21:24すみません。実装例の方です
0204198
2007/01/28(日) 21:01:49色々と詳しく教えていただきありがとうございます
とりあえず教えていただいたサイトを見て基本的な所を理解してから
参考書を購入して勉強しようと思います。
ありがとうございました
0205デフォルトの名無しさん
2007/01/28(日) 21:02:45GNUのglibcとか、
マイクロソフトならVC++に付属のCランタイムのソースコードとか。
0206デフォルトの名無しさん
2007/01/28(日) 21:23:48struct CharaData{
int x;
int y;
int mae,hidari,migi,tama;
};
struct CharaData jikidata;
int jikinomuki=0;
int statusboard=LoadGraph("StatusBoard.png");
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);// ウインドウモードに変更
SetGraphMode(600,480,16);//ウィンドウの大きさ
if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化
WaitKey();
DxLib_End();//DXライブラリ終了
return(0);//終了
}
エラーがでてないのにウィンドウが表示されません。
PCの動作が重くなっているので実行はされてると思うのですが・・・
誰かわかる人いましたら解決策を教えてください OTL
0207デフォルトの名無しさん
2007/01/28(日) 23:37:23SetGraphMode(600,480,16);
はDXライブラリの関数だろ?だったら
if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化
の後に書くんじゃないか?
順序立てて考えて問題箇所を洗い出せ
0208デフォルトの名無しさん
2007/01/28(日) 23:41:39これはヤバいんじゃないか?
WinMainよりも前に実行されるぞ。
0209デフォルトの名無しさん
2007/01/29(月) 08:50:37と
Choge hoge;
は何が違うんでしょうか?
ヒープ領域とスタック領域の違いでしょうか?
どう使い分けたらいいでしょうか?
0210デフォルトの名無しさん
2007/01/29(月) 10:55:12前者はdeleteする必要がある。
そのクラスが巨大でないのなら、後者で充分。
巨大であるとかクラスの特性上必要があるとかで前者を使うのなら、auto_ptrの使用を検討したほうがよりよい。
0211デフォルトの名無しさん
2007/01/29(月) 12:10:01ではなくて
Choge hoge = new Choge();
なのであれば、それはメモリリークしている可能性があるよ。
Choge hoge ;
Choge* p = new Choge() ;
hoge = p ;
ただし、Choge::operator=(const Choge* p) が存在する、気持ち悪いクラスの場合だが。
0212デフォルトの名無しさん
2007/01/29(月) 13:14:13>Choge hoge = new Choge();
>
>なのであれば、それはメモリリークしている可能性があるよ。
そもそもコンパイル通らないんじゃないか?
0213デフォルトの名無しさん
2007/01/29(月) 15:27:32double型変数をfprintfで小数点以下の有効数字全てを表示したいのですが、
どのようにすればよいでしょうか。
今は%.20leとか適当な数字で表示させています。
できれば%lfの形式で表示したいのですが。
0214デフォルトの名無しさん
2007/01/29(月) 16:30:09%.20gじゃダメ? 値が適当な範囲ならf形式で出るけど。
0215デフォルトの名無しさん
2007/01/29(月) 17:53:53↑これ、パラメータが2箇所で評価しているんですけど、
問題ですか?普通に使えるような気がボクはするんですが...
0216デフォルトの名無しさん
2007/01/29(月) 18:05:21ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。
評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
ドキュメントに明示してあれば問題ないでしょう。
0217デフォルトの名無しさん
2007/01/29(月) 18:15:26>ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。
>評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
>ドキュメントに明示してあれば問題ないでしょう。
はい。ありがとうございます。
ついでで恐縮ですが、
副作用の起こる使い方ってどんな風な使い方ですか?
0219デフォルトの名無しさん
2007/01/29(月) 18:25:15こういうのもです。
isupper(c++);
0220デフォルトの名無しさん
2007/01/29(月) 19:21:07そういうことですか。
ありがとうございました。
0221デフォルトの名無しさん
2007/01/29(月) 20:31:59具体的には 'A' <= (c) && (c) <='Z'
0222デフォルトの名無しさん
2007/01/29(月) 20:51:30全くどうでもいいことだが、比較対象を左辺に置くのが一般的だと思う。
#いや、どちらでもいいけどさ。
0223デフォルトの名無しさん
2007/01/29(月) 21:00:33> 評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
違う!
こういうのをマクロでやるのがアホ。
今時のコンパイラはインライン関数でも最適化されるので、副作用とか型チェックのないマクロを使う必要性はない。
0224デフォルトの名無しさん
2007/01/29(月) 21:26:36↓こういったのはどうですか?
arrは配列のポインタを設定。
#define ARR_SIZE(arr) ( sizeof(arr) / sizeof(arr[0]) )
0226デフォルトの名無しさん
2007/01/29(月) 21:35:04それはポインタ突っ込んでドツボにはまる香具師が必ず出てくるので有名なマクロだな。
しかし、コンパイル可能な副作用のある式を突っ込むのは難しくないか?
まー、おいらはstd::vector使うからいーけどさ。
0227デフォルトの名無しさん
2007/01/29(月) 21:54:10違う!
#define isupper('A'<=((c)%220%156%91))
こうするのが正しいやり方だ!
0228デフォルトの名無しさん
2007/01/29(月) 21:56:37template でゴニョゴニョすれば代わりになるものが作れるけど、
これに関しては移植性の高いマクロのほうが好きだな。
0229デフォルトの名無しさん
2007/01/29(月) 21:58:56('A'<=
頬に突き刺さってて痛そうだよな
0230デフォルトの名無しさん
2007/01/29(月) 22:03:090231デフォルトの名無しさん
2007/01/29(月) 22:27:09C++ならboost::sizeはだめか?<boost/range/size.hpp>
0232デフォルトの名無しさん
2007/01/29(月) 22:32:38boost::size じゃ、>>227 の速度性能には及ばんだろ、多分。
# メンテナンス性は最悪だけど。
0233デフォルトの名無しさん
2007/01/29(月) 22:36:080234デフォルトの名無しさん
2007/01/29(月) 22:46:13一回しか比較を実施しないロジックに対し速度で対抗しようとしたら
あとはもうテーブルでも用意するぐらいしかないぞ。
0235デフォルトの名無しさん
2007/01/29(月) 22:56:530236デフォルトの名無しさん
2007/01/29(月) 23:03:11#define isupper(c) ((unsigned)((c)-'A')<26U))
で対抗しちゃる。
0237デフォルトの名無しさん
2007/01/29(月) 23:03:260238デフォルトの名無しさん
2007/01/29(月) 23:06:15お、これなら環境を問わずに最速なんじゃね?
0239デフォルトの名無しさん
2007/01/30(火) 00:53:05それ以外なら空白を表示するプログラムを作っていたのですが
while((c = fgetc(fp)) != EOF){
if(isprint(c) != 0){
buf[n] = c;
n++;
}
else{
buf[n] = ' ';
n++;
}
if(n % 16 == 0){
puts(buf);
for(n = 16;i >= 0;n--){
buf[n] = ' ';
}
n = 0;
}
}
この状態で出力すると16文字目の後にバグのような文字がでてきてしまいます。
いろいろ考えてみたのですが原因がわかりませんでした。どうにかしてこのバグを消す方法はないでしょうか?
Win XPでBorlandを使用しています。
0240デフォルトの名無しさん
2007/01/30(火) 00:55:43for(n = 16;i >= 0;n--)ではなく for(n = 16;n >= 0;n--)
でした。よろしくお願いしますm(--)m
0241デフォルトの名無しさん
2007/01/30(火) 01:01:380242デフォルトの名無しさん
2007/01/30(火) 07:34:480243がっ
2007/01/30(火) 07:39:540244デフォルトの名無しさん
2007/01/30(火) 09:00:18,.ヘー'´ i `´/ `i_
/ヾ、 ヽ、 i / /ヽ
_ィ、〉 > ´ ̄  ̄ ` く ,ゝ、
}、 ,>'´ 、 ヽ./`ヽ
┌! / / i 「`i ヽヽ ヽ }
Y ! | | l i i l i ',__,.ゝ
,' | | | !l l | l l !
i ! | | | | j___j | |i i!
|i! l ,.|‐T丁i! ハlj, --!`トlノ、||
| ! ! レ'i´ミj "i´ミ iヽ, i || _
| l |i iバ__ソ L__ソ /.ノ |! _ヽ)
| | |l |、//// ' ///// |! |i ヽ)
!ハ |! |,ゝ' ´ ̄ ̄ ` く レy'|!
__,ノ レ'ヽiハ / \}'´ ̄ `ヽ、
ィ´ ̄/ ,べY Y`i__ \
〉/ / , 、ヽ /_`ヽ\ \
,ィ'ん、 / ! '´__ ヽ /´__,.` ', \ ァ'`
`ヽ、/ー' /! __`ヾ! レ'´ _,. ! \ i
/ー-ィ、 ィ__! ___`フ / ヽ二 /7 _i弋
/ 辷j ! ヽ / / / / } j´ 〉
ヽ、 冫 ヽ__ュ_y\ / / /ヽヘ/え´ /
0245デフォルトの名無しさん
2007/01/30(火) 12:19:11・putsの仕様を確認すべし。
・下手な小細工しないでputcharとかfputcを使ったほうがいいぞ。
・そのコードだと16文字に満たない分が出力されないぞ
0246デフォルトの名無しさん
2007/01/30(火) 16:13:41> for(n = 16;n >= 0;n--)
17 回実行されるよね。
0247デフォルトの名無しさん
2007/01/30(火) 16:31:01そのような「べき」も「一般的」もありません。
>>230
感服しました。
0248デフォルトの名無しさん
2007/01/30(火) 17:09:560250デフォルトの名無しさん
2007/01/30(火) 19:23:520251デフォルトの名無しさん
2007/01/30(火) 19:34:31たまたま偶然、自分が見た範囲内で問題なく動いているように見えるだけ、というのは勘弁して欲しい。
0252デフォルトの名無しさん
2007/01/30(火) 21:58:00自然言語で読みやすいように書かない香具師はカス。
Ex.
if (NULL = fp) ...
0253デフォルトの名無しさん
2007/01/31(水) 07:54:30それはコンパイルエラーだろ…常識で考えて。
if(NULL == fp)って書きたかったんだろうけどさ。
俺はいっつも右辺にリテラルを入れる派。
0254デフォルトの名無しさん
2007/01/31(水) 08:41:40252の挙げている例は、
==を間違って=にしてしまっても、コンパイラがエラーを出してくれるので安全だから、定数は左辺に書け
という、コンパイラが警告を出さなかった時代の人達のクソッタレなコーディングルールを、
今だに実践しているダメな人のことを言っているのだと思うよ。
0255デフォルトの名無しさん
2007/02/01(木) 22:04:13定数(const)ってしっかり覚えた方が良いでしょうか?
それとも あ〜そんなのあったね。くらいで良いでしょうか?
そりゃ覚えるにこした事は無いと思いますが、なんかイマイチ頭に入らなくて
0256デフォルトの名無しさん
2007/02/01(木) 22:05:310257デフォルトの名無しさん
2007/02/01(木) 22:08:10すぐ答を引っ張り出せるようにはしておけ
0258デフォルトの名無しさん
2007/02/01(木) 22:18:30const char * const s = "ssssss";
とか
class M {
int i;
public:
void setInt(int i) { this->i = i; }
int getInt() const { return i; }
};
こういうのは後回しでもいいかもしれんね。
0259デフォルトの名無しさん
2007/02/01(木) 22:31:54まだ、勉強始めて一週間ってことだったら、いますぐじゃなくてもいいとは思うけど。
でも、後からでもいいから const は絶対に覚えておけ。
0260255
2007/02/01(木) 23:01:13定数は絶対に変えられない!程度に覚えておき、追々勉強していこうと思います
0261デフォルトの名無しさん
2007/02/02(金) 00:20:10const double TEISU = 0.05;
とかにして,VS2005でTEISUにマウスカーソルを合わせると
「static const double TEISU」
って表示されるんだけど,勝手にstaticを付けられてるってこと?
int型だとこうはならないんですけど
0262デフォルトの名無しさん
2007/02/02(金) 01:09:58C++の名前空間内(含グローバル空間)でのconstはexternを付けない限りstaticと同じ内部リンケージを持つ。
(特に整数型において)ヘッダで初期化して定数として使えるようにするため。
0263デフォルトの名無しさん
2007/02/02(金) 11:26:29ただし、最遠点の範囲はそれぞれの軸で決まっていて、
例えば下図のような2次元空間上でこのように点があった場合、
赤点の位置を算出したいのです。
ttp://kjm.kir.jp/pc/?p=29115.gif
ttp://kjm.kir.jp/pc/?p=29117.gif
上の場合は、点が偏っているために範囲ぎりぎりの点が選択されてる様子で、
下は周囲に点が偏っているので中央が選択されてる状態です。
このような点を探索する場合は、
全ての座標において点までの距離を計算し、最も遠くなるような座標を求める、
みたいな総当たりで調べていくしかないのでしょうか。
それともなにか効率のよいアルゴリズムはありますか?
0264デフォルトの名無しさん
2007/02/02(金) 13:42:23点に接する円の径を最大化するように円の中心点を範囲内にとればいいのかな?
最急上昇法を使うのはどう?
ローカルマキシマムに気をつけないといけないけど
0265263
2007/02/02(金) 15:24:35つまりこういうことでしょうか?
ttp://kjm.kir.jp/pc/?p=29123.gif
ttp://kjm.kir.jp/pc/?p=29124.gif
3次元以上に使えるのかが分からないのですが、ひとまず調べてみようと思います。
回答本当にありがとうございます。
0266デフォルトの名無しさん
2007/02/02(金) 15:50:573次元以上でも使える。
0267デフォルトの名無しさん
2007/02/02(金) 16:02:02constがらみの文法は、わかりにくいですね。
他の人も言っているように、アンチョコを作りましょう。
頭の中に記憶しておく必要はないのです。
あやふやな記憶に頼ってコーディングをするのは、とても愚かな行為です。
(セキュリティのために、裸一貫でしか入退場できない場所での仕事は別だが・・・)
constはちゃんと理解して使えるようにならないと、
他者の書いたコードやライブラリを使うことができません。
>>258
自分はtypedefを使って、なるべくわかりやすくするよ。
typedefを勝手にやるな! というルールのところもあるけどね。
0268264
2007/02/02(金) 16:56:55言いたかった事は>>266
http://kjm.kir.jp/pc/?p=29126.gif
http://kjm.kir.jp/pc/?p=29127.gif
これはローカルマキシマムにはまった例
http://kjm.kir.jp/pc/?p=29128.gif
0269デフォルトの名無しさん
2007/02/02(金) 21:09:52その中から有望そうな部分についてマス目を細かくして総当たりし、
さらにその中から・・・
という具合に、ニュートン法みたいに繰り返していくのが無難そうよ。
0270デフォルトの名無しさん
2007/02/02(金) 22:21:450271デフォルトの名無しさん
2007/02/02(金) 22:30:36vector使え
0272デフォルトの名無しさん
2007/02/02(金) 22:51:59int int_array[
#include "CON"
];
これでおk。
0273デフォルトの名無しさん
2007/02/03(土) 00:04:54// for C(99)
int num = キーボードから入力する関数();
AnyType_t array[num];
// for C++
// use std::vector.
// for (regacy)C
// try malloc() / free().
0274270
2007/02/03(土) 00:09:48ありがとうございます。
説明不足で申し訳なかったのですが、
C++ではなく、Cで実現させたいのですが、
>>271のおっしゃる通り不可能なのでしょうか?
0275デフォルトの名無しさん
2007/02/03(土) 00:11:11>273
0276デフォルトの名無しさん
2007/02/03(土) 00:22:00ありがとうございます。
初心者なもので、具体的に教えていただきたいのですが、
float型で変数nを要素数とするxという配列を作りたいときは
scanf("%d",&n);
float x[n];
でよろしいのでしょうか?
やってみたところ、
ここでは宣言はできない(関数 main )
定数式が必要(関数 main )
とのエラーが float x[n]; の行に出てしまいました。
ご教授願います。
0277デフォルトの名無しさん
2007/02/03(土) 00:33:06今時、8年も前の規格も満たせないような半端モノのCコンパイラではなく、真っ当なCコンパイラを使ってください。
それがいやなら、C++でも使ってください。
0278デフォルトの名無しさん
2007/02/03(土) 00:53:05すみません、フリーのBorland C++Compiler 5.5です。
月曜日に学校のVisual C++コンパイラでやってみます。
0279デフォルトの名無しさん
2007/02/03(土) 00:55:420280デフォルトの名無しさん
2007/02/03(土) 01:03:41部分的にサポートならgccでもよいが完全ではない。
こういう状態だから「C99は死んだ規格」と呼ばれる。
0281デフォルトの名無しさん
2007/02/03(土) 01:34:13まともなコンパイラを教えてください
0282デフォルトの名無しさん
2007/02/03(土) 03:47:23>280
0283デフォルトの名無しさん
2007/02/03(土) 13:17:31>こういう状態だから「C99は死んだ規格」と呼ばれる。
でも、決して無駄にはならないハズ。
なぜならその屍をC++0xが乗り越えてくれるから。
0284デフォルトの名無しさん
2007/02/03(土) 13:50:00ただでさえ複雑怪奇なC++の言語仕様をさらに複雑にする気か。
まあC++0xは文法を複雑にするというより、足りない部分を補う
だけで、今の文法でも出来る事を焼き直すわけではないからな。
0285263
2007/02/03(土) 14:32:19回答ありがとうございます。
ローカルマキシマムも図で説明しただいてよく分かりました。
ひとまず269の方法で試してみたいと思います。
0286デフォルトの名無しさん
2007/02/03(土) 19:03:10できないなら言語は何がオススメですか?
0287デフォルトの名無しさん
2007/02/03(土) 19:25:090288デフォルトの名無しさん
2007/02/03(土) 20:31:250289デフォルトの名無しさん
2007/02/04(日) 14:53:13私は�Aがどういう場合に使われるのかがわかりません。
externで定義ってどういうことでしょうか?
大きな非互換項目の一つにconst型修飾子の取り扱いの違いがある。
C言語では記憶域クラス指定子を持たず、const型修飾されたファイル
有効範囲の識別子は、外部結合の識別子として取り扱われる。
一方、C++言語では内部結合の識別子として取り扱われる。
つまりC言語ではexternが補完されるのに対し、C++言語ではstaticが
補完されると考えればわかりやすい。多くのプログラマは、C言語での
プログラミングにおいて、extern型修飾子は、変数の外部参照宣言を行
なう時にのみ使用し、変数の定義においては使用していない。
この問題は、const型修飾子を使用している多くのプログラムで発生する
と予想される。
const int a=10; �@
(C言語で認識される型)
extern const int a=10; �A
(C++言語で認識される型)
static const int a=10; �B
0290デフォルトの名無しさん
2007/02/04(日) 15:28:27どういうこともそういうことも、Cには昔const修飾子がなかったので
const int a = 10はint a = 10と同じスコープを持つしかなかっただけなんだが。
0291デフォルトの名無しさん
2007/02/04(日) 15:48:37CでもC++でもグローバル変数の定義にはexternを付けてもいいんだよ。
/* hoge.h */
extern int foo; /* グローバル変数fooの宣言 */
extern int bar; /* グローバル変数barの宣言 */
/* hoge.c */
int foo = 4; /* グローバル変数fooの定義 */
extern int bar = 2; /* グローバル変数barの定義 */
0292デフォルトの名無しさん
2007/02/04(日) 16:00:400293デフォルトの名無しさん
2007/02/04(日) 19:11:39ご回答感謝します。
よくわかりました(助かりました)。
0294デフォルトの名無しさん
2007/02/04(日) 19:12:09>定義に「付けてもいい」ってところがミソだな
どういうことでしょうか?
0295デフォルトの名無しさん
2007/02/05(月) 00:04:19> 私は�Aがどういう場合に使われるのかがわかりません。
C言語では(1)と(2)は同じだから、どっち使うか自由なので
(2)を使わなければいけない場面なんてないんじゃないのかな。
C++だと(1)は(3)の意味になる。
(3)では複数のファイルに同じものがあって無駄に感じるが
そんなの気にしないで(2)を使わず(1)を使うようだね。
0296デフォルトの名無しさん
2007/02/05(月) 00:10:04生半可な知識しかないなら回答しないでください。
>(3)では複数のファイルに同じものがあって無駄に感じるが
全くの思い違いです。
0297デフォルトの名無しさん
2007/02/05(月) 00:12:40そうでしたか。
ごめんなさい。
0298デフォルトの名無しさん
2007/02/05(月) 00:36:07複数のファイルに
const int a=10;
などがあっても
変数aというより値10が直接使われる。
複数のファイルに
const int a=10;
const int *p=a;
とした場合はそれぞれのファイルで異なるポインタのaが存在るんじゃないの。
0299デフォルトの名無しさん
2007/02/05(月) 00:37:44>無駄に感じる
どう感じるかは自由だ
0300デフォルトの名無しさん
2007/02/05(月) 01:09:350301デフォルトの名無しさん
2007/02/05(月) 02:02:43そういうこといっているんじゃないと思うが。
その通り実際にはヘッダファイルに書くけど
ヘッダファイルにstatic const int a=10;を書いて複数のファイルからインクルードするのと
複数のファイルにstatic const int a=10;を書きのとで
staticやexternの動作は変わらないでしょ。
それとも別の話?
0302デフォルトの名無しさん
2007/02/05(月) 14:30:40class Aに仮想デストラクタが存在しない場合、class Bのデストラクタが呼ばれないと聞きました。
これは、常に真なのでしょうか? B Obj;などと動的に生成しなくても、デストラクタはやはり呼ばれないのでしょうか?
0303デフォルトの名無しさん
2007/02/05(月) 14:55:20A *obj = new B;
みたいな使い方した場合。
Aに仮想関数が存在しなければobjはすべてAとして動作するから、
デストラクタもAのデストラクタが動けばいいけど
仮想関数が存在した場合、objはBとして動作することがある。
そのときBの動作してAのデストラクタしか動かなかった場合、危険でそ?
B *obj = new B;
のように宣言するならちゃんとobjが破棄されたときにBのデストラクタが動くはず。
でもそんなリスキーなこと考えず、仮想メンバ関数のあるクラスには
virtualなデストラクタを置くのが常識。
0304デフォルトの名無しさん
2007/02/06(火) 00:48:51ま、スレの題名通りの流れだから良いけど。
0305デフォルトの名無しさん
2007/02/06(火) 02:03:28そもそも、
複数のファイルに書かれた
static const int a=10;
が、同じ定義かどうかは、わからないぞ。
ファイル内のローカルスコープなわけで、
ファイルによって aの値は違うかもしれないし、
今は同じでも今後変るかもしれない。
0306デフォルトの名無しさん
2007/02/06(火) 11:36:10#include <stdio.h>
#include "blowfish.h"
#include "blowfish.h2"
#define FilePath "text.txt"
#define Key "keyword"
#define BUF_SIZE 256
FILE *fp;
char buffer[] = "asdfghjk";
char newbuffer[255];
CBlowFish *blow = new CBlowFish;
blow->Initialize( Key, strlen(Key));
blow->Encode( buffer, newbuffer, BUF_SIZE);
delete blow;
fp = fopen(FilePath,"w");
fprintf(fp,newbuffer);
fclose(fp);
どこが間違っているのでしょうか?
0307デフォルトの名無しさん
2007/02/06(火) 11:40:52メインで使うクラスにデストラクタの中で
終了時にメンバ変数の領域をdeleteにより手動で開放する
意味はあるのですか?
0308306
2007/02/06(火) 11:55:530309デフォルトの名無しさん
2007/02/06(火) 14:56:08確保したものは解放するのが当然。まして、「メインで使う」ことが何度もあるなら。
0310デフォルトの名無しさん
2007/02/06(火) 15:11:020311デフォルトの名無しさん
2007/02/06(火) 16:15:41そういうことを適当にしてるとせっかく検出したリークを
見落とすようなことになる。
それに限らず、「もう使わないから」って理由で開放漏れを
容認しだしたら、本当に深刻なリークが発生したとき
あちこちに疑わしい箇所が散逸してて泣くことになると思うぞ。
一人で責任持てるなら良いかもしれんがチームのときは迷惑極まりない。
0312デフォルトの名無しさん
2007/02/06(火) 17:23:21いや、さすがに冗談だよな……?
0313デフォルトの名無しさん
2007/02/06(火) 17:28:58リリースバージョンではabortで終了する。という人もいるみたい。
0314デフォルトの名無しさん
2007/02/06(火) 17:29:370315デフォルトの名無しさん
2007/02/06(火) 17:29:55class Hoge
{
public:
~Hoge() {delete &x;}
private:
int x;
};
0316デフォルトの名無しさん
2007/02/06(火) 17:42:06なんかおかしな事になりそうだから試したくないけど
それしたらどうなるの?
0317デフォルトの名無しさん
2007/02/06(火) 17:49:39鼻から悪魔が(ryとよく言われるやつ。
0318デフォルトの名無しさん
2007/02/06(火) 18:57:470319デフォルトの名無しさん
2007/02/06(火) 19:34:00デストラクタって破棄される直前に呼ばれるんですよね?
0320デフォルトの名無しさん
2007/02/06(火) 19:44:220321デフォルトの名無しさん
2007/02/06(火) 19:52:51びっくりしたぜ、サーセン
0322デフォルトの名無しさん
2007/02/07(水) 03:11:03おそらく何も起きない。
というのも、スタック上にあればdeleteは、
んなポインタ知らないよとスルーするし、
ヒープ上にあっても、
んなポインタ知らないよとスルーするから。
デバッグ版なら、変なポインタをdeleteするな、って叫ぶかもしれない。
だがしかし、実装依存であり、何が起きても泣かない覚悟が必要だ。
0323デフォルトの名無しさん
2007/02/07(水) 03:59:030324デフォルトの名無しさん
2007/02/07(水) 06:49:000325デフォルトの名無しさん
2007/02/07(水) 07:55:330326デフォルトの名無しさん
2007/02/07(水) 10:30:05グローバル変数としてビュークラスの外で宣言したクラスの
メンバ変数は0や空文字で初期化されてるんですが
そのクラスをビュークラスのメンバとして宣言するとそのクラスの
メンバ変数が初期化されないのはどうしてですか?
0327デフォルトの名無しさん
2007/02/07(水) 10:43:10ぐぐったら見つかるだろ
0328デフォルトの名無しさん
2007/02/07(水) 10:46:50わからないんなら答えなくていいよ
0329デフォルトの名無しさん
2007/02/07(水) 10:58:04仕様です
0330デフォルトの名無しさん
2007/02/07(水) 11:13:14向こうにちょっと書いたが・・・
グローバル変数はコンパイル時に場所を決定して0で初期化したブロックにできるが
ヒープの場合実行時に割り当てられるので、わざわざ0クリアするコードを入れるわけ
ではないので初期化はされない。
しかし期待した答えをもらえないからって文句言うな
0331デフォルトの名無しさん
2007/02/07(水) 11:13:54を
ヒープやスタックの場合
に
0332デフォルトの名無しさん
2007/02/07(水) 11:14:540333デフォルトの名無しさん
2007/02/07(水) 19:07:36ゲーム作りしながら学べるような本はありませんか?
持ってるのはVisualC++の6.0なんですけど…。
0334デフォルトの名無しさん
2007/02/07(水) 19:13:30ゲーム作りではじめるMFC
0335デフォルトの名無しさん
2007/02/07(水) 19:28:10その配列の値を他の関数に渡すにはどうしたらいいんでしょうか?
0336デフォルトの名無しさん
2007/02/07(水) 19:43:560337デフォルトの名無しさん
2007/02/07(水) 19:49:31たとえばintなら
int (*array)[10]; // int[10]型のポインタ変数array
array = (int (*)[10])malloc(sizeof(int) * 10 * 5); // int [5][10]
func(array[0][0]); // call
良く使うならint[10]型をtypdedef汁
0338デフォルトの名無しさん
2007/02/07(水) 19:58:36void func(int [][10]);などと宣言されていれば、func(array)と呼べる。
0340デフォルトの名無しさん
2007/02/07(水) 20:28:09宣言してやらないと領域だけあっても2元配列としては使えない。
typedef int ArrayType[10];
ArrayType *array;
array = (ArrayType *)malloc(sizeof(ArrayType) * 5); // int [10]を5個分
func(array[0][0]);
0341デフォルトの名無しさん
2007/02/07(水) 20:53:06WindowsのVC++のdeleteは、不正なポインタを渡すとint 3してくれたと思う。
0342デフォルトの名無しさん
2007/02/07(水) 20:55:492つのことを同時にやろうとするのは無駄が多いよ。
C++とゲーム作りと、別々に勉強することをお勧めする。
C++の良い参考書はいくつもあるが、
↑と同レベルの、ゲームを作りながらC++を学ぶという本はないから。
0344デフォルトの名無しさん
2007/02/07(水) 23:52:01二重定義ということで怒られてしまいました。
#pragma once を使用することで解決しましたが、今まで
C言語をやっていて気になったことはありません。
コンパイルエラーになったのはC++ですが、C++でエラーになる
ようになったのでしょうか?
それともエラーにならなかったコンパイラが寛容だったということでしょうか?
0345デフォルトの名無しさん
2007/02/07(水) 23:52:480347デフォルトの名無しさん
2007/02/07(水) 23:59:42C言語でもまともなコンパイラならエラーになる。
大きな規模のプロジェクトならば名前の衝突は経験することがあるはず。
0348デフォルトの名無しさん
2007/02/08(木) 00:05:11Cでも「構造体をヘッダファイルに定義して適当にインクルードしたら二重定義ということで怒られ」ます。
0349デフォルトの名無しさん
2007/02/08(木) 00:20:11今Borland C++ 5.5.1をダウンロードして試してみましたが全く
エラーになりません。
<struct.h>
typedef struct test_st
{ int a;
int b; }TEST_ST;
<main.c>
#include"struct.h"
void testFunc(void);
int main(void)
{testFunc();
return 0; }
<sub.c>
#include<stdio.h>
#include"struct.h"
void testFunc()
{ printf("Hello\n"); }
main.cとsub.cで2回構造体の定義(struct.h)をインクルード
していますがエラーにならずに実行できます。
ちなみにエラーになったのはVC++でC++を使ったときでした。
これはエラーにならないコンパイラが甘いということでしょうか?
0350344
2007/02/08(木) 00:21:08記憶しているのですが・・・
0351デフォルトの名無しさん
2007/02/08(木) 00:24:54"piyo.h"というヘッダを作ったとします
そしたらヘッダ内に
#ifndef INC_PIYO_H
#define INC_PIYO_H
・
・
#endif /* INC_PIYO_H */
のような形の文を必ず書きなさい
そうすればと二重インクルードガードとなる
0352344
2007/02/08(木) 00:32:02いや、それは知っています。
それの代わりに#pragma onceでもいいってことも。
気になっているのはなぜ今までエラーにならなかったのかと
いうことです。
実際、さきほどbccで試したらエラーにならなかったし。
0353デフォルトの名無しさん
2007/02/08(木) 00:44:43をインクルードする
struct2.hを作って
main.cから
#include "struct.h"
#include "struct2.h"
ってしてみれ
規模が大きくなるとそういう事が多くなる
0354344
2007/02/08(木) 00:54:32ありがとうございます。
なんとなく分かった気がします。
同一ファイル内で1回なら問題ないということですね。
Cで自分で意識してインクルードした場合は、1ファイルにつき
1回しかインクルードしないので問題がなかったのですが、VC++で
MFCを使うと勝手にインクルードとかされてエラーになるように
なったんじゃないかと思います。
0355デフォルトの名無しさん
2007/02/08(木) 01:03:190356デフォルトの名無しさん
2007/02/08(木) 01:03:41お前の書くプログラムの規模が小さかったから現れてこなかっただけだ。
ところで分割コンパイルと二重インクルード防止は基礎中の基礎だと思うんだが
最近の入門書じゃ教えてないっぽいな。
嘆かわしいなあ…
0357デフォルトの名無しさん
2007/02/08(木) 01:57:01まともな入門書には書かれてるよ。
まともじゃない入門書でも、説明しているものがあるけどね。
0358デフォルトの名無しさん
2007/02/08(木) 02:35:10どのようにして作成していけばよいのでしょうか。push_backメンバが使えると思うのですが
いまいち自作クラスを使ったベクタでの使い方がわかりません。よろしくお願いします。
class A {
int a;
int b;
public:
void set_a(int seta) { a = seta; }
void set_b(int setb) { b = setb; }
int get_a() { return a; }
int get_b() { return b; }
};
int main() {
vector<A> vec_a;
/* vec_aに要素を追加する */
return 0;
}
0359358
2007/02/08(木) 02:38:02どのようにして要素を作成していけばよいのでしょうか。
0360デフォルトの名無しさん
2007/02/08(木) 02:48:54vec_a.push_back(A());
0361デフォルトの名無しさん
2007/02/08(木) 03:12:35class Aに引き数をとるコンストラクタを用意した方が何かと便利かもね。
仮に、A(int seta, int setb);というコンストラクタがあるなら、
vec_a.push_back(A(0, 0));って感じで設定も同時に行なえる。
0362デフォルトの名無しさん
2007/02/08(木) 03:44:42セッターの戻り値を *this にして
vec_a.push_back(A().set_a(0).set_b(0));
なんてやるのもいいと思うけどね。
コンストラクタでやるのに比べるとちょっと冗長だけど、
このスタイルのほうがいろいろと都合がいいことってあるし。
0363デフォルトの名無しさん
2007/02/08(木) 07:36:190365デフォルトの名無しさん
2007/02/08(木) 10:24:34それは応用が利きそうだな。
0366デフォルトの名無しさん
2007/02/08(木) 11:48:250367デフォルトの名無しさん
2007/02/08(木) 13:59:43cout << false;
cout << true;
の出力結果は 0 1 ですが、これは環境によって違うのでしょうか?
0368デフォルトの名無しさん
2007/02/08(木) 15:19:390369デフォルトの名無しさん
2007/02/08(木) 17:20:28VC++2003やVC++2005では各cppに#include "stdafx.h"でプリコンパイル済みヘッダが使えます。
ところがそのソースをBCCに移植すると、(ディレクトリの関係で)一部#include "../stdafx.h"にしなければなりません。
VCはディレクトリ関係を気にせず一様に指定出来ますが、BCCで同じことは行えないのでしょうか?
0370デフォルトの名無しさん
2007/02/08(木) 17:25:30BCCはstdafx.hは必要ありません。
0371デフォルトの名無しさん
2007/02/09(金) 01:09:27はて、>362は実体を返しているようだが。
0372デフォルトの名無しさん
2007/02/09(金) 01:32:40僕は参照だと脳内補完した。
0373デフォルトの名無しさん
2007/02/09(金) 03:02:010374デフォルトの名無しさん
2007/02/09(金) 19:17:430375デフォルトの名無しさん
2007/02/09(金) 19:19:06インクルードパスに..を追加できないの?
""で括ったヘッダ名が見付からなければ、
<>で括ったのと同じようにヘッダを探すことになっている。
だからインクルードパスの指定は""で括ったものにも有効。
0376デフォルトの名無しさん
2007/02/09(金) 20:59:55Doxygenを含めて色々在ると思う。
0377デフォルトの名無しさん
2007/02/14(水) 13:38:46static const double a;
static const double b;
static const double c;
};
const double A::a=5;
const double A::b=10;
const double A::c=a/b;
と書いた場合、cは必ずa=5とb=10が実行された後に実行されるのでしょうか?
0378デフォルトの名無しさん
2007/02/14(水) 17:02:17CTypedPtrArrayにする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}
0379デフォルトの名無しさん
2007/02/14(水) 18:28:320380コンパイルとおらねぇもん
2007/02/15(木) 01:23:57いいえ。実行されることはありません。
0381デフォルトの名無しさん
2007/02/15(木) 14:39:13Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or
PostNcDestroy in derived class will not be called.
って言われたんだけど、どういう意味なの?
0382デフォルトの名無しさん
2007/02/15(木) 14:45:370383デフォルトの名無しさん
2007/02/15(木) 22:56:15ウィンドウを正しく終了せず
プログラムの変数(インスタンス)が消されたことにより
正しい手順ではなくCWndのデストラクタが呼ばれたんじゃないの(推測)。
0384377
2007/02/16(金) 07:39:550385デフォルトの名無しさん
2007/02/16(金) 08:19:550386デフォルトの名無しさん
2007/02/16(金) 12:56:06この手の順序依存は規格的には未定義じゃなかったっけ?
0387デフォルトの名無しさん
2007/02/16(金) 13:13:40スペース空くのですが、こんなもんなんですか?
0388デフォルトの名無しさん
2007/02/16(金) 13:22:190389デフォルトの名無しさん
2007/02/16(金) 16:54:28static const double a;
static const double b;
static const double c;
};
const double A::a=5;
const double A::b=c/a;
const double A::c=a/b;
じつはこれもコンパイルできてしまったりする。
0390デフォルトの名無しさん
2007/02/17(土) 12:40:16順序は規定されていないけどコンパイルされる以上、値は決まるわけだね。
その例だとa, b, cの順序に評価される可能性が高そうだから、bは(cが暗黙の初期化で0だから)0、cは∞か。
const double A::c=a+b;
const double A::b=c+a;
const double A::a=5;
こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
まして複数のコンパイル単位に分かれていたらリンク順序にも依存してしまうのかな。
結論:
評価順序に依存した初期化は鼻から悪魔。constにしないでシングルトンにすべきか。
0391デフォルトの名無しさん
2007/02/17(土) 12:41:58×こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
○こうなってたとすると、a, b, cがそれぞれ(cbaの順序で評価して)5, 0, 0なのか(acbの順序で評価して)5, 10, 5なのか悩ましいところだ。
0392デフォルトの名無しさん
2007/02/17(土) 23:13:180393デフォルトの名無しさん
2007/02/19(月) 12:03:31プログラムが完了したら鳴らしたいのですが・・・。
0394デフォルトの名無しさん
2007/02/19(月) 12:18:16…言ってみただけ
0396デフォルトの名無しさん
2007/02/19(月) 12:19:46処理系依存だけど
0397デフォルトの名無しさん
2007/02/19(月) 14:44:150398デフォルトの名無しさん
2007/02/19(月) 15:11:16一番よく使うのがイテレータに対する操作。
後はstd::basic_stringの比較・連結もよく使う。
0399デフォルトの名無しさん
2007/02/19(月) 15:31:160400デフォルトの名無しさん
2007/02/19(月) 16:00:23「wave API」でググれ。
0401デフォルトの名無しさん
2007/02/19(月) 16:15:440402デフォルトの名無しさん
2007/02/19(月) 16:32:390403デフォルトの名無しさん
2007/02/19(月) 19:12:31質問のレベルからしてMCIがお勧め
0405デフォルトの名無しさん
2007/02/20(火) 02:13:35typedef std::map<mykey_t,myval_t> mymap_t;
void hoge(mykey_t k, const mymap_t &m){
mymap_t::iterator p = m.find(k); // コンパイラエラー
}
constが付いたmapのイテレータを造りたいんですけど、
どうすればいいのですか?
0406デフォルトの名無しさん
2007/02/20(火) 03:03:39mymap_t::const_iterator p = m.find(k);
0407デフォルトの名無しさん
2007/02/22(木) 13:38:18今さらながらマジレス
Warning: calling DestroyWindow in CWnd::~CWnd;
OnDestroy or PostNcDestroy in derived class will not be called.
[翻訳]
CWndから派生クラスのウィンドウを使っているときに、
規定クラスのCWnd::~CWndデストラクタが呼ばれているので
派生クラス側のOnDestroyやPostNcDestroyハンドラが呼ばれませんですのよ。うふ
ウィンドウ破棄するときに派生クラス->DestroyWindowを呼んでない悪寒です。
0408デフォルトの名無しさん
2007/02/23(金) 11:42:39文字だけ表示したいんですけど、どうやればいいのでしょうか?
void del_digit(char *str){
while(*str)
/*ここでどうすれば?*/
putchar(*str++);
}
int main(void){
char str[100];
printf("mojinyu-ryoku:"); scanf("%s",str);
printf("DelDigit:");
del_digit(str);
putchar('\n');
return(0);
}
0409デフォルトの名無しさん
2007/02/23(金) 12:22:440410408
2007/02/23(金) 13:05:39ありがとうございました。解決できました。
0411デフォルトの名無しさん
2007/02/23(金) 16:03:53で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
0412デフォルトの名無しさん
2007/02/23(金) 21:26:09そうか
0413デフォルトの名無しさん
2007/02/25(日) 19:10:07どのように生成し、ソフト側ではどのようにそれをチェックすればよいのでしょうか?
0414デフォルトの名無しさん
2007/02/25(日) 19:45:45ソフトに内蔵の公開鍵で復号できたらOK、とか?
0415デフォルトの名無しさん
2007/02/25(日) 19:56:51リバースエンジニアリングの本でも買って読んだ方が良いぞ。相手は『強力なデバッガ』使いだからな。
ロジックの流れなんか直ぐに分かってしまう。まずは低水準なレベルで防御しなければならん。
認証用の関数はプログラム処理の流れから完全に分離、関数のアドレスを入れているポインタのconst変数には定数NULLを入れておき、
ifで関数ポインタ変数がNULLじゃなかったらアドレス先の認証関数を実行、とすると良いかもしれん。
これなら認証用関数の手がかりはほとんど無いからな。ダミーの関数でラップしておけば更に頑丈になる。
NULL定数を正常な認証用関数アドレスに書き換えるパッチをユーザーに配る必要があるが、
ユーザー名をキーに若干絡ませて暗号化とかしておけ。
0416デフォルトの名無しさん
2007/02/25(日) 20:03:430417デフォルトの名無しさん
2007/02/25(日) 20:20:15物事を最初だけ聞いて「みなまで言わずとも分かった」と暴走するタイプだ。
0418デフォルトの名無しさん
2007/02/25(日) 22:50:200419デフォルトの名無しさん
2007/02/25(日) 23:34:200420デフォルトの名無しさん
2007/02/26(月) 01:25:29クラッキングの勉強の仕方を教えてください
http://pc10.2ch.net/test/read.cgi/tech/1164783092/
0421デフォルトの名無しさん
2007/02/26(月) 20:35:33ゲーム制作で俗に言うC++ってVC++のこと?
ゲーム制作の参考書買いに行ったがVC++ばっかりで混乱・・・
ちなみにC++の基礎はマスターした。
0422デフォルトの名無しさん
2007/02/26(月) 20:41:190423デフォルトの名無しさん
2007/02/26(月) 20:47:30フリーコンパイラ使おうと思うんですがどれがいいでしょうか?
VisualStudio Expressで問題ないですか?
0424デフォルトの名無しさん
2007/02/26(月) 20:53:550425デフォルトの名無しさん
2007/02/26(月) 21:23:33基本情報は何の実益にもなりません
0426デフォルトの名無しさん
2007/02/26(月) 21:29:220427デフォルトの名無しさん
2007/02/26(月) 21:33:03といわれる会社もあるにはある
0428デフォルトの名無しさん
2007/02/26(月) 22:43:59サンクス
やっぱりVC++も頭に入れながらやってみる。
0429デフォルトの名無しさん
2007/02/26(月) 23:06:020430デフォルトの名無しさん
2007/02/27(火) 00:46:54それを言うならVCかICCの二択だろ。
この期に及んでgcc使うヤツなんていないって。
0431デフォルトの名無しさん
2007/02/27(火) 01:02:560432デフォルトの名無しさん
2007/02/27(火) 01:13:14じゃ、VCで我慢汁。
0433デフォルトの名無しさん
2007/02/27(火) 16:50:30BCC + BCC Developer は?
もしかして却下?
Turbo Debbuger まで全部タダでそろうが…。
BCC Develoer のクラスでSTL使えたか忘れたが…。
0434デフォルトの名無しさん
2007/02/27(火) 16:54:18STLも使えたはず。
0435デフォルトの名無しさん
2007/02/27(火) 17:00:16そうですか!情報提供ありがとうございます。
VCのMFCでは文字列クラスがSTLと共存できない使用だったはず…
最新バージョンでは使えるようになったのかな??
使えないなら BCC の方がよさそうに思いますが…。
0436デフォルトの名無しさん
2007/02/27(火) 17:19:16STLを使えるかどうか気にするなら、それだけでVC++を選ぶには十分。
MFCとの相性が悪いなら、むしろMFCなんて捨ててしまえ。
0437デフォルトの名無しさん
2007/02/27(火) 17:21:180438デフォルトの名無しさん
2007/02/27(火) 17:31:37たしかに自分使ってない。
>> 437
gcc は使ったこと無くて…
0439デフォルトの名無しさん
2007/02/27(火) 17:44:30Boostの些細なライブラリが通らないので
C++を知っている人間なら薦めない
(某サイトは特集していたが)
MFCがBoostやSTLやだれそれと共存できないなんてことはない
0440デフォルトの名無しさん
2007/02/27(火) 17:47:44いえ自分が言っていたのは MFC内で使われている 文字列クラスと
STL の string クラスの互換性の話…。
MFCをポイすれば悩むこと無いでしたが…
0441デフォルトの名無しさん
2007/02/27(火) 17:55:10MFCの文字列クラスとSTLのそれを混在させなきゃいいだけの話じゃないの
0442デフォルトの名無しさん
2007/02/27(火) 18:10:26文字列に限らずコンテナ類も互換性がないが、それより
「互換性がない」と「共存できない」じゃまるで意味が違うだろが。
0443デフォルトの名無しさん
2007/02/27(火) 18:14:12相互に変換できないわけではないし、
Boost.Range(或いはイテレータ)では統一的に扱えるんだから、
そこまで気にすることは無いと思う。
0444デフォルトの名無しさん
2007/02/27(火) 19:00:22参考になりました。ありがとうございます。
0445デフォルトの名無しさん
2007/02/27(火) 19:33:39private: T na;
public: A(T a):na(a){};
friend A<T> operator + <T>(A<T>&,const A<T>&);
};
template<class T>class B{
private: T nb;
public: B(T b):nb(b){};
friend B<T> operator + <T>(B<T>&,const B<T>&);
};
template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}
でBのメンバ変数にアクセスできないのはなぜ--??
0446デフォルトの名無しさん
2007/02/27(火) 20:23:37template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}
↓
template<class T>A<T> A<T>::operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> B<T>::operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}
とすればいいのでは?
0447デフォルトの名無しさん
2007/02/27(火) 21:03:120448デフォルトの名無しさん
2007/02/27(火) 23:08:00int &rx = x;
これおかしくね?
&rx = x; 何でアドレスにint型の変数を代入するの
0449デフォルトの名無しさん
2007/02/27(火) 23:08:450450デフォルトの名無しさん
2007/02/27(火) 23:45:33rはreferenceのr
宣言時に型の直後に&をつけたものは参照型になる
嘘です
0451デフォルトの名無しさん
2007/02/28(水) 13:09:55やり方がよくわかりません。
ぐぐって見たところ、
ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library or MFC Appwizard(dll) を選んで
もにょもにょするって書いてあったんですが、↑の時点で2種類のやり方があってどっちが正解かわからないですし、
そもそも貰ったファイルをdll化することが目的なので新規作成からやるのは何か間違っている気がします。
とりあえずcppファイルを開いてコンパイルして、、、defファイルをプロジェクトに追加。
そして再度コンパイルをしてみても・・・無理でしたorz
どなたか助言をお願いします…
環境はvisual V++ 6.0 Standard Editionです。
よろしくお願いします。
0452デフォルトの名無しさん
2007/02/28(水) 13:14:23dllを新規作成するからあってるのでは?
そのdllプロジェクトにソースを追加してモニョモニョするんだと思うんだけど。
0453451
2007/02/28(水) 13:35:42とりあえず
ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library
を選んで空のDllオブジェクトを選択して(この時点で意味不明ですが…他選ぶとどうなるの…?)
プロジェクトの追加でcppを選んでビルドしてみたら何故かdllファイルが出来上がっていました
個人的にはキタ━━━━(゚∀゚)━━━━!!!!
でもどうなってんのか全然だ(ノ∀`)
dllにもフォーマットがあって、cppファイルに則したやり方じゃないとうまく生成されないのだろうか。
ちなみにMFC Appwizard(dll)の方で作ろうとしたら、エラーがでて生成されませんでした。なんでやねん(;´Д`)
それ以前に先ほどDllを作成したときには、プロジェクトの追加でcppファイルを追加したわけですが、
defファイルは追加しなくてもいいんでしょうか?
勝手に追加されるから特に選択する必要はないということでしょうかね・・・(ソースによりけりなのかもしれないけれど)
0454デフォルトの名無しさん
2007/02/28(水) 14:19:10__declspec(__dllexport) を関数につけてないのなら
def無しで作った場合、出来上がったDLLはどこからも呼べないものになってると思うが
depends.exe 持ってないか?
0455451
2007/02/28(水) 15:00:26とりあえず、defファイルを追加せずにdll化するとまずそうなので、先ほどの手順で
プロジェクトの追加からcppファイルとdefファイルの両方を追加して見ました。
すると…エラーなしでdll化キタ━━━━(゚∀゚)━━━━!!!!
これで関数もエクスポートできるようなまともなdllになったのかな…
とりあえずDependency Walkerを起動してみて調べたところ、左のツリー状のところに
TEST.dll
l
−KERNE32.dll
l
−NTDLL.dll
ってなってました。自分にはさっぱりですが、正常にdll化できたと思ってよいのでしょうか(;´Д`)?
0456デフォルトの名無しさん
2007/02/28(水) 15:13:48・関数に__dllexportを付ける
・.defファイルに纏めてエクスポートする関数を書く。
どっちでもおk。俺は見やすいからdefの方でやる。
0457451
2007/02/28(水) 15:41:47まだまだ不勉強なようですね。
でも、ねんがんのdllをてにいれることができたので、レスを下さった方々にはお礼を言いたいと思います。
どうもありがとうでした・゜・(ノA`)・゜・
0458デフォルトの名無しさん
2007/02/28(水) 16:58:10そのTest.dll にカーソルあわせたら
右の下のFunction に一覧出るべ
それがエクスポートされたやつね。
0459デフォルトの名無しさん
2007/02/28(水) 17:29:16見つけた同じC++の例文とか書いてみても実行したとたん画面が消えるのはなぜですか?
printf とか cout っていうのとかって一緒に使えますか?
0460デフォルトの名無しさん
2007/02/28(水) 21:40:450461デフォルトの名無しさん
2007/02/28(水) 22:54:40int c;
int *p; /* ポインタの宣言 */
c = 1;
p = &a;
とすると、pにaのアドレスを代入
*p = 1;
ならpの中のアドレスのさす変数aに1を代入
ですよね?
*がない場合はアドレスを入れるものだと思ってたのですが
文字列を扱うときには
char *p = "ABC";
宣言時だろ*があったのですが
後から代入するときには
char *p;
p = "ABC";
という風に*がありませんでした
アドレスの代わりにABCが入ってるのですか?
どのような解釈をすればよろしいのでしょうか
教えてください
0462デフォルトの名無しさん
2007/02/28(水) 23:02:30*をcharではなくpのほうへにくっつけて書くのは慣習的な理由。
こう書いても同じ意味になる。
typedef char * pchar_t;
pchar_t p = "ABC";
0463デフォルトの名無しさん
2007/02/28(水) 23:35:19では
*p = 1でaに代入されるのはどういうことでしょうか?
*とpを書いているのは、アドレスの指す変数に代入と考えていいのでしょうか?
それと
p = "ABC";
の場合はアドレスの代わりにABCが入っていると考えていいのでしょうか?
0464デフォルトの名無しさん
2007/02/28(水) 23:39:11開発環境:Microsoft Visual C++ 6.0
===やりたいこと===
ChemDrawという化学構造を描画するソフトウェアのファイルフォーマットであるcdx形式のファイル(バイナリ)を読み込みたい
===これまでに実施した内容===
まず、CDXファイルフォーマットに関しては以下のページに書かれています。(英語)
http://www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/index.htm
その内、バイナリファイルを読み込む際に事前に定義されたヘッダーファイルが以下のページのファイルです
http://www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/IntroCDX.htm
のリンクにある
http://www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/CDXConstants.h
のファイルがcdxファイルフォーマットを読み込む際に使用するヘッダーファイルです。この中で
typedef UINT16 CDXTag;
typedef INT32 CDXObjectID; // signed for now, due to mac compiler bug?
という行があるのですが、私の開発環境ではUINT16とINT32という型が存在しないため、コンパイルをしても
c:\hogehoge\cdxconstants.h(54) : error C2146: 構文エラー : ';' が、識別子 'CDXTag' の前に必要です。
とエラーが出てしまいます。そこでUINT16ってなんだ?ってことを調べ始めて、
・UINT16は16bitのUINT
・「.NET Framework クラス ライブラリ」 においてUINT16は定義されているらしい
http://msdn2.microsoft.com/ja-jp/library/system.uint16(VS.80).aspx
ってところまでは分かったのですが、何をしたらいいのかお手上げ状態になってしまいました。
とりあえず、このヘッダーファイルがコンパイルで通るようにしたいです。よろしくおねがいします。
0465デフォルトの名無しさん
2007/02/28(水) 23:42:32<windows.h>(の中でインクルードされているファイル)の中で宣言されている。
今回のものと.NET Frameworkのは関係ない。
手っ取り早く対処するなら、
そのヘッダをインクルードするより先に自分で宣言してしまえばよい。
typedef unsigned __int16 UINT16;
typedef __int32 INT32;
0466デフォルトの名無しさん
2007/02/28(水) 23:45:54> int * pa; // (A)
変数paはintへのポインタであることを示す。
> *pa = 1; // (B)
> b = *pa; // (B)
*paの*は、ポインタpaが指す場所に対して代入したり値を取り出したりする。
俺の推測だが
(A)と(B)の*を無理やり同じ意味にしようとしているのか。
0467デフォルトの名無しさん
2007/02/28(水) 23:50:01char *p; と宣言している以上は、
ポインタpに入れられるのは(char *)だよ。
"ABC"だってどこかのメモリに存在するわけで
アドレスがあるよ。
0468デフォルトの名無しさん
2007/02/28(水) 23:52:21> p = &a;
> とすると、pにaのアドレスを代入
> *p = 1;
> ならpの中のアドレスのさす変数aに1を代入
> ですよね?
そうだね
0469464
2007/02/28(水) 23:55:46おおお動きました^^;
最終的に
typedef unsigned __int16 UINT16;
typedef unsigned __int32 UINT32;
typedef __int32 INT32;
の3行追加で何とか認識できました。
ありがとうございました!!
0470463 461
2007/03/01(木) 00:04:47同じ意味かと思ってました
理解できました
ありがとうございました
>>467
納得できました、ありがとうございました
>>468
ありがとうございます
皆さん本当にありがとうございました
0471471
2007/03/01(木) 00:12:14/************************************************************************/
/* 機能 : port5のLEDを交互に点滅させる。 */
/* */
/* 作成日 : 2007/2/27 */
/* 作成者 : 佐々木 */
/************************************************************************/
作ったプログラムソースをメモリーステックに保存して、別のパソコンでソースを
開いたら、
こんなにレイアウトが崩れてしまいます。
使っているコンパイラはBCCとGCCなのですが、
どうしたらいいですか?
0472デフォルトの名無しさん
2007/03/01(木) 00:18:21> (A)と(B)の*を無理やり同じ意味にしようとしているのか。
そういうこと。「『*pがchar型になる』と読める」というような説明はよく見かける気がする。
ttp://kmaebashi.com/programmer/pointer.html
> K&Rによれば、Cの宣言は、「変数が現われ得る式の構文を真似た(P.114)」そうである。
> しかし、本質的に全く異なるものを無理に似せようとしたため、
> 結局わけのわからない構文になってしまっている。
0473デフォルトの名無しさん
2007/03/01(木) 00:21:10ソースは同一でパソコンを変えただけなんだね。
使用しているエディタが違うとかフォントが違うとかじゃないの。
0474471
2007/03/01(木) 00:30:18スペースとかTabで崩れてると思うし。
0475デフォルトの名無しさん
2007/03/01(木) 00:37:01タブがスペース何文字分なのかは迷惑な話だよね。
0476471
2007/03/01(木) 00:51:51そのTabがスペース何文字分かを設定するのはどこからですか?
0477471
2007/03/01(木) 00:59:41関数の紹介文は
/*************/
/*___________*/
こんな感じでアスタリスク埋めして正確な文字数が出てるし、
TABは避けるべきだったかなと思いますた。
文頭はいいとは思うけど。
char *NEET;
みたいに。
0478デフォルトの名無しさん
2007/03/01(木) 02:32:22ググったら全角スペースが原因とかプロジェクト設定をwinにすれば良いとか
出てたのですが、何やってもダメです。
ちなみにReleaseだと実行できます。
何が原因なのでしょう・・・?
コンパイラはbccです。
0479デフォルトの名無しさん
2007/03/01(木) 05:01:02bccを捨てるのはどうでしょう。
>>477
囲う手間の割りに見栄えがよくないので、左側だけにすることをお勧めします。
ついでにDoxygenコメントを埋めてこんな感じ。
////////////////////////////////////////////////////////////////
/// \brief あーたら処理
///
/// なにやら処理するらしい。
/// \param[in] para パラメータ構造体
/// \return 処理結果
/// \author だれそれ
/// \date いついつ
//
説明を書き換えるだけで右側の桁を揃え直す手間を掛けるなんてナンセンスですよ。
0480デフォルトの名無しさん
2007/03/01(木) 09:19:13{
classname(): root(0) {....}
}
とあったんですが、この書式って正しいんですか?正しければ意味とか説明があるサイトを紹介してくださいませ。
僕の持ってる本にはこのような書き方が載ってないです。。
(標準講座C++)
0481デフォルトの名無しさん
2007/03/01(木) 10:29:320482デフォルトの名無しさん
2007/03/01(木) 10:31:50メンバにrootという変数があるなら正しい。コンストラクタ初期化子でぐぐれ。
ちなみに俺が買った教本にも載ってなかった(C++クラスと継承完全制覇)
0483デフォルトの名無しさん
2007/03/01(木) 13:00:29載せてないなんて信じがたいけどなあ…
0484デフォルトの名無しさん
2007/03/01(木) 13:28:59さんきゅ!分かりました。
本買い直すかな。。
0485デフォルトの名無しさん
2007/03/01(木) 15:06:570486デフォルトの名無しさん
2007/03/01(木) 15:37:09標準講座C++(独習も)はいい本だから買いなおさなくてもいいよ。
コンストラクタでの初期化子についての記述が無いのは有名なバグ。他の内容はわりといい。
0487デフォルトの名無しさん
2007/03/01(木) 15:46:42ディレクトリ操作は OS 依存になるから、
OS がワカランとはっきりしたことは言えない。
大抵は mkdir と chdir があると思うが、
もっと複雑なディレクトリ操作のできる API が
OS ごとに用意されてると思う。
0488463 461
2007/03/01(木) 21:33:57ありがとうございます
0489デフォルトの名無しさん
2007/03/01(木) 22:28:08winsockとかにはそれらしいのがあるのですが、socklibには無いようで・・
とりあえず、ブロッキングされてると、タイムアウトは検出できない気がしました。
環境がまだないので試してませんが、↓のようにすれば受信はできますでしょうか?
アドバイスよろしくお願いします。vxwoksとか検索しても出てこない(ノ-`)
*********************************************
struct sockaddr_in my_recaddr;
my_recaddr.sin_family = AF_INET;
my_recaddr.sin_port = portNum;
my_recaddr.sin_addr.s_addr = INADDR_ANY;//ブロードキャストを受信するために必要っぽい?
fd=sock(AF_INET,SOCK_DGRAM,0);
bind(fd,(struct sockaddr*)&my_recaddr,sizeof(my_recaddr));//ブロードキャストを受信するために必要っぽい?
while(1){
☆ ret = recv(fd, (char*)buf,sizeof(datasize));
if( ret ){
//他のタスクに受信データを送信
//タイムアウト解除通知+カウントしたものを初期化
}else{
//何かカウントして、タイムアウト通知
}
}
*********************************************
ブロッキングだと、受信するまで☆で止まってるという認識でいいんでしょうか?
0490デフォルトの名無しさん
2007/03/03(土) 04:02:10COMプレイヤーが4人、「You」プレイヤーが1人で遊ぶようにして
いるのですが、「You」プレイヤーの番が終わり、COMプレイヤーが
カードをめくったりしている間、マウスの入力を受け付けることが
できません。例えばウィンドウの右上にある「X」ボタンを押して
も反応がありません。おそらく WM_PAINT内でCOMプレイヤーの
カードをめくる処理をやっているためだと思われますが...。
COMプレイヤーがカードをめくった後、少しだけ delay を入れて
めくったカードがしばらくの間表示されるようにしてあります。
COMプレイヤーの処理はどこでやると、この問題が避けれるので
しょうか?
0491デフォルトの名無しさん
2007/03/03(土) 07:39:10たとえばWM_TIMERで1人ずつ処理する。
1つのメッセージでreturnせず続けて全部やるから何も受け付けなくなる。
0492デフォルトの名無しさん
2007/03/03(土) 09:32:450493デフォルトの名無しさん
2007/03/03(土) 10:45:58ありがとうございます。こういう時はWM_TIMERでやるか、スレッドを
使えばいいんですね。いまだに昔のBASIC(PC-8001)や、DOS のプログラ
ミングから抜け切れてないんでそんな当たり前のようなことも思いつか
なかった....
0494デフォルトの名無しさん
2007/03/08(木) 01:48:30これを使って簡単なゲームプログラミングを参考書に沿って学習していってるのですが、
ビルドしたら以下のようなエラーが出ました
-----------------------------------------------------------------
\○○\my documents\○○\dicegame\dicegame\Form1.h(117) : error C2039: 'button1_Click' : 'Dicegame::Form1' のメンバではありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(22) : 'Dicegame::Form1' の宣言を確認してください。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(117) : error C2065: 'button1_Click' : 定義されていない識別子です。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(117) : error C3350: 'System::EventHandler' : delegate コンストラクタには 2 つの引数が必要です
------------------------------------------------------------------
書籍に沿って行っていっているのでエラーなんか出るはずないのですが・・・
なにとぞ対処の仕方をお願いします。
※○○はフォルダの名前
0495デフォルトの名無しさん
2007/03/08(木) 02:08:130496デフォルトの名無しさん
2007/03/08(木) 02:21:280497デフォルトの名無しさん
2007/03/08(木) 10:12:37そっから間違ってるんだよ、たぶん。
0498496
2007/03/10(土) 17:09:38>>497
どれをというのは何でしょうか?
多分プロジェクトの種類は「CLR」だと思います。
すいませんがageさせていただきます
0499496
2007/03/10(土) 18:02:54お騒がせしました
今後も質問することがあるかもしれないので何卒おながいします。
0500496
2007/03/10(土) 18:47:18今度は
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
if (radioButtonKisu->Checked == true){
MessageBox::Show("奇数が選択されました");
}
};
}
---------------------------------------
if (radioButtonKisu->Checked == true){
↑
これを打ち込むとまたエラーが出てしまいました。
勿論、書に沿ってるだけです。
さっき解決したのでは、「 MessageBox::Show("ボタンが選択されました"); 」
のみのクラスを入れた構文であって、それにif構文を追加しただけで、エラーが出たという事です
対処法お願いします。
0501デフォルトの名無しさん
2007/03/10(土) 18:56:45>2. 情報を開示しないこと
>トラブルの場合は、状況を正確に記述してはならない。
>「なんだかうまく動きません。」とか「エラーが出ます。」等と具体的なことは何も書かないことが重要である。
0502デフォルトの名無しさん
2007/03/10(土) 19:04:55どこをどう変えたら解決したかを言わないわで散々だな。
0503496
2007/03/10(土) 19:10:30書籍どおりやってるのにエラー出られたらたまりません
対処法なんて分かりませんし・・・
大体エラーが出る自体分かりません
0504デフォルトの名無しさん
2007/03/10(土) 19:16:010505デフォルトの名無しさん
2007/03/10(土) 19:22:13自分が本当に困っていることを主張するとか、
マジで教えてクンのテンプレみたいな奴だな
釣り?
0506デフォルトの名無しさん
2007/03/10(土) 19:23:09いい加減にしやがれ!
こっちょは、その本を見ているわけじゃないし
お前が出したエラーを透視してみることが出来るわけじゃない。
情報を出せとか
どうやったのかいえってんのを無視すんなよ。
↓こうすればここではエラーでなくなるよ。
/* if (radioButtonKisu->Checked == true) */ {
0507デフォルトの名無しさん
2007/03/10(土) 19:23:45お前のPCを覗き込めない。せめてエラーメッセージの丸写しくらいしろよ。
アドバイスをもらう気があるのなら。
0508496
2007/03/10(土) 19:31:17それを打ち込んでもエラーでました
>>507
.\DiceGame.cpp(6) : error C2143: 構文エラー : ';' が 'using' の前にありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(25) : error C2059: 構文エラー : 'インライン関数のヘッダー'
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(25) : error C2143: 構文エラー : ';' が '{' の前にありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(25) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(183) : error C2039: 'pictureDice4_Click' : 'DiceGame::Form1' のメンバではありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(22) : 'DiceGame::Form1' の宣言を確認してください。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(183) : error C2065: 'pictureDice4_Click' : 定義されていない識別子です。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(183) : error C3350: 'System::EventHandler' : delegate コンストラクタには 2 つの引数が必要です
.\DiceGame.cpp(6) : error C2059: 構文エラー : ';'
.\DiceGame.cpp(19) : fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(4)' で見つかる前に EOF が検出されました。
以上のエラー出力が出ました
○○はフォルダ名
すいませんがよろしくおながいします
0509デフォルトの名無しさん
2007/03/10(土) 19:34:41文法知らないならやめておくべき。
0510デフォルトの名無しさん
2007/03/10(土) 19:37:01どっかで間違えて
そのせいで次のところがエラーになって
以降ぼろぼろってヤツだな。
0511496
2007/03/10(土) 19:37:240513デフォルトの名無しさん
2007/03/10(土) 19:38:41CやC++の使い方を知らないうちに
ウィザード頼りにプログラムを書き始めるのは無謀だ、ということ。
0514デフォルトの名無しさん
2007/03/10(土) 19:39:07間違えていないんじゃ直すこと出来ないな。
0515デフォルトの名無しさん
2007/03/10(土) 19:40:52その本が古いとか。
0516496
2007/03/10(土) 19:41:420517デフォルトの名無しさん
2007/03/10(土) 19:42:050518デフォルトの名無しさん
2007/03/10(土) 19:44:55本当に困っているのでなんとかしてください。おながいします。
0520デフォルトの名無しさん
2007/03/10(土) 19:45:31えー!
ヒドイヨ〜
0521デフォルトの名無しさん
2007/03/10(土) 19:47:39正直言って判らない。
これってC++を拡張したC++/CLIってやつだよね。
そっちのスレニ池!
こういうのって最初のエラーを直すと以降のエラーが変わるかもしれない。
.\DiceGame.cpp(6) : error C2143: 構文エラー : ';' が 'using' の前にありません。
ここかここより前にへんなことが起きているのかしら。
0522デフォルトの名無しさん
2007/03/10(土) 19:48:34いい加減にしてくださいと言っているでしょう
怒らせないでください
0523デフォルトの名無しさん
2007/03/10(土) 21:09:190524デフォルトの名無しさん
2007/03/12(月) 11:56:59もう見てないor解決してると思うけど…
>vxworksでUDP受信のみ(ブロードキャスト)でタイムアウトを検出するにはどうすればいいでしょう?
selectを使って受信の検知とタイムアウトを行えばいい。その為の関数だから。
>ブロッキングだと、受信するまで☆で止まってるという認識でいいんでしょうか?
いいと思うよ。エラーでも返ってくるけどね。
0525デフォルトの名無しさん
2007/03/12(月) 17:16:100526デフォルトの名無しさん
2007/03/12(月) 18:22:460527デフォルトの名無しさん
2007/03/12(月) 18:34:19ビルドエラーは固有のモノも多いから専門書籍はないと思う
クリティカルなエラーならヘルプを見るのが一番いいんじゃないかな
たとえばVisual Studio使ってるならエラー番号で検索掛けると原因と微妙ながらも対処も出てくる。
コンパイラの名前とエラー番号を条件にググるのもアリかと。
0528デフォルトの名無しさん
2007/03/13(火) 00:15:15VC++を使っております。
これでも同じように対処できますか?
0529デフォルトの名無しさん
2007/03/13(火) 00:55:15これでもってVC++のことか
Visual Studioのことじゃないか
0530デフォルトの名無しさん
2007/03/13(火) 00:55:48VCでも問題無い筈。
デフォルト設定ならF1押すとヘルプでない?
0531デフォルトの名無しさん
2007/03/13(火) 00:58:42作ってもたまに注文があればいいほうですぐに返品でしょ。
それにどうせお前らは奇怪なコード書いて
それに対して奇怪なエラーメッセージが出るから
対処法なんて予測不可能で難しい。
0532デフォルトの名無しさん
2007/03/13(火) 01:11:08EEです(Express Edition
>>530
ヘルプは出してます。
問題の、出力エリアに表示されるコンパイルエラー内容を解決したいのですが、
トークンがどうのこうのインラインがどうのこうの色々出ておりまして・・・
これをほんと、どうにかしたいのですが
0533デフォルトの名無しさん
2007/03/13(火) 01:17:010534デフォルトの名無しさん
2007/03/13(火) 01:22:36でもVisual C++なんかだと/EHa付けておけばcatch (...)で捕まえられる。
_set_se_translaterを使えば自作の例外クラスのオブジェクトに変換できる。
0535デフォルトの名無しさん
2007/03/13(火) 02:08:58ヘルプは出すだけじゃダメだ
後、使ってるのがC++だからここで質問したんだと思うが
でもな聞いてるのはVS固有の問題だろ?
つまりスレ違いだ。
0536デフォルトの名無しさん
2007/03/14(水) 00:04:46巻き戻してもう一度tryブロックの最初からやり直すようなことはできないのでしょうか?
HANDLE h = NULL;
try
{
function(h);
}
catch(null_exception& e)
{
write_log();
h = valid_value;
}
こんな感じになる処理できるかと思ったのですが・・・
0537デフォルトの名無しさん
2007/03/14(水) 00:14:45画像の描画を行うクラスがあり、そのコンストラクタ内部で
データの読み込みを行っているのですが、その読み込みに失敗した場合は
クラスのインスタンスを作成しないようにしたいのです。
class drawImage {
drawImage() {
//グラフィックデータのロード
if( loadFile(filename)==FALSE ) {
// ロードに失敗したら
}
//成功したらパラメーターの初期化等を行う
}
drawImage *img = new drawImage(); // ←初期化に失敗してたらNULLが入ってて欲しい
このようなクラスがあったとして、
インスタンスを作成する際に画像データの読み込みに失敗したらimgにはNULLが入るようにしたいのです。
こういう場合はどのように記述すればよいのでしょうか?
それとも、こういう事は出来ないのでしょうか?
できれば例外を使わないで実装したいのですが・・・
0538デフォルトの名無しさん
2007/03/14(水) 00:20:530539デフォルトの名無しさん
2007/03/14(水) 00:21:310540デフォルトの名無しさん
2007/03/14(水) 01:17:36作り方が変過ぎる。
オマエのコンストラクタがロードに失敗した事を呼出し元に返せるならnewを自分で書けばできる。
newは演算子だからな。
0541デフォルトの名無しさん
2007/03/14(水) 02:27:42これでどう?
HANDLE h = NULL;
for (; ; ) {
try {
function(h);
break;
}
catch(null_exception& e) {
write_log();
h = valid_value;
}
}
0542デフォルトの名無しさん
2007/03/14(水) 08:55:28でも、C++の例外でやり直し型の例外がないのは要らないと言う結論に達したから。
0543デフォルトの名無しさん
2007/03/14(水) 09:20:260544デフォルトの名無しさん
2007/03/14(水) 15:32:58>>540
>オマエのコンストラクタがロードに失敗した事を呼出し元に返せるならnewを自分で書けばできる。
コンストラクタが値を返せるようにできるんですか?
newをオーバーロードすれば、>>537のような事ができるんでしょうか。
やり方があれば教えて欲しいです…
0545デフォルトの名無しさん
2007/03/14(水) 15:43:560546デフォルトの名無しさん
2007/03/14(水) 15:57:40ローカルに作ったやつはどーすんの?
0547デフォルトの名無しさん
2007/03/14(水) 16:01:05好きに選べばいいんじゃない?
0548デフォルトの名無しさん
2007/03/14(水) 16:11:390549デフォルトの名無しさん
2007/03/14(水) 16:13:400550デフォルトの名無しさん
2007/03/14(水) 16:44:29だから「オマエのコンストラクタ」ってワザワザ書いてる
方法は>>547が書いてくれてる通りフラグを持たせて外部で判断
>作り方が変過ぎる。
↑を無視するな
オマエがしたいと言うから答えたが、インスタンスを拒否するクラスなんて聞いた事が無い。
newでしか作れないクラスって普通オカシイと思わないか?
0551デフォルトの名無しさん
2007/03/14(水) 16:47:270552デフォルトの名無しさん
2007/03/14(水) 17:07:49コンストラクタの機構だけでしたいって事だからスルーされたんじゃないのか?
0553デフォルトの名無しさん
2007/03/14(水) 17:32:20class drawImage {
drawImage(char* filename) {
//グラフィックデータのロード
if( loadFile(filename)==FALSE ) {
// ロードに失敗
}
//成功したらパラメーターの初期化等を行う
}
drawImage *img = new drawImage("image.data"); // ←初期化に失敗してたらNULLが入ってて欲しい
if(img==NULL ) return; // インスタンスがなければ処理を抜ける
こういう使い方を想定しています。
>>547さんの言うように使用可能フラグを使うとすると、
毎回状態をチェックして自前でdeleteしてあげなくてはならないので面倒かなと。。。
コンストラクタ内の初期化で失敗していたら勝手にdeleteされる
(そもそもインスタンスが作られない)という風にしたかったんです。
>>550
>オマエがしたいと言うから答えたが、インスタンスを拒否するクラスなんて聞いた事が無い。
確かにそうですが、エラー処理で初期化失敗してたらdeleteするようなケースだと
最初っからインスタンスが作られなければ便利だと思ったので…
こういう考えってあんまり一般的ではないんでしょうか?
0554デフォルトの名無しさん
2007/03/14(水) 17:37:25ああ!スイマセンわかりました!!
もし俺が言うような仕組みが実装できた場合、newじゃないインスタンス化が出来なくなりますね。
drawImage img;
↑のような場合にコンストラクタ内部で失敗したらどうなるか考えてませんでした…orz
フラグなりfactoryパターンなりで実装します。
お騒がせしました。
0555デフォルトの名無しさん
2007/03/14(水) 17:38:42BorlandからソフトもDLして、インストールもしたんだが……。
どうすればいいのですか?
0556デフォルトの名無しさん
2007/03/14(水) 17:39:26○コンパイルの仕方
0557デフォルトの名無しさん
2007/03/14(水) 17:42:30何も考えていなかった、が正解でした。
0558デフォルトの名無しさん
2007/03/14(水) 17:43:06エラー E2209 ****.c 1: インクルードファイル 'stdio.h'をオープンできない
警告 W8065 ****.c 5: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main)
と出るだけ……
0559デフォルトの名無しさん
2007/03/14(水) 17:43:49ソフトによって違う。
説明書で調べてわからなかったところを専用スレで聞け
0560デフォルトの名無しさん
2007/03/14(水) 17:44:20環境変数 INCLUDE を設定していない。
0561デフォルトの名無しさん
2007/03/14(水) 17:44:560562デフォルトの名無しさん
2007/03/14(水) 17:45:29そりゃお前インクルードパスが通ってないんだよ
0563デフォルトの名無しさん
2007/03/14(水) 17:46:230564デフォルトの名無しさん
2007/03/14(水) 17:46:54○インド クルー パス
0565デフォルトの名無しさん
2007/03/14(水) 17:47:32bin/bcc32.cfg
は設定したぁ?
binフォルダにbcc32.cfgというファイルを作って
-I"c:\borland\bcc55\include"
-L"c:\borland\bcc55\lib\PSDK"
-L"c:\borland\bcc55\lib"
て書けばいいと思うよ。
ReadMeくらい読めよな低脳
0566デフォルトの名無しさん
2007/03/14(水) 17:50:430567デフォルトの名無しさん
2007/03/14(水) 17:51:43>>565
の各パスは自分の環境に合わせてくさい。
0568デフォルトの名無しさん
2007/03/14(水) 17:53:460569デフォルトの名無しさん
2007/03/14(水) 17:59:49コンパイルの時に、
bcc32 -I"パス" [ファイル名]
でやってみて下さい。
パスはbinフォルダのIncludeフォルダを右クリック→プロパティの、[場所]という 所に書いてあります。
例えば
bcc32 -I"c:\borland\bcc55\include" [ファイル名]
こういう感じです。きっと出来るとおもいます
0570デフォルトの名無しさん
2007/03/14(水) 18:05:29上と同じエラーがでます
0571デフォルトの名無しさん
2007/03/14(水) 18:10:28では、
binフォルダのパスを教えてください。
パスはわかりますか??
0572デフォルトの名無しさん
2007/03/14(水) 18:12:43です
0573デフォルトの名無しさん
2007/03/14(水) 18:19:060574デフォルトの名無しさん
2007/03/14(水) 18:19:410575デフォルトの名無しさん
2007/03/14(水) 18:20:21でも、作っても無理でした
0576デフォルトの名無しさん
2007/03/14(水) 18:20:540577デフォルトの名無しさん
2007/03/14(水) 18:26:02大爆笑だよ!
0578デフォルトの名無しさん
2007/03/14(水) 18:41:37binと同じ位置にあるか聞いたつもりだったのだろうが、
中にあるかを答えてる気がする。
0579デフォルトの名無しさん
2007/03/14(水) 18:44:58そ、それは笑えねぇギャグだぜ・・・(ゴクリ
0580デフォルトの名無しさん
2007/03/14(水) 19:35:38もう一度インストールしてみました。
でも、Binと同じ位置にIncludeはありますが、その中にstdio.hはありません。
自分で作るんですか…?
0581デフォルトの名無しさん
2007/03/14(水) 19:36:27ちょっと待て、いったいどれをインストールしたんだ?
0582デフォルトの名無しさん
2007/03/14(水) 19:40:34freecommandlinetools_update.exe をクリックして、次へを押し続けただけです
0583デフォルトの名無しさん
2007/03/14(水) 19:42:26ファイル名は freecommandlinetools2.exe だった
updateはインストール済みのbccがいるんじゃないのか?
0584デフォルトの名無しさん
2007/03/14(水) 19:48:10そこのURL教えてください
0585デフォルトの名無しさん
2007/03/14(水) 19:51:48bcc フリー
でぐぐって最初のページだったかな
0586デフォルトの名無しさん
2007/03/14(水) 19:52:560587デフォルトの名無しさん
2007/03/14(水) 19:56:39ありがとうございました!!!
0588デフォルトの名無しさん
2007/03/14(水) 20:00:16Visual Studio 2005 Standard Editionに入ってるMFCを使ってるんですが、
↓のコードを実行しようとすると必ずエラーになります。
// CMy652View メッセージ ハンドラ
void CMy652View::OnTestTest()
{
AfxMessageBox("Hello");
}
エラー一覧には↓が表示されます。
エラー 1 error C2665: 'AfxMessageBox' : 2 オーバーロードのどれも、すべての引数の型を変換できませんでした
これはどうしたら改善できるでしょうか。
0589デフォルトの名無しさん
2007/03/14(水) 20:02:54とたぶん同じ
0590デフォルトの名無しさん
2007/03/14(水) 20:06:33ありがとうございます!見事に表示できました
感動しました、あなたが神ですか。
0591デフォルトの名無しさん
2007/03/14(水) 21:11:360592デフォルトの名無しさん
2007/03/14(水) 21:16:39それコンソールアプリでしょ。
そして表示後プログラムが終了しているんでしょ。
Windowsならコマンドプロンプトを起動して
そこで実行すればいい。
0593デフォルトの名無しさん
2007/03/14(水) 21:22:15どうやるんですか?
0594デフォルトの名無しさん
2007/03/14(水) 21:24:270595デフォルトの名無しさん
2007/03/14(水) 21:30:580596デフォルトの名無しさん
2007/03/14(水) 22:00:59俺には及びもつかん
0597デフォルトの名無しさん
2007/03/14(水) 23:27:380598デフォルトの名無しさん
2007/03/14(水) 23:46:06gets(temp);
でいいじゃん
0599デフォルトの名無しさん
2007/03/15(木) 10:36:500600デフォルトの名無しさん
2007/03/15(木) 10:57:39dosのpauseコマンドみたな感じで止まる。
エンターキーじゃなくても進むし。
0601デフォルトの名無しさん
2007/03/15(木) 13:39:15ABCDE FGH IJKL
というような文字列があるとして、ブランクごとに抽出したい(ABCDEとFGHとIJKLの3つとして取り出す)
のですが、どうすればよいですか?
0602601
2007/03/15(木) 13:43:060603デフォルトの名無しさん
2007/03/15(木) 13:56:540604デフォルトの名無しさん
2007/03/15(木) 13:57:39#include <fstream>
std::string a, b, c;
std::ifstream is("hoge");
is >> a >> b >> c;
0605601
2007/03/15(木) 14:06:25すいません、stringでやったら普通にできました。
でも、ABCDEを抽出した後A B C D Eというように文字一つ一つ分けたいんです。
上手く説明できないのですが、
Aなら1、Bなら2、Cなら3、Dなら4、Eなら5、そしてその総和がいくつかという問題で、
文字の個数がバラバラでfinを使うわけにもいかなくて…
どなたか教えて頂けないでしょうか。
0606デフォルトの名無しさん
2007/03/15(木) 14:30:00>604のa, b, cから一文字ずつ取り出せばいいだろ。
0607デフォルトの名無しさん
2007/03/15(木) 14:37:31グローバルな演算子オーバーロードに = が使えないので
代わりに使おうかなと考えているのですが・・・
0608デフォルトの名無しさん
2007/03/15(木) 14:41:38foo = foo << 4;
0609デフォルトの名無しさん
2007/03/15(木) 14:43:45ストリームと関係のない所で使ったらややこしいか・・・
0610デフォルトの名無しさん
2007/03/15(木) 14:45:06ストリームもビットシフトを使わないからまったく別の用途でオーバーライド
0611デフォルトの名無しさん
2007/03/15(木) 14:46:180612デフォルトの名無しさん
2007/03/15(木) 14:53:42void operator〜
{
CharStringToWideString(l,r);
}
みたいな定義なんでビットシフトと間違えることは多分ない気がします
0613デフォルトの名無しさん
2007/03/15(木) 16:04:220614デフォルトの名無しさん
2007/03/15(木) 16:13:150615デフォルトの名無しさん
2007/03/15(木) 16:14:470616デフォルトの名無しさん
2007/03/15(木) 18:37:31f(void) が気持ち悪いと言った人が
<< >> は気持ち悪くなかったんかいな。
…つーか、あんまり考えるのやめようかな。
言語仕様のすべてが汚物に見えてきそうだ。
0617デフォルトの名無しさん
2007/03/15(木) 18:49:320618デフォルトの名無しさん
2007/03/15(木) 19:40:41POINTSは見つかりましたが、他のが見つかりません
0619デフォルトの名無しさん
2007/03/15(木) 20:15:13少なくとも私のディスクの中に。
0620デフォルトの名無しさん
2007/03/15(木) 20:55:340621デフォルトの名無しさん
2007/03/15(木) 20:56:430622デフォルトの名無しさん
2007/03/15(木) 21:00:180623デフォルトの名無しさん
2007/03/15(木) 21:07:51<windows.h>の中(でインクルードされているヘッダのどこか)で定義されている型。
0624デフォルトの名無しさん
2007/03/15(木) 21:16:110625デフォルトの名無しさん
2007/03/15(木) 21:29:01ここって、特に環境を示さない場合は
デフォルトで言語か標準ライブラリの話になるんじゃないのか
0626デフォルトの名無しさん
2007/03/15(木) 21:36:16そんな迷惑な質問が、まともな回答されないのは自然な流れ。
0627デフォルトの名無しさん
2007/03/15(木) 21:41:040628デフォルトの名無しさん
2007/03/15(木) 21:57:220629デフォルトの名無しさん
2007/03/15(木) 22:09:42いいのありませんか?
月に2万円程度の稼ぎでもいいです。
ちなみに、C言語はそれほど詳しくありません・・・。
これからもっと勉強するつもりですが。
0630デフォルトの名無しさん
2007/03/15(木) 22:14:15このスレから回答者がいなくなると思わないか?
0631デフォルトの名無しさん
2007/03/15(木) 22:17:350632629
2007/03/15(木) 22:18:20在宅アルバイトには、キーボードで入力するだけのものもあるんだから、
プログラミングを生かすアルバイトでも、別に僕にできるものだってあってもおかしくないと思いますが・・
Cで難しければ、javascriptみたいな単純な言語をこれから勉強してでも始めたいです。
0633デフォルトの名無しさん
2007/03/15(木) 22:26:52あと街のほうなら職歴不問のところもある筈だからネットの求人でも求人誌でもじっくり探して見れ
0634デフォルトの名無しさん
2007/03/15(木) 22:27:26社会経験のない実績のないしかも在宅に任せられないでしょ。
テープ起こしみたいな仕事なんじゃない。
0635デフォルトの名無しさん
2007/03/15(木) 22:28:09世の中舐めてるヒキコモリ乙
0636デフォルトの名無しさん
2007/03/15(木) 22:49:46結局の所、信用だから会社作ればいけるかも知れんぞ
0637デフォルトの名無しさん
2007/03/15(木) 23:10:29プログラミング→Spamメール書き
データ入力→出会い系もどきのサクラ
データ処理→アンケート調査にかこつけた無店舗販売
0638デフォルトの名無しさん
2007/03/16(金) 23:41:35本のソースプログラムとかだと、実行すると基本的にコマンドプロントで結果だの何だのが出るよね。
ちゃんとしたソフトウェアってどうするのさ。
ちゃんと専用の画面が開いて、[ファイル]とか[表示]とかそういうのつけるのとか、サパーリ分からんわけよ。
そこら辺解説した本とかサイトとかないかね
0639デフォルトの名無しさん
2007/03/16(金) 23:44:300640デフォルトの名無しさん
2007/03/16(金) 23:47:58ありがつー
0641デフォルトの名無しさん
2007/03/17(土) 02:06:110642デフォルトの名無しさん
2007/03/17(土) 04:01:240643デフォルトの名無しさん
2007/03/17(土) 15:29:52構造体のメンバの一覧を得る方法ってあるのだろうか?
ヘッダファイルをテキストで読み込んで解析する、でいいのかな?
0644デフォルトの名無しさん
2007/03/17(土) 15:59:090645デフォルトの名無しさん
2007/03/17(土) 16:01:58linuxで既にある巨大な共有メモリの構造体を
ダンプできるようにしたいのよ
0646デフォルトの名無しさん
2007/03/17(土) 16:04:59> ダンプ
ソースコピペでおk
0647デフォルトの名無しさん
2007/03/17(土) 16:53:14デバッガ用のツールでメモリダンプするの作るんだけど
どうせならユーザーが構造体のメンバとか
見れるようにしたいのよ
階層深いところまであるからインタフェースは
まだちょっと悩んでるんだけど
0648デフォルトの名無しさん
2007/03/17(土) 17:55:41デバッガ用のツールなら、デバッガにその程度の機能はあるんじゃないのか?
0649デフォルトの名無しさん
2007/03/17(土) 17:56:35まぁ俺はそこまでデバッガ使いこなしてないけどな
0650デフォルトの名無しさん
2007/03/17(土) 21:50:48○デバッグ
とりあえず、無理っぽいのかな?
0651デフォルトの名無しさん
2007/03/17(土) 21:53:190652デフォルトの名無しさん
2007/03/19(月) 17:19:550653デフォルトの名無しさん
2007/03/19(月) 18:46:250654デフォルトの名無しさん
2007/03/19(月) 19:58:55pthreadには終了待ちのjoinしか無いんじゃない?
だからソケットかグローバル変数使うんじゃないかな。
やりたい事が判らないから、的外れだったらすまん
0655デフォルトの名無しさん
2007/03/20(火) 17:31:22っていうのは
入力A
出力A
入力B
出力B
みたいに1行ごとに出力していくのと
入力A
入力B
入力C
出力A
出力B
出力C
みたいに最初に入力してあとで一気に出力するのとどっちの
タイプでも良いんでしょうか?
0656デフォルトの名無しさん
2007/03/20(火) 17:38:260657デフォルトの名無しさん
2007/03/20(火) 19:33:03そのテンプレートクラスのオブジェクトを指せるポインタって作れますか?
0658デフォルトの名無しさん
2007/03/20(火) 19:39:10テンプレートクラスに共通の親を持たせるとか。
#で、なぜそんなポインタを持ちたいんだ?そのポインタで
#何を処理するわけ?
0659デフォルトの名無しさん
2007/03/20(火) 19:46:27BクラスにテンプレートクラスT<B>へのポインタを持たせたくて、
Cクラスに・・みたいな状態になっているので、
A、B、Cの基底クラスにそういうポインタを持たせたかったんです。
ポインタに行う処理も共通のものですし。
0660デフォルトの名無しさん
2007/03/20(火) 19:54:07親もテンプレートにすれば解決。
0661デフォルトの名無しさん
2007/03/20(火) 20:09:03template <class T> class Parent {
X<T>* p;
};
として、
class A : public Parent<A> {/*〜*/};
とすればよいということでしょうか?
テンプレートへの理解が足りないようですな、俺orz
勉強しなおしてきます。回答ありがとうございます。
0662デフォルトの名無しさん
2007/03/20(火) 22:15:09それだとParentがクラス変数を持っているときに困るかも
>>658の言うようにXに共通の親を
持たせればいいんだろうけど、Xが有り物だと無理だな
0663デフォルトの名無しさん
2007/03/22(木) 02:26:15↓
出力:aABb
みたいに、大文字を小文字、小文字を大文字に変換するには
どうすれば良いですか?
0664デフォルトの名無しさん
2007/03/22(木) 02:54:13ctype.h
isupper()
tolower()
とか(引数略
Shift_JISとかはアーアー見えなーい(ry
0666デフォルトの名無しさん
2007/03/23(金) 03:20:51char配列なら自作関数でも直ぐにかける気がする。
for(int i=0;i<len;++i){
if(str[i]>='a'&&str[i]<='z'){
//文字コード知らないから分からないけど定数を足すか引くで変換できるはず
}else if(str[i]>='A'&&str[i]<='Z'){
//同文
}
}
こんな感じで
0667デフォルトの名無しさん
2007/03/23(金) 08:30:33isupper, islower, toupper, tolower
0668デフォルトの名無しさん
2007/03/23(金) 10:14:130669デフォルトの名無しさん
2007/03/23(金) 11:18:46これって3トリーが必死で安売りを阻止してる。
課長クラスが店に乗り込んでいって値上げ交渉をしてるし。
これって法令違反?
厳密に言えばグレーだけど。
公取にチクれば注意は受けるかもな。
ちなみに店への納入価格は
350で@120
1Lで@320くらい。
0670デフォルトの名無しさん
2007/03/23(金) 12:15:420671デフォルトの名無しさん
2007/03/23(金) 12:24:340672デフォルトの名無しさん
2007/03/23(金) 12:32:23だと思うorそういうことになってる
0673デフォルトの名無しさん
2007/03/23(金) 12:57:54で、後から部分を最適化してパフォーマンスをあげる事もやりたくなるじゃん?
そういう機能の追加や削除、改変に柔軟に対応できる設計手法ってなんかありそうで無いような
そんな気がする
ある程度組みあがったらそれを捨てて、また一から設計しなおすってのもあるけど
そういう手はあまり使いたくないじゃん?
(そりゃあ何年もかけて作ってるようなアプリだと何回か遭遇するもんだとは思うけど)
0674デフォルトの名無しさん
2007/03/23(金) 14:07:35その業界、会社、担当者の性格等に馴染んできたら
「こういうのがあると嬉しいんだろうなあ」くらいの予想はつくかも試練が
全く予想外の方向から覆される事も少なくない。
0675デフォルトの名無しさん
2007/03/23(金) 21:54:45なにが厳密に言えばグレーだよ。 んなもん黒に決まってんだろが!
・・・黒ウーロンなんだから。
0676デフォルトの名無しさん
2007/03/24(土) 04:14:35組み込み系のスレって無いのかな?
OSが Nucleus Plus で MULTI を使って開発してんですが、
printf系の関数で %f の編集がうまく行かないのです。
<Sample Code>
double a = 123.456;
char buf[256];
sprintf( buf, "%f", a);
このコードで編集された結果が
0.00000
みたいになります。
組み込みってあんま詳しくないんだけど、
仕様なんですかね?
整数と文字列は正しく編集されるんですが。
0677デフォルトの名無しさん
2007/03/24(土) 04:25:57double じゃなくて float ならうまくいくとかそんな気がしないでもないが、
多分、それはその実装固有のバグじゃね?
printf系の関数は実装が結構面倒だし、バグを抱えてる実装は珍しくはないぞ。
0678デフォルトの名無しさん
2007/03/24(土) 04:30:37http://www.trickpalace.net/cppll/reference/printf.htm#bug
0679デフォルトの名無しさん
2007/03/24(土) 05:01:46そんなこと関係ないよね?
0680デフォルトの名無しさん
2007/03/24(土) 08:49:15試しに、double a = sqrt(2);にしてみたら?
0681デフォルトの名無しさん
2007/03/24(土) 12:03:48ありがとうございます。
floatも試したけど駄目だったんだよねぇ。
まあ、当面は使う予定ないから良いけど。
>>680
何をリンクしたらいいのかな。
あんま詳しくないもので、まあ、調べてみます。
0682デフォルトの名無しさん
2007/03/24(土) 18:45:520,111,222,333
};
という内容の fTest.datがあります。
インクルードすればそのままtest[0]などを取り出せますが、
これをfopenでファイルを開いてから値を取得するプログラムを組んでいます。
test[0]に当たる数値の位置が固定であればSEEK_SETで、
ダメならwhileで'{'の次の位置まで来、fscanfをして値を取得しています。
無理やりな感じがしますが他に方法はあるのでしょうか。
一番はfTest.datの中身を数値だけにして取得しやすいようにすればいいのですが
現状のファイル内容で他に数値の取得方法があれば助言お願いします。
0683デフォルトの名無しさん
2007/03/24(土) 19:21:440684デフォルトの名無しさん
2007/03/24(土) 21:12:520685デフォルトの名無しさん
2007/03/25(日) 21:43:260686デフォルトの名無しさん
2007/03/25(日) 23:01:31アクティブなウィンドウのexe名を取得する方法というのも存在しません
0687デフォルトの名無しさん
2007/03/26(月) 00:00:36お使いのウィンドウシステム関連のスレへどうぞ。
0688デフォルトの名無しさん
2007/03/26(月) 13:32:55プログラムを作成したいんだけどどうしたらいい?
0689デフォルトの名無しさん
2007/03/26(月) 13:36:48>>687
0690デフォルトの名無しさん
2007/03/26(月) 14:06:10C#でprivate宣言したメンバをset/get使ってアクセスするやつ。
ググっても出てこない・・・
0691デフォルトの名無しさん
2007/03/26(月) 14:08:46好きなようにお書きください。
0692デフォルトの名無しさん
2007/03/26(月) 14:11:55ない。ただしjavaのようにgetXX/setXXのようなルールを決めてそういう目的で使うことは普通にある。
C++/CLIにはあったりするんで、そっち方面なら話は別。
0693デフォルトの名無しさん
2007/03/26(月) 14:21:57ありがとうごじゃります。
やっぱりそうですか…。
0694デフォルトの名無しさん
2007/03/26(月) 22:04:03template<typename T>
struct proxy
{
proxy<T>& operator=(const T&){〜}
T& operator T(){〜}
};
class hoge
{
private:
int i_;
public:
proxy<int> i;
};
という風にすればなんとか…
自分で使おうとは思わないけど。
0695デフォルトの名無しさん
2007/03/27(火) 00:07:04どのように記述すればよいのでしょうか?
#呼んでいる関数はアセンブラです。
int hoge(void)
{
int addr;
addr = 8000;
func_a();
}
func_a()
{
mov (addr),d1
mov 0xa,d2
add d1,d2
}
0696デフォルトの名無しさん
2007/03/27(火) 00:09:22そこから持ってくればいんじゃね
0697デフォルトの名無しさん
2007/03/27(火) 07:10:39スタックフレームを調べるということでひとつ。
#最適化で変数が消えていても泣かない
0698デフォルトの名無しさん
2007/03/27(火) 08:40:54文字列の長さを取得するにはどうすれば良いでしょうか?
0699デフォルトの名無しさん
2007/03/27(火) 10:16:510700デフォルトの名無しさん
2007/03/27(火) 10:24:47string関数とは何ぞや。
std::stringクラスという意味ならstring.hのstrlen()で。
それもダメだというなら自分で数えれば宜しい。
0701デフォルトの名無しさん
2007/03/27(火) 10:40:53\0 が来るまで数えればいいじゃないか
0702デフォルトの名無しさん
2007/03/27(火) 18:07:50ヌルターミネートを含むchar配列なんだったらstrlenを使うべきじゃないの?
あと、よく「ないなら自分で作れ」的なこと言うヤツいるけど、
それってアホ化する第一歩にしか思えん。。。
誰でも思いつくような便利関数はもともとあるかすでに誰かが作ってるから
それを探し出して使うべき。
自分で作るのは、調べ尽くし、どうにもならなくなったときだけにしる。
0703デフォルトの名無しさん
2007/03/27(火) 18:18:31元の質問者がstring(str?)関数を使わずに、と言ってるんだから
0704デフォルトの名無しさん
2007/03/27(火) 18:22:48size_t strlen(const char* s)
{
size_t len = 0;
while (*s++)
len++;
return len;
}
0705デフォルトの名無しさん
2007/03/27(火) 18:32:10>>698はVC++.NET2005あたりを使ってて、System.Objectをusing指定できない
OLEか何かを作っており、Stringクラスが使えないからConvert::ToString関数
など変換クラスあたりの代替になるものはないか、と言っているのだと思う。
0706デフォルトの名無しさん
2007/03/27(火) 18:34:270707デフォルトの名無しさん
2007/03/27(火) 18:53:53【初心者歓迎】C/C++室 Ver.35【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1171888583/
の違いって何?
0708デフォルトの名無しさん
2007/03/27(火) 19:00:210709デフォルトの名無しさん
2007/03/27(火) 21:11:330710デフォルトの名無しさん
2007/03/27(火) 21:13:520711デフォルトの名無しさん
2007/03/27(火) 21:14:150712デフォルトの名無しさん
2007/03/27(火) 22:07:44違いなんて無いだろ。
俺はこのスレが1000まで行っても次スレは立てないでそこへ合流すればいいと思っている。
0713デフォルトの名無しさん
2007/03/27(火) 23:13:380714100
2007/03/28(水) 00:19:06久々の30台、 全然動けねぇ…
そして遅くても関係無く中段貰う俺テラヨワス…
Vで一矢報いることが出来たのが幸いでした…
0715デフォルトの名無しさん
2007/03/28(水) 00:19:510716デフォルトの名無しさん
2007/03/28(水) 00:20:340717デフォルトの名無しさん
2007/03/30(金) 11:55:25LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
ビルドの際に上記のエラーが出るので、プロジェクトを新規にConsole
アプリケーションで作り直しました。そのときは快調に動くものの、
セーブして後日開くとまたWin32アプリケーションに戻っています。
これは何が原因なのでしょうか? よろしくお願いします。
0718デフォルトの名無しさん
2007/03/30(金) 14:12:350719デフォルトの名無しさん
2007/03/30(金) 14:24:49int array[3][10];
int **A;
として
A=array;
としてみたのですが、不正な代入という警告がでます。
キャストしてやれば警告がでませんが、根本的に間違ってるような気がします。
0720デフォルトの名無しさん
2007/03/30(金) 14:35:27と見れば、これは「int [10]が3つ」あるわけで、それを指すポインタは
int (*A)[10];
0721デフォルトの名無しさん
2007/03/30(金) 14:36:34この場合、 array の式の中での型は int (*)[10] でいいんだっけ?
0722721
2007/03/30(金) 14:38:03時間差で重なった
0723720
2007/03/30(金) 14:45:57int *A[10];
だと、
int *(A[10]);
とみなされて、「int * が[10]個」になってしまう。
この辺りは慣れるしかない。
>>721
そう。
因みに、「10」とかベタで書くと後で変更するとき困るのは
言うまでもない。
#define N 10
とするか、または
typedef int ARRAY[10];
ARRAY array[3];
ARRAY *A;
とでもした方がいい。
0724デフォルトの名無しさん
2007/03/30(金) 14:46:12ありがとうございます。
たしかに警告消えました。
それにしてもはじめて見る書き方です。
使い方をしらべてみます。
0726717
2007/03/30(金) 14:58:000727717
2007/03/30(金) 15:00:27そもそも新しく作り直しているんだから、セーブしなけりゃプロジェクトそのもの
存在しない。
確かに、新しく作っといて過去のを開きなおして「まただorz」って言うのも
一回あったけど。
0728デフォルトの名無しさん
2007/03/30(金) 15:03:510729デフォルトの名無しさん
2007/03/30(金) 15:29:47随分態度でかいけど、作り直さないで修正だけして保存してもダメなの?
#実は作り直した積もりで毎回同じ古いのを保存しているだけだったり。
0730デフォルトの名無しさん
2007/03/30(金) 15:33:380731デフォルトの名無しさん
2007/03/30(金) 15:39:500732デフォルトの名無しさん
2007/03/30(金) 16:55:05pBuf= new char[14];
上記のコードを実行すると、
void *operator new[](size_t size)
ではなく、
void *operator new(size_t size)
が呼び出されます。
なぜでしょうか?
分かる方お願いします。
0733デフォルトの名無しさん
2007/03/30(金) 16:55:25>作り直さないで修正だけして保存してもダメなの?
Win32アプリケーションでプロジェクト作っといて、コンソールアプリ
ケーションに変更するなんてことできたっけ?
0734デフォルトの名無しさん
2007/03/30(金) 17:03:040735デフォルトの名無しさん
2007/03/30(金) 17:06:03できるんじゃ?
Wizardからしか設定できない隠し項目とかないでしょ。まさか。
>>717
同じ名前のプロジェクトがいくつもあるんじゃないの?
0736デフォルトの名無しさん
2007/03/30(金) 18:18:45「C/C++」タブの「プリプロセッサの定義」:
_WINDOWS ⇔ _CONSOLE
「リンク」タブの「プロジェクト オプション」:
/subsystem:windows ⇔ /subsystem:console
でリビルド。
0737717
2007/03/30(金) 18:53:38エラーは吐かなくなったけど、実行したらdos窓が出た瞬間にとまるorz
main関数の実行まで行っていないような・・
0738デフォルトの名無しさん
2007/03/30(金) 19:38:570739デフォルトの名無しさん
2007/03/30(金) 20:32:17コンパイラが仕様に完全に準拠してないから。
0741デフォルトの名無しさん
2007/03/30(金) 21:08:05何使ってるの?
0742デフォルトの名無しさん
2007/03/30(金) 22:01:37このサイトやRADEMEなどありませんでした
これを実行したいんですがどうしたら良いでしょうか?
基本的な手順が書いてある参考になるサイトなどはご存知じゃないでしょうか?
自分でも検索してみたのですがなかなか見つかりません
ちなみにBCCとBCPadはインストールしてHelloWorldぐらいは実行できます
よろしくお願いします
0743デフォルトの名無しさん
2007/03/30(金) 22:49:310744デフォルトの名無しさん
2007/03/30(金) 22:52:210745デフォルトの名無しさん
2007/03/30(金) 23:07:08void (*p[2])(void) = {
a,
&a,
}
上記のようにaとしても&aとしても同じで関数aが*p[0], *p[1]に入るのですが、
どちらが正しい記述なのでしょうか。
ちなみにVCCで試しました。
コンパイラの話なのか、言語の話なのかもわからないのですがよろしくお願いします。
0746デフォルトの名無しさん
2007/03/30(金) 23:13:28前者は後者を省略形の扱いになるんじゃなかったっけ?
確か、これは言語の仕様で、コンパイラは関係なかった気がする。
0747742
2007/03/30(金) 23:22:21>>744
レスありがとうござます
BCPadでmakeしてみたのですがエラーが出ました。
それによるとg++がどうのこうのとのことで、makefileを見てみるとg++とかgccなどの記述がありました。
これってBCCじゃなくてGCCを使う必要があるってことでしょうか?
0748デフォルトの名無しさん
2007/03/30(金) 23:26:42C++はしっかり互換性を意識してやってないと他のコンパイラじゃ
まともにコンパイルが通らないことがフツー。
てか、どこのサイトだよ? 教えてくれればもっと適切にアドバイスできるんだけど。
0749デフォルトの名無しさん
2007/03/30(金) 23:30:19どっちでもおk。常識的にはaは「関数」であるんだから、
aとだけ書いて「関数へのポインタ」に置き換えられるのはヘンな話だけど
なぜかCには「関数は式の中では関数へのポインタに置き換えられる」っていう規則がある。
だから前者でも後者でも関数へのポインタが入るし、その後の関数呼び出しも
p[0]();でも(*p[0])();でもおk。間接参照演算子を使って「関数へのポインタ」から「関数」を手繰り寄せても
↑の規則のせいで速攻「関数へのポインタ」に置き換わる。つまり関数へのポインタに*つけても何もしない。
つまりぶっちゃけ(**********p[0])();っていう関数呼び出しも通る。
ただ後者の方が丁寧な書き方ではあるとは思う(少なくとも俺は読みやすい)。
>>747
makefileあるならmakeできるんじゃ。
Windows環境でgcc+makeしたいならCygwin入れると楽(自分がやってるだけだけど)。
0750デフォルトの名無しさん
2007/03/30(金) 23:32:32式中にある呼び出されない関数は関数へのポインタに成り下がるから、
a が関数なら a, &a, *a は等しく関数aのポインタを意味する。
0751デフォルトの名無しさん
2007/03/30(金) 23:35:53ようするにどっちも正しい記述。
お前が気に入った書き方をすればいい。
0752742
2007/03/30(金) 23:38:19ありがとうございます
身元がばれるかもしれないのでサイトを晒すのはちょっと(^^;
>>749
はい、gccを使えばmakeできそうです
週末を使ってgccの使える環境を整えて再チャレンジしてみたいと思います
0753745
2007/03/31(土) 13:20:57>>749
>>750
>>751
皆さんご返答ありがとうございます。
明示するということで"&"をつけて記述しようとおもいます。
ありがとうございました。
0755デフォルトの名無しさん
2007/04/03(火) 14:32:51俺も2003だが、以下のコードで普通にnew[]の方を呼ぶよ。
自分でnew[]を書かなければnewaop.cppの
void *__cdecl operator new[](size_t count) _THROW1(std::bad_alloc)を呼ぶ。
void * operator new[](size_t nSize)
{
void * ptr = malloc(nSize);
return ptr;
}
void * operator new(size_t nSize)
{
void * ptr = malloc(nSize);
return ptr;
}
int _tmain(int argc, _TCHAR* argv[])
{
char * pBuf= new char[14];
sprintf(pBuf, "Hello, world!");
printf("%s\n", pBuf);
return 0;
}
番号コテは発言毎に付け替えるものではない。
一連の同じ話題の間は初めの発言番号をずっとつけておくものだ。
0756732,740,754
2007/04/03(火) 14:39:46返答ありがとうございます。
コテの件おっしゃる通りですね。。。すいません。
operator new ですが、こちらと挙動が異なるようですね。
今一度確認してみます。
0757742
2007/04/06(金) 08:40:15(自己レス)Eclipse+CDTで何とかgccコンパイル・実行ができました
でもEclipseって自分には多機能すぎるのかちょっと使いにくく感じます
gccが使えて、CPadのようにコマンドプロンプトにいちいち入力しなくて良い物は無いのでしょうか?
0758デフォルトの名無しさん
2007/04/06(金) 08:45:000759デフォルトの名無しさん
2007/04/14(土) 19:47:560760デフォルトの名無しさん
2007/04/14(土) 20:03:350761デフォルトの名無しさん
2007/04/14(土) 20:39:01ここ数年を指すなら一概には言えない。
#例えばIntelCPUなら、floatの方が速くなる可能性を秘めている。
0762デフォルトの名無しさん
2007/04/14(土) 20:41:31それが問題になるほどクリティカルなプログラムを作りたいなら実測しろ。
つーか、>>760は生半可な知識で答えずにきちんと実測してから回答すべきだな。
0763デフォルトの名無しさん
2007/04/14(土) 20:47:330764デフォルトの名無しさん
2007/04/14(土) 21:02:08というかコンパイラがどういうコードを生成するかとかCPUの特長とか
サブルーチン呼ぶときdouble型にされてしまうとかプログラムしだいで変わるだろうから
毎回実測したほうがいい。聞かれても困るし、過去の経験や聞いた話しに頼るべきではない。
0765デフォルトの名無しさん
2007/04/14(土) 21:04:540766デフォルトの名無しさん
2007/04/14(土) 21:11:17x86のFPUはそうだな。
でもWin64では、64ビットプログラムだと事実上FPUが使えず、
SSEを使うことになるので、そうでもない。
>>759
761とは違う理由も挙げてみる。
Cではfloatをプロトタイプ宣言のない関数の引数として渡すと、
doubleに拡張されることになっていた。
標準ライブラリもみなdouble型の引数・戻り値ばかりだった。
故にfloatではいちいちdoubleとの変換の手間がかかる分速度が遅くなるとされた。
しかし近年はプロトタイプ宣言が普及し、
標準ライブラリもfloatを引数・戻り値に取るものも用意されるようになったので、
ここでも結論は761と同じ
0767デフォルトの名無しさん
2007/04/14(土) 21:16:52それは一部のCPUの実数演算ユニットに限定された条件。
>>764
>サブルーチン呼ぶときdouble型にされてしまうとかプログラムしだいで変わるだろうから
古いCや可変個数引き数でもない限り、安全にfloat値を関数に引き渡すことができる。
0768デフォルトの名無しさん
2007/04/14(土) 21:23:18処理効率が二倍ぐらいになったりするの?
0769デフォルトの名無しさん
2007/04/14(土) 21:29:05処理効率が速度のことなら、巧く填まれば倍の速度が出る。
#例えば配列同士の加算など。
実際には、ニモニック自体が4並列の方が遅かったり
メモリからの詰め替えが遅かったりであんまり変わらなかったりもする。
0770デフォルトの名無しさん
2007/04/15(日) 00:07:20同じ大きさならfloatはdoubleの倍の要素を保持できるという点もおいしいらしい。
実際測ってみたことないからよくわからないけど。
floatとdoubleの大きさを決め付けているのは元質問からの仮定ということで許してくれ。
0771デフォルトの名無しさん
2007/04/19(木) 12:31:23ものって用意されていたりしませんか?
ある本にプログラムは作るな!と書いてあったので
構造体も作らないほうがいいのかなとか思いました。
できればoperatorで演算できるものだとうれしいんですが
そういったものが用意されていたら教えてもらえるとうれしいっす。
0772771
2007/04/19(木) 12:52:43標準ライブラリなどで
struct pos
{
double x,y;
}
のような構造体は用意されていますか?
されているのであれば何をインクルードして何という型名なのか教えてほしいです。
0773デフォルトの名無しさん
2007/04/19(木) 12:58:480774デフォルトの名無しさん
2007/04/19(木) 13:05:41複素数として扱っていいなら、CにもC++にも定義がある。
C++の複素数なら、メンバの型も自由だ。
0775771
2007/04/19(木) 14:46:33どうもすみませんでした
0776デフォルトの名無しさん
2007/04/19(木) 15:26:10まあ、あるものは使った方がいいけど、
初心者ならとりあえず作ってみるのも勉強になっていいと思うぜ。
0777デフォルトの名無しさん
2007/04/19(木) 19:13:27問題は
「5つの整数値を入力させて入力順に出力し、最大値と最小値も出力するプログラムをつくりなさい。」
<注>このプログラムは、並び替え処理は行わずに作成してください。
下のように出力できればいいんですが・・・・。できないです。よろしくお願いします。
Input number1 : 52
Input number2 : -34
Input number3 : 27
Input number4 : 612
Input number5 : 9
maximum value is 612
minimum value is -34
52 -34 27 612 9
0778デフォルトの名無しさん
2007/04/19(木) 19:19:25丸投げするなら宿題スレの方がいいと思うが。
0779デフォルトの名無しさん
2007/04/19(木) 19:23:28分かりました。宿題スレいってきます。有難うございます。
0780デフォルトの名無しさん
2007/04/19(木) 21:42:43ああ ああああ あああ
あ ああ ああ あ
0781デフォルトの名無しさん
2007/04/20(金) 15:11:40unsigned int uTest = -1;
fwrite( &uTest, sizeof(unsigned int), 1, fp );
で-1が記録されます。
unsigned int uTest = 4294967295;
でも-1が記録されます。
ファイル出力にunsignedは使えないのでしょうか?
またどうやったら使えるのでしょうか?
0782デフォルトの名無しさん
2007/04/20(金) 15:20:09あのね、32ビット16進表記では、-1も4294967295も 0xFFFFFFFF なんだけど。
何を見て-1が記録されると言ってんの?
0783デフォルトの名無しさん
2007/04/20(金) 15:35:01あぁなるほど、バイナリエディタで型をsignにしてました。
ありがとうございます。
0784デフォルトの名無しさん
2007/04/20(金) 20:04:450785デフォルトの名無しさん
2007/04/21(土) 12:41:37小数に対応させるためにdoubleにすると、整数の場合も4.00000000みたいに小数点以下に0が無駄に出てしまうんですが
それを出さない方法ってあるんですか?あるなら教えてぷりいいいぃぃずううううう(iдi)
0786デフォルトの名無しさん
2007/04/21(土) 13:32:58中身が本当に、小数点の底まで整数と信じるなら、
intにでもキャストしろ。当然、±1の誤差に対する
苦情は却下だ。
0787デフォルトの名無しさん
2007/04/21(土) 13:33:34printf("%g\n", 4.0);
0788デフォルトの名無しさん
2007/04/21(土) 13:33:48double a=4;
cout<<int(a)<<endl;
0789785
2007/04/21(土) 13:35:07キャストでうまくいきそうです。
0790デフォルトの名無しさん
2007/04/21(土) 13:45:060791デフォルトの名無しさん
2007/04/21(土) 13:55:59小数対応といっている以上、%.0fではダメだろう。有効精度が判っているなら、(例えば3桁として)%.3gでよかろう。
0792785
2007/04/21(土) 15:14:29入力した数の平均を求めるプログラムなので、整数にも小数にも対応できるようにdoubleにしました。
そうすると、平均が整数になろうと小数になろうと、後ろに0がいっぱいついてしまうのです。
>>789は死ね
0793デフォルトの名無しさん
2007/04/21(土) 15:25:30寝言は>787を試してから言え。
0795デフォルトの名無しさん
2007/04/21(土) 15:33:134.000000000000003とか
3.999999999999998じゃねーの。
0796デフォルトの名無しさん
2007/04/21(土) 15:34:09int main()
{
printf("%f %g\n", 4.0, 4.0);
}
これで4.000000 4という出力が得られた。
0797785
2007/04/21(土) 15:34:460798785
2007/04/21(土) 15:45:03#include<stdio.h>
int main()
{
int i;
double x,sum=0,ave=0;
printf("実数を3つ入力してください\n");
for(i=1;i<=3;i++)
{
printf("%dつめ⇒",i);
scanf("%lf",&x);
sum = sum+x;
ave = sum/i;
printf("合計=%f\n",sum);
printf("平均=%f\n",ave);
}
return 0;
}
これで3つとも1と入力しても1,000000とかになっちゃうのです
0799デフォルトの名無しさん
2007/04/21(土) 16:01:44入力・演算・出力で全部小数として扱ってるんだから、
その結果で何一つ問題はないと思うのだが。
それとも、入力が全部整数だったときだけは出力も整数、
1つでも小数が入ってたら小数出力したい、というのか?
あと、なりすましが嫌なら酉つけろ。もうおそいけど。
それと、自分に対するレスには目を通せ。>>788とか
話しの流れ見れば>>790-791もそう分かるはず。 用語が分からんだけかもしれんが
ついでに。一応最低限のことは知ってるのか?
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
0800785 ◆HOZlQYR1MY
2007/04/21(土) 16:25:11申し訳ない、習い始めたばっかりなので用語もいまいちわかりません(ノд`;)
答えが整数なら整数で、小数なら小数で出力したいのです。
例えば、>>798のような入力した実数の合計と平均を求めるプログラムで、
1と2を入力した場合、和は3.000000平均は1.500000と出てしまうのを、
和は3、平均は1.5とぴったり無駄に0がつかないように出力したいのです。
0801デフォルトの名無しさん
2007/04/21(土) 16:35:09それは無理。
浮動小数点と2進数の関係をもう一度勉強しろ。
手計算で4になっても、数値計算ではぴったり4ではない。
0802785
2007/04/21(土) 16:38:06もう一度勉強してから出直します。
ホント、このスレは馬鹿ばっかですね。
0803785 ◆HOZlQYR1MY
2007/04/21(土) 16:40:30そうなんですか、わかりましたorz
長々お邪魔しました、勉強して出直してきますo(`ω´*)o
ありがとうございました〜
0804785 ◆HOZlQYR1MY
2007/04/21(土) 16:43:06m9(^Д^)
0805デフォルトの名無しさん
2007/04/21(土) 16:55:41だから%gで出力してみたのか?
それを試してから寝言を言えって。
>>801
表示だけならできるのだから、「無理」と決め付けるな。
0806785 ◆HOZlQYR1MY
2007/04/21(土) 17:05:52うおおおおできたああああああああ
まjでありがとうございまssっす!!!!!!!1!!1!11
寝言言ってすいまえsんでした
0807デフォルトの名無しさん
2007/04/21(土) 17:26:050808デフォルトの名無しさん
2007/04/21(土) 20:41:18今からプログラム始めるとして、BASIC、C、C++、Java、Fortranの中で入門用・汎用性ではどんな感じなんでしょうか?
一応専攻は機械・設計っす
0809デフォルトの名無しさん
2007/04/21(土) 20:45:010810デフォルトの名無しさん
2007/04/21(土) 20:57:250811デフォルトの名無しさん
2007/04/21(土) 21:16:21. lllllllllllllllllllllllllllllllllll.lllllllllllllllllllllllllllllllllll! llllllllllllllliiii、llllllllll! lllllllllllll .llllll゙llllll
. ゙!!!!!!!!!!!!!!!llllllllllllll.゙!!!!!!!!!!!!!!!llllllllllllll ゙!!!!lllllllllllll!lllllllllll! lllllllllllllii,,,,,_  ̄ ________________,
llllllllllllll .lllllliiiii,,_ ,llllllllllllll .゙゙゙!!!ll lllllllllll llllllllllllllllllllllllllllliiiii llllllllllllllllllllllllllllll!
llllllllllllll .lllllllllllllllllllllllllllllll゙ ,llllllllllll lllllllllllllll!!llllllllllllllll llllllllllllllllllllllllllllll!
. iiiiiiiiiiiiiiiiiiiiillllllllllllll .゙゙゙!!llllllllllllllllllll!゙ iiiiiiiiiiiiiiiiiilllllllllllll!"llllllllllllll .゙゙゙゙゙!!!
llllllllllllllllllllllllllllllllll .゙゙!lllllllllllllllii、.llllllllllllllllllllllllll!!゙゛ llllllllllllll
!!!!!!!!!!!!!!!!!!!!!!!!! .゙!!!!!!!!!!!!! .!!!!!!!!!!!!!゙゙゙゙´ l!!!!!!!!!!
0812デフォルトの名無しさん
2007/04/21(土) 21:53:40CとC++とJavaは見た目が似てるから一緒に覚えられるかも
0813デフォルトの名無しさん
2007/04/21(土) 22:14:44一緒に覚えられるような代物ではない
0814デフォルトの名無しさん
2007/04/21(土) 22:57:22/ \ /\ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \ 見た目が似ていても中身は全くの別物
| |r┬-| | 一緒に覚えられるような代物ではない
\ `ー'´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / // だっておwwwwwwwwwwwwwwwwwww
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー'´ ヽ / / バ
| | l||l 从人 l||l l||l 从人 l||l バ ン
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
0815デフォルトの名無しさん
2007/04/22(日) 02:44:39一緒に学べないかというとそんなことはないとは思うが、
プログラミング初心者に複数の言語をやれというのは酷な話だな。
0816デフォルトの名無しさん
2007/04/22(日) 05:03:18ボックス1にコピペした文字列のノイズを取ってボックス2の方に表示させたいんだが。
文字列を検索したり抜き出すための関数が分からなくて挫折してる。
0817デフォルトの名無しさん
2007/04/22(日) 05:10:01って感じに翻訳っぽく。sから少し後ろはノイズだから消し去りたくて。
lの方でレベルは把握されてるけどそれをlvに直して数値を最後に付けて。
悪いsageチェック入ってなかった。
0818デフォルトの名無しさん
2007/04/22(日) 06:14:20C++にはGUIの規定はないので、恐らく何らかのライブラリを使っていると思うのだが。
そのライブラリの該当スレで聞くといいよ。
0819デフォルトの名無しさん
2007/04/22(日) 13:41:180820デフォルトの名無しさん
2007/04/22(日) 14:14:500821デフォルトの名無しさん
2007/04/22(日) 14:17:20オバーロードがあるから意味ないんじゃね?
と言いたいのかと思った
0822デフォルトの名無しさん
2007/04/22(日) 14:34:490823デフォルトの名無しさん
2007/04/22(日) 14:37:00をC++で書いてる人っているのか?
0824デフォルトの名無しさん
2007/04/22(日) 15:08:190825デフォルトの名無しさん
2007/04/22(日) 15:22:00下のコードは攻撃を行うと攻撃の権利が相手に移るという部分のなんですが、仮に
*kougeki = 1;
*player = 1;
*computer = 0;
という状況でこのコードが実行されると
*kougeki = 0;
*player = 0;
*computer = 0;
という風に*kougeki、*player共に同時に値が書き換わってしまいます。
if(*kougeki == *player){//攻守の交替
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
*kougeki = *computer;
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}else if(*kougeki == *computer){
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
*kougeki = *player;
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}
これはなぜでしょうか?理由が分かる方がいたら指摘お願いします。
0826デフォルトの名無しさん
2007/04/22(日) 15:23:54なんでそんなわけのわからんポインタの使い方をしてるんだ
0827デフォルトの名無しさん
2007/04/22(日) 15:35:04if(*kougeki == *player){//攻守の交替
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
kougeki = computer;
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}else if(*kougeki == *computer){
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
kougeki = player;
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}
に修正したらちゃんと動きました。ポインタを理解できてないみたいですね・・・
ありがとうございます!
0828デフォルトの名無しさん
2007/04/22(日) 16:02:05インデントのかけ方とかド素人丸出しなソースだな
0829デフォルトの名無しさん
2007/04/22(日) 16:20:36インデントは勝手に省略されたんだよカス
0830デフォルトの名無しさん
2007/04/22(日) 16:30:030831デフォルトの名無しさん
2007/04/22(日) 16:44:47ような用途なら全然ありじゃね?縦に長くならないし。
それよりインデントするなら全角空白でして欲しいとかそっちのほうが
気になるな漏れは。(実体参照だとJaneだと上手くコピペできない)
0832デフォルトの名無しさん
2007/04/22(日) 16:58:30答えてやったのに
答えてもらった後はどうでも良いって奴か
お前みたいな奴はPG向いてないからやめたほうがいい
0833デフォルトの名無しさん
2007/04/22(日) 16:59:13実際にC99/C++なのかもしれないけど
0834デフォルトの名無しさん
2007/04/22(日) 17:03:03#define TATE 7
#define YOKO 5
int main(void)
{
int arr[TATE][YOKO]={
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
};
int i,j;
int *p;
p=*arr;
*(p+10)=1;
for(i=0;i<YOKO;i++)
{
for(j=0;j<TATE;j++)
{
printf("[%d][%d] = %d ",i,j,arr[i][j]);
}
putchar('\n');
}
return 0;
}
0835834
2007/04/22(日) 17:05:07[0][0] = 0 [0][1] = 0 [0][2] = 0 [0][3] = 0 [0][4] = 0 [0][5] = 0 [0][6] = 0
[1][0] = 0 [1][1] = 0 [1][2] = 0 [1][3] = 0 [1][4] = 0 [1][5] = 1 [1][6] = 0
[2][0] = 1 [2][1] = 0 [2][2] = 0 [2][3] = 0 [2][4] = 0 [2][5] = 0 [2][6] = 0
[3][0] = 0 [3][1] = 0 [3][2] = 0 [3][3] = 0 [3][4] = 0 [3][5] = 0 [3][6] = 0
[4][0] = 0 [4][1] = 0 [4][2] = 0 [4][3] = 0 [4][4] = 0 [4][5] = 0 [4][6] =
こうなります。
int *p;
p=*arr;
*(p+10)=1;
↑この操作によって、
arr[1][5]にもarr[2][0]にも1が代入されるのはどうしてでしょうか。
0836デフォルトの名無しさん
2007/04/22(日) 17:07:51TATEとYOKOがテレコでした…
for(i=0;i<TATE;i++)
{
for(j=0;j<YOKO;j++)
で、納得です。
0837デフォルトの名無しさん
2007/04/22(日) 17:16:150838デフォルトの名無しさん
2007/04/22(日) 17:19:320839デフォルトの名無しさん
2007/04/22(日) 17:30:390840デフォルトの名無しさん
2007/04/22(日) 17:39:37ポインタへのポインタでなぜいかんのかと
0841デフォルトの名無しさん
2007/04/22(日) 17:46:360842デフォルトの名無しさん
2007/04/22(日) 17:54:27JAVAのパッケージやURIみたいに
0843デフォルトの名無しさん
2007/04/22(日) 17:59:460844デフォルトの名無しさん
2007/04/22(日) 19:39:27CreateWindowで作ったウィンドウのタイトルバーと枠の消し方が分かりません。
CreateWindow第三引数を、通常「WS_OVERLAPPEDWINDOW」としているところから
「WS_VISIBLE」のみに変えれば、「WS_CAPTION」が無くなって出来るかと思ったのですが、
やはりタイトルバーも表示されてしまいます。
どうすればタイトルバーを消すことが出来るのでしょうか?
0845デフォルトの名無しさん
2007/04/22(日) 21:48:09普通の中置記法の計算式が入ってる配列を、strtokで演算子だけ取り出そうとしたのですが
()がはいるとうまく取れません。
10+40+(5+5)*10=と入力すると、"+" "+(" "+" ")*" "="
って感じに、(の直前の演算子と)の直後の演算子がくっ付き、ひとつの文字列になってしまうのですが
全部ばらばらにひとつずつわける方法ありませんか?
0846デフォルトの名無しさん
2007/04/22(日) 21:52:50普通に前から一文字ずつ見ればいい話
0847デフォルトの名無しさん
2007/04/22(日) 21:53:34これはお勧め! っていう決定版みたいなのある?
C言語で
0848デフォルトの名無しさん
2007/04/22(日) 22:42:01java使え
0849デフォルトの名無しさん
2007/04/22(日) 22:45:56C言語用のJava探してくるよ
0850デフォルトの名無しさん
2007/04/22(日) 22:47:25Windows API
0851デフォルトの名無しさん
2007/04/22(日) 22:51:260852844
2007/04/22(日) 23:14:000853デフォルトの名無しさん
2007/04/22(日) 23:44:01指摘ありがとうございます。
言われたとおり式が入ってる文字列を先頭から数字以外は飛ばして
演算子がみつかったら中身を格納して〜って感じでやったのですが、
while(*enzan)でループさせて中でカウントしつつ、演算子なら格納して
最後に確認のために格納したデータを出力しようとしたのですが
エラーがでて出力されません。
もしかしてstrcpyすると\0なくなってるとかですか?
0854デフォルトの名無しさん
2007/04/22(日) 23:50:37strcpyをどのように使ったのか気になるが・・・
ちょソース晒してみ
0855デフォルトの名無しさん
2007/04/22(日) 23:57:090856デフォルトの名無しさん
2007/04/23(月) 02:20:16自分でも少し調べたけど、今の時代はBASICでもなくCが入門用で汎用ってことでFAっですよね…。
ちなみにウチの学科は今期の授業ではFortranを学びます。敢えてFortranなんて始める聞くのを修得する必要ってあるんでしょうか?
ぶっちゃけこれはウチの先生が異常なんすよね…?
0857デフォルトの名無しさん
2007/04/23(月) 07:11:28知らないものは教えられない。
授業で教えるのはFortranに決定。
そんなところだろ。
0858デフォルトの名無しさん
2007/04/23(月) 07:30:270859デフォルトの名無しさん
2007/04/23(月) 07:43:48理系学科ならそういう科目あってもいいかと
少なくともhtmlの基礎よりは
0860デフォルトの名無しさん
2007/04/23(月) 07:50:52言語の講義(特に一番最初のもの)ってのは、
扱っている言語の文法を覚えるためだけにあるんじゃないんだよ。
扱っている言語が古いか新しいかなんて関係ない。
他に習得したい言語があるのなら受身になっていないで自分で学べ。
その際にはFortranの講義で得た知識が役に立つだろうから。
0861デフォルトの名無しさん
2007/04/23(月) 13:49:470862デフォルトの名無しさん
2007/04/23(月) 23:55:49すみません、自己解決しました。
コピーする側をmallocしわすれてました・・・
0863デフォルトの名無しさん
2007/04/24(火) 00:02:350864デフォルトの名無しさん
2007/04/24(火) 00:05:05信者には大人気です。
0865デフォルトの名無しさん
2007/04/24(火) 01:12:04機械とか材料関係ならFortranはバリバリ現役なので特におかしな選択ではないと思う。
コンピュータを文字通り「計算機」として使う分野だから新しめの言語よりもFORTRANの
枯れて信頼性のあるライブラリを使ったり研究室で書きためたコードを読めるようになった
方がよい、ということなのだろう。
0866デフォルトの名無しさん
2007/04/24(火) 04:43:09でも情報の学科がJavaとアセンブリしかしないようなぬるぽな学科なんで
まともな所は違うかも…
0867デフォルトの名無しさん
2007/04/24(火) 05:54:08それなんてトートロジー・・・
0868デフォルトの名無しさん
2007/04/24(火) 07:46:320869デフォルトの名無しさん
2007/04/24(火) 07:47:330870デフォルトの名無しさん
2007/04/24(火) 11:06:15この場合、xyzというのは文字列定数なんでしょうか?
*pはxyzという文字列定数のアドレスを保存すると考えていいのでしょうか。
0871デフォルトの名無しさん
2007/04/24(火) 11:24:120872デフォルトの名無しさん
2007/04/24(火) 15:09:58文字をきちんと読み込んでくれません。
どうしたら読み込んでくれるようになるでしょうか?
ファイルの中身は
0xF1 0x40 0x40 ・・・
となっていて、プログラム内では
chInBuff[0] -15 '・
chInBuff[1] 64 '@'
と読み込まれています。
ヘッダファイル
static FILE *fp0;
プログラムファイル
char chInBuff[265];
fp0 = fopen( ファイル , "rb" )
fread( chInBuff , 265 , 1 , fp0 );
if(chInBuff[0] == 0xF1){}
0873デフォルトの名無しさん
2007/04/24(火) 15:16:31ファイルの末端をどのようにして検出すればいいのでしょうか?
ある程度の長さの配列を用意して、終端になるまでmallocで確保しながらぶち込んでいこうかと考えたのですが・・・・
0874デフォルトの名無しさん
2007/04/24(火) 15:16:34error C3861: 'TryEnterCriticalSection': 識別子は、引数依存の照合を使用しても見つかりません。
と出てしまいます。
ググってみたら_WIN32_WINNTが0x0400以上でなければならないといっていたので
stdafx.hに
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
を#include <windows.h>の前に追加したんですがそれでもだめでした。
VC7でDLL(Win32 プロジェクト)でやっています。
よろしくお願いします。
0875874
2007/04/24(火) 15:27:56どうやら実際にTryEnterCriticalSectionを使うクラスを宣言したヘッダーに
#include "winbase.h"
としていたのが原因のようです。
はっきりとした理由はわかりませんが、stdafx.hでwindows.hを読んだあとにwinbase.hを読んだことがまずかったみたいです。
0876デフォルトの名無しさん
2007/04/24(火) 15:30:25ヘッダファイルでグローバル変数定義なんてするもんじゃないという話はさておき、
0xf1は8ビットのsigned整数として表示すれば-15だからあってるじゃん。
試しにchinBuff[0]をunsignedにキャストしてみたら?
>>873
一般的には、ファイルサイズを調べておいてそのサイズでメモリ確保、fread()で読む込む。
ファイルサイズを調べる手段は、stat()を使うか標準関数だけで済ませたいならfseek()で
ファイル末尾に移動してftell()するとか。
#但し、2GBを超えるファイルには要注意。
教条主義的にファイルサイズを調べる手段も使わないというなら、一度空読みしてやればいい。
#fgetc()はファイル末尾に到達するかエラーに遭遇するとEOFを返すので検出できる。
0877デフォルトの名無しさん
2007/04/24(火) 15:34:220878872
2007/04/24(火) 15:41:55ありがとうございます。
if((unsigned char)chInBuff[0] == 0xF1){}
とすることで比較することができました。
staticの位置も修正しました^^;
理由などは調べてみます。
>>877
char キャラ型 と呼ぶかと
0879デフォルトの名無しさん
2007/04/24(火) 15:42:32チャーでもキャラでもどっちでもいい
0880デフォルトの名無しさん
2007/04/24(火) 16:26:32シャア
0881デフォルトの名無しさん
2007/04/24(火) 16:40:23椅子ではない
0882デフォルトの名無しさん
2007/04/24(火) 17:17:260883デフォルトの名無しさん
2007/04/25(水) 05:46:16いやー、多分一般的にはファイル全体を一気に読み込むんじゃなくて
何とかして必要な部分を切り出して読み込むんじゃないかと思うぞ
もしくはメモリマップファイルを作るとか
0884デフォルトの名無しさん
2007/04/25(水) 08:08:550885デフォルトの名無しさん
2007/04/25(水) 10:03:390886デフォルトの名無しさん
2007/04/25(水) 16:45:46WideStudio以外で
0887デフォルトの名無しさん
2007/04/25(水) 17:02:400888デフォルトの名無しさん
2007/04/25(水) 17:04:320889デフォルトの名無しさん
2007/04/25(水) 17:24:420890デフォルトの名無しさん
2007/04/25(水) 18:50:060891デフォルトの名無しさん
2007/04/25(水) 20:15:370892デフォルトの名無しさん
2007/04/25(水) 20:40:350893デフォルトの名無しさん
2007/04/25(水) 21:06:20forループなどでpush_backするしか内のでしょうか?
vector<vector<int>> vec;
とやっておいて、
あとから与えられた値の分、例えばint x=100,y=100;と与えられたら
for(int i=0;i<x-vec.size();i++){
vec.push_back(0);
for(int j=0;j<y-vec[i].size();j++){
vec[i].push_back(0);
}
}
の用にしなければいけませんか?
0894デフォルトの名無しさん
2007/04/25(水) 21:10:310895デフォルトの名無しさん
2007/04/25(水) 21:31:350896デフォルトの名無しさん
2007/04/25(水) 21:32:450897デフォルトの名無しさん
2007/04/25(水) 21:36:42reserve()はちょっと意味が違うな
0898デフォルトの名無しさん
2007/04/25(水) 21:37:47たくさんのメンバ関数を持っている事がわかる。Effective STLなどで
勉強しよう。
0899デフォルトの名無しさん
2007/04/25(水) 22:02:02C++はじめて数日なのでまだまだ知らない事一杯でして・・・
ttp://www.geocities.jp/ky_webid/cpp/library/002.html
ここみてやろうとしてました。
やはり専門書あった方がいいようなのでEffectiveSTLも買ってみます。
0900デフォルトの名無しさん
2007/04/25(水) 22:04:58ここも見とけ代表的だ
0901デフォルトの名無しさん
2007/04/25(水) 22:20:330902デフォルトの名無しさん
2007/04/25(水) 22:23:13人に聞く前にSTLのソースを見るんだ!
もしくはεπιστημη様にでも訊いて地獄のような説教をしてもらえ!
0903デフォルトの名無しさん
2007/04/25(水) 22:35:33仕様書を読むべきなんじゃないの?
0904デフォルトの名無しさん
2007/04/25(水) 22:54:39、良いフリーソフトをご存知ないですか?
というか、最低限必要なソフトやツールを教えていただけると嬉しいです・・・
0905デフォルトの名無しさん
2007/04/25(水) 22:56:38コンパイラでdos形式のexeファイルにしたのですが、実行しても一瞬入力した文字が出てきてすぐ閉じてしまいます。
開いたままにするって事はできないのでしょうか?
後、C言語でdos画面以外はできないのでしょうか?
初心者なので分かりづらい質問かもですが、回答よろしくおねがいします。
0906デフォルトの名無しさん
2007/04/25(水) 23:03:28visual studio 2005 express edition
cygwin gcc
>>905
getch()
Win32API
0907デフォルトの名無しさん
2007/04/25(水) 23:05:18#include <windows.h>
#pragma comment(lib, "user32.lib")
int main()
{
MessageBox(NULL, "hoge", "hage", MB_OK);
return 0;
}
0908デフォルトの名無しさん
2007/04/25(水) 23:22:33これの意味について詳しく
0909デフォルトの名無しさん
2007/04/25(水) 23:27:170910デフォルトの名無しさん
2007/04/25(水) 23:29:24リンクしないといろいろな機能を使えない、というかリンクエラーが起こる
0911デフォルトの名無しさん
2007/04/25(水) 23:33:490912デフォルトの名無しさん
2007/04/25(水) 23:36:150913デフォルトの名無しさん
2007/04/25(水) 23:46:45ありがとうございました。
早速ググってみます。
0914デフォルトの名無しさん
2007/04/26(木) 00:01:16Windows SDKでも可
0915デフォルトの名無しさん
2007/04/26(木) 00:28:19その前にwindows.hが見つからないという騒ぎになる
0916デフォルトの名無しさん
2007/04/26(木) 00:29:30ありがとうございます。
正直超初心者なのであんまり分からないですが、すぐ終わるっていうのが仕様じゃなくてよかったです。
0917908
2007/04/26(木) 08:14:522003 professionalだとなくても通っちゃったのでなんじゃこりゃって悩んだけど
そういう意味だったのか
0918デフォルトの名無しさん
2007/04/26(木) 11:20:18コンパイルオプションにuser32.libをリンクするって設定してあるんだろう。
大抵はコンパイルオプションでシステム系のライブラリはリンクするようにデフォで設定されてる。
#pragma(libはソース中にライブラリのリンクを明示する時に使う。
0919デフォルトの名無しさん
2007/04/28(土) 22:11:24今、式を打ち込んで()内の式を抜き取るという関数を作っているのですが
うまく抜き取れなくて困っています。
これで動かない理由がまったく分りません。
char shiki[256];
char kakko[256];
gets( shiki ); len = strlen( shiki ); len+=1; // shiki←計算式 len ← shikiの長さ \0含めるために+1
c_leni = strcspn( shiki, "("); // c_leni←shiki内の'('の位置
c_lenc = strcspn( shiki, ")"); // c_lenc←shiki内の')'の位置
memcpy( kakko, shiki + ( c_leni + 1 ), ( len - c_lenc ) * sizeof( shiki[0] )); // kakko←'(' の位置+1から ')'の位置-1までの文字列
for( i = 0; kakko[i] != '\0' ; i++){
printf( "%c" , kakko[i]);
}
0920デフォルトの名無しさん
2007/04/28(土) 22:17:170921デフォルトの名無しさん
2007/04/28(土) 22:23:48文字列のコピーならstrcpy/strncpyを使うべきだ。
そいから、getsは危険だから絶対に使っちゃならん。
pl = strchr(shiki, '(');
pr = strchr(shiki, ')');
if(pl++ && pr) {
strncpy(kakko, pl, pr - pl);
kakko[pr - pl] = '\0';
printf(kakko);
}
0922デフォルトの名無しさん
2007/04/28(土) 22:32:44plがNULLのときにインクリメントするのは鼻から悪魔。
それに、sprintf()でできることをstrncpy()でやるのはちょっと疑問。
plとprの位置関係くらい見ておいた方がいい希ガス。
もう一つ、文字列中に%があると死ぬから第一パラメータに持ってくるのは拙い。
ってことで、こんな感じで。
char * pl = strchr(shiki, '(');
char * pr = strchr(shiki, ')');
if (pl != NULL && pr != NULL && pl < pr) {
sprintf(kakko, "%.*s", pr - pl - 1, pl + 1);
printf("%s", kakko);
}
0923デフォルトの名無しさん
2007/04/28(土) 22:35:540924デフォルトの名無しさん
2007/04/28(土) 22:37:380925デフォルトの名無しさん
2007/04/28(土) 22:38:090926デフォルトの名無しさん
2007/04/28(土) 22:40:33書いてないなら誰かに使うなと言われる筋合いは全くない。
0927デフォルトの名無しさん
2007/04/28(土) 22:42:20あー、コードレビューでこんな事言ってた奴がいたなぁ・・・
0928デフォルトの名無しさん
2007/04/28(土) 22:46:31std::cin.getline(str);
もやヴぁいでしょうか?
0929デフォルトの名無しさん
2007/04/28(土) 22:51:02それは使い方が違う。
std::cin.getline(char* str, streamsize count)
又は
std::cin.getline(char* str, streamsize count, char delim)
0930919
2007/04/28(土) 22:52:23取り合えず一通りためしてみます^^;
0931デフォルトの名無しさん
2007/04/28(土) 23:30:10自殺するなら止めないけど。人に迷惑かからない範囲で
0932デフォルトの名無しさん
2007/04/28(土) 23:36:42日本語でおk
0933デフォルトの名無しさん
2007/04/28(土) 23:40:150934デフォルトの名無しさん
2007/04/29(日) 00:01:01たとえばこんな感じの↓
kansuu("a=",a)
0935デフォルトの名無しさん
2007/04/29(日) 00:03:11kansuu(char*,nanntoka)
0936デフォルトの名無しさん
2007/04/29(日) 00:05:10素早い返信サンクス
早速やってみる
0937デフォルトの名無しさん
2007/04/29(日) 01:14:25C++なら絶対に、Cでもよっぽどの理由がなければconst char*にすべき
ちなみに"string"などの文字列リテラルの正確な型はconst charまたはcharの配列
0938デフォルトの名無しさん
2007/04/29(日) 01:53:42Cとの互換性の関係で文字列リテラルは const じゃないよ。
0939デフォルトの名無しさん
2007/04/29(日) 01:57:05知ったかぶり
カス
0940デフォルトの名無しさん
2007/04/29(日) 02:00:22>>937と同じく文字列リテラルはconst char*だと思ってた
0941デフォルトの名無しさん
2007/04/29(日) 02:14:55vec.push_back(new string("あべし"));
vec.clear();
ってした際には"あべし"が格納されてるstringオブジェクトは
ちゃんとdeleteされるんでしょうか?
0942デフォルトの名無しさん
2007/04/29(日) 02:15:50されません。boost::ptr_vectorを使えばされます。
0943デフォルトの名無しさん
2007/04/29(日) 02:32:11ぼーすとって凄いラインぶらり何ですね
0944919
2007/04/29(日) 02:35:02sprintf(kakko, "%.*s", pr - pl - 1, pl + 1);
ってどういう動きしてるんですか?
やってみたんですがpr-pl-1のところとかいじっても出力結果が変わらなかったのですが
何がどうなってるのか全然わからないす・・
いじった理由は'('から次の文字はちゃんと取れているのですが')'の前で終わって欲しいのに
')'の後ろの文字まで出てしまうからです。
0945デフォルトの名無しさん
2007/04/29(日) 03:42:26%*s は、文字列の長さが少なくても指定した幅だけは最低とる
指定した長さで切るなら、%.*s
短くても長くても固定サイズにしたいなら %*.*s
NULLをインクリメントしたって鼻から悪魔でもなんでもない
0946919
2007/04/29(日) 09:21:19ありがとうございます。早速試してみます
0947デフォルトの名無しさん
2007/04/29(日) 15:14:230948デフォルトの名無しさん
2007/04/29(日) 16:46:430949919
2007/04/29(日) 18:19:20大人しくfor文で回して一文字ずつ格納していくしかないのか
0950919
2007/04/29(日) 18:38:21お騒がせしました
0951デフォルトの名無しさん
2007/04/29(日) 21:59:06PCぶっ壊れてるから確認できない。
0952デフォルトの名無しさん
2007/04/29(日) 22:07:36C++では、const charの配列だが、文字列リテラルからchar*への変換が定義されている。
X 3014:2003
2.13.4 文字列リテラル 1節目
4.2 配列からポインタへの変換 2節目
0953デフォルトの名無しさん
2007/04/30(月) 00:41:270954デフォルトの名無しさん
2007/04/30(月) 00:49:29そーしないと、既存の(C言語の)資産を活かせるという
C++の最大の売りのひとつが台無しになっちゃうからね。
0955デフォルトの名無しさん
2007/05/01(火) 01:08:10C++だと宣言しただけでオブジェクトができる?みたいですが、
vector<string> vec;
vector<string> *vec = new vector<string>();
上の二つの宣言でどちらも利用できますが
どちらを使ったほうがいいんでしょうか?
0956デフォルトの名無しさん
2007/05/01(火) 01:14:33後者の場合プログラマが明示的にdeleteしないとメモリリークが発生する。
特に理由がなければ前者を使えばいいし、他のスコープなどから参照するような場合があるなら後者を使えばいい。
0957デフォルトの名無しさん
2007/05/01(火) 01:15:43自然にdeleteされるのでそれをお勧めする
0958デフォルトの名無しさん
2007/05/01(火) 01:16:38>C++だと宣言しただけでオブジェクトができる?みたいですが、
こう書いてある時点でSTLやらBoostにはまだ手を出してはいけないような気がする。
0959デフォルトの名無しさん
2007/05/01(火) 01:31:020960デフォルトの名無しさん
2007/05/01(火) 01:33:32ダメ! 寝る前に水飲むとオネショするよ?
0961デフォルトの名無しさん
2007/05/01(火) 01:44:270962デフォルトの名無しさん
2007/05/01(火) 03:20:340963デフォルトの名無しさん
2007/05/01(火) 03:50:02a[100][2]よりa[2][100]のような形の方がメモリが連続して速くなりますか?
0964デフォルトの名無しさん
2007/05/01(火) 04:47:37もちろん速いのは後者ね
これはループまわして確保するって事の影響なんだろうけど
0965デフォルトの名無しさん
2007/05/01(火) 05:00:41ごめん
0966963
2007/05/01(火) 05:31:570967デフォルトの名無しさん
2007/05/01(火) 06:36:27キミに必要なのは、自分で実際に試してみて計測する気持ちだ
0968デフォルトの名無しさん
2007/05/01(火) 06:39:58まあ、それはともかく、type* で連続メモリを確保して、
type** でそこへのアドレスを保存するテーブルを作ればいいんだぜ。
0969デフォルトの名無しさん
2007/05/01(火) 06:42:070970デフォルトの名無しさん
2007/05/01(火) 06:50:35質問の対象外だろ
0971デフォルトの名無しさん
2007/05/01(火) 07:01:03その意味を潰す事のコストが大きすぎて、多少の差なんてどうでもよくなってしまう
0972デフォルトの名無しさん
2007/05/01(火) 07:05:49つまり実際に試せということだ
0973デフォルトの名無しさん
2007/05/01(火) 08:01:560974デフォルトの名無しさん
2007/05/01(火) 11:39:45そういう気持ちの悪い理由で、二次元データを画像に落とすときにもにょる羽目になることは多い。
0975デフォルトの名無しさん
2007/05/01(火) 13:20:19fp = fopen("aaa.txt", "a+");
でいいと思うんですが
aaaという固定のファイル名ではなくて、
キーボードから入力した任意の文字列のファイル名でファイルを作成したい場合はどうすればいいのでしょうか?
0976デフォルトの名無しさん
2007/05/01(火) 13:35:400977デフォルトの名無しさん
2007/05/01(火) 14:05:33ファイルを作成するなら"w+"だな。
"a+"じゃファイルは既存である必要がある。
#尤も、"w+"じゃ既存ファイルを消してしまうが。
0978デフォルトの名無しさん
2007/05/01(火) 14:58:310979デフォルトの名無しさん
2007/05/01(火) 15:05:13書き込み用として開く前に、読み込み用に開こうと試みて指定ファイルの存在を調べる
以外にありますか?
俺の少ない知識ではこれしか思いつかないんですが・・・
0980デフォルトの名無しさん
2007/05/01(火) 15:35:19このaiueoは定数なんですよね?
だったら、
str = "owner";
としてaiueoという定数ではなくownerという定数を指すようにすることはできても
定数自体を書き換えることはできないんですか?
*str = "o"
*(str+1) = "w"
…
みたいな感じです
0981デフォルトの名無しさん
2007/05/01(火) 15:38:250982977
2007/05/01(火) 15:46:58あーそうだっけ。失敬。
どっちみち、既存ファイルの既存部分に手をつけられないから使うメリットは余りないけど。
>>979
環境依存しない方法では、それが無難だね。
"r+"で試みて駄目なら"w+"で開くのが一般的かな。
#追記限定なら"a"でいいでしょ。
0983980
2007/05/01(火) 15:50:06できてしまうかもしれないけれど、一般的には駄目。
もしかしたらその"aiueo"が"waiueo"と共存しているかもしれないし。
0984983
2007/05/01(火) 15:51:260985デフォルトの名無しさん
2007/05/01(火) 16:07:14やっぱりだめなんですね。
共存というのがよくわからないのですが、さらに調べてみます。
0986デフォルトの名無しさん
2007/05/01(火) 16:08:02>*str = "o"
>*(str+1) = "w"
これは、
*str = 'o'
*(str+1) = 'w'
こうなる。
ただし元の"リテラル"を書き換える事は普通しない。
配列か、malloc等で確保した領域で行う。
0987デフォルトの名無しさん
2007/05/01(火) 16:10:46文字列リテラルは書きかえちゃダメというのが C の規約にあったはず。
その癖型は char* なんだけどな。
そういう規約がなかった時代に書きかえるコードが書かれてて、
そういうコードが通らなかったら困るからという歴史的な理由だった記憶があるけど、
違うかもしれん。
char str[] = "aiueo";
なら書きかえても大丈夫。
str という配列変数を自前で作ってるから。
0988デフォルトの名無しさん
2007/05/01(火) 16:15:09とても理解しやすく、非常に為になりました。
0989デフォルトの名無しさん
2007/05/01(火) 16:15:24↓使えば十分っしょ。
【初心者歓迎】C/C++室 Ver.36【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1175436073/
はきだめC/C++下級者の質問箱 2
http://pc11.2ch.net/test/read.cgi/tech/1156206091/
レス数が950を超えています。1000を超えると書き込みができなくなります。