トップページ⇒tech
1001コメント297KB

スレを勃てるまでもないC/C++の質問はここで 10

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/05/14(木) 20:35:36
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
http://pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
http://pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
http://pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
http://pc12.2ch.net/test/read.cgi/tech/1240022781/
0153デフォルトの名無しさん2009/05/19(火) 21:59:32
OOPで作るなら、全部オブジェクトでつく霊
0154デフォルトの名無しさん2009/05/19(火) 22:10:05
>>152
ありがとうございます
作りながらそういう分野も勉強してみます
0155デフォルトの名無しさん2009/05/20(水) 00:50:51
float型の変数の値をRS-232で送りたいので8bitずつに分けたいんですが、どうすればできますか?
ビットシフトや論理積とろうとしてもエラーがでてしまいます。
0156デフォルトの名無しさん2009/05/20(水) 00:52:50
union {
flaute fdat
struct {
char cdat[4];
}
} udat;
0157デフォルトの名無しさん2009/05/20(水) 01:28:14
ありがとうございます。unionで出来ました。unionってこう使うものだったんですね
でも、何故structでchar cdat[4]を括ってるのか分かりません。何故ですか?
0158デフォルトの名無しさん2009/05/20(水) 03:47:29
IDAという解析ツールのver5.2の体験版が欲しいんですが、誰か持ってませんか?
0159デフォルトの名無しさん2009/05/20(水) 04:17:27
製品版買え
0160デフォルトの名無しさん2009/05/20(水) 09:08:34
>>157
別に括りたくなければ括らなくていいよ。それと、unionを使うことは環境依存という修羅の道に進むことだと言うこともお忘れなく。
# 尤も、float値をバイナリのままシリアル伝送しようと言う時点で既に修羅の道だけど。
0161デフォルトの名無しさん2009/05/20(水) 09:41:13
>>155
memcpyでいいじゃん
0162デフォルトの名無しさん2009/05/20(水) 09:42:14
int i = *(int*)&f;
0163デフォルトの名無しさん2009/05/20(水) 09:45:50
>>161
このケースでどのようにmemcpy()を使うのか、詳しく。
0164デフォルトの名無しさん2009/05/20(水) 09:54:42
できた

