[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/28 11:42 / Filesize : 246 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.45【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:09:22 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.44【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1194016813/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

982 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:31:36 ]
取得したデータをfile.txtというテキストファイルを自動生成してそこに出力したくて

//取得データのfile.txtファイルの自動生成
FILE *fp;
fp = fopen("file.txt","w");

と書きました。
コンパイルしたら

error C2065: 'fp' : 定義されていない識別子です。

と表示されました。fpというのはどのような宣言をすればいいのでしょうか。
環境はWindows XP Pro SP2、メモリ2G、VC++2005(Express)です。
アドバイスお願いします。

983 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:39:16 ]
>>982
そのコードを見る限りでは、それで問題なさそうだよ。

・#include <stdio.h> があるか
・C++ではなくCなら変数宣言はブロックの先頭じゃなきゃいけない
・直前のコメントを消してみる
などをチェキ


984 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:57:35 ]
>>983
#include<stdio.h>がありませんでした。
追加してみたけど変わりませんでした。

Cとかかれていたサンプルプログラムをいじっているのですが拡張子が*.cppなのでC++なのでしょうか。
int main(){
直後に
FILE *fp;
を置いたらエラーが消えました!
ありがとうございました!

もうひとつ質問で申し訳ないのですが
*.cはC言語でしょうけど*.cppというのはCでもC++でもあるのでしょうか。
判別方法というのはあるのでしょうか。


985 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:11:53 ]
>>984
大概のコンパイラは*.cをC、.cppをC++と見なしてコンパイルする。
C99以外のCなら大抵の場合C++としても通るから、普通は.cppで問題ない。
(ただしDLLのソースとかでエクスポート関数がある場合は注意)

986 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:12:00 ]
>>984
一般的なコンパイラならファイル名が*.cppならC++とみなして
コンパイルすると思うけど、
それをCとしてコンパイルする手段はあるだろうし、
あなたがどうやってコンパイルしているかわからないので、
何とも言えず。

気になるようだったら、main()の最初に
#ifdef __cplusplus
printf("C++なの\n");
#else
printf("Cなの\n");
#endif
とでも入れてどっちが表示されるか試してみるといいかもね。


987 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:14:04 ]
>>985-986
なるほど〜。
ありがとうございます。

コンパイルの方法は
VC++のソリューションエクスプローラーのソースファイルを右クリックする
といった方法でやっています。


988 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 16:07:49 ]
へぇ、VC++では右クリックでコンパイルされるのか。珍しいI/Fだな。

989 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 16:18:43 ]
コンテキストメニューからソースファイル単位のコンパイルってことだろ

990 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 17:31:22 ]
template<bool>
struct CompileTimeChecker
{
CompileTimeChecker(...);
};
template<> struct CompileTimeChecker<false> {};

#define STATIC_CHECK(expr, msg)\
 {\
  class ERROR_##msg {}; \
  (void)sizeof(CompileTimeChecker<(expr) != 0>(ERROR_##msg()));\
 }

int main()
{

 STATIC_CHECK(true, HOGEHOGE)

}

Modern C++のCompileTimeCheckerというコンパイル時にエラーチェック
をするマクロなのですが、コンパイルが通るはずの条件で呼び出して
も、VC++ 2008では以下のエラーが出てコンパイルできません。

関数型へのキャストが正しくありません。
'CompileTimeChecker<__formal> (main::ERROR_HOGEHOGE (__cdecl *)(void))':
sizeof オペランドが正しくありません。

g++ v4でも
関数へのsizeof?が不正だといわれます。何か間違ってるところはありますか?
本のソースそのままなのですが。



991 名前:990 mailto:sage [2007/12/27(木) 17:39:24 ]
ちなみにBCCでは通りました。

992 名前:990 mailto:sage [2007/12/27(木) 18:00:30 ]
どうやらsizeofに一時オブジェクトを渡すのは不正みたいですね。
以下でうまくいくようです。著者はどうやってコンパイルできたか
疑問です。コンパイラの違いでしょうか?ソースも間違っている
みたいです。

template<bool>
struct CompileTimeChecker
{
 CompileTimeChecker(...){} //定義が必要だった
};

#define STATIC_CHECK(expr, msg) \
{\
 class ERROR_##msg {};\
 CompileTimeChecker<(expr) != 0> c = CompileTimeChecker<(expr) != 0>((ERROR_##msg())); \
 (void)sizeof(c); \
}

993 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 18:10:10 ]
>>992
BCCしか使ってないんじゃね?

994 名前:990 mailto:sage [2007/12/27(木) 18:16:35 ]
>>993
いくつかのコンパイラで試したと書いてありましたが
それらでは問題なかったんでしょうね。
もはや (void)sizeof(c); \ の行は不要ですね。
どうやらエラーが出ていたのは一時オブジェクトではなく
sizeof(Widget())という形が関数に対してsizeofが行われて
いると判断されてたみたいです。これはもちろん不正ですが。

995 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:27:19 ]
995

996 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:33:48 ]
pc11.2ch.net/test/read.cgi/tech/1198755167/
はい新スレ
>>1の名前は気にしないでくれ。間違えた。

997 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:36:50 ]
擦れた手乙埋め

998 名前:998 mailto:sage [2007/12/27(木) 20:41:39 ]
99−

999 名前:999 mailto:sage [2007/12/27(木) 20:42:00 ]
999666999666

1000!

1000 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:42:22 ]
1000は俺が取るよ。



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<246KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef