【初心者歓迎】C/C++室 Ver.36【環境依存OK】
at TECH
1:デフォルトの名無しさん
07/04/01 23:01:13
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.35【環境依存OK】
スレリンク(tech板)l50
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
2:デフォルトの名無しさん
07/04/01 23:37:03
先生方、どうぞ宜しくお願いします。
3:デフォルトの名無しさん
07/04/02 00:08:17
WinXPでC言語勉強し始めた者です。
ソートの問題で、「ただし同じ値なら同じ順位を返しなさい」という
ただし書きがあって、今までなかった注意書きでどうすればいいのか分かりません。
ググったのですが・・・選択ソートを使っています。IF文の
elseでどのような指示をつければよろしいでしょうか?
4:デフォルトの名無しさん
07/04/02 01:05:35
>>3
順位って1位2位ビリってか。
5:デフォルトの名無しさん
07/04/02 02:19:29
保守しないと落ちそう
6:デフォルトの名無しさん
07/04/02 02:23:27
>>3
まずはソースをさらすんだ
7:デフォルトの名無しさん
07/04/02 02:38:47
「安定なソート」という意味だろ
8:デフォルトの名無しさん
07/04/02 03:05:45
C言語学ぶのにいい本を次からおしえて
K&W
独習C
結城浩のC言語プログラミングレッスン
9:デフォルトの名無しさん
07/04/02 03:26:31
K&W
10:デフォルトの名無しさん
07/04/02 04:24:10
作って分か……ごめん、エイプリルフールはとっくに過ぎてたね。
11:デフォルトの名無しさん
07/04/02 06:25:03
【ネガティブ派遣根性チェック】
3つ以上、チェックがつけばアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、かわいがってもらうことが大切だ
12:デフォルトの名無しさん
07/04/02 13:39:48
>>10 お前は頑張ったよ
13:デフォルトの名無しさん
07/04/02 16:44:09
結城ってひとの本図書館にあったから立ち読みしたけど
あれで勉強してるひといるのか?
ちょっと見て、ん〜?ってとこが多かった。
あれで基礎固めたら大変だろうね。
14:デフォルトの名無しさん
07/04/02 19:27:14
>>13
柴田望洋乙
15:デフォルトの名無しさん
07/04/02 19:31:52
質問です。
C++で日本語のファイル名を作成する場合はどうすればいいの
でしょうか?
ofstream out("ほげ.txt");
と書いたソースをsjisで保存してもutf-8で保存しても出来る
ファイル名は文字化けしてしまいます。
OSはWindowsXP、開発環境はVS2005です。
どなたかご教授お願い致します。
16:デフォルトの名無しさん
07/04/02 19:34:36
>>15
UNICODEの定義を外すorロケール設定をする
17:デフォルトの名無しさん
07/04/02 20:20:24
ポインタがよくわかりません
18:デフォルトの名無しさん
07/04/02 20:22:22
>>17
URLリンク(www.google.co.jp)
19:C++初心者
07/04/02 20:46:41
質問があります。
現在、VisualStudio2005上でWindowsFormアプリケーション上に配置した
ボタンクリックイベントにて別クラス
@TestClass2.cpp
ATestClass2.h
にて定義したメソッドを呼出そうとしているのですがうまく呼出せません。
どこに問題があるのでしょうか?
@
#include "StdAfx.h"
#include "TestClass2.h"
TestClass2::TestClass2(void)
{
int Method2()
{
return 10;
}
}
A
#pragma once
ref class TestClass2
{
public:
TestClass2(void);
int TestClass2::Method2();
};
20:C++初心者
07/04/02 20:48:26
【ボタンクリックイベント部分】
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
int i_return = TestMethod();
Debug::WriteLine("処理が終了しました!!");
//この部分でTestClass2の中にあるMethod2()関数を呼出したいです。
int i_return2 = TestClass2::Method2();
}
21:デフォルトの名無しさん
07/04/02 21:38:08
クラスメソッドとインスタンスメソッドというのがあってだな
C++的には静的メンバ関数だっけ?
22:デフォルトの名無しさん
07/04/02 22:17:53
どっち方向に勘違いしているかわからないね。3つポイントがあって2つ間違ってる感じかな。
23:20
07/04/02 22:29:55
自己解決しました。
24:デフォルトの名無しさん
07/04/02 22:40:16
実数の比較で == をつかっちゃいかんというのは良く聞くけど
double a=0;
printf("ヌルポ\n");
if( a==0 ) printf("ガッ\n");
これも例外なくNG?
ゼロだけは許されるとか、そういうのアリ?
25:デフォルトの名無しさん
07/04/02 22:48:03
使っちゃならんって言われる意味わかってるか?
26:デフォルトの名無しさん
07/04/02 22:49:54
実数は丸めたりするから、比較けっかが
理想通りにいかなかったりするからだろ
27:デフォルトの名無しさん
07/04/02 22:50:01
+0 -0
28:デフォルトの名無しさん
07/04/02 22:52:06
>>24
εを0とみなさないなら問題ない。
+0.と-0.は等しい。
29:デフォルトの名無しさん
07/04/02 23:04:29
>>26
ゼロは特別に許された方が便利だろとか
思ったりしたんだよ
話変わるけど
大体ポインタがゼロのときエラーとかいう仕様が
まかり通ってる時点でなんかもうおかしいんだよ
ゼロ番地なのかエラーなのかわかんねーじゃん
30:デフォルトの名無しさん
07/04/02 23:06:57
>>29
お前がポインタのゼロだと思ってるものはヌルポインタ。
URLリンク(www.kouno.jp)
31:デフォルトの名無しさん
07/04/02 23:07:55
浮動小数点の話なのかポインタの話なのかはっきりしろ
32:デフォルトの名無しさん
07/04/02 23:09:20
ポインタが0でもエラーじゃないこともあれば
0以外でエラーになることもあるだろ
33:デフォルトの名無しさん
07/04/02 23:40:17
日本語でおk
34:デフォルトの名無しさん
07/04/02 23:42:16
0をポインタに入れるとヌルポインタになる。
ヌルポインタはどこも指してない無効なポインタであることが保証されてる。
ヌルポインタが全bit0であるかは環境依存。
35:デフォルトの名無しさん
07/04/02 23:45:45
>>34
わかってるんだろうが、その書き方は誤解を招く虞が…。
ポインタが必要な文脈で現れた整数リテラルの0がヌルポインタを意味するのであって、
整数0をポインタとして扱ってもヌルポインタに化けるわけじゃない。
36:デフォルトの名無しさん
07/04/02 23:46:58
>>34-35
どう書いても誤解の可能性は避けられないんだから、
ごちゃごちゃ言わずに C FAQ で済ませとけよ。
37:デフォルトの名無しさん
07/04/02 23:50:34
ヌルポインタて、いくつの数字を入れるとなるの?
38:デフォルトの名無しさん
07/04/02 23:55:00
テキストエディタ使ってC書いてるんだけど、コンパイルするにはどしたらいいの?
コマンドプロンプトで
bcc32もgccも試したけど
内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出る。
何かインストールが必要なん?
39:デフォルトの名無しさん
07/04/02 23:55:40
bcc32はBorand C++
gccはCygwinもしくはMinGWのインストールが必要。
40:デフォルトの名無しさん
07/04/02 23:58:43
0をぬるぽとして扱うと正式に決まってるのはC++だけだったような
41:デフォルトの名無しさん
07/04/02 23:59:00
初心者の俺に教えてほしい。
昔(10年前くらい)、コンパイラってのは高いやつとフリーのやつではうんと差があると聞いたのですが、
今でも、borandや、gccとかじゃやっぱり駄目駄目なんですか?
42:デフォルトの名無しさん
07/04/03 00:00:51
>>40
C FAQ読んでこい
43:デフォルトの名無しさん
07/04/03 00:01:03
別に困らんよ。
何をしたいかによっては差があるだろうけど
だいぶ前からしょぼしょぼなサブセットなんてないでしょ。
44:デフォルトの名無しさん
07/04/03 00:03:47
>>41
コンパイラを買う時代は終わったよ。
最適化性能にはそれぞれ癖があるが、入門レベルじゃ違いなんかわかりゃせん
45:デフォルトの名無しさん
07/04/03 00:05:21
>>41
そもそもコンピュータの性能が10年間で物凄く向上したし、コンパイラの技術も向上した。
Borland C++やGCCも全然問題ない。
そして社会も変わった。
今はMicrosoftすらコンパイラはおろかIDEもフリーで公開している。
もうコンパイラを売るような時代ではなくなった。
まあでもIntel C++はすごいという噂は良く聞くけどな。
46:デフォルトの名無しさん
07/04/03 00:22:12
そうなんですか。
何でも無料になるのも開発者にとって損じゃないですかね?
47:デフォルトの名無しさん
07/04/03 00:40:56
>>46
プログラムを作る動機は金だけじゃない。
金が最終目的だとしても、企業であれば宣伝効果というものもある。
48:ひろゆき@どうやら管理人
07/04/03 00:46:30
>>46
一般の企業やプログラマにとってはむしろ得じゃまいか?
MSとか某は別として。MSとか某の場合は>>47の言うとおり
49:デフォルトの名無しさん
07/04/03 00:48:36
ひろゆきのお尻ゲット
50:デフォルトの名無しさん
07/04/03 00:56:23
何処で聞いたらいいのか分からないのでこちらで
質問させて下さい。
現在就職活動をしていて先日中小メーカーの面接に行ったのですが、
プログラミング経験はあるか、と聞かれました。
社内SEというものを募集しているとのことでした。
その場では無いと答えたのですが、中学校でパソコン部に所属して
いたとき、暇だったので部室にあったシューティングゲームの
プログラムらしきものが書いてあるマニュアルを見ながらtowns(?)
とかいうOSで凄くショボイゲームを作ったことがあるのですが、この
ような経験でもプログラミング経験アリといえるのでしょうか?
…自分でも意味不明なことを聞いていると思うのですが、どなたか
よろしくお願いします。。
51:デフォルトの名無しさん
07/04/03 00:58:47
>>50
それはマ版ネタだとからプログラマー板へ
52:デフォルトの名無しさん
07/04/03 01:07:18
>>50
昔なんてどうだっていい、今、プログラミングをCなりC++なりJAVAなり
なんなりと、現在出来るかどうかだろ。
まぁ、経験ありますと言ったら仕事増えるだけだから
やめとけばいいじゃん
53:デフォルトの名無しさん
07/04/03 01:08:33
だいたい、コンパイラの売上げなんて、Office等の売上げに比べたらたいした額にはならないしね。
だからって、コンパイラ製品自体を売るのをやめて
他の企業がOffice競合製品を開発できないようにすべき、という話には
決してならない。
54:50
07/04/03 01:25:49
スミマセン、プログラマー板で伺ってきます。
でもなんか関係ないみたいですね。。
55:デフォルトの名無しさん
07/04/03 03:32:20
0からはじめるゲームプログラムのページで
スケルトン使ってゲーム作れるまでになったのですが
細かいことが分からないので質問させてください
・スプライトを使って加算合成する方法
・テキストを表示するとフルスクリーンにできなくなるのはなぜか
下は自分のソースのせいかもしれないですが
何か分かることがあればお願いします
56:デフォルトの名無しさん
07/04/03 08:14:12
>>55
情報が少なすぎて何言ってる不明だが
文脈からするに DirectX の話か?
もしそうなら DirectX 関連のスレへ。
57:デフォルトの名無しさん
07/04/03 12:21:23
class A{
public:
static double a;
};
double A::a=10;
int main(void)
{
A x;
x.a=15;
A y;
}
とすると、A yで再びaが10にリセットされてしまいますが、
a=15を維持したままにすることはできないでしょうか?
クラスで共通の変数aを使いたいのですが、
クラスがどこかで作成されるたびに、aの値がリセットされてしまい、困っています。
58:デフォルトの名無しさん
07/04/03 12:36:00
リセットされないよ。どうやって確認したんだ?
59:デフォルトの名無しさん
07/04/03 18:43:19
シラネ
60:デフォルトの名無しさん
07/04/03 19:00:45
ARMコンパイラ(ADS)でnewのオーバーライドをしたいんですが、
「Error: C3009E: 'operator new' must have a return type of 'void*' and have a first argument of type 'size_t'」
こんなエラーが出てしまいます。
実装はこんな感じです。
class base{
static void * operator new( size_t size) {
return malloc_local(size);
}
}
間違いの指摘や、ご存知な事がありましたら教えてください。
61:60
07/04/03 19:02:45
class base{
public:
static void * operator new( size_t size ) {
return malloc_local(size);
}
};
すみません。修正。
62:20
07/04/03 20:30:43
すみません自己解決したと申しましたが未解決ですので
再度ご質問させて下さい。
現在、プロジェクトに(通常)C++クラスファイルを追加して
クラスの中にメソッドを組み込み他メソッドより(ボタンクリックイベント)
@ C_plus2.cpp
A C_plus2.h
@にプログラム本体(メソッド)を記述し、Aにプロトタイプ宣言を
行った上でWindowsForm上のボタンクリックイベントより@に本体のある
メソッドを呼出そうとしているのですが呼出す事が出来ません。
(インテリセンスは通りますがエラーになります。)
どうすれば2ファイル(*.cpp & *.h)に分けたクラスに記載のメソッドを
呼出す事が出来るのでしょうか?
※ヘッダーファイルにメソッド本体を記述すると、ボタンクリックイベント
の内部に通常の呼出しコードを気記述することによりメソッドを呼出せます。
(ヘッダーファイルにメソッドを全て記述すれば他クラスと2ファイル
63:20
07/04/03 20:32:42
『訂正』です。
(ヘッダーファイルにメソッドを全て記述すれば
問題無くボタンクリックイベント内部から@に本体のあるメソッドを呼出す
事が出来ます。)
64:デフォルトの名無しさん
07/04/03 20:58:20
>>60
class base{
public:
void * operator new( size_t size ) {
return malloc_local(size);
}
};
65:デフォルトの名無しさん
07/04/03 21:08:42
>>63
↓こんなんで動いてるけどそうじゃなくて?
○test.h
class CTest{
public:
CTest(){};
~CTest(){};
void debug( char *str);
};
○test.cpp
#include "stdafx.h"
#include "test.h"
void CTest::debug(char *str){
OutputDebugString(str);
}
○XXXDlg.cpp
#include "test.h"
void CXXXDlg::OnBnClickedOk()
{
CTest hoge;
hoge.debug("OK\n");
//OnOK();
}
66:60
07/04/03 21:18:22
>>64
static削っても、同様のエラーが出ます。
class base{
public:
void * operator new( size_t size ) {
return 0;
}
};
malloc_local()に起因してるのではないかと思い、
してみましたが、これも変わらず。
67:C++初心者?
07/04/03 21:23:47
スレを探してみたのですがなさそうなのでここに書かせていただきます。
只今、VC6を使用してPro*Cのプログラミングをしているのですがビルドすると不要なBreak文がありますとエラーが出てしまいます。
プログラムの流れとしては
@DBからデータを取得する
A取得したデータをもう片方のテーブルと差分を取り対象のデータを取得する。
BAで取得した差分のデータをワークテーブルにインサートする
今の問題の現象はBでおきています。
うまく説明できていないと思うのですが、何かヒントとなるようなことを教えていただけるとありがたいです。
DBはオラクル9を使用しています。
68:デフォルトの名無しさん
07/04/03 21:37:36
ストアドならDB板で聞けばいいんじゃね
69:20
07/04/03 21:39:00
>>65さん
解決しました。どうもありがとうございます。
どうやら #include <hoge2.h> の記述位置を using 直下(同一スコープ)
に記述していたことが原因でした。
本当にありがとうございます^^;
70:デフォルトの名無しさん
07/04/03 22:13:07
質問させてください。
いま、プログラムの勉強もかねて作ってみたいPGがあるのですが、C#で作ったほうがよいのか、
C++で作ったほうが良いのか迷っております。
作ってみたいPGとは、オンラインゲームの麻雀ゲームの支援ソフトです。
既存の画面だとどうにもやりづらくて、それならば勉強もかねて、
専用のGUIを作成し、このボタンを押したらこの牌をすてるだとか、
自分のやりやすいようにGUIを作成してみたいなと、思ったわけです。
色々調べてみたのですが、C#というのはC++とVBの良いところを持ち合わせたものだとか
というのはわかったのですが、ではこのようなPGを作ったときの相性はどちらが
よいのだろうと疑問がでました。
また、WinnyはC++で作成されており、なぜC#ではつくられていないのだろうという
疑問もあります。
もし、お分かりになる方がいらっしゃれば、ご教授願えないでしょうか?
71:デフォルトの名無しさん
07/04/03 23:10:23
> オンラインゲームの麻雀ゲーム
ってのがそもそもどういうのかによるかな。
場合によってはUWSCみたいなマクロのがよい。(非GUIだけど)
作りたいものってのは置いといて、言語の勉強ならC#でいい。
C++は悪い意味で多くを受け入れすぎ。先にモダン言語に矯正されとくといい。
> また、WinnyはC++で作成されており、なぜC#ではつくられていないのだろう
C++は一番融通が利くからね。RADからアセンブリまできめ細かく。
ということで、C#ならスレ違いになるので他で勉強してください。
72:デフォルトの名無しさん
07/04/04 00:40:52
>>67
Pro*CはCじゃないからここで回答は得られにくいかと。
つーか、折角Oracleに大枚叩いているんだろうから聞けばいいじゃん。
73:デフォルトの名無しさん
07/04/04 01:01:07
>>70
C#でもC++でも、使いこなせるほうで作れば良いじゃん。
っていうか、勉強がてらか。
気楽にやれると思いきや結局DllImportで
api使う事になっちゃうC#?
mfcを使ってみてはむかついて、クラス設計で悩んで
頭がクラクラしちゃうC++?
メッセージ毎の処理と、api群や自作関数とたわむれて
しまいに何の処理書いてるのかわからなくなるC?
ま、C#で良いか。
>WinnyはC++で作成されており
>なぜC#ではつくられていないのだろう
C#登場2001年Winny2002年5月に公開
74:デフォルトの名無しさん
07/04/04 13:18:34
ofstreamでは書き込みバッファの容量はどこで指定すればよいのでしょうか?
75:デフォルトの名無しさん
07/04/04 16:01:07
setvbuf()と同じような物を考えているんならそういうのは無いよ
76:デフォルトの名無しさん
07/04/04 16:07:00
>>74
streambuf::pubsetbuf()
77:デフォルトの名無しさん
07/04/04 16:19:51
>>75
C++ストリームはCのFILE*でできたことなら
何でもできるようになっていると思って間違いない
78:デフォルトの名無しさん
07/04/04 18:00:11
*関数ってどういう意味?
あとUNIX(XWINDOW)とVCのchar型って何バイト違うんですか?
2個目の質問の解説等が日本語で載ってるサイト知ってたら教えてください。
79:デフォルトの名無しさん
07/04/04 18:33:35
>>78
1. 式の中ならあってもなくても同じこと。
URLリンク(www.kouno.jp)
2. sizeof (char)は常に1と定められている。
1バイトが8ビットとは限らないが、それは基本的にCPU次第。
URLリンク(www.kouno.jp)
80:デフォルトの名無しさん
07/04/04 19:52:47
>>78
関数ポインタのことか?
81:デフォルトの名無しさん
07/04/04 19:59:31
char *Func();
みたいのを*Funcで一塊だと思ってるとか?
82:78
07/04/04 20:03:16
>>79
レスどうもです。
1なんですが、宣言で*関数とあります。戻り値は関数の中でchar *r
と宣言されたものがreturn rで返ってます。
使われる場合は
i=*関数;
ってなってます。
ようするに関数に*がついてるからiにはrの中身が代入されるんですか?
ポインタと同じで
紹介してもらったHP見たんですが、質問の仕方が悪かったため
違う様な気がします…
情報小出しにして申し訳ないですがもう一度教えてください。
83:デフォルトの名無しさん
07/04/04 20:34:30
int hoge() //返り値はint型
{
int ret=うんたら;
return ret;
}
char * hoge2() //返り値は(char *)型
{
char *ret=うんたら;
retern ret;
}
何の違いもない。
84:78
07/04/04 21:30:02
>>83
ありがとう!!
85:デフォルトの名無しさん
07/04/04 21:34:46
先生、>>83の下の例はちょっとまずいと思いまーす
86:デフォルトの名無しさん
07/04/04 21:37:36
場合によってはまずいが、全ての場合でいけないわけじゃなかろう
87:デフォルトの名無しさん
07/04/04 22:26:13
どこがまちがえているのでしょうか?ループします
#include <stdio.h>
#include <dir.h>
main(){
char b[1024];
struct ffblk Fd;
do{
if( findfirst("*",&Fd,FA_RDONLY|FA_HIDDEN|FA_ARCH)==EOF)break;
printf("%s\n",Fd.ff_name);
}
while(!findnext(&Fd));
}
88:デフォルトの名無しさん
07/04/04 22:27:04
そりゃぁ、毎回findfirst()したらいつまで経っても終わらん罠。
89:デフォルトの名無しさん
07/04/04 22:29:46
>>88
ありがとうございます
わかりました
90:824
07/04/04 22:50:26
C++.netでは文字列を連結したい場合
Debug::WriteLine("A","の値は","ホゲです。");
という風にしか連結することは出来ないのでしょうか?
C#の場合だと
Debug.WriteLine("A" + "の値は" + "ホゲです。");
といった感じで連結出来るのですがC++.netでもお手軽な連結
方法は何かありますか?(VS2003利用です。)
91:デフォルトの名無しさん
07/04/04 22:57:27
それくらいしかないと思う。
WriteLine以外ではString::ConcatとかStringBuilderを使っておけ。
ネイティブなstd::wstringに変換する関数を作ってやるなんて方法も考え付くけど、
それはそれで色々制限があって面倒だろう。
ちなみにVC++ 2005 (C++/CLI)だとマネージドでも演算子多重定義が使えるようになった。
92:デフォルトの名無しさん
07/04/04 23:39:49
>>91
そうですか。残念ですが諦めます。
やっぱりC#が一番便利です。
93:デフォルトの名無しさん
07/04/04 23:45:48
配列の配列を参照渡しするとき
どうやってわたせばいいんでしょうか
94:デフォルトの名無しさん
07/04/04 23:51:27
typedef int ARR[5][5]
void f(ARR&);
ARR a;
f(a);
95:デフォルトの名無しさん
07/04/05 09:15:38
>>94
配列の配列といっても二次元配列じゃなくて
96:デフォルトの名無しさん
07/04/05 10:31:05
Turbo C++のC言語の使い方がまったくわからなくて困ってます
BccDevやVisualC++なら
#include <stdio.h>
//---------------------------------------------------------------------------
int main(void)
{
printf("hello");
return 0;
}
//---------------------------------------------------------------------------
を保存してデバッグなしで開始するとウィンドウが現れてちゃんとhelloと表示されます。
ところがTurboでコンソールアプリケーションでC言語を選び
上記の操作をすると一瞬ウィンドウが開いたかなと思ったら即閉じてしまうんです
hello だけ表示できればあとは何とかなると思いますがそこまで教えていただけませんか?
97:デフォルトの名無しさん
07/04/05 10:46:52
>>96
キー入力、時間待ちをいれろ
98:デフォルトの名無しさん
07/04/05 11:36:42
>>97
#include <stdio.h>
int ch;
int main(ivoid)
{
printf("pl");
ch=getchar() ;
return 0;
}
getchar を使ってwindowを表示しEnterを押すと消えるようになりました
とりあえずしばらくこれでやってみます。
ありがとうございました
99:デフォルトの名無しさん
07/04/05 11:49:43
C++を使ってのWeb開発を行うことになったんですが可能なのでしょうか?
100:デフォルトの名無しさん
07/04/05 11:51:54
可能
101:デフォルトの名無しさん
07/04/05 15:11:46
インライン関数とstaticの違いって何ですか?
インラインは関数のみに使うもの?
それともCとC++の違いですか?
102:デフォルトの名無しさん
07/04/05 15:17:05
staticは外部変数と内部変数と関数のそれぞれにおいて少しずつ意味が違う。
inlineは関数にのみc99やc++で使用できる。
103:102
07/04/05 16:12:31
>>102
staticで外部変数ならそのファイルでのみ有効
内部変数ならその関数の内部のみで有効
関数はそのファイルでのみ有効
ということですか。ありがとうございます。
104:102
07/04/05 16:13:20
自分は101です…
間違った
105:デフォルトの名無しさん
07/04/05 21:13:20
WinXP Pro VS2005の開発環境を持っている者からの質問です。
信頼できる知人からVC++6.0で動いているソースコードを頂きました。
実際、コンパイルできるところと、実行できるところは確認済みです。
そのコードをVS2005に移植してみようと思い、コンパイルをかけてみたのですが、
CString CxxxDoc::Func()
{
//中略
return -1;
}
のようなコードがありました。VC++6.0Proでコンパイルが通っている事を確認したので、
ソースに間違いはないと思っていたのですが……、これは一体どういうことでしょうか。
VC++6.0では、こんなコードが許されるのでしょうか?
知人の環境はXP Pro VC6.0 Proです。
よろしくご解答お願いします。
106:デフォルトの名無しさん
07/04/05 21:17:13
#define ishigh(c) ((c) >= 0x80)
というマクロが定義してあるのですが、コレどういう意味なのでしょうか?
こんなマクロ初めてみた上にishigh(c)なんてソースの中のどこにもなくて
困っています。
107:デフォルトの名無しさん
07/04/05 21:21:39
>>105
VC++ 6のやつの代わりにVC++ 2005 (ATL/MFC 8)のCStringTのコンストラクタを見てみたけど、
URLリンク(msdn2.microsoft.com)(VS.80).aspx
有り得そうな可能性としては、次のどちらか。
•_variant_t1つを引数に取るもの
•char/wchar_t1つとその長さ(デフォルト引数=1)を取るもの
標準C++では複数回の暗黙の変換はやらないことになっており、
VC++ 2005がそれに準拠するようになったからだと思う。
>>106
charが8ビットだとして、最上位ビットが立っているかどうかということだろう。
108:デフォルトの名無しさん
07/04/05 23:19:08
struct Test{
bool a;
bool b;
};
これが定義されてて
cppファイルに
Test func(Test t){
return t;
}
こういう関数を作りました
そして.hファイルに
Test func(Test t);
と定義しても宣言構文エラーになっちゃいます
どうしたらいいでしょうか
わかりづらくてすいません
109:デフォルトの名無しさん
07/04/05 23:21:41
Test func(Test t);
↓
struct Test func(struct Test t);
110:デフォルトの名無しさん
07/04/05 23:22:03
>>108
そのTest構造体が定義されているのはどこだ?
111:デフォルトの名無しさん
07/04/05 23:23:22
>>109
ヒント:cppファイル
112:デフォルトの名無しさん
07/04/05 23:27:56
Common.hに.hファイルは全部includeしてあって
cppファイルは全部Common.hをincludeしてあるんですが
Test構造体が定義してあるのは他の.cppファイル.hファイルとは違う.hファイル
です
そこに問題があるんでしょうかね
113:デフォルトの名無しさん
07/04/05 23:30:20
>>112
エラーメッセージをコピペして下さい
114:デフォルトの名無しさん
07/04/05 23:35:30
エラー E2141 C:\My Documents\Project3\Npc.h 112: 宣言の構文エラー
ふたつ定義すると
エラー E2141 C:\My Documents\Project3\Npc.h 112: 宣言の構文エラー
エラー E2238 C:\My Documents\Project3\Npc.h 114: 'MAP_SCENE' の宣言が複数見つかった
エラー E2344 C:\My Documents\Project3\Npc.h 112: 一つ前の 'MAP_SCENE' の定義位置
エラー E2141 C:\My Documents\Project3\Npc.h 114: 宣言の構文エラー
115:デフォルトの名無しさん
07/04/06 00:24:59
インクルードガードがないのかな
116:デフォルトの名無しさん
07/04/06 01:01:32
とりあえずCommon.h内に
struct Test;
の行を入れてみてから、もう一度
117:デフォルトの名無しさん
07/04/06 07:43:18
Common.hにstruct Test;入れたら大丈夫でした!
でも参考にしている人のソースにはそんな文ないんですが
どうしてなんでしょうか
118:デフォルトの名無しさん
07/04/06 07:51:43
ヒント:
インクルード順序
119:デフォルトの名無しさん
07/04/06 09:52:10
でも順序がある時点でヘッダの不具合だよな
120:デフォルトの名無しさん
07/04/06 10:47:30
初歩的な疑問があるんですが、お教え願えないでしょうか。
環境はVS.NET 2003です。
MSDNチュートリアルを見ながら、ATL のActiveX コントロールを作ってみたんですが、dll の容量が324Kbでした。
同様の物を MFC で作った ocx の容量は144Kbでした。
てっきり ATL の方が小さくなると思ってたんですが...
ひょっとして、MFC の方は別途必要な物があるんでしょうか?VBRUNJPなんとかみたいに。
どうかよろしくお願いします。
121:デフォルトの名無しさん
07/04/06 11:30:05
>>120
静的にリンクする(ルーチンを自分で持つからでかくなる)か
dllを使う(dllを呼ぶから自分は小さいが実行時に呼ぶdllが必要)かは
ATL, MFCともにプロジェクトのプロパティで設定できる。
デフォだとATLは静的リンクでMFCは共有dllだったかも。
MFCで共有dllにしたときに必要なdllは、vectorとかでパッケージになってます。
122:デフォルトの名無しさん
07/04/06 21:09:15
CでCGI作ろうとしてるんですが、普通にコンパイルすると生成される実行ファイルは
.exeになってしまいます。exeでもcgi-binのディレクトリに置けばCGIとして実行されますが
URLの最後がexeだと怪しいファイルをDLさせようとしているのだと勘違いされるかもしれないので
拡張子をCGIにしたいんですけど、どうすればいいんですか?
Visual Studio.net使ってます
123:デフォルトの名無しさん
07/04/06 21:17:34
ren *.exe *.cgi
124:デフォルトの名無しさん
07/04/06 21:22:46
>>123
すみません、それはどこに記述すればいいんですか?
125:デフォルトの名無しさん
07/04/06 22:22:05
コマンドプロンプト
126:デフォルトの名無しさん
07/04/07 00:32:34
グローバル変数について、気になったことがあるので質問させてください。
「グローバル変数の作成順番というものは、存在するのでしょうか?」
(例えば、ポインター変数の方が優先的に作られるとか。)
(下記のプログラムを例とする):
なぜ、このような質問をしたかというと、
もし、グローバル変数の順番が決まってないと、
先にhoge g_obj;が生成された場合、
g_objのコンストラクタ内でまだ作成されていないg_pが使用されることに
なってしまい、危ないと思ったからです。
//グローバルな場所
int *g_p=0;
hoge g_obj;//オブジェクトを作ることで、このクラスのコンストラクタ発動
//hogeクラス
class hoge{
hoge(){//コンストラクタ内
g_p = new int;//g_pを使う
}
};
どうかよろしくお願いします。
127:デフォルトの名無しさん
07/04/07 00:44:22
ググればすぐに出る。
128:デフォルトの名無しさん
07/04/07 00:54:36
>>127
初心者にそれはないだろ、取り合えず、おまい、氏ね
129:126
07/04/07 01:32:14
>>127
グローバル変数 順番 などで一通り検索して、見つからなかったので
ここで質問させてもらいました。
意地悪言わないで、どうかご教授お願いできないでしょうか?
130:デフォルトの名無しさん
07/04/07 01:36:31
×ご教授
○ご教示
知らない言葉を無理して使わないほうがいい
131:デフォルトの名無しさん
07/04/07 01:40:49
ぐぐればすぐ出てくる
グローバル変数の初期化順序は不定
132:デフォルトの名無しさん
07/04/07 01:40:51
非ローカルなstatic変数の初期化順には何の規定もないので、
初期化順に依存するコードからは、鼻から悪魔が出る可能性がある。
現実には、「初期化コードを必要としない(POD)データ」は
最初から実行ファイルに含められて(必要なら開始時にコピー)いるし
「初期値が与えられてない変数」は、スタートアップルーチンで0に埋められる。
133:126
07/04/07 02:16:22
>>130
勉強になりました^^;
>>131
>>132
グローバル変数 順序 で検索したら、出てきてくれました。
順序が不定ということがはっきりわかりました。
これで安心して眠れます。
ご回答ありがとうございました!
134:デフォルトの名無しさん
07/04/07 03:38:38
zero initialization
static initialization
dynamic initialization
の順に初期化される(らしい)ので依存できたりできなかったりする
135:デフォルトの名無しさん
07/04/07 08:10:16
String s;
//char s[50]; いつもはこっちでした。
char* str="hello";
sprintf(s.c_str(),"%s",str);
OutputDebugString(s.c_str());
buiderの環境になりまして、動的な感じで文字列の
長さを扱いたいと思ってます。
上記のようにすると、"hello"が出力されましたが、
こういう使い方しても大丈夫でしょうか?
136:デフォルトの名無しさん
07/04/07 08:54:19
>>135
String s が別のものならばなんともいえんけど、
stlのstringだったら、const cahr *c_str() だと思うからコンパイル時にエラーとか警告が出てない?
s = str で十分だろう。
137:デフォルトの名無しさん
07/04/07 23:03:52
>>135
Stringって何。typedef std::string String とかやってんの?
だとすると、
sprintf(s.c_str(),"%s",str);
こんなことやっちゃ駄目。
sprintf()には十分なサイズの書き込み可能な領域を指す非constなcharポインタを
渡さなければならない。
sprintf()はもともとC++ではその型安全性の無さによって好ましくないと
言われている(snprintf()ではなくsprintf()を使うなら、バッファ
オーバーフローの問題もある)。
代表的な代案は
1) std::sstreamを使うか、
2) printf-likeにやりたいなら、非標準だがboost::formatなり類似のものを使う
ってとこだ。
138:デフォルトの名無しさん
07/04/08 00:13:18
BCBのStringは、AnsiStringのtypedef。
まあ、c_str()がconstなchar*を返す点は全く同じだが。
139:デフォルトの名無しさん
07/04/08 00:39:56
SirectShow 始めたばかりです。ビデオプレーヤーとか作って楽勝じゃーて思ってですね。
いっちょフィルターでも作ってみるかとググってみたら、理学博士の方がソース公開してるの見つけました。
やったーと思って目を通してみたんですが...むずい!
即効寝ちゃって今だに鬱の自分。。。氏んだほうがいいですか?
ソース URLリンク(open.nime.ac.jp)
140:デフォルトの名無しさん
07/04/08 04:33:31
>>139
SirectShowだろうがDirectShowだろうが、やってみて
壁に当たってあきらめようと思ったり、頭ん中真っ白になって
もうわけわからんってなったりしても、やり続ければ実は実る。
Cを勉強しだした頃を思い出せ、ポインタや構造体や再帰やetc
いろいろ壁にぶち当たってきただろ、それでも続けてきたから
今があるんだろうが。
時計の針だぞ、前に進まなきゃ捨てられるんだよ。
でも寝とけ。
俺はC#で苦戦中じゃ。
141:デフォルトの名無しさん
07/04/08 09:31:16
>>140
寝たらちょっと復活。気長にやります。アリ。いっぺんに全部理解しようとしてた。神か>>141
C#か。FrameWork 覚えるので苦戦してるのかな。ガンガレ、でも寝とけ。
142:デフォルトの名無しさん
07/04/08 14:04:10
Visual Studio.NET使ってます
Debugモードだとビルドできるのですが
Releaseモードにするとエラーがでてビルドできません
しかも、そのエラーは自分のソースじゃない部分で起きているんです
未解決の外部シンボル _GUID_PerfMasterTempo が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
こういう感じのエラーがたくさん出てます
どうすればいいんですか?
143:デフォルトの名無しさん
07/04/08 15:08:40
privateメンバーに構造体のポインタを宣言
コンストラクタでnewによりメモリを割り当てて、以降メンバー関数で使いたいのですが
何故か割り当てたはずのメモリが解放?されている模様。
(Access Violationエラーになり、ポインタのアドレスも0xcdcdcdcdに)
こういう使い方って出来ないのでしょうか?
144:デフォルトの名無しさん
07/04/08 15:13:27
何の問題もありませんが。
再現する最小のソースを晒して味噌。
145:デフォルトの名無しさん
07/04/08 15:24:39
typedef struct {
int a;
int b;
} _ST_KIHON;
class Myclass
{
private:
_ST_KIHON *m_stKihon;
public:
Myclass();
~Myclass();
void Set(int, int, int);
};
Myclass::Myclass()
{
_ST_KIHON *m_stKihon = new _ST_KIHON[20000];
memset(m_stKihon, 0, sizeof(_ST_KIHON) * 20000);
}
Myclass::~Myclass()
{
delete []m_stKihon;
}
void Myclass::Set(int a, int b, int n)
{
m_stKihon[n].a = a;
m_stKihon[n].b = b;
}
146:デフォルトの名無しさん
07/04/08 15:25:18
(改行が多すぎると怒られるので分割しました。)
void main()
{
Myclass *cmy = new Myclass;
cmy->Set(1,2,0);
}
再現するソースを載せます。環境はVC6です。cmy->Setでアクセスする際、落ちてしまいます。
147:デフォルトの名無しさん
07/04/08 15:35:00
> _ST_KIHON *m_stKihon = new _ST_KIHON[20000];
ローカル変数に突っ込んでどうする。
148:デフォルトの名無しさん
07/04/08 15:36:00
ワロッシュw
149:デフォルトの名無しさん
07/04/08 15:40:49
え?
privateに宣言しているポインタではなくローカルで宣言していることになってるのか?w
150:デフォルトの名無しさん
07/04/08 15:52:01
×_ST_KIHON *m_stKihon = new _ST_KIHON[20000];
○m_stKihon = new _ST_KIHON[20000];
151:デフォルトの名無しさん
07/04/08 16:32:10
>>150
ありがとう
152:デフォルトの名無しさん
07/04/08 17:11:28
>>150
初期化子使えよ
153:デフォルトの名無しさん
07/04/08 17:28:06
>>152
どっちでも一緒だよ
154:152
07/04/08 17:44:05
>>153
そうだよ、単に気分の問題。
155:150
07/04/08 18:12:10
>>152
最低限の修正にしてみた。
156:デフォルトの名無しさん
07/04/09 02:34:06
vc++を勉強しています
関数呼び出しのときアドレス呼び出しをすると呼び出し元の
変数の値を呼び出し先の関数内部で書き換えることができるのは理解しています
同じようにポインタ変数を書き換えたいのですが、どうやってアドレス呼び出ししたらいいのでしょうか?
よろしくお願いします。
157:デフォルトの名無しさん
07/04/09 02:46:10
>>156
char * foo;
someFunction(& foo);
ということをしたいのなら、
void someFunction(char ** bar);
158:デフォルトの名無しさん
07/04/09 02:55:17
>>157 なるほど!ありがとうございました。
159:デフォルトの名無しさん
07/04/10 03:36:50
メンバーイニシャライザで0を指定するとどうなるんですか?
160:デフォルトの名無しさん
07/04/10 03:54:30
日本語でおk
161:デフォルトの名無しさん
07/04/10 08:24:08
include <stdio.h>
int main (void)
{
unsigned int ch;
ch = 'あ';
printf("%c\n",ch);
return 0;
}
で「あ」が表示されないのですけれど、
どうすれば表示されるのでしょうか?
162:デフォルトの名無しさん
07/04/10 08:36:56
#include <stdio.h>
int main (void)
{
char ch[] = "あ";
printf("%s\n",ch);
return 0;
}
163:デフォルトの名無しさん
07/04/10 08:38:09
#include <stdio.h>
int main (void)
{
char* ch = "あ";
printf("%c%c\n",ch[0],ch[1]);
return 0;
}
164:デフォルトの名無しさん
07/04/10 08:39:27
#include <stdio.h>
int main (void)
{
char* ch = "あ";
printf("%c%c\n",*ch,*(ch+1));
return 0;
}
165:デフォルトの名無しさん
07/04/10 08:42:29
#include <stdio.h>
int main (void)
{
int ch = 'あ';
printf("%c%c\n",ch&255,ch>>8);
return 0;
}
166:デフォルトの名無しさん
07/04/10 08:49:09
これは酷い荒らし
167:デフォルトの名無しさん
07/04/10 10:35:11
if ( lh == LOW){
if ( c == ESC){ code = JIS}
else if ( isspace(c) || isprint(c)) { }
else if ( c >= 0x80{
if ( code == JIS) return BIN;
lh = HIGH;
}
else { return BIN;}
}
というコードで
else if ( isspace(c) || isprint(c)) { } は
条件式が真の場合何も実行されなくて、
このif ( lh == LOW)のブロックから何も返さず抜けるのでしょうか?
それと
if ( code == JIS) return BIN;
lh = HIGH;
の部分はcodeにJISが代入されていた場合return BINが実行されて、関数が終了するから
lh = HIGH;は実行されないんでしょうか?
168:デフォルトの名無しさん
07/04/10 12:53:55
1) はい
2) はい
169:デフォルトの名無しさん
07/04/10 12:55:45
>>168
ホントですか?
まったくあてずっぽうに解釈したのに俺ってセンスいいのかな?
170:デフォルトの名無しさん
07/04/10 12:57:33
センスとか以前の問題だろ。
171:デフォルトの名無しさん
07/04/10 15:18:43
色々突っ込みたいが敢えて何も言うまい。
172:デフォルトの名無しさん
07/04/10 15:38:13
↑こういう思わせぶりなこと言う人いるよねぇ。
こんな事言って何も言わないなら最初から何も言わなきゃいいのに。
173:デフォルトの名無しさん
07/04/10 17:11:08
そういうお前の書き込みに、意味はあるのか?
174:デフォルトの名無しさん
07/04/10 17:12:15
>>173の書き込みよりはあると思うな。
175:デフォルトの名無しさん
07/04/10 19:07:42
ソースファイルでメンバ関数を書くときに
親クラス名::メンバと書かなければいけないわけですが、
この親クラス名が長けりゃを何回も書くのが面倒なので#defineマクロつかって短くしちゃう
ってのはありなんでしょうか?
元に戻すとしても、検索置換一発なんであまり悪く無いとは思うんですがどうなんですか?
176:デフォルトの名無しさん
07/04/10 19:09:28
やったこと無いからできるんか知らんけどできるならありだろ
ていうか毎度クラス名タイプしてんの?
普通コピペだと思ってた・・・
177:デフォルトの名無しさん
07/04/10 19:09:45
>>175
IDEの支援機能 or コピペでいいじゃん
178:デフォルトの名無しさん
07/04/10 19:16:40
できるできないは別として、そんなソースコード読みたくない。
あくまで自分用ならやってみてもいいとは思うけど。
179:デフォルトの名無しさん
07/04/10 19:19:51
やっぱり読みにくくなるんですか?
慣れの問題以外で何か理由とかあるんでしょうか?
180:デフォルトの名無しさん
07/04/10 19:36:30
あるていど長くても分かりやすい名前なら問題ない。
長い上に意味が不明瞭で、しかも似たような関数や変数が点在したりすると目も当てられない。
181:デフォルトの名無しさん
07/04/10 20:31:16
>>175
せめてマクロよりはtypedefを使え
182:デフォルトの名無しさん
07/04/10 20:33:07
>>181
ちょw
183:デフォルトの名無しさん
07/04/10 21:09:51
>>181
マジすか!
184:デフォルトの名無しさん
07/04/11 03:52:55
定義の部分なんだから変に略そうとするなよ。
185:デフォルトの名無しさん
07/04/11 05:08:58
Cだけど、関数の仮引数を#defineしちゃうことはあったな。
そのときは関数ポインタを使う必要があって、同じ引数を持つ関数が10個くらいあったから。(しかも長い)
186:デフォルトの名無しさん
07/04/11 05:14:36
構造体にして渡すという方法は思いつかなかったのか
187:デフォルトの名無しさん
07/04/11 08:54:00
ヘッダにinlineとして定義できないような長い関数は作るべきではない
ゆえに.cppは不要
188:デフォルトの名無しさん
07/04/11 09:25:21
それ、このスレのネタじゃないから。
189:185
07/04/11 15:11:58
外部から呼び出す関係で、引数が指定されてた。
今にして思えばラッパ関数でも作ればよかったんだが。
でも、引数が多くなった時に構造体使うのってなんか好きになれない。
あ、複合リテラル使えばいいのか……C99対応してないけど……。
190:デフォルトの名無しさん
07/04/11 23:52:46
char **namelist;
これを関数に渡して中身を更新するようにしたいのですが、
引数の指定や渡し方がいまいち分かりません。
誰かアドバイスおねがいします
191:デフォルトの名無しさん
07/04/11 23:56:13
どう更新するのか分からんので何とも言えない
192:デフォルトの名無しさん
07/04/12 00:02:12
関数の中でダブルポインタに配列を作成して、
その配列のアドレスを**namelistに返したいと思っています。
193:デフォルトの名無しさん
07/04/12 00:13:14
ダブルポインタってなんですか?
194:デフォルトの名無しさん
07/04/12 00:18:31
えと、私の持ってる本では「ポインタのポインタ」=「ダブルポインタ」みたいなことが書いてあったので、
その言葉を使用しました
195:デフォルトの名無しさん
07/04/12 00:40:17
>119
>関数の中でダブルポインタに配列を作成して、
>その配列のアドレスを**namelistに返したいと思っています。
そのまま渡せばいいんじゃないの?
いいから書いた関数をあっぷしてみ。
じゃなければ呼び出し側をあっぷしてみ。
話はそれからだ。
196:デフォルトの名無しさん
07/04/12 03:27:00
>>192の質問に近いのですが、私もおそらく同じ問題に直面しています。
main()
{
STAT stat[5];
func(stat);
}
func(STAT *stat[])
{
for(int i=0;i<5;i++)stat[i]->menber1=1;
}
上のように、構造体STATを要素数5の配列で宣言して、
その中身を関数funcで操作したいのですが、エラーがでてしまいます。
(上のままだと「STAT * 型は STAT ** 型に変換できない」という具合でエラーがでます)
これはどこが間違っているのでしょうか・・・よろしければご助言お願いします。
197:デフォルトの名無しさん
07/04/12 03:55:41
>>196
STAT型のポインタを保持する配列statの中身はSTAT*だから
STAT stat[i]って宣言だとstat[i]の中身はSTAT型そのものになってしまう
試しにうちの環境で適当にSTAT定義して、STAT* stat[5];って宣言したら通ったから
多分あってると思う!!
198:デフォルトの名無しさん
07/04/12 04:14:35
>>196
呼び出し元で STAT stat[5]; と宣言するなら func(STAT *stat)でstat[5]の中身を操作できる。
func(STAT *stat) { for(int i=0;i<5;i++)stat[i].menber1=1; }
ポインタを2重に使わなければいけないのは次のようなケース。
func(STAT **stat) {
int i;
*stat = malloc(sizeof(STAT)*5);
for (i=0; i<5; i++) (*stat)[i].menber1 = 1;
}
main() {
int i;
STAT *stat;
func(&stat);
for (i=0; i<5; i++) printf("%d\n", stat[i].menber1);
}
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5372日前に更新/148 KB
担当:undef