unsigned char c[sizeof(float)];
float f;
f = 10000000.0f;
memcpy(c, &f, sizeof(f));
for (int i=0; i<sizeof(c);i++) {
printf("%#x,", c[i]);
}
0165デフォルトの名無しさん2009/05/20(水) 10:13:59
memcpyしなくてもできた
float f;
f = 10000000.0f;
for (int i=0; i<sizeof(f);i++) {
printf("%#x,", ((unsigned char*)&f)[i]);
}
0166デフォルトの名無しさん2009/05/20(水) 10:21:42
>>124
団塊世代の上司ってそんな感じのやつが多いよなあ。
解りもしないくせに説明しろだの言ってくるから困る。
解るためには自分で理解しようという努力が必要なのにその努力もせずに、
自分が理解できないのは説明しているやつが悪いからだ、と責任の押しつけまでしてくることもある。
んで結局は他の何人かが良いと思うか悪いと思うか聞いて直感で判断するわけなんだが、
解らないなら最初からそうしろ、と思うわけなんだよ。
結局のところ、団塊世代は対抗意識が非常に強くて教育者あるいは指導者しての能力が致命的に欠落していると言わざるを得ない。
0167デフォルトの名無しさん2009/05/20(水) 10:25:30
ろくに説明もできないのに何言ってんだか。
内容が知りたいわけじゃなくて、当人がちゃんと理解してるか判断するために
説明させてるんだよ、たぶんw。
0168デフォルトの名無しさん2009/05/20(水) 10:33:30
新しい暗号技術でも開発しろというのか?
0169デフォルトの名無しさん2009/05/20(水) 10:45:23
>>167
つまり部下を信用していないということか。
社内にまで敵を作って大変ですね。
どうせムズカシイ理論とかは理解できないんだから、せめて成果で判断すりゃいいのにね。
最初は小さいことから成果を積ませて、だんだん大きいことをやらせれば良いのに。
0170デフォルトの名無しさん2009/05/20(水) 11:08:12
>>164>>165
わざわざコピーする理由は? 元質は転送が目的なんだから、コピーしなければいけないなんて要件ないよね。
0171デフォルトの名無しさん2009/05/20(水) 11:12:52
>>170
だからコピーやめたやーん
0172デフォルトの名無しさん2009/05/20(水) 11:13:57
わざわざunionにする理由は? 元質は転送が目的なんだから、unionにしなければいけないなんて要件ないよね。
0173デフォルトの名無しさん2009/05/20(水) 11:17:51
で、コピーするコストを掛ける理由は?
0174デフォルトの名無しさん2009/05/20(水) 11:18:39
頭悪いな
0175デフォルトの名無しさん2009/05/20(水) 11:21:20
またメモリ節約厨か
0176デフォルトの名無しさん2009/05/20(水) 11:22:11
>>173
charの配列にコピーすれば取り出せるんじゃね?
って思ったけど、じゃあcharにキャストすればいいんじゃね?
という具合に思考が遷移したんだよ。
ごめんよ。
0177デフォルトの名無しさん2009/05/20(水) 12:05:38
>>167
いや、技術的に正確かどうかなんてどうでもいいんだよ。
納得させられるかどうかだけが問われる。
0178デフォルトの名無しさん2009/05/20(水) 12:08:56
>>177
だから、単に自分の権威を見せつけたいというのと対抗意識の現れでしかないんだよ。
0179デフォルトの名無しさん2009/05/20(水) 12:12:13
団塊世代は技術もなければ精神性も低い。
社会のゴミですね。
0180デフォルトの名無しさん2009/05/20(水) 12:14:42
>>178
うん、そうかもね。
だから?w
それで出世あきらめるの?
0181デフォルトの名無しさん2009/05/20(水) 12:17:26
>>180
技術盗んだら海外におさらばするつもり
0182デフォルトの名無しさん2009/05/20(水) 12:18:53
もう俺が悪いって事でいいからけんかはよせ
0183デフォルトの名無しさん2009/05/20(水) 12:26:22
あーあ 団塊世代のせいでまた人材が日本から流出していく。
さすが社会のゴミ 国賊 団塊世代は日本をつぶす気か
0184デフォルトの名無しさん2009/05/20(水) 12:30:53
何でも他人のせいにするところはどっかの民族とそっくりだな。
0185デフォルトの名無しさん2009/05/20(水) 12:40:46
>>183
団塊世代が悪いかどうかは知りませんが、うちの会社でも団塊世代の天下りを受け入れない方針になったみたいですよ。
まぁ、最近の世論的に天下りはまずいからでしょうが。
0186デフォルトの名無しさん2009/05/20(水) 16:43:34
Windows上でLinuxを起動させたいのですが
VMwareソフトウェアのどのシリーズを選んだらいいのでしょうか?
0187デフォルトの名無しさん2009/05/20(水) 16:44:38
vmware serverをダウンロードしてインストールしる
0188デフォルトの名無しさん2009/05/20(水) 17:14:03
ようしゃなく英語やったorz
0189デフォルトの名無しさん2009/05/20(水) 17:18:15
日本人のくせに英語もできないのか
0190デフォルトの名無しさん2009/05/20(水) 18:17:16
敵性言語として長く使用を禁じられていたので…
0191デフォルトの名無しさん2009/05/20(水) 19:13:14
じゃぁ なでしこでWMwareと同レベルのものを作ってください
0192デフォルトの名無しさん2009/05/20(水) 19:15:49
今は属国なんだからしっかりしる!
0193デフォルトの名無しさん2009/05/20(水) 22:47:50
#include <iostream>
using namespace std;
int main(){
int tmppl;
cin>>tmppl;
int const pl=tmppl;
int php[pl];
return 0;
}

あらかじめ数字を入力して変数tmpplに入れておき
const plの初期化の際にtmpplを使おうと思ったのですがコンパイルエラーが出ます
これは無理なんでしょうか?

また配列の要素数をキーボードで入力した数字で決めたいのですが、どうすればよいでしょうか?
0194デフォルトの名無しさん2009/05/20(水) 22:54:38
>あらかじめ数字を入力して変数tmpplに入れておき
>const plの初期化の際にtmpplを使おうと思ったのですがコンパイルエラーが出ます
>これは無理なんでしょうか?

無理です

>また配列の要素数をキーボードで入力した数字で決めたいのですが、どうすればよいでしょうか?

std::vector
0195デフォルトの名無しさん2009/05/20(水) 22:58:06
int *php=new int [pl];
0196デフォルトの名無しさん2009/05/20(水) 23:07:30
>>194>>195
ありがとうございます!
初期化と代入の違いが何となく分かりました
0197デフォルトの名無しさん2009/05/21(木) 00:31:36
それは初期化とか代入の話じゃなくて
配列の添え字はコンパイル時定数でなければならないという仕様の話じゃないのかい?
っていうか、前にもまったく同じ回答をした気配がする。
0198デフォルトの名無しさん2009/05/21(木) 03:35:38
extern就職誌というのを知らなかったので試してみたら疑問がでました。
(main.cpp)
#include <iostream>
int global = 100;
extern void func(); //ココをexternとっても動作する
int main() {
std::cout << ::global << std::endl;
::func();
return 0;
}

(another.cpp)
#include <iostream>
extern int global;
void func() {
std::cout << ::global << std::endl;
}

俺の理解している範囲ではexternをつけると「この変数もしくは関数はグローバルだ。ただし定義自体はこのファイルでなくて
別のソースファイルでしているから気をつけろ。」ということなのだが、上記のソースではどうも動作が違う。
最初にメイン関数内でグローバル変数のglobalを表示するのはいいだろう。
次にグローバル関数のfuncに突入するのだがfuncはexternがついているので別ファイル、すなわち
another.cppで定義されている。それで実行は可能なのだが試しにメインのextern void func()からexternをとってみた。それでも
動作したのだが、なんで動くんだ?
0199デフォルトの名無しさん2009/05/21(木) 03:57:19
>>extern就職誌

素晴らしい
0200デフォルトの名無しさん2009/05/21(木) 03:59:50
で、とりあえず、externは、「この名前がグローバルだ」とするためのもの。
そのコンパイル単位で定義されているかどうかは関係ない。

それと、関数はデフォルトでextern。
つまり、staticを付けないで宣言(定義も)されたものは、全てexternと同等となる。
0201デフォルトの名無しさん2009/05/21(木) 04:00:00
海外転職誌みたいだな。
0202デフォルトの名無しさん2009/05/21(木) 04:00:17
本題に答えろ
0203デフォルトの名無しさん2009/05/21(木) 04:07:44
http://eow.alc.co.jp/extern

通勤医師の就職誌か。
0204デフォルトの名無しさん2009/05/21(木) 04:12:30
おまえ、辞書引いたのか。。
0205デフォルトの名無しさん2009/05/21(木) 08:10:30
>>200
んー、よくわからんのですがとりあえず関数はおいておいて変数については
「この変数はグローバルだ。ただし定義自体はこのファイルでなくて 別のソースファイルでしているから気をつけろ。」
この定義は間違っていますか?それとも合っている?今、同じソースファイルで宣言だけでなく定義もしたらエラーに
なったのですが。。わかりやすい説明モトム
(main.cpp)
#include <iostream>
extern int global;
int global = 4;
void func();
int main() {
std::cout << ::global << std::endl;
::func();
return 0;
}

(another.cpp)
#include <iostream>
void func() {
std::cout << ::global << std::endl;
}
0206デフォルトの名無しさん2009/05/21(木) 08:20:02
どんなエラーだよ
まさか宣言しないシンボルを使おうとかしてないよな
0207デフォルトの名無しさん2009/05/21(木) 08:24:49
another.cppの中ではglobalが何者かわからん。
0208デフォルトの名無しさん2009/05/21(木) 08:45:54
動けばいいんだよ。動けば。
0209デフォルトの名無しさん2009/05/21(木) 11:26:55
コンパイルできない なんでか教えて

#include <iostream>
class Point {
private:
int m_x;
int m_y;
public:
Point(int x = 0, int y = 0): m_x(x), m_y(y) {}
void show() {
std::cout << "m_x = " << m_x;
std::cout << ", m_y = " << m_y << std::endl;
}
Point *operator+(Point *p) {
m_x = m_x + p->m_x;
m_y = m_y + p->m_y;
return *this;
}
};

int main() {
Point *p1 = new Point(3, 4);
Point *p2 = new Point(5, 8);
p1->show();
p2->show();
Point *p3;
p3 = p1 + p2;
p3->show();
return 0;
}
0210デフォルトの名無しさん2009/05/21(木) 11:50:47
>>209
Point *operator+(Point *p) {
...
return this;
}

p3 = *p1 + p2;

コンパイルするだけならこう変更する
0211デフォルトの名無しさん2009/05/21(木) 11:53:23
ありがとうございます
仮にp3 = p1 + p2;
を計算させたい場合は関数定義はどうすればいいですか?
0212デフォルトの名無しさん2009/05/21(木) 13:01:54
ポインタ演算をオーバーロードするのはオススメできない
どうしてもやりたいなら「フレンド関数 オーバーロード」あたりでぐぐれ

あと補足だけど>>210はp1==p3になるから気を付けてね
0213デフォルトの名無しさん2009/05/21(木) 15:22:46
了解しました。
0214デフォルトの名無しさん2009/05/21(木) 16:32:56
std::cout << "ABCDEFGHIJKLMN";
std::cout << "\r12345\n";

とすると12345ABCDEFGHIJKLMNと表示される。
\rは復帰、現表示位置がその行の先頭に移動する。

というのはわかるが、一体何の役に立つんだこれ?
マジで使ったことある人いたら教えてくれ
0215デフォルトの名無しさん2009/05/21(木) 16:40:09
歴史的遺物
02162142009/05/21(木) 16:41:05
興味程度にどんな歴史的遺物か教えてくれ
0217デフォルトの名無しさん2009/05/21(木) 16:42:37
コマンドライン上で簡易進捗バー出すのに便利。
0218デフォルトの名無しさん2009/05/21(木) 16:49:36
>>205
externは、別のファイルで定義しているリソース(変数とか)を
このファイルでも流用するよ、っていう宣言。
C++では、変数名・関数名などは、その変数・関数を使用するより前に、
それが何なのかを同じファイル中でコンパイラに教えてやらないとエラーになる。

お前さんのソースの中で、グローバル的に使用されているのは、
void func()とint globalの2つ。
func()を使用しているのはmain.cppだが、ここではfunc()を使用するより
前に
void func();
と宣言してあるから無問題。
一方、another.cpp内で使用されているglobalは、定義はmain.cppでしているが、
another.cpp内で宣言していない。
だからコンパイラはanother.cppのglobalという識別子が何なのかという
情報を教えてもらってないのでエラーになる。
0219デフォルトの名無しさん2009/05/21(木) 16:52:01
歴史というなら、それこそ5,60年代とかに遡れるんじゃね?

http://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89
0220デフォルトの名無しさん2009/05/21(木) 17:05:44
>>214
つか、それ12345FGHIJKLMNって表示されないか?
処理系依存なんかな。
0221デフォルトの名無しさん2009/05/21(木) 21:03:52
すまん質問させてもらう

void *operator new(size_t size,const char *pname, int nline );
#define new new(__FILE__, __LINE__)

とnewを実行したソース名と行数を取ってるんだが
これのdelete版が出来ない
もしかしてdeleteの方は無理?
STL使ったら、妙なdeleteが増えて特定したいんだ
0222デフォルトの名無しさん2009/05/21(木) 21:43:31
>>220
処理系っつーか、出力装置 (と、その状態) による。
0223デフォルトの名無しさん2009/05/21(木) 22:21:07
MFCを使ってライブラリを利用するのと
SDKで一からアプリケーションを作成するのは
どちらがいいでしょうか?
0224デフォルトの名無しさん2009/05/21(木) 22:27:33
MFC。間違いない。マクロやキャスト使いまくりで興奮する。
0225デフォルトの名無しさん2009/05/22(金) 00:48:32
最初のうちはSDKで必死になって窓の基本を覚え、その後MFCをさわって逝く

まあ俺のことだが
02262052009/05/22(金) 01:07:35
>>218
やっと理解できたー!有難う。
というわけで俺んなかでの結論;
「extern就職誌をつけられた変数・関数はこのファイルでこれから使うけどどっか別のソースファイルで
指定されてるからね!ちなみに関数のプロトタイプがあるとしたらそれはextern就職誌つけなくてもそれは
externとみなされてるから、別のファイルで指定されてるかもしんないし、ひょっとするとこのファイルの
後で定義されてるかもしんない」

という感じか。
なんか認識にまだ問題有ったら指摘して
0227デフォルトの名無しさん2009/05/22(金) 11:00:27
就労意欲は汲み取れた。
0228デフォルトの名無しさん2009/05/22(金) 11:55:10
ワロタ
0229デフォルトの名無しさん2009/05/22(金) 15:31:37
まずはexternなしでソースを書いてコンパイルしてエラーが
出たらexternをつければよい
0230デフォルトの名無しさん2009/05/22(金) 16:45:03
そもそもexternって使う機会あんまなくないか?
0231デフォルトの名無しさん2009/05/22(金) 17:56:56
グローバル変数
0232デフォルトの名無しさん2009/05/22(金) 17:59:49
グローバル変数そのものをほとんど使わないからな
0233デフォルトの名無しさん2009/05/22(金) 18:32:07
グローバル変数を使うとしても、
初期化の問題を恐れてほとんど全部
関数スコープ内でのstatic変数の参照の呼び出しにしちゃうし
(つまり結局グローバルスコープではない。)
。
0234デフォルトの名無しさん2009/05/22(金) 18:39:49
グローバル変数でもグローバル変数を入れるクラスを作るからね
0235デフォルトの名無しさん2009/05/22(金) 19:22:42
グローバル変数がグローバル関数になり、グローバル関数がグローバルオブジェクトになるわけですね。
0236デフォルトの名無しさん2009/05/23(土) 09:48:22
template <int N> foo bar(Hoge hoge1, Hoge hoge2, … , Hoge hogeN)
みたいな感じでtemplate <int N>のNに対応して引数の数を変える関数とかって標準で作れますか?
0237デフォルトの名無しさん2009/05/23(土) 10:04:52
多重定義しかありません
0238デフォルトの名無しさん2009/05/23(土) 12:05:47
可変引数リストじゃだめなんだろうか
0239デフォルトの名無しさん2009/05/23(土) 12:21:57
Cを使ってlsライクなプログラムを作ろうとしてて、自分の環境下で動いているlsコマンドの動作を元に作ろうと思ってるんだけど
ls-オプションの動作のCで書かれたソースはコンピュータ内にあるのでしょうか?
0240デフォルトの名無しさん2009/05/23(土) 12:38:52
引数の個数が変化すれば bar() の中身も変える必要があるしね
0241デフォルトの名無しさん2009/05/23(土) 12:48:05
>>239
lsは、Coreutilsに含まれているはずだから
http://www.gnu.org/software/coreutils/
から手に入れることができるはずだよ
0242デフォルトの名無しさん2009/05/23(土) 13:22:25
今加速度センサから値を得て速度を出してるんですが、ノイズや誤差の影響で
加速度を積分した値が静止させても0に戻りません。
そこで出来るだけ正確に無理矢理0に戻そうとしているんですが、何かいい方法ありませんか?
あと、このようなフィルタ処理?とかを扱ってるスレってありますか?
0243デフォルトの名無しさん2009/05/23(土) 15:12:40
getopt
0244デフォルトの名無しさん2009/05/23(土) 18:32:35
C/C++でHTMLのパーサってないでしょうか?
0245デフォルトの名無しさん2009/05/23(土) 21:26:05
なんでop[]は引数をひとつしか取れないようにしたんだろう
0246デフォルトの名無しさん2009/05/23(土) 21:34:12
>>245
ハゲに聞いてくれ
0247デフォルトの名無しさん2009/05/23(土) 21:45:27
>>245
C++はPascalじゃないよ
[a, b]なんて書き方はないから
0248デフォルトの名無しさん2009/05/23(土) 21:53:10
何をブチ込んでもいいんだから
気が済むまでメンバ変数詰め込んだクラスを引数にとる[]を定義すればいいじゃないか
0249デフォルトの名無しさん2009/05/23(土) 22:03:42
delete a, b;
とかやるのと一緒だな>>247
02502462009/05/23(土) 22:09:52
>>247
別に>>245はPascalとごっちゃにしているわけではないだろう。
オペレータオーバーロードとしては[a, b]の形も認めてもいいんじゃないかって
>>245は言いたいんじゃないの?
0251デフォルトの名無しさん2009/05/23(土) 22:24:41
C++はカンマ演算子の意味が違うから無理
関数呼び出しはむしろ特別な場合
02522462009/05/23(土) 22:28:16
>>251
そりゃ知っているけどさ、
出来たら便利じゃない。
今からじゃ互換性の関係があって無理だけど、
最初の段階で可能であるように仕様を定めておけばよかったのでは。

・・・ということも踏まえた上で、
だから俺は「ハゲに聞いてくれ」と言ったのだ。
■ このスレッドは過去ログ倉庫に格納されています