スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
18 http://hibari.2ch.net/test/read.cgi/tech/1291571263/
19 http://hibari.2ch.net/test/read.cgi/tech/1308106024/
20 http://toro.2ch.net/test/read.cgi/tech/1316013463/
21 http://toro.2ch.net/test/read.cgi/tech/1342285511/
22 http://peace.2ch.net/test/read.cgi/tech/1399911167/
23 http://peace.2ch.net/test/read.cgi/tech/1420379468/
24 http://echo.2ch.net/test/read.cgi/tech/1448685034/
スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟]©2ch.net
2016/08/14(日) 00:04:05.53ID:z6U1tRVC
2016/08/17(水) 13:13:38.39ID:rz4OYI8a
関数にstaticをつける必要がある場合その関数を仮想関数みたいに使うにはどうすればいいかな?
例えばSetTimerで指定する関数を派生クラス毎の機能にしたい
基底クラスでstatic付きの関数を定義して
その中でpublicな仮想関数を呼ぶとかがスマートなんかな?
例えばSetTimerで指定する関数を派生クラス毎の機能にしたい
基底クラスでstatic付きの関数を定義して
その中でpublicな仮想関数を呼ぶとかがスマートなんかな?
2016/08/17(水) 22:18:06.51ID:KqRj7kcI
基本部分の知識不足か説明不足で要領をえないな
> 関数にstaticをつける必要がある場合その関数を仮想関数みたいに使うにはどうすればいいかな?
そんなことをやろうとしなくても
派生クラス毎にstaticな関数を用意してSetTimerを呼び出すときにそれを登録すればいいだけでは
> 関数にstaticをつける必要がある場合その関数を仮想関数みたいに使うにはどうすればいいかな?
そんなことをやろうとしなくても
派生クラス毎にstaticな関数を用意してSetTimerを呼び出すときにそれを登録すればいいだけでは
2016/08/18(木) 08:40:43.37ID:nfE+KhhQ
>>3
別のstatic関数にthisポインタを保持させておいて
1回目のTimerでその関数を呼んでTimer内のstatic変数に保存したら
publicなら呼べると思ったけど
そうするのがいいんかなありがとう
別のstatic関数にthisポインタを保持させておいて
1回目のTimerでその関数を呼んでTimer内のstatic変数に保存したら
publicなら呼べると思ったけど
そうするのがいいんかなありがとう
2016/08/18(木) 17:06:15.70ID:9gCEAov3
いや言っている意味がよくわからんがこういう感じのじゃダメなの?
やりたいことがわからんからコールバック呼ばれたらKillTimerしちゃってるけど…
それともTimerProcAやTimerProcBでclass A や class B のメンバにアクセスしたいという感じ?
class A
{
private:
static void TimerProcA(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime){ KillTimer(NULL,idEvent); }
public:
A(){}
~A(){}
virtual void TimerCall(){ SetTimer(NULL,0,2000,(TIMERPROC)TimerProcA); }
};
class B : public A
private:
static void TimerProcB(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime){ KillTimer(NULL,idEvent); }
public:
A(){}
~A(){}
virtual void TimerCall(){ SetTimer(NULL,0,4000,(TIMERPROC)TimerProcB); }
};
やりたいことがわからんからコールバック呼ばれたらKillTimerしちゃってるけど…
それともTimerProcAやTimerProcBでclass A や class B のメンバにアクセスしたいという感じ?
class A
{
private:
static void TimerProcA(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime){ KillTimer(NULL,idEvent); }
public:
A(){}
~A(){}
virtual void TimerCall(){ SetTimer(NULL,0,2000,(TIMERPROC)TimerProcA); }
};
class B : public A
private:
static void TimerProcB(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime){ KillTimer(NULL,idEvent); }
public:
A(){}
~A(){}
virtual void TimerCall(){ SetTimer(NULL,0,4000,(TIMERPROC)TimerProcB); }
};
2016/08/18(木) 17:26:00.93ID:nfE+KhhQ
そうそうアクセスしたいという感じ
別のstatic関数ってのはこんな感じでTimerProcからメンバにアクセスするためにクラスポインタを保持させてて
static void *func(void *p) {
static void *q;
if(p != NULL) {
q = p;
}
return q;
}
使う時はこんな感じ
TimerProc() {
static ClassA *classpointer;
if(classpointer == NULL) {
classpointer = func(NULL);
}
// 以下classpointerを使った処理を仮想関数にできればと思った
}
けど基底クラスのTimerProcでは派生クラスの型がわからんし無理だと気付いたごめん
別のstatic関数ってのはこんな感じでTimerProcからメンバにアクセスするためにクラスポインタを保持させてて
static void *func(void *p) {
static void *q;
if(p != NULL) {
q = p;
}
return q;
}
使う時はこんな感じ
TimerProc() {
static ClassA *classpointer;
if(classpointer == NULL) {
classpointer = func(NULL);
}
// 以下classpointerを使った処理を仮想関数にできればと思った
}
けど基底クラスのTimerProcでは派生クラスの型がわからんし無理だと気付いたごめん
2016/08/18(木) 17:28:17.52ID:9gCEAov3
あちゃー
クラスBのコンストラクタとデストラクタは脳内で変換しておいてください
それならstd::mapとか使って…
要点だけなのでエラー処理とかは無しだけど
std::map<UINT, void*> mp;
class A
{
public:
A(){}
~A(){}
static void TimerProc(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
KillTimer(NULL,idEvent); A *a=(A*) mp[idEvent]; mp.erase(idEvent); a->TimerCallbackEvent();
}
void TimerCall(){ UINT TimerId = SetTimer(NULL,0,2000,(TIMERPROC)TimerProc); mp[TimerId] = this; }
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer A","TEST",MB_OK); }
};
class B : public A
{
public:
B(){}
~B(){}
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer B","TEST",MB_OK); }
};
クラスBのコンストラクタとデストラクタは脳内で変換しておいてください
それならstd::mapとか使って…
要点だけなのでエラー処理とかは無しだけど
std::map<UINT, void*> mp;
class A
{
public:
A(){}
~A(){}
static void TimerProc(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
KillTimer(NULL,idEvent); A *a=(A*) mp[idEvent]; mp.erase(idEvent); a->TimerCallbackEvent();
}
void TimerCall(){ UINT TimerId = SetTimer(NULL,0,2000,(TIMERPROC)TimerProc); mp[TimerId] = this; }
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer A","TEST",MB_OK); }
};
class B : public A
{
public:
B(){}
~B(){}
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer B","TEST",MB_OK); }
};
2016/08/18(木) 17:37:35.78ID:9gCEAov3
別にstd::mapである必要はないし独自のリストを作っても良い
TimerProc() と TimerCall() は基底クラスだけ書く
TimerCallbackEvent()は仮想関数で 派生クラス毎の機能 はここに書く
流れとしてはそれぞれのクラスでTimerCall() を呼び出すとタイマIDとインスタンスをセットで登録
時間経過でTimerProc()が呼ばれるけどその際に登録したタイマIDからインスタンスをゲット
あとはインスタンスの仮想関数 TimerCallbackEvent() を呼び出す
TimerProc() と TimerCall() は基底クラスだけ書く
TimerCallbackEvent()は仮想関数で 派生クラス毎の機能 はここに書く
流れとしてはそれぞれのクラスでTimerCall() を呼び出すとタイマIDとインスタンスをセットで登録
時間経過でTimerProc()が呼ばれるけどその際に登録したタイマIDからインスタンスをゲット
あとはインスタンスの仮想関数 TimerCallbackEvent() を呼び出す
2016/08/18(木) 18:02:11.11ID:9gCEAov3
あと横着なやり方だと
SetTimerにウインドウハンドル指定すれば第二引数の UINT idTimer を有効に出来る
この idTimer にクラスのインスタンスを指定
コールバック関数 TimerProc では 第三引数の UINT idEvent, をクラスの型にキャストしてインスタンスを取得
class A
{
public:
A(){}
~A(){}
static void TimerProc(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) {
KillTimer(hwnd, idEvent); A *a=(A*) idEvent; a->TimerCallbackEvent();
}
void TimerCall(HWND hWnd){ SetTimer(hWnd,(UINT)this,2000,(TIMERPROC)TimerProc); }
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer A","TEST",MB_OK); }
};
class B : public A
{
public:
B() : A(){}
~B(){}
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer B","TEST",MB_OK); }
};
SetTimerにウインドウハンドル指定すれば第二引数の UINT idTimer を有効に出来る
この idTimer にクラスのインスタンスを指定
コールバック関数 TimerProc では 第三引数の UINT idEvent, をクラスの型にキャストしてインスタンスを取得
class A
{
public:
A(){}
~A(){}
static void TimerProc(HANDLE hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) {
KillTimer(hwnd, idEvent); A *a=(A*) idEvent; a->TimerCallbackEvent();
}
void TimerCall(HWND hWnd){ SetTimer(hWnd,(UINT)this,2000,(TIMERPROC)TimerProc); }
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer A","TEST",MB_OK); }
};
class B : public A
{
public:
B() : A(){}
~B(){}
virtual void TimerCallbackEvent(){ MessageBox(NULL,"Timer B","TEST",MB_OK); }
};
2016/08/18(木) 19:33:04.64ID:nfE+KhhQ
2016/08/31(水) 13:39:09.46ID:HrKErv9D
苦C12-2の戻り値になんでcount付くの?
2016/09/01(木) 12:44:39.61ID:Cb20qd0C
Class A { int a }
Class B { int a }
Class C : A, B { } // A Bを継承
この状態だとCからaにアクセスする場合は
thisじゃどっちのaだよってなるから
A::a, B::aってやる必要があるけど
Class C { A a; B b; } // A Bを宣言
これと違う部分は
名前が衝突するかしないかだけ?
Class B { int a }
Class C : A, B { } // A Bを継承
この状態だとCからaにアクセスする場合は
thisじゃどっちのaだよってなるから
A::a, B::aってやる必要があるけど
Class C { A a; B b; } // A Bを宣言
これと違う部分は
名前が衝突するかしないかだけ?
2016/09/01(木) 14:07:11.55ID:h0ZxBZjb
コンパイルが通る文法でやり直し
2016/09/01(木) 18:20:52.36ID:9l469SL1
>>12
コンストラクタやデストラクタのタイミングから考えれば両者は別物
例えばCの初期化時、CのメンバがAやBにアクセスする場合
前者は問題なくCのメンバは初期化されるが
後者は宣言の位置によって未初期化データにアクセスする危険がある
前者はCをAとしてみることが出来るし、CをBとしてみることも出来る
でも後者においてCはCでしかない
例えばAを必要とする関数とBを必要とする関数がある場合、
前者はそのままCを引数に渡せるが後者は適宜メンバを指定しないといけない
もっともオーバーロードされた関数だとCをAかBにキャストしてやんないと曖昧だと怒られる
もちろん適切に宣言されていることは前提
コンストラクタやデストラクタのタイミングから考えれば両者は別物
例えばCの初期化時、CのメンバがAやBにアクセスする場合
前者は問題なくCのメンバは初期化されるが
後者は宣言の位置によって未初期化データにアクセスする危険がある
前者はCをAとしてみることが出来るし、CをBとしてみることも出来る
でも後者においてCはCでしかない
例えばAを必要とする関数とBを必要とする関数がある場合、
前者はそのままCを引数に渡せるが後者は適宜メンバを指定しないといけない
もっともオーバーロードされた関数だとCをAかBにキャストしてやんないと曖昧だと怒られる
もちろん適切に宣言されていることは前提
2016/09/01(木) 18:26:02.24ID:9l469SL1
2016/09/01(木) 18:51:52.00ID:Cb20qd0C
>>15
詳しくありがとう
詳しくありがとう
2016/09/06(火) 13:37:22.26ID:71dTDxcx
int型aに自然数を入力するとする
√aに最も近い分数を表示する(ただし分子分母はそれぞれ5桁以内)
例えば√2の場合は30547/21600
ってプログラム作りたいなと思ったんですけどなかなか上手くいかないです
何かアドバイスありませんか??
√aに最も近い分数を表示する(ただし分子分母はそれぞれ5桁以内)
例えば√2の場合は30547/21600
ってプログラム作りたいなと思ったんですけどなかなか上手くいかないです
何かアドバイスありませんか??
2016/09/06(火) 14:06:14.75ID:7STKxdhD
君がすでに試したことをアドバイスして、もうやりました、と返されるのはばかばしいだろ
本気でアドバイスが欲しければ君がこれまでにやったが満足出来なかったこと
やろうとしたけどうまくできなかったこと、とかをできるだけ多く伝えてからにするんだな
本気でアドバイスが欲しければ君がこれまでにやったが満足出来なかったこと
やろうとしたけどうまくできなかったこと、とかをできるだけ多く伝えてからにするんだな
2016/09/06(火) 21:30:24.59ID:Phz+5l1v
分母を1から99999まで回して√2に掛け小数点を切り上げた時と切り捨てた時で最も誤差が小さくかつ1から99999の範囲にある値を分子にする
2016/09/07(水) 09:32:39.46ID:mdJXQRTa
sqrt(2)は、66922/47321じゃない?
2016/09/07(水) 13:34:29.16ID:r09HpaM4
sqrt(n)の結果を分数に変換すれば良いならググれば出てくると思うが。
割と簡単だぞ。
割と簡単だぞ。
2016/09/07(水) 14:15:36.07ID:M2bjXbVq
2016/09/07(水) 19:10:24.68ID:9ei6Qh2k
>>17 の問題は、平方根の近似値を求めることと
桁数制限のある分子・分母による分数で小数の近似値を作ること、
この2つに分解できるのかな。それとも一体なんだろうか。
ちょいと調べたところ「ディオファントス近似」とかいう
数学のキーワードが出てきたから、C/C++のプログラムというより
アルゴリズムの問題なのかもしれないよ。
桁数制限のある分子・分母による分数で小数の近似値を作ること、
この2つに分解できるのかな。それとも一体なんだろうか。
ちょいと調べたところ「ディオファントス近似」とかいう
数学のキーワードが出てきたから、C/C++のプログラムというより
アルゴリズムの問題なのかもしれないよ。
2016/11/17(木) 19:27:03.23ID:/ZwpQAJu
http://www.boost.org/doc/libs/1_53_0/libs/numeric/odeint/doc/html/boost_numeric_odeint/tutorial/using_cuda__or_openmp__tbb_______via_thrust.html
CUDAの
__host__ __device__
value_type operator()( value_type x) const
{
みたいな書き方で
__host__ __device__
というのはCUDAに限定された書き方で普通のC++では返り値の方の前に
他のもの置けませんよね?
CUDAの
__host__ __device__
value_type operator()( value_type x) const
{
みたいな書き方で
__host__ __device__
というのはCUDAに限定された書き方で普通のC++では返り値の方の前に
他のもの置けませんよね?
2016/11/17(木) 19:31:08.07ID:cH0vE1/X
staticとか置けるよ
2016/11/17(木) 20:52:01.53ID:klz7wxCT
cdeclとかstdcallとか置かない?
2016/11/17(木) 20:52:40.98ID:dEDc58kY
環境に応じて空白に置換されることもあるマクロとか普通に置けるし
C++11以降なら普通にattributeを置ける
C++11以降なら普通にattributeを置ける
2016/11/18(金) 09:34:37.20ID:HWQGR5IS
>>26
void __stdcall func();だわ
void __stdcall func();だわ
2016/12/25(日) 17:25:21.30ID:+uAMo6Z3
c++11 の std::accumulate() を使って CRC32 を計算するプログラムを書いているんだけど、
イテレータの型が不明だから template<> を使わざるおえずヘッダーにしか書けないんだよな。
それは仕方がないとして、参照しているテーブルをヘッダーファイルに
static const uint32_t __CRC32_TABLE__[256] {/* データは省略 */};
って書いてもコンパイル単位で毎回生成されるようなことにはならないのか心配。
自分で調べてみようと思って objdump を使って見てみたんだけどよくわからんかった。
extern で宣言して別ファイルでテーブルの実態を定義してもいいけど、
シンボルを公開したくないんだよね。
イテレータの型が不明だから template<> を使わざるおえずヘッダーにしか書けないんだよな。
それは仕方がないとして、参照しているテーブルをヘッダーファイルに
static const uint32_t __CRC32_TABLE__[256] {/* データは省略 */};
って書いてもコンパイル単位で毎回生成されるようなことにはならないのか心配。
自分で調べてみようと思って objdump を使って見てみたんだけどよくわからんかった。
extern で宣言して別ファイルでテーブルの実態を定義してもいいけど、
シンボルを公開したくないんだよね。
2016/12/25(日) 23:20:51.61ID:jDrU+LCU
staticなグローバル変数なら翻訳単位ごとに毎回定義(生成)されるのが基本だろ
2016/12/29(木) 11:13:46.10ID:ddtQH8Am
ヘッダーファイルに定義するなら公開しているようなものじゃないかと思うんだけど。
テーブルアドレスを取得する関数を定義して実体を見せないとかじゃだめなんかな?
テーブルアドレスを取得する関数を定義して実体を見せないとかじゃだめなんかな?
2016/12/31(土) 01:03:30.96ID:WURbgydp
ヘッダファイルなんて作らずに main.cpp で他の .cpp ファイルをインクルードしてしまえばいい
フリーダムさが一つの売りな言語だからな
という話ではなくて?
フリーダムさが一つの売りな言語だからな
という話ではなくて?
2016/12/31(土) 05:29:57.12ID:M5j1RyE5
externをヘッダに書かなければ大丈夫
34デフォルトの名無しさん
2016/12/31(土) 13:06:08.73ID:bmD+g+A2 >>29
今更だけど、何か勘違いしているか、ちょっと間違った使い方をしている気がする。
今更だけど、何か勘違いしているか、ちょっと間違った使い方をしている気がする。
2016/12/31(土) 14:05:48.22ID:dE1JGkqW
>>32
それってデバッグするとき最悪なことにならない?
それってデバッグするとき最悪なことにならない?
2016/12/31(土) 19:25:36.12ID:GpynYecu
関数のオーバロードってどう思います?
linusさんはC++批判の一つにこれを上げていました。
linusさんはC++批判の一つにこれを上げていました。
2016/12/31(土) 20:17:07.01ID:Kmz/fYBF
オーバーロードがあると、デフォルト引数がある関数で、間違いが起こりやすい
Haxe では、型推論しやすいように、オーバーロードが無い
Haxe では、型推論しやすいように、オーバーロードが無い
2016/12/31(土) 20:27:01.42ID:GpynYecu
やっぱあえて用意しない言語も少なくないんですかね
C++のような用意されている言語でも意図的に使わない人もいるのかな
ところで自分は関数のオーバロードが大好きなのですがwww
C++をオーバロード関数のあるCもとい better C として使うことも少なくないのですがwwww
C言語にもできないかなぁwwww
C++のような用意されている言語でも意図的に使わない人もいるのかな
ところで自分は関数のオーバロードが大好きなのですがwww
C++をオーバロード関数のあるCもとい better C として使うことも少なくないのですがwwww
C言語にもできないかなぁwwww
2016/12/31(土) 21:17:05.19ID:WasXuFJU
オーバーロードはいいものだ
だが引数の暗黙の型変換はデフォルト禁止すべきだ
だが引数の暗黙の型変換はデフォルト禁止すべきだ
2017/01/01(日) 00:04:27.70ID:/LG195GI
ソースコードを読む側から見るとオーバロードは欠点でしかない
書く側から見ると稀に便利だけど無い方がいい
書く側から見ると稀に便利だけど無い方がいい
2017/01/01(日) 01:06:03.25ID:y/0zTBoG
暗黙の型変換、デフォルト引数、さらに演算子のオーバーロードなどが
ごっちゃになった本当のヤバさを知らない人には好かれる機能かもね。
ごっちゃになった本当のヤバさを知らない人には好かれる機能かもね。
2017/01/01(日) 01:47:02.01ID:3VCNztM8
普通は逆だな
ヤバさを知らない人はやらかして痛い目を見る
知ってる人は使い所に気をつけて恩恵のみ得られる
ヤバさを知らない人はやらかして痛い目を見る
知ってる人は使い所に気をつけて恩恵のみ得られる
2017/01/01(日) 07:30:16.72ID:/Xch0vce
確かにヤバさを知ってから使えばあれはいいものだな
2017/01/01(日) 10:17:30.27ID:iNYIlr5k
ことしもよろしくな
2017/01/01(日) 11:21:50.54ID:J8wVTYjO
ふぐみたいなものかな
毒のやばさを知らない人は食って死ぬし
毒のやばさを知っている人はうまく料理しておいしい思いをする
毒のやばさを知らない人は食って死ぬし
毒のやばさを知っている人はうまく料理しておいしい思いをする
2017/01/01(日) 11:25:10.13ID:h0NhlmdK
料理人はさばくだけで、食った奴が死ぬ。
2017/01/01(日) 12:11:27.00ID:1eFWlFaz
>>35
オールマクロで書かれたソースよりはマシですよ
オールマクロで書かれたソースよりはマシですよ
2017/01/01(日) 13:07:41.65ID:6FLztjP6
目くそ鼻くそ
2017/01/03(火) 18:18:14.49ID:YaTOHTL4
なるほど自分だけはうまく使えてると思い込んでしまうわけだ。
2017/01/03(火) 19:02:34.22ID:IwVR3NZn
痛い目を見ないで使えているならうまく使えていると言えるんじゃないの
オールマグロは美味しい
オールマグロは美味しい
2017/01/08(日) 04:05:56.53ID:+qBxgbmJ
デフォルト引数とオーバーロードのどちらを取るかといわれると
かなり悩むが、個人的にはオーバーロードかなぁ
オーバーロードがないとメタプログラミングも困難になるし
演算子のオーバーロードは行列やベクトルに対しては非常に有用だしな
デフォルト引数は、関数に構造体を渡すようなものであれば
構造体自体に初期値を設定できるから
無くても別に困らないかなぁ
大体からして、引数が10個以上になるとかはナンセンスだし
そういう場合は大抵構造体で渡すからねぇ
かなり悩むが、個人的にはオーバーロードかなぁ
オーバーロードがないとメタプログラミングも困難になるし
演算子のオーバーロードは行列やベクトルに対しては非常に有用だしな
デフォルト引数は、関数に構造体を渡すようなものであれば
構造体自体に初期値を設定できるから
無くても別に困らないかなぁ
大体からして、引数が10個以上になるとかはナンセンスだし
そういう場合は大抵構造体で渡すからねぇ
2017/01/08(日) 10:04:57.89ID:HWfbhIhn
関数のオーバーロードがcに備わっていればへんなプレフィックスをつけなくても名前衝突の可能性は減らせるのに。。
2017/01/09(月) 17:38:25.57ID:s0WlKSpH
>>52
関数のオーバーロードはマングリングの絡みがあって,アセンブラとリンクしがちなCにとっては鬼門なんだと思うんです
関数のオーバーロードはマングリングの絡みがあって,アセンブラとリンクしがちなCにとっては鬼門なんだと思うんです
54デフォルトの名無しさん
2017/01/13(金) 23:29:25.67ID:YsOZ3W7e int l = 2;
printf(" P2=(%1.3f, %1.3f)\n", l, P[2][0], P[2][1]);
→P2=(0.000, 0.000)←正解
printf(" P%d=(%1.3f, %1.3f)\n", l, P[l][0], P[l][1]);
→P2=(1.000, -1.000)
こんなことってありますか?
printf(" P2=(%1.3f, %1.3f)\n", l, P[2][0], P[2][1]);
→P2=(0.000, 0.000)←正解
printf(" P%d=(%1.3f, %1.3f)\n", l, P[l][0], P[l][1]);
→P2=(1.000, -1.000)
こんなことってありますか?
2017/01/13(金) 23:44:30.08ID:uIUQJPv6
2017/01/13(金) 23:54:16.22ID:YsOZ3W7e
すみません, ソースコードコピペじゃなかったので書き間違えましたが、正しくは
printf(" P2=(%1.3f, %1.3f)\n", P[2][0], P[2][1]);
です。
すみません解決しました。宣言でP[3][2] と書くべきところをP[2][2]と書いていました。
お騒がせしました。
printf(" P2=(%1.3f, %1.3f)\n", P[2][0], P[2][1]);
です。
すみません解決しました。宣言でP[3][2] と書くべきところをP[2][2]と書いていました。
お騒がせしました。
2017/01/20(金) 09:36:49.73ID:Nvso2zBq
>>52
関数オーバーロードの存在理由は名前を変えたくても変えられない関数のため
関数オーバーロードの存在理由は名前を変えたくても変えられない関数のため
2017/01/21(土) 12:37:42.57ID:SM6hxokj
gdbでデバッグをするとき、
main.cppファイル以外にtest.cppファイルをインクルードして
コンパイルしています。
このとき、test.cpp内の変数の中身を見るためにブレークポイントを
設定したいのですが、具体的にどのように行えばよいのでしょうか?
main.cppファイル以外にtest.cppファイルをインクルードして
コンパイルしています。
このとき、test.cpp内の変数の中身を見るためにブレークポイントを
設定したいのですが、具体的にどのように行えばよいのでしょうか?
2017/01/22(日) 06:49:21.49ID:hpHPcjfX
>>58 俺もgdbに詳しいわけじゃないけど…。
関数内のローカル変数を見られるのは、当然その関数の実行中だけ。
(gdb) break test
(gdb) run
... 関数test()開始時に停止
(gdb) print var
... 関数test()内のローカル変数varが表示される
C++特有の問題として、ファイル内のスタティック変数も
そのファイルの関数を実行してる間しか正しく見られないみたい。
Cで使えた 'file.c'::var (ソースファイル名で修飾した変数名)は
C++のプログラムだとgdbが文法エラーと言ってくる。
関数内のローカル変数を見られるのは、当然その関数の実行中だけ。
(gdb) break test
(gdb) run
... 関数test()開始時に停止
(gdb) print var
... 関数test()内のローカル変数varが表示される
C++特有の問題として、ファイル内のスタティック変数も
そのファイルの関数を実行してる間しか正しく見られないみたい。
Cで使えた 'file.c'::var (ソースファイル名で修飾した変数名)は
C++のプログラムだとgdbが文法エラーと言ってくる。
2017/02/01(水) 22:19:47.26ID:FDjJl8e/
すいません。
教えてください。
mainの最後まで実行してもプログラムが終了しません。
mainの最後にcout<<"END"<<endl;を入れていてENDが出力されているので
mainの最後に到達していることは確実です。
mainの中ではifstreamを使って6万行のファイルをgetlineでダンプしています。
ifstreamが悪さをしているのでしょうか?
教えてください。
mainの最後まで実行してもプログラムが終了しません。
mainの最後にcout<<"END"<<endl;を入れていてENDが出力されているので
mainの最後に到達していることは確実です。
mainの中ではifstreamを使って6万行のファイルをgetlineでダンプしています。
ifstreamが悪さをしているのでしょうか?
2017/02/01(水) 22:33:53.13ID:V+KME3Sb
悪さというか 一度出力をバッファリングしておいて
END表示の後に ifstreamのデストラクタ経由でトリガーされた処理で
実際の出力を行う ということはあり得ます
その場合 直ぐには終了してくれないように見えると思います
外してたらごめんなさいですが このケースじゃないかなと
END表示の後に ifstreamのデストラクタ経由でトリガーされた処理で
実際の出力を行う ということはあり得ます
その場合 直ぐには終了してくれないように見えると思います
外してたらごめんなさいですが このケースじゃないかなと
2017/02/01(水) 22:54:30.09ID:FDjJl8e/
つまりプログラムが終了するまでじっと待てばいいということでしょうか?
5分くらい待ちましたが終了する気配がありませんでした。
5分くらい待ちましたが終了する気配がありませんでした。
2017/02/01(水) 23:13:45.79ID:V+KME3Sb
もし>>61の場合に当て嵌るなら
ifstreamをスコープの内側にいれてデストラクタをEND出力の前に
呼ぶことは出来るはずです
int main(int argc, char* argv[]) {
{ // このスコープを追加することで
ifstream ifs(...);
...
} // デストラクタが確実に呼ばれていることを保証
cout << "END" << endl;
}
(↑コンパイル通してないので過信しないでください)
この場合だと、ENDが出力されずにプログラムも終了しない事が観察できるかと思います
しかし、(処理の内容が解らないので断定できませんが)
6万行なら5分で終わらないってこともなさそうな気もしますね……
"getline"でダンプということは読み込んでから出力ですよね
んー 大雑把に考えられるのはデバッグビルドで
重いデバッグ用のコードが追加されてるとかでしょうか
……なんとなくこれは外してる気がします すいません
実際のコードと環境を見てみないとなんともってとこです
ifstreamをスコープの内側にいれてデストラクタをEND出力の前に
呼ぶことは出来るはずです
int main(int argc, char* argv[]) {
{ // このスコープを追加することで
ifstream ifs(...);
...
} // デストラクタが確実に呼ばれていることを保証
cout << "END" << endl;
}
(↑コンパイル通してないので過信しないでください)
この場合だと、ENDが出力されずにプログラムも終了しない事が観察できるかと思います
しかし、(処理の内容が解らないので断定できませんが)
6万行なら5分で終わらないってこともなさそうな気もしますね……
"getline"でダンプということは読み込んでから出力ですよね
んー 大雑把に考えられるのはデバッグビルドで
重いデバッグ用のコードが追加されてるとかでしょうか
……なんとなくこれは外してる気がします すいません
実際のコードと環境を見てみないとなんともってとこです
64sage
2017/02/01(水) 23:43:55.55ID:FDjJl8e/ 再現コードです。
end,end2,end3すべて出力されてから固まってしまいます。
何かわかることありますでしょうか?
#include<fstream>
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
{
ifstream f("list.txt");
if(!f.fail())
{
int i=0;
char l[1024];
while(f)
{
l[0]='\0';
f.getline(l,1000);
cout<<i<<" "<<l<<endl;
i++;
}
cout<<"end"<<endl;
}
cout<<"end2"<<endl;
}
cout<<"end3"<<endl;
}
end,end2,end3すべて出力されてから固まってしまいます。
何かわかることありますでしょうか?
#include<fstream>
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
{
ifstream f("list.txt");
if(!f.fail())
{
int i=0;
char l[1024];
while(f)
{
l[0]='\0';
f.getline(l,1000);
cout<<i<<" "<<l<<endl;
i++;
}
cout<<"end"<<endl;
}
cout<<"end2"<<endl;
}
cout<<"end3"<<endl;
}
2017/02/02(木) 00:06:13.31ID:XVpKeu5E
list.txtの内容は意図どおり表示されてますかね?
こちらの環境(Linux gcc4.9.4, clang3.9.0)だと70000行のデータで
得に問題なく出力、終了しました
こちらの環境(Linux gcc4.9.4, clang3.9.0)だと70000行のデータで
得に問題なく出力、終了しました
2017/02/02(木) 00:10:41.68ID:uXhy1oZf
意図通り出力されてます。
環境の問題ですか、うーん厄介ですね。
cygwinとx86_64-w64-mingw32-g++.exeというコンパイラでやってます。
とりあえず、コードに問題はないということで、ありがとうございます。
環境の問題ですか、うーん厄介ですね。
cygwinとx86_64-w64-mingw32-g++.exeというコンパイラでやってます。
とりあえず、コードに問題はないということで、ありがとうございます。
2017/02/02(木) 00:24:50.02ID:XVpKeu5E
ああ mingwですね 昔よく使ってました
プログラムは終了してても コンソールが残っちゃうってやつはよくありました
なら"-mconsole"(だったと思う) flagをg++に与えて見てください
その辺のフラグで解消できるものだったような気がします
"-mwindows"ってのもあったので逆だったかもしれないんですが…(曖昧
プログラムは終了してても コンソールが残っちゃうってやつはよくありました
なら"-mconsole"(だったと思う) flagをg++に与えて見てください
その辺のフラグで解消できるものだったような気がします
"-mwindows"ってのもあったので逆だったかもしれないんですが…(曖昧
6860
2017/02/02(木) 00:31:49.82ID:uXhy1oZf cygwinじゃなくてコマンドプロンプトでやったら終了しましたw
謎すぎw
とりあえず、解決?ということでありがとうございました。
謎すぎw
とりあえず、解決?ということでありがとうございました。
2017/02/02(木) 00:32:54.78ID:XVpKeu5E
ありゃw 了解です お疲れ様ー
2017/02/02(木) 20:06:20.90ID:twb4E7Xn
数独を解くプログラムについてなんですが縦、横の検索はできても3x3で区切られたブロック内を列挙する方法がわかりません
どうやって3x3で区切られたブロックを列挙すればいいでしょうか?
どうやって3x3で区切られたブロックを列挙すればいいでしょうか?
2017/02/02(木) 20:35:41.21ID:uXhy1oZf
for文2重にすればええんちゃう?
2017/02/02(木) 21:30:56.78ID:uZGYbIMg
素直に2*2の4重ループだろ
外側の縦横2重ループでまず探索するブロックを決めて
内側の縦横2重ループでブロック内の全マスを列挙する
外側の縦横2重ループでまず探索するブロックを決めて
内側の縦横2重ループでブロック内の全マスを列挙する
2017/02/03(金) 00:04:44.30ID:ITjsij3m
列挙対象の座標のリストを作るとかもいいかもね。
それなら縦横ブロックを統一的に扱える。
それなら縦横ブロックを統一的に扱える。
2017/02/03(金) 08:10:45.56ID:ptvBupX8
俺なら(x, y)座標を格納する構造体を作って、
それを9つ集めた配列、を9つ集めた配列、でやるかな。
3x3のブロックに0-8の添字をつける感じで。
ブロック番号(0-2)を3倍してブロック内座標(0-2)を足す、で
盤面全体での座標値(0-8)を得られる、X軸とY軸についてそれぞれ算出、
というやり方もあるが、この文面で分かりにくいと感じたら
コードを書いても分かりにくい方法かと。
それを9つ集めた配列、を9つ集めた配列、でやるかな。
3x3のブロックに0-8の添字をつける感じで。
ブロック番号(0-2)を3倍してブロック内座標(0-2)を足す、で
盤面全体での座標値(0-8)を得られる、X軸とY軸についてそれぞれ算出、
というやり方もあるが、この文面で分かりにくいと感じたら
コードを書いても分かりにくい方法かと。
75片山博文MZ ◆T6xkBnTXz7B0
2017/02/03(金) 08:24:14.76ID:6yKPOmXk f: (x, y) |-> (x * 9 + y).
g: (n) |-> (n / 9, n % 9)
という2つの1対1写像があるから、それを使えばint a[9][9];でもint b[9 * 9];でも同じ結果が得られる。
g: (n) |-> (n / 9, n % 9)
という2つの1対1写像があるから、それを使えばint a[9][9];でもint b[9 * 9];でも同じ結果が得られる。
2017/02/04(土) 01:09:26.83ID:2qbguusO
書いたぞ。
#include<iostream>
#include<vector>
using namespace std;
class Point{
public:
int x,y;
Point(int a,int b){x=a;y=b;}};
ostream &operator<<(ostream &o,Point p){o<<"("<<p.x<<","<<p.y<<")";return o;}
vector<vector<Point> > point_list;
init_list(){
vector<Point> l;
for(int x=0;x<9;++x){
for(int y=0;y<9;++y)l.push_back(Point(x,y));
point_list.push_back(l);l.clear();}
for(int y=0;y<9;++y){
for(int x=0;x<9;++x)l.push_back(Point(x,y));
point_list.push_back(l);l.clear();}
for(int X=0;X<9;X+=3){for(int Y=0;Y<9;Y+=3){
for(int x=0;x<3;++x){for(int y=0;y<3;++y){
l.push_back(Point(X+x,Y+y));}}
point_list.push_back(l);l.clear();}}}
int main(){
init_list();
for(int i=0;i<point_list.size();++i){for(int j=0;j<point_list[i].size();++j){
cout<<point_list[i][j]<<" ";}
cout<<endl;}
}
#include<iostream>
#include<vector>
using namespace std;
class Point{
public:
int x,y;
Point(int a,int b){x=a;y=b;}};
ostream &operator<<(ostream &o,Point p){o<<"("<<p.x<<","<<p.y<<")";return o;}
vector<vector<Point> > point_list;
init_list(){
vector<Point> l;
for(int x=0;x<9;++x){
for(int y=0;y<9;++y)l.push_back(Point(x,y));
point_list.push_back(l);l.clear();}
for(int y=0;y<9;++y){
for(int x=0;x<9;++x)l.push_back(Point(x,y));
point_list.push_back(l);l.clear();}
for(int X=0;X<9;X+=3){for(int Y=0;Y<9;Y+=3){
for(int x=0;x<3;++x){for(int y=0;y<3;++y){
l.push_back(Point(X+x,Y+y));}}
point_list.push_back(l);l.clear();}}}
int main(){
init_list();
for(int i=0;i<point_list.size();++i){for(int j=0;j<point_list[i].size();++j){
cout<<point_list[i][j]<<" ";}
cout<<endl;}
}
2017/02/04(土) 01:13:42.21ID:2qbguusO
そういや数独ってNP完全なんだっけ?
単純な消去法以外アルゴリズム思いつかんが。
単純な消去法以外アルゴリズム思いつかんが。
2017/02/21(火) 13:16:05.38ID:PhJVPA+A
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p, str[32];
scanf("%s", str);
while ((p = strpbrk(str, "ab")) != NULL) *p = 'c';
printf("%s\n", str);
return 0;
}
"ab"の文字列を"c"に置換したいんだけどaもbも一文字ずつ置換えられて"cc"ってなってしまう
どうすりゃいいんですかね…
#include <string.h>
int main(void)
{
char *p, str[32];
scanf("%s", str);
while ((p = strpbrk(str, "ab")) != NULL) *p = 'c';
printf("%s\n", str);
return 0;
}
"ab"の文字列を"c"に置換したいんだけどaもbも一文字ずつ置換えられて"cc"ってなってしまう
どうすりゃいいんですかね…
2017/02/21(火) 15:20:35.77ID:7lKrpDmc
strpbrk() は「第2引数の文字列に含まれる文字のどれか」への
ポインタを返すから strpbrk(str, "ab") だと返るのは
文字'a'の位置か文字'b'の位置だよ。
"ab"という部分文字列の位置が欲しいなら strstr(str, "ab") を使うべき。
加えて "ab" を "c" に置換したい場合、置換後の字数が減るのだから、
'a' を 'c' に上書きした後、strの'b'より後ろを1byteずつ詰めなきゃならない。
もっと一般的な文字列置換関数を作るとなると、かなり面倒だわね。
ポインタを返すから strpbrk(str, "ab") だと返るのは
文字'a'の位置か文字'b'の位置だよ。
"ab"という部分文字列の位置が欲しいなら strstr(str, "ab") を使うべき。
加えて "ab" を "c" に置換したい場合、置換後の字数が減るのだから、
'a' を 'c' に上書きした後、strの'b'より後ろを1byteずつ詰めなきゃならない。
もっと一般的な文字列置換関数を作るとなると、かなり面倒だわね。
2017/02/21(火) 15:30:30.87ID:2UxBH0C2
if(strcmp(str, "ab") == 0); strcpy(str, "c");
これじゃあかんの?
これじゃあかんの?
2017/02/21(火) 15:32:19.27ID:2UxBH0C2
0ab0→0c0って事なら忘れて
82デフォルトの名無しさん
2017/03/19(日) 06:58:05.16ID:o9adXXiq C言語ではないんですが、以下の事について教えて頂けないでしょうか?
"algo": "Lyra2REv2",
"threads": 0,
"cpu-priority": 0,
"cpu-affinity": -1,
"benchmark": false,
"debug": false,
"protocol": false,
"quiet": false
cpuminer-multi-windows の設定をしているのですが
"threads""cpu-priority""cpu-affinity"が何をさしているのか
よくわかりません。
私は8コア16スレッドのCPUを二個搭載しているPCを使っているのですが
CPUをフルに活用できるように設定したいのです。
ご助力頂けると幸いです。よろしくお願いします。
"algo": "Lyra2REv2",
"threads": 0,
"cpu-priority": 0,
"cpu-affinity": -1,
"benchmark": false,
"debug": false,
"protocol": false,
"quiet": false
cpuminer-multi-windows の設定をしているのですが
"threads""cpu-priority""cpu-affinity"が何をさしているのか
よくわかりません。
私は8コア16スレッドのCPUを二個搭載しているPCを使っているのですが
CPUをフルに活用できるように設定したいのです。
ご助力頂けると幸いです。よろしくお願いします。
2017/03/19(日) 07:18:53.13ID:bkt1N2YW
Cのことじゃないなら何のことなのかぐらい書けよ
モナコインか発掘か?だったらそのスレで聞けよ。シネ
モナコインか発掘か?だったらそのスレで聞けよ。シネ
2017/03/19(日) 14:10:20.03ID:oNRFZCzo
俺は煽り・叩きをしない人間だが、今回ばかりは83への同情を禁じ得ない
2017/03/19(日) 14:43:20.30ID:o9adXXiq
返事ありがとうございます
まず、何の言語かわからなかったのと
モナコインの質問板がなかったの、ここに書き込みました
向こうのどっか適当なところに書き込みします
お騒がせしました
まず、何の言語かわからなかったのと
モナコインの質問板がなかったの、ここに書き込みました
向こうのどっか適当なところに書き込みします
お騒がせしました
2017/03/19(日) 15:18:21.74ID:cwNaGN41
何の言語かわからなくても質問できるスレだってあるのににに
2017/04/13(木) 08:52:14.43ID:G0/b3aDb
class Parent{
int i;
};
class Child : Parent{
char ch;
};
Parent *ptr = new Child();
delete ptr;
こういうことをした時にメモリを確保するときはChildの変数chの分まで多くメモリを確保してると思うのですが
解放するときにちゃんとchの部分も解放されますか?
delete (Child*)ptr;
みたいにしないとダメですか?
int i;
};
class Child : Parent{
char ch;
};
Parent *ptr = new Child();
delete ptr;
こういうことをした時にメモリを確保するときはChildの変数chの分まで多くメモリを確保してると思うのですが
解放するときにちゃんとchの部分も解放されますか?
delete (Child*)ptr;
みたいにしないとダメですか?
2017/04/13(木) 09:47:58.57ID:xWAyKptX
>>87
デストラクタがvirtualなら必要ないけどこの場合違うからキャストが必要かな
デストラクタがvirtualなら必要ないけどこの場合違うからキャストが必要かな
2017/04/13(木) 09:54:46.51ID:knppr/uB
>解放するときにちゃんとchの部分も解放されますか?
されない
>delete (Child*)ptr;
>みたいにしないとダメですか?
それでも解放はできるけど、それじゃ継承の利点であるポリモーフィズムが台無しになるので
デストラクタを仮想関数にするのが常套手段
class Parent{
int i;
public:
virtual ~Parent(){}
};
class Child : public Parent{
char ch;
};
されない
>delete (Child*)ptr;
>みたいにしないとダメですか?
それでも解放はできるけど、それじゃ継承の利点であるポリモーフィズムが台無しになるので
デストラクタを仮想関数にするのが常套手段
class Parent{
int i;
public:
virtual ~Parent(){}
};
class Child : public Parent{
char ch;
};
2017/04/13(木) 11:21:16.25ID:Wi4DC5Bh
2017/04/13(木) 11:54:43.94ID:G0/b3aDb
どっちを信じたら良いんですか!?
2017/04/13(木) 12:59:56.01ID:knppr/uB
基底クラスのデストラクタはvirtualにしておけ
>>91も間違いでは無いが、chの型が変わっただけで前提が崩れる話だよ
>>91も間違いでは無いが、chの型が変わっただけで前提が崩れる話だよ
2017/04/13(木) 13:07:52.52ID:grSNqbAR
誰かが答えた後にでてきて何の説明もなくただ前の否定や異なる結論だけを言うやつは
(結果的に正しいことだったとしても)無視すればええんや
(結果的に正しいことだったとしても)無視すればええんや
2017/04/13(木) 21:32:13.97ID:r2gjPspU
確かに
96デフォルトの名無しさん
2017/04/13(木) 21:49:16.84ID:Qxk7VllX せやな
2017/05/06(土) 11:45:32.33ID:3nLTZXlU
深い階層を表すのに適したデータ構造というかクラスはなんですか?
unordered_mapを使ってキー/値のペアで作ったツリー構造があるんですが、
最適化をオフにすると500くらいの深さでもスタックオーバーフローが起きてしまいます。
Visual Studioを使っているのでReleaseビルャhのC++ライブラリとDebugのものは組み合わせられないし、
かといって常に最適化オンだとデバッグが不便です。
何かいい方法はありませんか?お願いします
unordered_mapを使ってキー/値のペアで作ったツリー構造があるんですが、
最適化をオフにすると500くらいの深さでもスタックオーバーフローが起きてしまいます。
Visual Studioを使っているのでReleaseビルャhのC++ライブラリとDebugのものは組み合わせられないし、
かといって常に最適化オンだとデバッグが不便です。
何かいい方法はありませんか?お願いします
2017/05/06(土) 13:56:44.08ID:f2NDPPRD
それだけじゃ何がしたいかさっぱり分からんけど
Compositeパターンでぐぐって出てくる奴とか参考にならんかね
Compositeパターンでぐぐって出てくる奴とか参考にならんかね
2017/05/06(土) 14:11:14.45ID:yLSgVzXR
スタックオーバーフロー?データ構造の問題じゃないと思われ
問題再現できるコードを上げるでもしないと誰も答えられないよ
問題再現できるコードを上げるでもしないと誰も答えられないよ
100デフォルトの名無しさん
2017/05/06(土) 15:30:45.88ID:DLhZv41T >>97
一般的には木構造で問題ない
ただ自分で実装する時に単純にノードの処理関数を子ノードに対して再帰的に呼び出す実装にしていると
階層が深くなったときはコールスタック不足でスタックオーバーフローになるので
ループで処理するとかの実装にしておく必要がある
一般的には木構造で問題ない
ただ自分で実装する時に単純にノードの処理関数を子ノードに対して再帰的に呼び出す実装にしていると
階層が深くなったときはコールスタック不足でスタックオーバーフローになるので
ループで処理するとかの実装にしておく必要がある
木構造のループですか‥やってできないことはないだろうけれどもめんどくさいね goto の連発だね
10297
2017/05/06(土) 16:02:38.76ID:3nLTZXlU 遅くなったけどideone用に書き換えたコードがこれです
http://ideone.com/nJqdHZ
やりたいことは単に階層構造のテキストデータを読み取って、置換したり変形することです。
Visual StudioでDebugビルドしたものを実行すると、id: 248 とか表示されるあたりでスタックオーバーフローが起きて停止します。
ちょっと調べたところだと再帰→ループへの展開は定番みたいですね。
そっちの方向で考えてみたいと思います。どうもありがとうございます。
(…でも、250程度の数の階層くらい頭を使わずに書いたコードでも動いてくれという気がスル)
http://ideone.com/nJqdHZ
やりたいことは単に階層構造のテキストデータを読み取って、置換したり変形することです。
Visual StudioでDebugビルドしたものを実行すると、id: 248 とか表示されるあたりでスタックオーバーフローが起きて停止します。
ちょっと調べたところだと再帰→ループへの展開は定番みたいですね。
そっちの方向で考えてみたいと思います。どうもありがとうございます。
(…でも、250程度の数の階層くらい頭を使わずに書いたコードでも動いてくれという気がスル)
103デフォルトの名無しさん
2017/05/07(日) 09:09:11.08ID:w48Ptm+H104デフォルトの名無しさん
2017/05/07(日) 10:23:46.07ID:czCtMb/5 >>102のコードってどこで再帰処理してるの?
105デフォルトの名無しさん
2017/05/07(日) 10:34:34.49ID:w48Ptm+H >>104
Dataのデストラクタ実行後に(暗黙的に)実行されるsubitemsの解放処理
Dataのデストラクタ実行後に(暗黙的に)実行されるsubitemsの解放処理
106デフォルトの名無しさん
2017/05/07(日) 10:58:59.52ID:czCtMb/5107デフォルトの名無しさん
2017/05/09(火) 04:51:17.39ID:CfLPAbNS C.C++で初めて作ったのってみんな何?
108デフォルトの名無しさん
2017/05/09(火) 05:45:43.95ID:A9/kHnP9 Hello world
109デフォルトの名無しさん
2017/05/09(火) 13:14:48.03ID:ZO11Ha1i110デフォルトの名無しさん
2017/05/11(木) 17:34:15.21ID:9hjkljzx ああ、独り言だしスレ違いだからスルーして。でも、どうしても言いたいし、雑談スレもないから
ここに書かせて。。
俺はC/C++が大好きなんだけど、GtkとかQtとか大好きなんだけど、Pythonが両方バインドしてるから
使ってみたんだけど、import文がある言語(Java、D言語、Python)って脳の向きと逆向きに設計されてね?
すげえ、違和感あって、使ってるとキモくなってくる。その点、include文はいいわ・・。大好き。
ここに書かせて。。
俺はC/C++が大好きなんだけど、GtkとかQtとか大好きなんだけど、Pythonが両方バインドしてるから
使ってみたんだけど、import文がある言語(Java、D言語、Python)って脳の向きと逆向きに設計されてね?
すげえ、違和感あって、使ってるとキモくなってくる。その点、include文はいいわ・・。大好き。
111デフォルトの名無しさん
2017/05/11(木) 19:24:16.98ID:BuwAxFWP JavaとCがそれほど違うようには感じられないけど
112デフォルトの名無しさん
2017/05/11(木) 19:46:38.79ID:9hjkljzx クラスの構造とかどうしても合わんわ。。あと、普通に文書いてても違和感感じるw
113デフォルトの名無しさん
2017/05/11(木) 20:44:47.50ID:r6M771XX114デフォルトの名無しさん
2017/05/11(木) 22:53:38.75ID:LJGZTDJk ファイル名に制約がかかる言語なかったっけ?
Java?
Java?
115デフォルトの名無しさん
2017/05/11(木) 23:24:48.41ID:1a/5L+8A javaは知らないがCは制約ある
正確にはファイル名じゃなくてincludeで指定する文字列だけど
正確にはファイル名じゃなくてincludeで指定する文字列だけど
116デフォルトの名無しさん
2017/05/12(金) 07:20:43.83ID:yoAOukLs Cのexport文と一対一になってないというだけの話じゃね
117デフォルトの名無しさん
2017/05/12(金) 07:25:29.38ID:r7FlYbQi C#のusingも同じなのかな
やっぱいまいちわからん
やっぱいまいちわからん
118デフォルトの名無しさん
2017/05/12(金) 09:45:14.44ID:gCSxRRWi Cの制約って何だ?
vs2015だが、ファイル名全角スペースでもエラーでない
vs2015だが、ファイル名全角スペースでもエラーでない
119デフォルトの名無しさん
2017/05/12(金) 12:06:01.20ID:OCYL1E3A120デフォルトの名無しさん
2017/05/12(金) 13:40:23.46ID:FoBe9UZW C++から3年ほど遠ざかっていた俺に最近のC++の何か凄いテクニックを教えてくれ。
121デフォルトの名無しさん
2017/05/12(金) 13:51:20.92ID:YITQwMx2 c++1zで使えるようになるvariantとかどうかね
(記述の見掛け上という意味で)継承を使わず 多態を実現できる
現状はboostでお試し可能
(記述の見掛け上という意味で)継承を使わず 多態を実現できる
現状はboostでお試し可能
122デフォルトの名無しさん
2017/05/12(金) 16:47:43.02ID:FoBe9UZW123デフォルトの名無しさん
2017/05/12(金) 19:18:49.01ID:fokGnnSL >>118
vcがそう実装してるだけで、他の処理系も同じようにエラーがでない保証はない
最低限のラインは、8文字+「.」+1文字で英数字のみ、ただし先頭は英字のみ、大文字小文字を区別する保証なし
規格上、inludeの文字列とファイル名が一致するかも定かでないから、気にしても無駄だけど
vcがそう実装してるだけで、他の処理系も同じようにエラーがでない保証はない
最低限のラインは、8文字+「.」+1文字で英数字のみ、ただし先頭は英字のみ、大文字小文字を区別する保証なし
規格上、inludeの文字列とファイル名が一致するかも定かでないから、気にしても無駄だけど
124デフォルトの名無しさん
2017/05/12(金) 19:23:40.34ID:WYsaiAgn たぶんCに制約はないだろ
125デフォルトの名無しさん
2017/05/12(金) 20:53:24.64ID:37oyzgXT ファイル名に「<」や「>」とか含んでいると困るの
126デフォルトの名無しさん
2017/05/13(土) 07:23:06.14ID:bjLbBbns ファイル名に制約という提起で
まさかファイル名や#includeに使えない文字の話になるとは思ってなかった
まさかファイル名や#includeに使えない文字の話になるとは思ってなかった
127デフォルトの名無しさん
2017/05/13(土) 08:04:09.13ID:DnMUFoIp 2chだからな
128デフォルトの名無しさん
2017/05/14(日) 16:50:22.30ID:gwLsZ5pp あるアルゴリズムをメソッドとして実装したクラスがあって、
そのアルゴの中で20個くらいの定数を用いる。
そのアルゴリズムの亜種をサブクラスとして作りたいが、その亜種の中では定数の値を親クラスの値とは違う値にしたい。
こういう時、定数群はどうやって定義するのがいいでしょうか。
メンバ変数として全部const intで持っておいて、
コンストラクタの初期化の文法で各クラス固有の値を入れればいいでしょうか。
できれば外部ファイルにjasonとかで持たせられないかとも思ってもいますが、それだとコンストラクタ内のconst intの初期化より先には読み込めないですよね。
浅学で恐縮です。よろしくお願いします。
そのアルゴの中で20個くらいの定数を用いる。
そのアルゴリズムの亜種をサブクラスとして作りたいが、その亜種の中では定数の値を親クラスの値とは違う値にしたい。
こういう時、定数群はどうやって定義するのがいいでしょうか。
メンバ変数として全部const intで持っておいて、
コンストラクタの初期化の文法で各クラス固有の値を入れればいいでしょうか。
できれば外部ファイルにjasonとかで持たせられないかとも思ってもいますが、それだとコンストラクタ内のconst intの初期化より先には読み込めないですよね。
浅学で恐縮です。よろしくお願いします。
129デフォルトの名無しさん
2017/05/14(日) 16:59:28.84ID:C90eDFbL 亜種が定数が違うだけならコンストラクタでええんでない?
アルゴリズムも似てるだけで少し違うとかなら使えんかも知らんけど
アルゴリズムも似てるだけで少し違うとかなら使えんかも知らんけど
130デフォルトの名無しさん
2017/05/14(日) 17:42:51.46ID:abQtpPi4 >>128
定数ではなくメンバ変数でいいじゃないの?
外部から変更されたくないなら読み取りプロパティにすればよいし
亜種はサブクラスのインスタンス作成時にファイルを読み込むようにして
親クラスのメンバ変数を上書きするようにする。
定数ではなくメンバ変数でいいじゃないの?
外部から変更されたくないなら読み取りプロパティにすればよいし
亜種はサブクラスのインスタンス作成時にファイルを読み込むようにして
親クラスのメンバ変数を上書きするようにする。
131デフォルトの名無しさん
2017/05/19(金) 19:46:36.77ID:BDF1+v1a コピーコンストラクタのところでエラーがでます。
>オブジェクトにメンバー 関数 "A::getFileName" と互換性のない型修飾子があります
>C2662 'const std::string &A::getFileName(void)': 'const A' から 'A &' へ 'this' ポインターを変換できません。
どう直せばいいのですか?
class A {
public:
A() {}
A(const A &a) {
this->setFileName(a.getFileName()); //ここでエラー
}
void setFileName(const std::string& fn) {
this->m_fileName = fn;
}
const std::string& getFileName() {
return this->m_fileName;
}
private:
std::string m_fileName;
};
>オブジェクトにメンバー 関数 "A::getFileName" と互換性のない型修飾子があります
>C2662 'const std::string &A::getFileName(void)': 'const A' から 'A &' へ 'this' ポインターを変換できません。
どう直せばいいのですか?
class A {
public:
A() {}
A(const A &a) {
this->setFileName(a.getFileName()); //ここでエラー
}
void setFileName(const std::string& fn) {
this->m_fileName = fn;
}
const std::string& getFileName() {
return this->m_fileName;
}
private:
std::string m_fileName;
};
132デフォルトの名無しさん
2017/05/19(金) 20:33:23.63ID:iLAnMNZa linux mint18 32bit
python3をF5で実行できるエディターは無いでしょうか?
Geany 1.27ではpython2.7なので、python3.5を使用したいと思ってます
PC自体にはpytho3.5と2.7が入ってます
python3をF5で実行できるエディターは無いでしょうか?
Geany 1.27ではpython2.7なので、python3.5を使用したいと思ってます
PC自体にはpytho3.5と2.7が入ってます
133デフォルトの名無しさん
2017/05/19(金) 20:34:44.55ID:iLAnMNZa 間違えました
134デフォルトの名無しさん
2017/05/19(金) 21:14:19.37ID:gHk1Pzkh135デフォルトの名無しさん
2017/05/19(金) 22:24:40.24ID:BDF1+v1a136デフォルトの名無しさん
2017/05/25(木) 22:25:27.96ID:QzzPv//a クラスのメンバ関数のポインタはすべてのインスタンスに共通で
例えばvectorに自作クラスを入れといてあとから要素の挿入・削除をして
インスタンスのメモリ上の位置が変わっても関数のポインタは変わらない
って理解であってますか?
例えばvectorに自作クラスを入れといてあとから要素の挿入・削除をして
インスタンスのメモリ上の位置が変わっても関数のポインタは変わらない
って理解であってますか?
137デフォルトの名無しさん
2017/05/25(木) 23:22:02.15ID:WUcUkfwI はい
関数の配置アドレスが実行時に変わるなんてことは起きないので
ちなみに同じインスタンスなのにメモリ上の位置が変わるなんてこともないと思うが
関数の配置アドレスが実行時に変わるなんてことは起きないので
ちなみに同じインスタンスなのにメモリ上の位置が変わるなんてこともないと思うが
138デフォルトの名無しさん
2017/05/28(日) 16:14:14.69ID:yvANlV24 Eigenに
operator*
でなくて逆向きかけ算の関数rdotを追加したい
つまり
some_object * eigen_matrix
するために
Eigen::EigenBase<Derived>::rdot
を追加して
eigen_matrix.rdot(some_object);
で計算できるようにしたい
しかし
no member function declared in class
というエラーになる
どうやったら後付けでmember function追加できるんだ?
Eigenの中はいじりたくない
operator*
でなくて逆向きかけ算の関数rdotを追加したい
つまり
some_object * eigen_matrix
するために
Eigen::EigenBase<Derived>::rdot
を追加して
eigen_matrix.rdot(some_object);
で計算できるようにしたい
しかし
no member function declared in class
というエラーになる
どうやったら後付けでmember function追加できるんだ?
Eigenの中はいじりたくない
139デフォルトの名無しさん
2017/05/28(日) 21:29:06.26ID:p7YrRaRu 元のクラス定義を変更せずにクラスにメンバ関数を追加することはできない
140デフォルトの名無しさん
2017/05/28(日) 23:55:15.37ID:T1SZ8kqz 継承したらダメなんか?
141デフォルトの名無しさん
2017/06/01(木) 07:42:47.62ID:SDX804Eo Eigen3の実装みてるんだけど
class Matrix{
operator * const ...
}
でほとんどの関数がconstで統一されてるのに
transposeだけconstついたのと,ついてないの2つあるのは何故?
class Matrix{
operator * const ...
}
でほとんどの関数がconstで統一されてるのに
transposeだけconstついたのと,ついてないの2つあるのは何故?
142デフォルトの名無しさん
2017/06/01(木) 10:34:56.04ID:tub0QHg4 そのほうが便利だ(と作者が思った)からだろう
const版
返されたtransposeはconstで変更不能
非const版
返されたtransposeは変更可能
変更すると間接的に元のmatrixも変更される
const版
返されたtransposeはconstで変更不能
非const版
返されたtransposeは変更可能
変更すると間接的に元のmatrixも変更される
143デフォルトの名無しさん
2017/06/02(金) 21:10:48.66ID:hdQ1KfrD プログラミング言語C++第4版の本を今頑張って読んでいます。
その中で、サンプルコードは著者のサイトでとURLが乗っているのですが、
これがトップページのURLしか書いてなくてどこからダウンロードできるかわからない状態です。
いろいろ調べたら、グーグルコードのサイトに飛ぶ場所を見かけたのでDLできるかと思いましたが、
グーグルコードは去年の一月には廃止されていて、ダウンロードができない状態です。
ほかにサンプルコードダウンロードできるような場所はあるのでしょうか。
色々と探しても同じような人は見当たりませんし、困っています。
どなたかご存知の方いらっしゃらないでしょうか。
その中で、サンプルコードは著者のサイトでとURLが乗っているのですが、
これがトップページのURLしか書いてなくてどこからダウンロードできるかわからない状態です。
いろいろ調べたら、グーグルコードのサイトに飛ぶ場所を見かけたのでDLできるかと思いましたが、
グーグルコードは去年の一月には廃止されていて、ダウンロードができない状態です。
ほかにサンプルコードダウンロードできるような場所はあるのでしょうか。
色々と探しても同じような人は見当たりませんし、困っています。
どなたかご存知の方いらっしゃらないでしょうか。
144デフォルトの名無しさん
2017/06/02(金) 22:06:31.65ID:uqHV+hQL 本持ってないけどこのページ上のリンクからダウンロードできるやつではないの?
https://code.google.com/archive/p/origin/source/default/source?page=1
https://code.google.com/archive/p/origin/source/default/source?page=1
145デフォルトの名無しさん
2017/06/03(土) 13:03:58.47ID:7x/augC4 >>144さん
返信ありがとうございます。
ダウンロードばかり気にしていたのかソースというところに気が付きませんでした。お恥ずかしい。
普通にダウンロードできまして、ソースも確認できました。
testingのソースコードが本に書いてあるコードと大体同じように書かれてたのでこれだと思います。
ただ、入門書ってわけじゃないからなのか、洋書だからなのかわかりませんが、
本で書かれているコードだいぶ端折っているなっていう感じなので、正確にこのサンプルで問題ないのかがわからないです。
返信ありがとうございます。
ダウンロードばかり気にしていたのかソースというところに気が付きませんでした。お恥ずかしい。
普通にダウンロードできまして、ソースも確認できました。
testingのソースコードが本に書いてあるコードと大体同じように書かれてたのでこれだと思います。
ただ、入門書ってわけじゃないからなのか、洋書だからなのかわかりませんが、
本で書かれているコードだいぶ端折っているなっていう感じなので、正確にこのサンプルで問題ないのかがわからないです。
146デフォルトの名無しさん
2017/06/03(土) 13:12:54.00ID:7x/augC4 143,145です。
すいません。145はなんか途中で書き込みをしてしまいました。
話を戻しまして、
でも、問題ないかがわからないのは、本もまだほとんど読めてないのと、C++も入門書を一回軽く読んだ程度の知識しかないので、わからないだけだと思いますので
本(サンプルも)を参考に自分でソースコードを記述していきたいと思います。
>>144さんのおかげで、ソースも手に入り、教えてもらったことで、モチベーションもあがりました(^^♪)
次に進めそうです。本当にありがとうございました。
すいません。145はなんか途中で書き込みをしてしまいました。
話を戻しまして、
でも、問題ないかがわからないのは、本もまだほとんど読めてないのと、C++も入門書を一回軽く読んだ程度の知識しかないので、わからないだけだと思いますので
本(サンプルも)を参考に自分でソースコードを記述していきたいと思います。
>>144さんのおかげで、ソースも手に入り、教えてもらったことで、モチベーションもあがりました(^^♪)
次に進めそうです。本当にありがとうございました。
147デフォルトの名無しさん
2017/06/09(金) 00:20:22.42ID:8CSNtvHv 他の言語結構熟練してたらべつだけど、
cプラにほとんど慣れてない状態で
この本を読んでも効率わるいだけとおもうがねぇ。
cプラにほとんど慣れてない状態で
この本を読んでも効率わるいだけとおもうがねぇ。
148デフォルトの名無しさん
2017/06/09(金) 00:30:02.53ID:8GQEdlWI 勉強してる気になれるからいいんだよ
149デフォルトの名無しさん
2017/07/01(土) 12:35:47.56ID:ID6W3bit スタティーック!
150デフォルトの名無しさん
2017/08/08(火) 00:05:19.81ID:O9M7bV7S C言語の関数ポインタというものは関数ポインタとして作られたのか通常のポインタの改良なのかどちらなのでしょうか?
関数ポインタの引数の仕組みがよく分からなかったので質問してみました
よろしくお願いします
関数ポインタの引数の仕組みがよく分からなかったので質問してみました
よろしくお願いします
151デフォルトの名無しさん
2017/08/08(火) 00:42:15.53ID:m8GLf68F 言ってる意味が良くわからないが
ポインタの性質は「型」で決まる
あるデータをどのように見なすか
それだけ
32bitだか64bitだかのデータを、文法上どう見なすかってだけ
関数ポインタの場合は関数のエントリーポイントと見なす
引数の数や種類や呼び出し方などは、型が知っている
型に基づいて呼び出すだけ
ポインタの性質は「型」で決まる
あるデータをどのように見なすか
それだけ
32bitだか64bitだかのデータを、文法上どう見なすかってだけ
関数ポインタの場合は関数のエントリーポイントと見なす
引数の数や種類や呼び出し方などは、型が知っている
型に基づいて呼び出すだけ
152デフォルトの名無しさん
2017/08/08(火) 02:23:09.82ID:SgAIOr6T >>150
極論言えば、配列のポインタも関数のポインタもただのポインタ。
対象が配列だから配列的にも振る舞える。
関数だから関数的にも振る舞える。
ただそれだけやね。
型は配列的とか関数的とかに振る舞う時のルール引数得るのに何回スタックからpushするかとかを教えるヒントにすぎない。
この辺はアセンブラ知ってると理解しやすいかもね。
極論言えば、配列のポインタも関数のポインタもただのポインタ。
対象が配列だから配列的にも振る舞える。
関数だから関数的にも振る舞える。
ただそれだけやね。
型は配列的とか関数的とかに振る舞う時のルール引数得るのに何回スタックからpushするかとかを教えるヒントにすぎない。
この辺はアセンブラ知ってると理解しやすいかもね。
153デフォルトの名無しさん
2017/08/08(火) 02:24:25.91ID:SgAIOr6T あ、スタック「から」だとpopやった。。。
154デフォルトの名無しさん
2017/08/08(火) 22:52:38.23ID:O9M7bV7S 変数のポインタはint *i;でアドレスだけを保持していて
関数ポインタはint (*func)(int i);でアドレスと引数リストを保持しているように思えます
引数が必要なのは分かりますが(int i)を勝手に付け足しても良いものなのかなと思いまして
関数ポインタはint (*func)(int i);でアドレスと引数リストを保持しているように思えます
引数が必要なのは分かりますが(int i)を勝手に付け足しても良いものなのかなと思いまして
155デフォルトの名無しさん
2017/08/08(火) 23:34:37.02ID:fmd6E2St156デフォルトの名無しさん
2017/08/08(火) 23:44:08.72ID:nf4ZHvzc >>154
何したくて何ききたいのかさっぱりだな
アドレスだけ見せられても、それが変数のアドレスなのか、関数のアドレスなのか、変数なら型は何なのか、関数なら引数あるのかないのか、あるならその型は・・・
アドレスだけじゃ解決できないよ
何したくて何ききたいのかさっぱりだな
アドレスだけ見せられても、それが変数のアドレスなのか、関数のアドレスなのか、変数なら型は何なのか、関数なら引数あるのかないのか、あるならその型は・・・
アドレスだけじゃ解決できないよ
157デフォルトの名無しさん
2017/08/08(火) 23:55:54.36ID:rlbWG25h158デフォルトの名無しさん
2017/08/09(水) 00:47:51.09ID:hEgnFYnk int *p;が逆参照したときにintとして扱えるように
int (*p)[10];が逆参照したときに配列として扱えるように
(君の言い分だと↑も[10]を勝手に付け足しているように見えるのかもしれないが)
型というものがあって、コンパイラは型を知っているから正しくアクセスできる
同じように
void (*p)(int i);としたとき、pはintを引数に取る関数のポインタという「型」になるから
その型をもってしてコンパイラは関数を呼び出せる
そう考えれば(int i)が付くのも当たり前、それが必要だからそういう文法になっている
「アクセスするときに必要となる情報を型として与えているのだよ」
特にCの場合は「そう見なしてくれ」という意味合いが強い
キャストして型を変えれば割とどうとでもなる面白い言語
単なるメモリブロックを配列や構造体と見なしてアクセスしたり
こういうことが出来る言語はあまりないので
低レベルでは未だにC系の言語が重宝されている
int (*p)[10];が逆参照したときに配列として扱えるように
(君の言い分だと↑も[10]を勝手に付け足しているように見えるのかもしれないが)
型というものがあって、コンパイラは型を知っているから正しくアクセスできる
同じように
void (*p)(int i);としたとき、pはintを引数に取る関数のポインタという「型」になるから
その型をもってしてコンパイラは関数を呼び出せる
そう考えれば(int i)が付くのも当たり前、それが必要だからそういう文法になっている
「アクセスするときに必要となる情報を型として与えているのだよ」
特にCの場合は「そう見なしてくれ」という意味合いが強い
キャストして型を変えれば割とどうとでもなる面白い言語
単なるメモリブロックを配列や構造体と見なしてアクセスしたり
こういうことが出来る言語はあまりないので
低レベルでは未だにC系の言語が重宝されている
159デフォルトの名無しさん
2017/08/09(水) 00:52:32.88ID:hEgnFYnk ちなみに
>>157は間違ってるから気にしなくてよいよ
C言語は静的型だから「実際に行かなくても先にあるものが分かる」
というか、先に何があろうが、「型」の示すものがあるものとして扱う
だから、病院の型のポインタに君の家のアドレスを入れたら
君の家に病人が殺到してバグる
キャストしなければそういう代入は出来ないようになっているがな
>>157は間違ってるから気にしなくてよいよ
C言語は静的型だから「実際に行かなくても先にあるものが分かる」
というか、先に何があろうが、「型」の示すものがあるものとして扱う
だから、病院の型のポインタに君の家のアドレスを入れたら
君の家に病人が殺到してバグる
キャストしなければそういう代入は出来ないようになっているがな
160デフォルトの名無しさん
2017/08/09(水) 01:02:42.02ID:hEgnFYnk 逆に、C言語は静的型だから、「実際に行ってみても、それが何であるか分からない」
住所に行ってみても、名札も無ければ看板も無いので、それが何なのか分からない
そういった情報は全部メタ的に「型」にしかない
そして型はコンパイル時のコンパイラしか知らない
コンパイル後のコードには型情報は綺麗さっぱり消えてなくなってる
C言語はデータになんであるかを示す型情報が無い
実行時にデータから型を取得することはできない
なんで、関数ポインタの型にはそれを通して関数を呼び出せるだけの情報が必要
そういうことが出来る文法になってる
住所に行ってみても、名札も無ければ看板も無いので、それが何なのか分からない
そういった情報は全部メタ的に「型」にしかない
そして型はコンパイル時のコンパイラしか知らない
コンパイル後のコードには型情報は綺麗さっぱり消えてなくなってる
C言語はデータになんであるかを示す型情報が無い
実行時にデータから型を取得することはできない
なんで、関数ポインタの型にはそれを通して関数を呼び出せるだけの情報が必要
そういうことが出来る文法になってる
161デフォルトの名無しさん
2017/08/09(水) 01:04:32.68ID:hEgnFYnk >そして型はコンパイル時のコンパイラしか知らない
あとプログラマとね
あとプログラマとね
162デフォルトの名無しさん
2017/08/09(水) 01:31:24.27ID:6o6it4hw ありがとうございます
質問が分かりづらかったようですみませんでした
intとして扱えるポインタの型や配列として扱えるポインタの型、関数として扱えるポインタの型と言うようにポインタにも幾つかの型があるんですね
ようやく皆さんの言っていることが分かりました
他にもどんな型があるのか知りたいのですが、こういったことはどこに書いてあるのでしょうか?
質問が分かりづらかったようですみませんでした
intとして扱えるポインタの型や配列として扱えるポインタの型、関数として扱えるポインタの型と言うようにポインタにも幾つかの型があるんですね
ようやく皆さんの言っていることが分かりました
他にもどんな型があるのか知りたいのですが、こういったことはどこに書いてあるのでしょうか?
163デフォルトの名無しさん
2017/08/09(水) 10:28:38.52ID:RdtvDY+v164デフォルトの名無しさん
2017/08/09(水) 13:08:26.15ID:FEqENNu4 >>162
なんか勘違いしてる。
ポインタはポインタが指す先のデータ型をポインタの型と言ってるだけで、
ポインタに根本的に異なる種類があるわけじゃない。
たまに見る「ポインタはアドレスだ」っていうのはそういう意味だけど、
アドレスという言い方は初心者には分かりやすいかもしれないけど
不正確なので、そういうレスは要注意
なんか勘違いしてる。
ポインタはポインタが指す先のデータ型をポインタの型と言ってるだけで、
ポインタに根本的に異なる種類があるわけじゃない。
たまに見る「ポインタはアドレスだ」っていうのはそういう意味だけど、
アドレスという言い方は初心者には分かりやすいかもしれないけど
不正確なので、そういうレスは要注意
165デフォルトの名無しさん
2017/08/09(水) 17:47:06.00ID:Nvjd+alY もう面倒だから void *p
166デフォルトの名無しさん
2017/08/11(金) 11:07:36.66ID:Ca8C76qb >>164
アドレス、でいいと思うよ、どんなときに不正確になるの?
アドレス、でいいと思うよ、どんなときに不正確になるの?
167デフォルトの名無しさん
2017/08/11(金) 11:37:15.24ID:nYt6U0do >>165
昔、voidっていう人いたよね
昔、voidっていう人いたよね
168デフォルトの名無しさん
2017/08/11(金) 12:03:58.06ID:Ca8C76qb 日下部さんだね、一連の馬鹿吊り上げの手法はたいしたものだ
彼にかかると面白いように釣れるんだね
彼にかかると面白いように釣れるんだね
169デフォルトの名無しさん
2017/08/12(土) 11:18:07.25ID:gBGehi2j >>166
void型のポインタに関してはアドレスでいいと思うよ
void型のポインタに関してはアドレスでいいと思うよ
170デフォルトの名無しさん
2017/08/22(火) 14:42:32.63ID:a5iq0eNT171デフォルトの名無しさん
2017/09/09(土) 17:22:28.03ID:ua/r5C7o ヌルポはアドレス0を示すポインタと区別が付かない。
ポインタ演算はアドレス計算で間違いないと思うが。
ポインタ演算はアドレス計算で間違いないと思うが。
172デフォルトの名無しさん
2017/09/10(日) 01:13:46.17ID:kRb3fDCd 0を示すものに1を加えたとき、1になって欲しいのがアドレス
そうとは限らないのがポインタ
そうとは限らないのがポインタ
173デフォルトの名無しさん
2017/09/10(日) 01:41:24.87ID:ZBmzdD/d なら、そこまで言うなら
アドレスには型が無い、あっても整数型、intptr_tとか
ポインタには型があって、*や->や()を使って指し示すものにアクセスできる
という大いなる違いがある
アドレスを静的型でラップしたものにポインターという名前を付けた、程度
アドレスには型が無い、あっても整数型、intptr_tとか
ポインタには型があって、*や->や()を使って指し示すものにアクセスできる
という大いなる違いがある
アドレスを静的型でラップしたものにポインターという名前を付けた、程度
174デフォルトの名無しさん
2017/09/10(日) 01:52:16.37ID:tW3VD+Zp その程度違いがあるから、アドレス≠ポインタだね
175デフォルトの名無しさん
2017/09/10(日) 11:43:30.44ID:Yx0nU1n/ >>171
ヌルポしたけど sage だから失敗
ヌルポしたけど sage だから失敗
176デフォルトの名無しさん
2017/09/10(日) 22:38:52.49ID:6lPEiBMC アドレス値を入れる種類の変数(の型)≡ポインタ
アドレスとポインタは一緒だとおもうよ,ポインタに型がある,とかいうのはCコンパイラ言語仕様側の都合にすぎないし
アドレスの整数値とポインタの表現する整数値が食い違う例(ただし NULL とか far/near はわかっているから除く:−)ってそんなにないんじゃないの?
アドレスの整数値とポインタの表現する整数値が食い違う例(ただし NULL とか far/near はわかっているから除く:−)ってそんなにないんじゃないの?
178デフォルトの名無しさん
2017/09/17(日) 14:44:48.15ID:qULdwsa1 アドレスとポインタは違うと思うけどなあ
アドレスは数値そのもの、ポインタはその入れ物
だから「int型のアドレス」とは言わないし、「ポインタ0x12345678番」とは言わないし
アドレスは数値そのもの、ポインタはその入れ物
だから「int型のアドレス」とは言わないし、「ポインタ0x12345678番」とは言わないし
179デフォルトの名無しさん
2017/09/17(日) 15:07:54.63ID:KmM7k2LQ >>178
これが正しい
これが正しい
180デフォルトの名無しさん
2017/09/17(日) 15:32:04.84ID:dEX9B4aF 入れ物をインクリメントするのも変だよな。
181デフォルトの名無しさん
2017/09/17(日) 15:45:07.67ID:iyMogwhx >Cコンパイラ言語仕様側の都合にすぎないし
あほだなぁと思うのは、ここで言うポインタというのは
C言語の仕様で定められたポインタのことじゃないのか?
C言語の仕様として「ポインタ」が定められていて
それに関してどうこうって時に
C言語の仕様の都合だから〜とかイミフ
C言語のポインタにC言語の仕様以外の意味なんかないだろ
あほだなぁと思うのは、ここで言うポインタというのは
C言語の仕様で定められたポインタのことじゃないのか?
C言語の仕様として「ポインタ」が定められていて
それに関してどうこうって時に
C言語の仕様の都合だから〜とかイミフ
C言語のポインタにC言語の仕様以外の意味なんかないだろ
182デフォルトの名無しさん
2017/09/17(日) 15:50:42.26ID:53PrWSTF >>181,178
これだなw
これだなw
183デフォルトの名無しさん
2017/09/17(日) 16:21:54.39ID:qULdwsa1 >>180
インクリメントしているのは入れ物の中身では?
インクリメントしているのは入れ物の中身では?
184デフォルトの名無しさん
2017/09/17(日) 16:52:30.92ID:nfmsAfUe >>178の例えだと中身はアドレスってことになるが、ポインタのインクリメントは
アドレスのインクリメントとは違うだろう。
アドレスのインクリメントとは違うだろう。
185デフォルトの名無しさん
2017/09/17(日) 17:01:41.39ID:qULdwsa1 「アドレス0x12345678番をインクリメントする」のだから間違いでは無いと思うよ
ただ数値をいくつ増加させるかはポインタの型(つまり入れ物の型)に依存する
ただ数値をいくつ増加させるかはポインタの型(つまり入れ物の型)に依存する
186デフォルトの名無しさん
2017/09/17(日) 17:24:14.07ID:nfmsAfUe だからそれがポインタのインクリメントだろう。
わざわざ入れ物だ中身だと意味がよくわからない例えは余計。
わざわざ入れ物だ中身だと意味がよくわからない例えは余計。
187デフォルトの名無しさん
2017/09/17(日) 17:30:00.83ID:dEX9B4aF188デフォルトの名無しさん
2017/09/17(日) 17:30:33.37ID:qULdwsa1 何が言いたいのか良く分からないんだが
アドレスとポインタは違うものでポインタはアドレスを入れるものってだけの話だよ
アドレスそのものに型はないがポインタには型がある
ポインタのインクリメントとは、ポインタの型に従ってアドレスをインクリメントする
アドレスとポインタは違うものでポインタはアドレスを入れるものってだけの話だよ
アドレスそのものに型はないがポインタには型がある
ポインタのインクリメントとは、ポインタの型に従ってアドレスをインクリメントする
189デフォルトの名無しさん
2017/09/17(日) 17:31:34.74ID:53PrWSTF いちゃもんレベルだなw
190デフォルトの名無しさん
2017/09/17(日) 17:34:55.50ID:qULdwsa1191デフォルトの名無しさん
2017/09/17(日) 17:55:30.80ID:KmM7k2LQ192デフォルトの名無しさん
2017/09/17(日) 18:45:32.71ID:dEX9B4aF ポインタ型変数がポインタなのか?それに入っているのがポインタなのか?
もしかしたらポインタというのは存在しないのではないか?
もしかしたらポインタというのは存在しないのではないか?
193デフォルトの名無しさん
2017/09/17(日) 18:58:47.30ID:iyMogwhx 何を訳の分からないことを言ってるんだ?
Cの規格書に出てくるんだからあるに決まってるだろ
当たり前だがポインタ型変数に入っているものはポインタだ
多くの処理系で機械語レベルでは単にアドレスというだけ
同じように浮動小数点型変数に入っているものは浮動小数点だ
これも多くの処理系で機械語レベルではIEEEのホゲホゲというだけ
Cの規格書に出てくるんだからあるに決まってるだろ
当たり前だがポインタ型変数に入っているものはポインタだ
多くの処理系で機械語レベルでは単にアドレスというだけ
同じように浮動小数点型変数に入っているものは浮動小数点だ
これも多くの処理系で機械語レベルではIEEEのホゲホゲというだけ
194デフォルトの名無しさん
2017/09/17(日) 20:45:56.11ID:dEX9B4aF >>193
つまり、機械語レベルではアドレスと言うものが、Cではポインタと言われているのか?
つまり、機械語レベルではアドレスと言うものが、Cではポインタと言われているのか?
195デフォルトの名無しさん
2017/09/17(日) 21:07:31.82ID:53PrWSTF 基本的にポインタの値は低レベルではアドレス値だけど
機械語レベルではアドレスと言うものがCではポインタと言われているとは限らない
機械語レベルではアドレスと言うものがCではポインタと言われているとは限らない
196デフォルトの名無しさん
2017/09/17(日) 22:10:04.90ID:iyMogwhx 多分、根本的に、型というものが理解できてないんだと思うよ
197デフォルトの名無しさん
2017/09/17(日) 22:18:43.93ID:dEX9B4aF >>195
ちょっと待って。そこをはっきりさせてくれよ。
ちょっと待って。そこをはっきりさせてくれよ。
198デフォルトの名無しさん
2017/09/17(日) 22:25:24.89ID:iyMogwhx AならBだけど、BならAとは限らないってだけ
これぐらいは高校の数学で習うだろ
もしくはアップキャストは常に成功するけど
ダウンキャストは成功するかわからない、といったところか
これぐらいは高校の数学で習うだろ
もしくはアップキャストは常に成功するけど
ダウンキャストは成功するかわからない、といったところか
199デフォルトの名無しさん
2017/09/18(月) 02:34:06.85ID:5sYblZKp char *p のとき、
p はポインタ?それともポインタ型変数?
pに入っているのはポインタ?それともアドレス?
ポインタってどれ?
p はポインタ?それともポインタ型変数?
pに入っているのはポインタ?それともアドレス?
ポインタってどれ?
200デフォルトの名無しさん
2017/09/18(月) 02:55:32.19ID:dIhl3VcQ201デフォルトの名無しさん
2017/09/18(月) 03:23:36.62ID:5sYblZKp >>200
ありがとう。
ちょっと考えてたんだけど、やっぱりchar型ポインタとかint型ポインタってのはないんじゃないのかな。
インクリメントしたときにいくつ増えるかはポインタ変数の型で決まるだけだし。
ありがとう。
ちょっと考えてたんだけど、やっぱりchar型ポインタとかint型ポインタってのはないんじゃないのかな。
インクリメントしたときにいくつ増えるかはポインタ変数の型で決まるだけだし。
202デフォルトの名無しさん
2017/09/18(月) 03:35:36.95ID:dIhl3VcQ203デフォルトの名無しさん
2017/09/18(月) 10:09:10.30ID:Rs/BRyvp >ちょっと考えてたんだけど、やっぱりchar型ポインタとかint型ポインタって
>のはないんじゃないのかな。
int i; char c;
&i //int型ポインタ
&c //char型ポインタ
>のはないんじゃないのかな。
int i; char c;
&i //int型ポインタ
&c //char型ポインタ
204デフォルトの名無しさん
2017/09/18(月) 16:51:15.62ID:XDi5i+Jp205デフォルトの名無しさん
2017/09/18(月) 18:57:32.72ID:gSdMoaKK jmp addr
206デフォルトの名無しさん
2017/09/19(火) 12:42:20.85ID:1YUfQXAj それは関数へのポインタじゃないの?
207デフォルトの名無しさん
2017/09/19(火) 13:21:39.96ID:87FEHvFq jmpだけ見せられたらそれはcだとgotoかな
もちろん関数ポインタもあり得るし、ほかにも逆コンパイル先はあり得る
もちろん関数ポインタもあり得るし、ほかにも逆コンパイル先はあり得る
208デフォルトの名無しさん
2017/09/19(火) 18:10:22.48ID:PcYxkZC9 どーでもいい話になったら伸びるねこのスレ
209デフォルトの名無しさん
2017/09/19(火) 19:47:23.33ID:ruUa1Ruj >>206
ifとかの分岐でもjmpは生成されるだろ
ifとかの分岐でもjmpは生成されるだろ
210デフォルトの名無しさん
2017/09/19(火) 19:52:37.77ID:87FEHvFq jneとかじゃないか?
211デフォルトの名無しさん
2017/09/20(水) 13:01:55.83ID:hO1kkbas 関数へはcallだね。Z80だと。
212デフォルトの名無しさん
2017/09/30(土) 01:34:37.34ID:/jgYbdHq 関数は飛んだあと戻ってこないとだめだからね
飛ぶ前のアドレスをpushして飛ぶ
そこがjmpとの違いなんだが...
まあ高級言語しか使ったことない人にはあまりそのあたりがわからないのだろう
飛ぶ前のアドレスをpushして飛ぶ
そこがjmpとの違いなんだが...
まあ高級言語しか使ったことない人にはあまりそのあたりがわからないのだろう
213デフォルトの名無しさん
2017/09/30(土) 06:58:10.31ID:SQk+Dlf1 >>212
callない変態コアもあるけどなw
callない変態コアもあるけどなw
214デフォルトの名無しさん
2017/09/30(土) 10:25:39.90ID:BYym2Kja C/C++ とあんまり関係ない話題に乗るのは気が引けるけど…
メモリへの読み書きを避けるために
戻り先アドレスをスタックに積まないCPUもあるよね。
PCの値をレジスタにコピーしてジャンプ。
リターン時にはレジスタからPCにコピー。
ARMのサブルーチン呼び出し命令が "BL" だからって変態あつかいするな。
メモリへの読み書きを避けるために
戻り先アドレスをスタックに積まないCPUもあるよね。
PCの値をレジスタにコピーしてジャンプ。
リターン時にはレジスタからPCにコピー。
ARMのサブルーチン呼び出し命令が "BL" だからって変態あつかいするな。
215デフォルトの名無しさん
2017/10/01(日) 06:44:43.98ID:wTXYROVe >>214
>戻り先アドレスをスタックに積まないCPUもあるよね。
RISC CPUだとだいたいそれだな
リンクレジスタというのが用意されててサブルーチンコールの戻り値がリンクレジスタに格納される
スタックに戻り値を積みたい場合は手動でスタックに積む
MIPS、ARM、POWER、SPARCなどみんなこれ
>戻り先アドレスをスタックに積まないCPUもあるよね。
RISC CPUだとだいたいそれだな
リンクレジスタというのが用意されててサブルーチンコールの戻り値がリンクレジスタに格納される
スタックに戻り値を積みたい場合は手動でスタックに積む
MIPS、ARM、POWER、SPARCなどみんなこれ
216214
2017/10/01(日) 07:54:30.40ID:TsPEHv68 214 に補足。またもC/C++と無関係ですまぬ。
投稿時には意識していなかったけど、
BL命令で「さぶ」ルーチンだから辻褄は合ってる、かも。
流石ARMさんは紳士の国イギリスの会社だなぁ。
投稿時には意識していなかったけど、
BL命令で「さぶ」ルーチンだから辻褄は合ってる、かも。
流石ARMさんは紳士の国イギリスの会社だなぁ。
217デフォルトの名無しさん
2017/10/01(日) 09:14:55.87ID:qGSPhC6b >>216
すまんどゆこと?
すまんどゆこと?
218デフォルトの名無しさん
2017/10/01(日) 10:08:25.18ID:9UECfosW うん。まったくわからん。興味ないけど
219デフォルトの名無しさん
2017/10/02(月) 19:28:33.83ID:ur7JCHdr おそらく、しゃぶるーちん って事でしょ
220デフォルトの名無しさん
2017/10/02(月) 19:30:14.39ID:oqL7c7am おおさぶっ!
221デフォルトの名無しさん
2017/10/04(水) 12:08:31.97ID:QGS2LkxJ デバックの為自分の昔のコードを読むと
難しくて理解するのに時間がかかったりして
己の衰えを自覚するよな
難しくて理解するのに時間がかかったりして
己の衰えを自覚するよな
222デフォルトの名無しさん
2017/10/04(水) 12:47:05.65ID:oXiXRVKi 数年前の自分は他人みたいなもんだしな
223デフォルトの名無しさん
2017/10/04(水) 17:28:18.58ID:N0mfbhbs コーディングスタイルが変わっちゃってたり、
当時は精通していたアルゴリズムを使わないでいるうちに忘れたり、
別の場所で散々書いた注釈だからと省略した場所を直すはめになったり。
当時は精通していたアルゴリズムを使わないでいるうちに忘れたり、
別の場所で散々書いた注釈だからと省略した場所を直すはめになったり。
224デフォルトの名無しさん
2017/10/05(木) 15:02:15.28ID:RyRWuj5i ソース中にコメントとか入れないの?
225デフォルトの名無しさん
2017/10/05(木) 15:26:29.53ID:v1JdYXKS 数年前のコメントは見ても理解できないからなw
226デフォルトの名無しさん
2017/10/06(金) 16:53:07.29ID:UJYLIi2n それは国語からやり直した方がいいのでは…
227デフォルトの名無しさん
2017/10/06(金) 17:36:15.61ID:fbkgiuQU じゃ昔のコード読めなくなったら、プログラミングの勉強からやり直しだなw
228デフォルトの名無しさん
2017/10/06(金) 17:47:23.98ID:5EA0jlqJ 当たり前だろ。
229デフォルトの名無しさん
2017/10/25(水) 12:32:07.75ID:RJdooZ2I C++11なしで以下のプログラムがコンパイルできて2が出力されるようにしたいです。
どうかけばよいのでしょうか。
https://wandbox.org/permlink/NK5dYKZtrEBXN012
どうかけばよいのでしょうか。
https://wandbox.org/permlink/NK5dYKZtrEBXN012
230デフォルトの名無しさん
2017/10/25(水) 13:35:04.89ID:juMZY67C231デフォルトの名無しさん
2017/10/25(水) 13:37:35.53ID:RJdooZ2I >>230
超ありがとうございます!(5時間悩んだ)
超ありがとうございます!(5時間悩んだ)
232デフォルトの名無しさん
2017/10/25(水) 13:42:13.44ID:U6sw7DMu233デフォルトの名無しさん
2017/10/25(水) 13:53:33.16ID:RJdooZ2I >>232
ありがとうございます!
boost::lambda::varの方はVCコンパイラでもビルドできました。
余談ですが、operator[]の代わりにstd::map<>::atを使えないか試してみたのですが
こちらは無理そうでした。
ありがとうございます!
boost::lambda::varの方はVCコンパイラでもビルドできました。
余談ですが、operator[]の代わりにstd::map<>::atを使えないか試してみたのですが
こちらは無理そうでした。
234デフォルトの名無しさん
2017/10/25(水) 21:59:33.61ID:U6sw7DMu > 余談ですが、operator[]の代わりにstd::map<>::atを使えないか試してみたのですが
> こちらは無理そうでした。
・そもそもmap::atがあるのはc++11以降
・しかもmap::atはキーが存在しないと例外を投げるから今回みたいな[]の代わりには使えない
・それでやるとしてもboost::lambdaではbindを使わないとできない
> こちらは無理そうでした。
・そもそもmap::atがあるのはc++11以降
・しかもmap::atはキーが存在しないと例外を投げるから今回みたいな[]の代わりには使えない
・それでやるとしてもboost::lambdaではbindを使わないとできない
235デフォルトの名無しさん
2017/10/25(水) 23:22:00.79ID:RJdooZ2I >>234
回答ありがとうございます。
ひそかに.atが使えないか調べていて
一日中やっても駄目だったので諦めたところでした。
自分の環境はVS2012でC++11が部分的に実装されている状況だったため
.atがないことに気づきませんでした。すみません。
bindを使う方法はboost::bindやboost::lambda::bind、boost::phoenix::bind
と、一通りやってみたのですが自分にはどうやってもコンパイル通りませんでした。
回答ありがとうございます。
ひそかに.atが使えないか調べていて
一日中やっても駄目だったので諦めたところでした。
自分の環境はVS2012でC++11が部分的に実装されている状況だったため
.atがないことに気づきませんでした。すみません。
bindを使う方法はboost::bindやboost::lambda::bind、boost::phoenix::bind
と、一通りやってみたのですが自分にはどうやってもコンパイル通りませんでした。
236デフォルトの名無しさん
2017/10/25(水) 23:56:46.90ID:U6sw7DMu237デフォルトの名無しさん
2017/10/26(木) 00:46:41.57ID:CxNeOOyi238デフォルトの名無しさん
2017/10/27(金) 04:44:05.29ID:dgw8O7sr 組み込み系ってC++よりもCを使うことが多いと思うが、C++を使うと問題ある?
ROM 256Kbyte、Ram 8K位の場合だと、何か注意することある?
ROM 256Kbyte、Ram 8K位の場合だと、何か注意することある?
239デフォルトの名無しさん
2017/10/27(金) 07:05:11.65ID:kl+AecdR C使うことなんてないわ
240デフォルトの名無しさん
2017/10/28(土) 00:18:19.01ID:VLfN62TL C すらためらうレベル
241デフォルトの名無しさん
2017/10/28(土) 08:50:31.24ID:5mHtwzGb 20年以上前はためらったが今はアセンブラなんてやってられんな
昔はハードに合わせて開発したが、今は開発に合わせてハード選べばいい
昔はハードに合わせて開発したが、今は開発に合わせてハード選べばいい
242デフォルトの名無しさん
2017/10/28(土) 12:37:02.52ID:siUcDApP つかC言語と言っても
直接アセンブラ・ニーモニックを埋め込める
インライン機能が用意されてる処理系あるし
直接アセンブラ・ニーモニックを埋め込める
インライン機能が用意されてる処理系あるし
243デフォルトの名無しさん
2017/10/28(土) 16:13:43.77ID:5T1YNIdw 普通C++だとRAMペースだろ。だから組み込みでRAMが8kとかでは使えないだろな。
244デフォルトの名無しさん
2017/11/20(月) 17:48:28.20ID:HOO1fHXA >>242
未だに半角カナ使う奴いたんだ
未だに半角カナ使う奴いたんだ
245デフォルトの名無しさん
2017/11/20(月) 23:16:04.54ID:ste5Kj49 そりゃISO-2022-JPならともかく、Shift_JISやUnicodeでは正当な文字ですからね。
246デフォルトの名無しさん
2017/11/21(火) 06:40:04.61ID:VCAIytbF 変換時の文字幅にまるで無頓着な人が増えた、という話を聞くね。
環境が全面的にプロポーショナルフォントになったことも関係あるかと。
コピーしてペーストして一部書き換え、て手順のせいで
単語中で「半角」「全角」が混在したり、それに気づかなかったり。
環境が全面的にプロポーショナルフォントになったことも関係あるかと。
コピーしてペーストして一部書き換え、て手順のせいで
単語中で「半角」「全角」が混在したり、それに気づかなかったり。
247デフォルトの名無しさん
2017/11/21(火) 07:02:38.37ID:f5CXuOxE 半角カナに敏感なのって40代、50代以上だよね
未だに2chやってる奴いたんだ
未だに2chやってる奴いたんだ
248デフォルトの名無しさん
2017/11/21(火) 07:59:10.55ID:CMMMtcpC 1月11日
みたいに一桁は全角2桁は半角ってのもあるな
みたいに一桁は全角2桁は半角ってのもあるな
249デフォルトの名無しさん
2017/11/30(木) 13:01:31.93ID:D3zqdlF5 OpenMPで#pragma omp sectionsの役目って何なんでしょうか?
#pragma omp parallelで並列領域を
#pragma omp sectionでスレッド処理(スレッド割当て)単位を
指定することは理解できました。
しかし#pragma omp sectionsが必要となる理由がわかりません。
なぜ必要なんでしょうか?
※
#pragma omp parallel sectionsって書けるみたいですが
まぁこれは本質ではないですよね?
#include <stdio.h>
int main(void)
{
#pragma omp parallel
{
#pragma omp sections // ←コンパイラに何を指示してる?
{
#pragma omp section
printf("Hello 1\n");
#pragma omp section
printf("Hello 2\n");
#pragma omp section
{
printf("Hello 3a\n");
printf("Hello 3b\n");
}
}
}
return 0;
}
#pragma omp parallelで並列領域を
#pragma omp sectionでスレッド処理(スレッド割当て)単位を
指定することは理解できました。
しかし#pragma omp sectionsが必要となる理由がわかりません。
なぜ必要なんでしょうか?
※
#pragma omp parallel sectionsって書けるみたいですが
まぁこれは本質ではないですよね?
#include <stdio.h>
int main(void)
{
#pragma omp parallel
{
#pragma omp sections // ←コンパイラに何を指示してる?
{
#pragma omp section
printf("Hello 1\n");
#pragma omp section
printf("Hello 2\n");
#pragma omp section
{
printf("Hello 3a\n");
printf("Hello 3b\n");
}
}
}
return 0;
}
250デフォルトの名無しさん
2017/11/30(木) 13:38:08.08ID:/IB/XhDr251デフォルトの名無しさん
2018/01/18(木) 22:17:06.28ID:fk/Xo3MV https://github.com/espressif/esp-idf/blob/master/examples/bluetooth/ble_spp_server/main/ble_spp_server_demo.c
の 169 行目からの記述ってどうなっているのか理解したいのですが、
どなたかヒントもらえないでしょうか?
「[SPP_IDX_SVC] = ...」 となっているのが分かりません。
の 169 行目からの記述ってどうなっているのか理解したいのですが、
どなたかヒントもらえないでしょうか?
「[SPP_IDX_SVC] = ...」 となっているのが分かりません。
252デフォルトの名無しさん
2018/01/18(木) 22:58:14.15ID:7tNMQ3qD >>251
C99 の「指示付きの初期化指定子」かな?
C99 の「指示付きの初期化指定子」かな?
253デフォルトの名無しさん
2018/01/18(木) 23:17:40.59ID:fk/Xo3MV >>252
ありがとうございます。理解できました。
ありがとうございます。理解できました。
254デフォルトの名無しさん
2018/01/19(金) 10:36:40.61ID:dM64lXT0 シングルトンにするのと、全部クラス変数、クラスメソッドで実装するのと
目的はあまり違わないような気がするんですけど、あえてシングルトンにする意味があれば
教えて頂けないでしょうか?
目的はあまり違わないような気がするんですけど、あえてシングルトンにする意味があれば
教えて頂けないでしょうか?
255デフォルトの名無しさん
2018/01/25(木) 15:00:52.20ID:uboI0CmN 質問の意味がわからないが、シングルトンというのはインスタンスを一つしか持たない
ということ。クラス変数のようにインスタンスがいくつも作れると誤って2つインスタンス
を作ってしまう可能性がある。そうすると本来とは違う変数にアクセスしてしまう恐れが
ある。これをさけるんが目的。
ということ。クラス変数のようにインスタンスがいくつも作れると誤って2つインスタンス
を作ってしまう可能性がある。そうすると本来とは違う変数にアクセスしてしまう恐れが
ある。これをさけるんが目的。
256デフォルトの名無しさん
2018/01/25(木) 15:45:13.06ID:O5EWej8a257デフォルトの名無しさん
2018/01/25(木) 16:16:27.35ID:6NNXd/EM 微妙に違うけど例えば自分の体重管理アプリを作るとする。「自分」は一人しかいないから、体重を格納する変数だかクラスは1つあればいい
家族の体重管理アプリなら、「家族」は複数だから体重の格納も複数になる
こうしたときに自分アプリはシングルトン設計、家族アプリはシングルトンでない設計と「呼んでるだけ」。元々みんなやってたことに専門用語っぽくネーミングしただけだよw
家族の体重管理アプリなら、「家族」は複数だから体重の格納も複数になる
こうしたときに自分アプリはシングルトン設計、家族アプリはシングルトンでない設計と「呼んでるだけ」。元々みんなやってたことに専門用語っぽくネーミングしただけだよw
258デフォルトの名無しさん
2018/01/25(木) 16:36:48.08ID:O5EWej8a >>257
それ、クラスがシングルトンじゃなくて、データが個人用(単一データ)か複数人用(配列/ディクショナリ)かって話だから、シングルトンとは違うような...
それ、クラスがシングルトンじゃなくて、データが個人用(単一データ)か複数人用(配列/ディクショナリ)かって話だから、シングルトンとは違うような...
259デフォルトの名無しさん
2018/01/25(木) 21:57:47.77ID:8MUKcewe 抽象メソッドにできるというのが一番の利点じゃないかな。
260デフォルトの名無しさん
2018/01/25(木) 22:18:47.51ID:9MCrLTCo 組み込み環境に C++ のコードを移植しようとしているんだけど、質問ってここでしていいのかな。
RAM の容量が厳しいので、 Flash にデータを持つように改造したいと思っている。
で、これは、C++ 的には定数でデータを持つだけで実現できるらしい。幸い組み込み環境ではリードオンリーでよい。
普段 PC 環境なら計算量の多いコンストラクタを経て初期化しているあるクラスのインスタンス群を、
PC 環境上で初期化して各フィールドの値をダンプしておいて、
組み込み環境では各フィールドが const になるようにクラスを改造したうえで
何かの方法でコンストラクタをスキップしてやりたい。これでRAMも計算量も減らせたらいい。
思いついた方法は、シリアライザというかコードジェネレーターを用意してソースコード上に定数群をたくさん定義して、
MyType i { cDataA, cDataB, ... }, j { cDataO, cDataP, ... }; のような記述ができるようにする、という感じのもの。
ほかによく使われている方法はある? あるいは、アドレスのキャストか何かでインスタンスの初期化を完了できる黒魔法っぽい方法もあったりする?
RAM の容量が厳しいので、 Flash にデータを持つように改造したいと思っている。
で、これは、C++ 的には定数でデータを持つだけで実現できるらしい。幸い組み込み環境ではリードオンリーでよい。
普段 PC 環境なら計算量の多いコンストラクタを経て初期化しているあるクラスのインスタンス群を、
PC 環境上で初期化して各フィールドの値をダンプしておいて、
組み込み環境では各フィールドが const になるようにクラスを改造したうえで
何かの方法でコンストラクタをスキップしてやりたい。これでRAMも計算量も減らせたらいい。
思いついた方法は、シリアライザというかコードジェネレーターを用意してソースコード上に定数群をたくさん定義して、
MyType i { cDataA, cDataB, ... }, j { cDataO, cDataP, ... }; のような記述ができるようにする、という感じのもの。
ほかによく使われている方法はある? あるいは、アドレスのキャストか何かでインスタンスの初期化を完了できる黒魔法っぽい方法もあったりする?
261デフォルトの名無しさん
2018/01/25(木) 22:22:11.16ID:9MCrLTCo って隔離スレなのか。まあ過去レス見た限りでは答えてくれているようなので… よろしくお願いします。
262片山博文MZ ◆T6xkBnTXz7B0
2018/01/25(木) 22:42:32.30ID:4TKaBAL2 static char buf[sizeof(MyData)] = { ... };
MyData& data = reinterpret_cast<MyData&>(buf);
MyData& data = reinterpret_cast<MyData&>(buf);
263片山博文MZ ◆T6xkBnTXz7B0
2018/01/25(木) 22:43:32.46ID:4TKaBAL2 static char buf[sizeof(MyData)] = { ... };
MyData& data = *reinterpret_cast<MyData*>(buf);
MyData& data = *reinterpret_cast<MyData*>(buf);
264デフォルトの名無しさん
2018/01/25(木) 23:23:09.67ID:9MCrLTCo ありがとう
{ ... } の部分をプログラムからうまく生成する方法はなにかあるだろうか?
{ ... } の部分をプログラムからうまく生成する方法はなにかあるだろうか?
265デフォルトの名無しさん
2018/01/25(木) 23:28:29.97ID:9MCrLTCo キャストで済んでいるのはとてもよさそうだけど、
PC 環境でのメモリ上での表現と組み込み環境でのメモリ上の表現は完全に一致するのだろうか。
アライメントというものがあるんだったような
PC 環境でのメモリ上での表現と組み込み環境でのメモリ上の表現は完全に一致するのだろうか。
アライメントというものがあるんだったような
266片山博文MZ ◆T6xkBnTXz7B0
2018/01/25(木) 23:29:12.87ID:4TKaBAL2 unsigned char *pb = reinterpret_cast<unsigned char *>(&data);
for (size_t i = 0; i < len; ++i)
printf("%02X, ", pb[i]);
for (size_t i = 0; i < len; ++i)
printf("%02X, ", pb[i]);
267片山博文MZ ◆T6xkBnTXz7B0
2018/01/25(木) 23:32:26.13ID:4TKaBAL2 char *pch = reinterpret_cast<char*>(&data);
for (size_t i = 0; i < len; ++i)
printf("%02X, ", (*pch & 0xFF));
for (size_t i = 0; i < len; ++i)
printf("%02X, ", (*pch & 0xFF));
268片山博文MZ ◆T6xkBnTXz7B0
2018/01/25(木) 23:33:19.76ID:4TKaBAL2 pch[i] & 0xFF
269デフォルトの名無しさん
2018/01/25(木) 23:46:29.85ID:9MCrLTCo まそうですよね。再びありがとう。
アライメントについては各環境で実験して (offsetof(MyData, ...) が一致するか) いけそうなら試してみる。
エンディアンとアライメント(バイト境界)が一致してればきっと大丈夫だよね
アライメントについては各環境で実験して (offsetof(MyData, ...) が一致するか) いけそうなら試してみる。
エンディアンとアライメント(バイト境界)が一致してればきっと大丈夫だよね
270デフォルトの名無しさん
2018/01/25(木) 23:59:52.47ID:9MCrLTCo 助かる、これでとんかつ定食でも食べてくれ っ [ぺいぱる]
271デフォルトの名無しさん
2018/01/27(土) 10:10:18.54ID:EckHRazm floatを実数Xで初期化する際にfloatではその数を正確に表現できない場合、少し大きいか小さいかでXに近い値になると思います
そういう正確には表せない場合に、どうすれば初期化される値がXを下回らない最小の値となるようにできますか?
たとえば√3(1.7320508075688...)で初期化しようと float x=1.7320508075688f; と書くと
xの値が1.732050776となり√3より小さくなってしまうので、そういうのを避けたいです
そういう正確には表せない場合に、どうすれば初期化される値がXを下回らない最小の値となるようにできますか?
たとえば√3(1.7320508075688...)で初期化しようと float x=1.7320508075688f; と書くと
xの値が1.732050776となり√3より小さくなってしまうので、そういうのを避けたいです
272デフォルトの名無しさん
2018/01/27(土) 10:43:57.22ID:BU9rpSw9 精度上げたいならdouble使えば?
273デフォルトの名無しさん
2018/01/27(土) 11:40:33.40ID:2gTl4aTp >>271
C/C++の標準機能では無理な気がする
というか、無理関数や超越関数でそういう丸め方が出来るアルゴリズムってあるのかな?
高精度で求めてから丸めるしかないような気がするが
運が悪いとそれでも下回らない最小にはならない
C/C++の標準機能では無理な気がする
というか、無理関数や超越関数でそういう丸め方が出来るアルゴリズムってあるのかな?
高精度で求めてから丸めるしかないような気がするが
運が悪いとそれでも下回らない最小にはならない
274デフォルトの名無しさん
2018/01/27(土) 11:42:00.24ID:2gTl4aTp 定数何個かなら事前に計算していれておけば良いけど
275デフォルトの名無しさん
2018/01/27(土) 11:52:04.54ID:BU9rpSw9 そういう意味ではPython最強だな
276デフォルトの名無しさん
2018/01/27(土) 11:53:27.06ID:EckHRazm 言葉足らずでしたが、標準やその他ライブラリの数学関数の結果として求めたいのではなく
数値リテラルとして初期化する場合に限ってもらっても結構です
閾値として使うのに、切り上げか切り下げかわかっていないと間違った結果が出て後で困ることになります
たとえば単純に閾値未満と以上のデータを別の用紙に印刷するプログラムを以下のように書いた場合
double result = calculation();
double threshold = √3
if (result < threshold) fail_list.add(result); else pass_list.add(result);`
print_to_paper(fail_list);
print_to_paper(pass_list);
計算精度に限界がある以上(閾値付近での)比較での細かい誤差は気にするなという人もいるでしょうが
それ以上に実際に紙面に載る値が要件に反する事態になってしまうと後々困ったことになるのです...
>>274
次善の策でそのことも考えますが、要件が変わった場合などに脆さが残りませんか?
数値リテラルとして初期化する場合に限ってもらっても結構です
閾値として使うのに、切り上げか切り下げかわかっていないと間違った結果が出て後で困ることになります
たとえば単純に閾値未満と以上のデータを別の用紙に印刷するプログラムを以下のように書いた場合
double result = calculation();
double threshold = √3
if (result < threshold) fail_list.add(result); else pass_list.add(result);`
print_to_paper(fail_list);
print_to_paper(pass_list);
計算精度に限界がある以上(閾値付近での)比較での細かい誤差は気にするなという人もいるでしょうが
それ以上に実際に紙面に載る値が要件に反する事態になってしまうと後々困ったことになるのです...
>>274
次善の策でそのことも考えますが、要件が変わった場合などに脆さが残りませんか?
277デフォルトの名無しさん
2018/01/27(土) 12:07:53.57ID:BU9rpSw9 閾値も比較対象も同じ精度なら不都合は起きない気がするけど
不都合が起きるとすると、計算過程での誤差が許容範囲内かどうかってことじゃないの?
どっちにしても無理数はどっが切らないといけないわけだし、扱える有効桁数の範囲で計算するしかない
ちなみに、
float x=1.7320508075688f;
は、代入の時点でfloatの有効桁数を超えてるから表示した時の結果と異なるのは当たり前
doubleだと有効桁数が15〜16桁程度ある。それでも不足なら、long doubleを使うとか、decimal型
を扱う外部ライブラリを使うとか
不都合が起きるとすると、計算過程での誤差が許容範囲内かどうかってことじゃないの?
どっちにしても無理数はどっが切らないといけないわけだし、扱える有効桁数の範囲で計算するしかない
ちなみに、
float x=1.7320508075688f;
は、代入の時点でfloatの有効桁数を超えてるから表示した時の結果と異なるのは当たり前
doubleだと有効桁数が15〜16桁程度ある。それでも不足なら、long doubleを使うとか、decimal型
を扱う外部ライブラリを使うとか
278デフォルトの名無しさん
2018/01/27(土) 12:23:14.67ID:x9sgfrz+ (v-1ULP) <= X < v となるvを選びたいということかね?
その方法は知らんが、常に (v-1ULP) <= X < v か (v-1ULP) < X <= v のどちらかなわけだから
別に問題ないんでは?X≒vを上に組み入れるか下に組み入れるか決めりゃいいだけで。
その方法は知らんが、常に (v-1ULP) <= X < v か (v-1ULP) < X <= v のどちらかなわけだから
別に問題ないんでは?X≒vを上に組み入れるか下に組み入れるか決めりゃいいだけで。
279デフォルトの名無しさん
2018/01/27(土) 14:20:38.41ID:EckHRazm 説明のために>>276のプログラムをfloatに戻したものを考えると
(result < 1.732050776f)という比較ではresultが1.732050776fだった場合に
1.732050776は√3未満であるのに合格リストの方に載ってしまうということです
計算上の誤差があるとかdoubleの有効桁数が多いとかでなく
プログラム内の数値の取り扱いに関係なく、実際の紙の上では間違いが起こってほしくないということです
うまく説明できてるかどうかわかりませんが、実行時どの程度誤差を許容できるかは問題ではないんです
結果を見せた時に、どうしてこの値がこっちのリストに載っているわけ? 直しておいてくれる?
と言われれば、どうせ境界値付近の値なんてどちらのリストに載っていようと計算誤差もあるしいずれにしても正確とは言えないんですよ
では通じないんです...
≒をどちらに組み込むかを決めておくというのも、結局は事前に求めておく>>274の手法と同じ手間がかかりませんか
要件の数値(実数)が変われば、切り上げか切り下げのどちらであるかも変わってしまいますから
どちらになっているかを確かめなくてはいけないですよね
(result < 1.732050776f)という比較ではresultが1.732050776fだった場合に
1.732050776は√3未満であるのに合格リストの方に載ってしまうということです
計算上の誤差があるとかdoubleの有効桁数が多いとかでなく
プログラム内の数値の取り扱いに関係なく、実際の紙の上では間違いが起こってほしくないということです
うまく説明できてるかどうかわかりませんが、実行時どの程度誤差を許容できるかは問題ではないんです
結果を見せた時に、どうしてこの値がこっちのリストに載っているわけ? 直しておいてくれる?
と言われれば、どうせ境界値付近の値なんてどちらのリストに載っていようと計算誤差もあるしいずれにしても正確とは言えないんですよ
では通じないんです...
≒をどちらに組み込むかを決めておくというのも、結局は事前に求めておく>>274の手法と同じ手間がかかりませんか
要件の数値(実数)が変われば、切り上げか切り下げのどちらであるかも変わってしまいますから
どちらになっているかを確かめなくてはいけないですよね
280デフォルトの名無しさん
2018/01/27(土) 14:34:58.54ID:BU9rpSw9 そもそも、 1.732050776f と言う書き方が矛盾してでしょ
末尾にfをつけてるから、floatに変換してるわけだけど、1.732050776 はfloatの有効桁数を超えた表現だからこの比較自体がおかしい
1.732050776 と比較したかったらdoubleで計算すればいいし、もっと大きな有効桁数を求めるなら、long doubleなり、decimal型を扱えるライブラリでも使えばいい
末尾にfをつけてるから、floatに変換してるわけだけど、1.732050776 はfloatの有効桁数を超えた表現だからこの比較自体がおかしい
1.732050776 と比較したかったらdoubleで計算すればいいし、もっと大きな有効桁数を求めるなら、long doubleなり、decimal型を扱えるライブラリでも使えばいい
281デフォルトの名無しさん
2018/01/27(土) 14:55:39.92ID:EckHRazm 1.732050776と比較したいのではなく√3です(√3という数も説明の便宜上です念のため)
ですからdouble型でも√3が表現できないのは変わらない以上は
floatをdoubleにしても問題の起こりやすさが減るだけで起こることに変わりないと思います
doubleを使うなら1.7320508075688...よりも多くの桁数を書くことになるというだけです(20桁以上?)...
私の場合有効桁数そのものが問題なのではなく、切り上げか切り下げを指定したいということです
あるいはどちらが行われているかがわかればそれで問題ありません(と思います)
加えるとほかの工程に渡す必要があるためdecimal等をサポートするライブラリの使用は非常に厳しいです
ですからdouble型でも√3が表現できないのは変わらない以上は
floatをdoubleにしても問題の起こりやすさが減るだけで起こることに変わりないと思います
doubleを使うなら1.7320508075688...よりも多くの桁数を書くことになるというだけです(20桁以上?)...
私の場合有効桁数そのものが問題なのではなく、切り上げか切り下げを指定したいということです
あるいはどちらが行われているかがわかればそれで問題ありません(と思います)
加えるとほかの工程に渡す必要があるためdecimal等をサポートするライブラリの使用は非常に厳しいです
282片山博文MZ ◆T6xkBnTXz7B0
2018/01/27(土) 15:09:28.15ID:TUhH5TnV 小さかったら、FLT_MIN / 2を繰り返し足せばいいんとちゃう?
283デフォルトの名無しさん
2018/01/27(土) 15:16:35.83ID:x9sgfrz+ >私の場合有効桁数そのものが問題なのではなく、切り上げか切り下げを指定したいということです
それならその√3を求める関数の仕様に当たるべきでは。
標準の数学関数だと、丸め方式以前に1ULPの誤差も保証されているとは限らない。
それならその√3を求める関数の仕様に当たるべきでは。
標準の数学関数だと、丸め方式以前に1ULPの誤差も保証されているとは限らない。
284デフォルトの名無しさん
2018/01/27(土) 15:18:36.43ID:BU9rpSw9 >>281
√3との比較対象となる計算結果も、floatなりdoubleなりを使う計算過程で桁落ちは発生するでしょ? そっちは問題ないの?
閾値となる√3の桁落ちだけが問題?
なんにしろ、√3みたいな無理数を扱う場合は、有効桁数何桁、少数点以下何桁まで考慮するという前提がないと、それを扱う型の精度も決められないし、それがデータ設計者の役目だと思うけど
√3との比較対象となる計算結果も、floatなりdoubleなりを使う計算過程で桁落ちは発生するでしょ? そっちは問題ないの?
閾値となる√3の桁落ちだけが問題?
なんにしろ、√3みたいな無理数を扱う場合は、有効桁数何桁、少数点以下何桁まで考慮するという前提がないと、それを扱う型の精度も決められないし、それがデータ設計者の役目だと思うけど
285片山博文MZ ◆T6xkBnTXz7B0
2018/01/27(土) 15:21:29.73ID:TUhH5TnV ルート3に相当する数値を2乗して、3以上になればいいんだろ?
286デフォルトの名無しさん
2018/01/27(土) 15:28:05.15ID:BU9rpSw9 >>285
√3と言うのは例として上げただけで平方根とは限らないみたいだよ
√3と言うのは例として上げただけで平方根とは限らないみたいだよ
287片山博文MZ ◆T6xkBnTXz7B0
2018/01/27(土) 15:56:37.17ID:TUhH5TnV 逆算して、不等式を満たすかチェックすれば?
288デフォルトの名無しさん
2018/01/27(土) 16:35:32.82ID:2gTl4aTp289デフォルトの名無しさん
2018/01/27(土) 16:37:26.51ID:2gTl4aTp >>287
数学や数値計算の素人はだまってなさい
数学や数値計算の素人はだまってなさい
290デフォルトの名無しさん
2018/01/27(土) 16:54:03.59ID:EckHRazm >>288
元データは文字列で、最大で有効数字8桁くらいの10進数の小数点数です
それを単にstrtofで読みこんで、計算過程もずっとfloatです
ですけど読み込み時の誤差も含めて計算誤差は特に問題にしなくてもかまいません
それこそ計算誤差があるから仕方ないで押し通すこともできると思います
ですが、計算結果を2つのグループに分ける際に、実数の閾値に対して忠実でなければならないということです
>>284
閾値も計算の精度も32ビットのfloatで問題ないです
なので閾値となるfloat値を事前計算すれば、とりあえずは済みます
(ですが事後の変更に備えて、安全な方策がないものかと思い始めたわけです)
>>283
閾値は実行時に関数を呼び出して計算する必要はありません
単に計算機で求めた桁の多い数字を使って意図通りにfloatを初期化できれば問題は解決です
元データは文字列で、最大で有効数字8桁くらいの10進数の小数点数です
それを単にstrtofで読みこんで、計算過程もずっとfloatです
ですけど読み込み時の誤差も含めて計算誤差は特に問題にしなくてもかまいません
それこそ計算誤差があるから仕方ないで押し通すこともできると思います
ですが、計算結果を2つのグループに分ける際に、実数の閾値に対して忠実でなければならないということです
>>284
閾値も計算の精度も32ビットのfloatで問題ないです
なので閾値となるfloat値を事前計算すれば、とりあえずは済みます
(ですが事後の変更に備えて、安全な方策がないものかと思い始めたわけです)
>>283
閾値は実行時に関数を呼び出して計算する必要はありません
単に計算機で求めた桁の多い数字を使って意図通りにfloatを初期化できれば問題は解決です
291デフォルトの名無しさん
2018/01/27(土) 17:02:29.66ID:BU9rpSw9292デフォルトの名無しさん
2018/01/27(土) 17:16:55.11ID:RR6n96sQ >>289
無理数を定数値とする方法は無いから片山の意見は一理ある
無理数を定数値とする方法は無いから片山の意見は一理ある
293デフォルトの名無しさん
2018/01/27(土) 17:29:56.29ID:RraDQJG1 使ってる環境のfloatのビット表現を確認して、それで誤差なく表現できる閾値以下の最大の数値を求めて、それを定数として閾値にすればいいんでないの?
294デフォルトの名無しさん
2018/01/27(土) 17:33:27.63ID:2gTl4aTp 元の10進数の文字列に対して、
これを下回らない最小のfloatの値
これを上回らない最大のfloatの値
を求めれば良いの?
仕様をはっきりして
これを下回らない最小のfloatの値
これを上回らない最大のfloatの値
を求めれば良いの?
仕様をはっきりして
295デフォルトの名無しさん
2018/01/27(土) 17:45:09.91ID:2gTl4aTp floatの値と10進数文字列の大小比較が出来れば良い?
296デフォルトの名無しさん
2018/01/27(土) 17:48:38.55ID:2gTl4aTp √3やsin(1+√2)などの数式が示す値とfloatの大小比較?
297デフォルトの名無しさん
2018/01/27(土) 18:07:06.21ID:2gTl4aTp 数式って言うと誤解を与えるのかな?
10進数表記可能な数値
数学的に定義可能な実数
それ以外
閾値はどれ?
10進数表記可能な数値
数学的に定義可能な実数
それ以外
閾値はどれ?
298デフォルトの名無しさん
2018/01/27(土) 18:28:25.65ID:EckHRazm299デフォルトの名無しさん
2018/01/27(土) 19:52:43.68ID:BU9rpSw9 >>298
floatの有効桁数は7桁だから
float x=1.7320508075688;
とするんじゃなくて、
float x = 1.732051;
とするしかないでしょ
それが嫌なら、もっと精度の高いdoubleを使うようにして
double x = 1.7320508075688;
として、これを閾値とすればいい
そして、そのことを予め顧客に確認しておけばいい
扱うデータの桁数を予め決めておくことは設計時の重要事項でしょ
何も問題は無いと思うけど、何を悩んでるのか分からない。
もし無理数を無理数のまま無制限の精度で扱いたいなら、もうそういうライブラリを使うしかない
あるのか知らんけど
floatの有効桁数は7桁だから
float x=1.7320508075688;
とするんじゃなくて、
float x = 1.732051;
とするしかないでしょ
それが嫌なら、もっと精度の高いdoubleを使うようにして
double x = 1.7320508075688;
として、これを閾値とすればいい
そして、そのことを予め顧客に確認しておけばいい
扱うデータの桁数を予め決めておくことは設計時の重要事項でしょ
何も問題は無いと思うけど、何を悩んでるのか分からない。
もし無理数を無理数のまま無制限の精度で扱いたいなら、もうそういうライブラリを使うしかない
あるのか知らんけど
300デフォルトの名無しさん
2018/01/27(土) 20:13:29.55ID:EckHRazm >>299
スレを後から読んだ人に混乱を広げないために念のために書いておきますが、無理数を無理数として扱う必要はありません
ついでに、計算の精度を高めたいわけでもありません
あらかじめ閾値になるfloat値を求めておけば済むというのはわかりますその通りです
早い段階で気づいていました
ですがそれだけだと変更に弱いですよね
実際に書き換えるのが三か月後の自分か赤の他人になるのかはわかりませんが
だれかの手作業で閾値のfloat値を再計算するより信頼性のある方法があれば、ということで質問を始めました
ただ5レス目しないうちから簡単には済まないだろうなとも思っていました
スレを後から読んだ人に混乱を広げないために念のために書いておきますが、無理数を無理数として扱う必要はありません
ついでに、計算の精度を高めたいわけでもありません
あらかじめ閾値になるfloat値を求めておけば済むというのはわかりますその通りです
早い段階で気づいていました
ですがそれだけだと変更に弱いですよね
実際に書き換えるのが三か月後の自分か赤の他人になるのかはわかりませんが
だれかの手作業で閾値のfloat値を再計算するより信頼性のある方法があれば、ということで質問を始めました
ただ5レス目しないうちから簡単には済まないだろうなとも思っていました
301デフォルトの名無しさん
2018/01/27(土) 20:14:24.46ID:tkKoYj6x だなー
float基準なんだからdoubleでもっときゃいい。これがdoubleでーってなってたら悩むがw
float基準なんだからdoubleでもっときゃいい。これがdoubleでーってなってたら悩むがw
302デフォルトの名無しさん
2018/01/27(土) 20:42:46.77ID:EckHRazm doubleで持つ考えもわかります
ただfloatの丸め方がわかれば(あるいは制御できれば)問題は解決(>>301が悩むdoubleが必要な時にも拡張できる方法)だと思うのですが...
その方法が簡単でないということが分かったことは収穫...?でした
ただfloatの丸め方がわかれば(あるいは制御できれば)問題は解決(>>301が悩むdoubleが必要な時にも拡張できる方法)だと思うのですが...
その方法が簡単でないということが分かったことは収穫...?でした
303デフォルトの名無しさん
2018/01/27(土) 20:56:05.82ID:tkKoYj6x floatの丸め方が分かったら、それを求めるために(floatが32ビット型だとしたら最低でも)33ビットで計算しないといけなくなるわけでしょ?
つまりは33ビット型を新たに作ることになるわけで・・・だったら最初からある64ビット型を使たほうがってw
つまりは33ビット型を新たに作ることになるわけで・・・だったら最初からある64ビット型を使たほうがってw
304デフォルトの名無しさん
2018/01/27(土) 21:11:10.44ID:EckHRazm 実行時の精度ではなく、コンパイラがソースコード中の数値文字列をどう機械語(float型)に翻訳するかということではないですか?
ソースコード上では20桁もある数値文字列を実際にコンパイラが適切な32ビット型に変換しているので
33ビット型とかいう変な方を導入するまでもないと思うのですが
実行時に実数がどうまとめられたかを知りたいわけじゃないんです
初期化式の右辺に来る数値リテラルをコンパイラ内部で何ビットで処理しようが関係ありませんよね?
実行時にfloatやdouble値の実体を持つ閾値が、切り下げられたか切り上げられたかを判断するのであれば
33ビットの浮動小数点数型が必要になるでしょうけども...
ソースコード上では20桁もある数値文字列を実際にコンパイラが適切な32ビット型に変換しているので
33ビット型とかいう変な方を導入するまでもないと思うのですが
実行時に実数がどうまとめられたかを知りたいわけじゃないんです
初期化式の右辺に来る数値リテラルをコンパイラ内部で何ビットで処理しようが関係ありませんよね?
実行時にfloatやdouble値の実体を持つ閾値が、切り下げられたか切り上げられたかを判断するのであれば
33ビットの浮動小数点数型が必要になるでしょうけども...
305デフォルトの名無しさん
2018/01/27(土) 21:11:56.87ID:BU9rpSw9 >>302
floatの丸め方が知りたかったの?
round、floor, ceil とかあるじゃん
例えば、double型の小数部第6位で切り捨ててfloat型へ代入したければ、ありがちなやり方としては
double d = 1.7320508075688;
float f = floor(d * 100000.0) / 100000.0;
んな感じで
floatの丸め方が知りたかったの?
round、floor, ceil とかあるじゃん
例えば、double型の小数部第6位で切り捨ててfloat型へ代入したければ、ありがちなやり方としては
double d = 1.7320508075688;
float f = floor(d * 100000.0) / 100000.0;
んな感じで
306デフォルトの名無しさん
2018/01/27(土) 22:03:45.49ID:EckHRazm 実行時の変数の丸め方ではありませんよ
丸めという言葉はよくなかったかもしれませんすみませんでした
今はfloatの初期化式を書いた時にコンパイラがどう振舞うかということの意味です
それと前に10進数表記可能な数と書いたのは、単にソースコード上で
そう書き表すことのできる(√とかsinとかその他を使わない)数という意味で
10進数の数のある桁で四捨五入するという意味ではありませんでした
丸めという言葉もULPに対するものとして言ってるつもりでした
>>278で出てるのでこちらから出しませんでしたが言葉足らずでした重ねてすみまんせん
元々は1.7777777fupとか1.7777777fdownとか(桁数や表記法はともかく)
お手軽に意図通りの値に初期化できないものかと考えて質問しました
そうすれば、実数から浮動小数点数への翻訳方法(コンパイラによる切り上げ切り下げ)にかかわらず、
ソースコード上に記述されている通りの、数学的な大小関係を損なわないプログラムが書けると考えたからでした
次にいつここへ来るかわからないので今日の私の質問はこれで終わりにします
返答してくれた人たちは本当にありがとうございました
丸めという言葉はよくなかったかもしれませんすみませんでした
今はfloatの初期化式を書いた時にコンパイラがどう振舞うかということの意味です
それと前に10進数表記可能な数と書いたのは、単にソースコード上で
そう書き表すことのできる(√とかsinとかその他を使わない)数という意味で
10進数の数のある桁で四捨五入するという意味ではありませんでした
丸めという言葉もULPに対するものとして言ってるつもりでした
>>278で出てるのでこちらから出しませんでしたが言葉足らずでした重ねてすみまんせん
元々は1.7777777fupとか1.7777777fdownとか(桁数や表記法はともかく)
お手軽に意図通りの値に初期化できないものかと考えて質問しました
そうすれば、実数から浮動小数点数への翻訳方法(コンパイラによる切り上げ切り下げ)にかかわらず、
ソースコード上に記述されている通りの、数学的な大小関係を損なわないプログラムが書けると考えたからでした
次にいつここへ来るかわからないので今日の私の質問はこれで終わりにします
返答してくれた人たちは本当にありがとうございました
307デフォルトの名無しさん
2018/01/28(日) 01:49:55.74ID:x3ZlVnQ6 2進数の小数リテラルの記述が出来るようになるんじゃなかった?
なんで今まで出来なかったのかが不思議だけど
それで満足なのか?
小数のリテラルの、コンパイル時の文字列から値への変換は
普通はその文字列が表す値に一番近い値になる
丸め方を自分で決めたければ、文字列から数値に変換するconstexpr関数を作れば良い
なんで今まで出来なかったのかが不思議だけど
それで満足なのか?
小数のリテラルの、コンパイル時の文字列から値への変換は
普通はその文字列が表す値に一番近い値になる
丸め方を自分で決めたければ、文字列から数値に変換するconstexpr関数を作れば良い
308デフォルトの名無しさん
2018/01/28(日) 10:42:15.33ID:YQxX9lfa 2進で書いたってなんの解決にもならんよwww
リテラルのみだとしても結局はdouble分の計算が必要でしょ。計算するのがコンパイル前でも構わなくなるってだけ
リテラルのみだとしても結局はdouble分の計算が必要でしょ。計算するのがコンパイル前でも構わなくなるってだけ
309デフォルトの名無しさん
2018/01/28(日) 11:03:46.96ID:Y4YkWHjI 二進できっちり仮数部23bitで書けばいいだろう
それなら1ULP未満切り捨てになる
それなら1ULP未満切り捨てになる
310デフォルトの名無しさん
2018/01/28(日) 11:14:12.99ID:YQxX9lfa やりたいことは、その切り捨てがあるなら切り上げたいってことでしょ
だから切り捨てがあるかないかを事前に計算する必要ある
だから切り捨てがあるかないかを事前に計算する必要ある
311デフォルトの名無しさん
2018/01/28(日) 11:31:33.17ID:Y4YkWHjI312デフォルトの名無しさん
2018/01/28(日) 11:51:46.98ID:YQxX9lfa > floatを実数Xで初期化する際にfloatではその数を正確に表現できない場合、少し大きいか小さいかでXに近い値になると思います
> そういう正確には表せない場合に、どうすれば初期化される値がXを下回らない最小の値となるようにできますか?
これを読んだらそうなる。特定したらこれが解決するでしょ。その解決のために計算が必要になる
> そういう正確には表せない場合に、どうすれば初期化される値がXを下回らない最小の値となるようにできますか?
これを読んだらそうなる。特定したらこれが解決するでしょ。その解決のために計算が必要になる
313デフォルトの名無しさん
2018/01/28(日) 12:11:57.99ID:Y4YkWHjI そこしか読まないからそうなる
その後のレスでどちらでもよいと補足しているだろう
その後のレスでどちらでもよいと補足しているだろう
314デフォルトの名無しさん
2018/01/28(日) 12:20:06.50ID:Y4YkWHjI というか、
>2進で書いたってなんの解決にもならんよwww
これが否定されたのがそんなに我慢ならなかったのか
>2進で書いたってなんの解決にもならんよwww
これが否定されたのがそんなに我慢ならなかったのか
315デフォルトの名無しさん
2018/01/28(日) 13:17:58.45ID:YQxX9lfa > double分の計算が必要
むしろこっち否定しろよw
むしろこっち否定しろよw
316デフォルトの名無しさん
2018/02/01(木) 14:07:29.89ID:BjxdiDzB 二進リテラルでええやろ
それかstd::nextafterで切り上げるか切り下げるか
それかstd::nextafterで切り上げるか切り下げるか
317デフォルトの名無しさん
2018/02/01(木) 20:59:41.19ID:uG0JSReu 二進リテラルはいいが、nextafterはちょい違うな。
318デフォルトの名無しさん
2018/02/02(金) 10:30:51.76ID:ahF+s6Dw 2進小数を10進小数に変換出来るツールの提供と
リテラル記述箇所へのコメント
現実的な解はこの辺かと
リテラル記述箇所へのコメント
現実的な解はこの辺かと
319デフォルトの名無しさん
2018/02/02(金) 12:14:54.40ID:NAEfRvIa そういう設計にするとバグ出まくり。しかも発見が非常に困難
普通に仮数部足す関数作ってそれかましておけばいいでしょ
普通に仮数部足す関数作ってそれかましておけばいいでしょ
320デフォルトの名無しさん
2018/02/02(金) 13:00:05.92ID:ahF+s6Dw 足す?
何を?
どうやって?
何を?
どうやって?
321デフォルトの名無しさん
2018/02/02(金) 13:15:59.60ID:NAEfRvIa 力技でビット演算してもいいし、仮数部1ビットだけ建てたの用意して普通に加算してもいいでしょ
322デフォルトの名無しさん
2018/02/09(金) 16:44:31.74ID:9b+Wa+Ns hoge(int *) という関数があり、hoge(&a) とすれば a に値を返す仕組みとします。
ここで、char a をキャストして hoge((int *)&a) として実行した場合、意図した結果が返されない
ケースがあるのはいいとして、他に問題はありますか?
例えば、hoge()自身は渡されたものが int のポインターなんだから char 以上のメモリー範囲を
超えて書き込むからメモリーが破壊されるといったことが起こりますか?
ここで、char a をキャストして hoge((int *)&a) として実行した場合、意図した結果が返されない
ケースがあるのはいいとして、他に問題はありますか?
例えば、hoge()自身は渡されたものが int のポインターなんだから char 以上のメモリー範囲を
超えて書き込むからメモリーが破壊されるといったことが起こりますか?
323片山博文MZ ◆T6xkBnTXz7B0
2018/02/09(金) 17:01:41.47ID:owaGciqs >>322
最適化を無効にして
char ab = 0x7F;
char a;
char aa = 0x7F;
hoge((int*)&a);
printf("%d, %d, %d\n", ab, a, aa);
で試してみて。
最適化を無効にして
char ab = 0x7F;
char a;
char aa = 0x7F;
hoge((int*)&a);
printf("%d, %d, %d\n", ab, a, aa);
で試してみて。
324デフォルトの名無しさん
2018/02/09(金) 17:32:12.48ID:9b+Wa+Ns >>323
既に稼働してるシステムで上記の箇所を見つけはしたものの、何食わぬ顔をして動いていたので
疑問に感じていましたが、新規プロジェクトで試したら一発でしたね。
スタックオーバーフローでした。
どうもありがとうございました。
既に稼働してるシステムで上記の箇所を見つけはしたものの、何食わぬ顔をして動いていたので
疑問に感じていましたが、新規プロジェクトで試したら一発でしたね。
スタックオーバーフローでした。
どうもありがとうございました。
325デフォルトの名無しさん
2018/02/09(金) 20:59:14.12ID:9QnGJOcV >>322
条件によっちゃよくやる
例えば
char a,b,c,d;
こんなのでaのアドレスに対してint読み出しかけて、abcdくっつけたint16値を取り出すとか
その逆にint16値をaにキャストしてabcd個別にアクセスとか
ただ連続したメモリ空間に入らないことがあるから、
その辺はstructでまとめたり、pragma packやら何やらで指定しとくとか、プラットフォームとコンパイラに合わせる
条件によっちゃよくやる
例えば
char a,b,c,d;
こんなのでaのアドレスに対してint読み出しかけて、abcdくっつけたint16値を取り出すとか
その逆にint16値をaにキャストしてabcd個別にアクセスとか
ただ連続したメモリ空間に入らないことがあるから、
その辺はstructでまとめたり、pragma packやら何やらで指定しとくとか、プラットフォームとコンパイラに合わせる
326デフォルトの名無しさん
2018/02/10(土) 09:55:27.64ID:sEVENX79327デフォルトの名無しさん
2018/02/10(土) 10:44:47.90ID:A/uZfZpr unionで書いたほうがスマートなこともあるな。その逆なこともある
動作自体は何使っても同じだから、ソースの見やすさやclass設計考えながら選択したらいい
動作自体は何使っても同じだから、ソースの見やすさやclass設計考えながら選択したらいい
328デフォルトの名無しさん
2018/02/16(金) 01:33:43.00ID:Ja2iVc8/ 構造体の、一部のみゼロ埋めする方法を知りたいです
CコンパイラはMingw-win32のgcc 6.3.0を使ってます
struct aaa_tag{
uint32_t a;
uint32_t b;
uint32_t c;
:
uint32_t z;
}
という構造体に、fread(&aaa, sizeof(aaa), 1, fp)でファイルから値を読み込んでいるのですが
実は構造体としてファイルから読み込むべきサイズが条件により変える必要があります
例えば以下のようにです
・bが1の場合は有効なのはaとbのみ。c以降の値はゼロで書き戻す
・bが5の場合は有効なのはa〜wまで。x以降の値はゼロに書き戻す
まずbを読んで、それから必要なサイズを読み出す…も考えたのですがそうではなく、
構造体の途中以降をゼロクリアしようと思っているのですが、これがうまくいきません
if (b == 1)memset(&aaa + sizeof(uint32_t) * 2, 0x00, sizeof(aaa) - sizeof(uint32_t));
等と試行錯誤しているのですが、SIGSEGVが出てしまいます
解決法を教えていただけますか
CコンパイラはMingw-win32のgcc 6.3.0を使ってます
struct aaa_tag{
uint32_t a;
uint32_t b;
uint32_t c;
:
uint32_t z;
}
という構造体に、fread(&aaa, sizeof(aaa), 1, fp)でファイルから値を読み込んでいるのですが
実は構造体としてファイルから読み込むべきサイズが条件により変える必要があります
例えば以下のようにです
・bが1の場合は有効なのはaとbのみ。c以降の値はゼロで書き戻す
・bが5の場合は有効なのはa〜wまで。x以降の値はゼロに書き戻す
まずbを読んで、それから必要なサイズを読み出す…も考えたのですがそうではなく、
構造体の途中以降をゼロクリアしようと思っているのですが、これがうまくいきません
if (b == 1)memset(&aaa + sizeof(uint32_t) * 2, 0x00, sizeof(aaa) - sizeof(uint32_t));
等と試行錯誤しているのですが、SIGSEGVが出てしまいます
解決法を教えていただけますか
329片山博文MZ ◆T6xkBnTXz7B0
2018/02/16(金) 06:04:46.72ID:tdYV0Px7 上から順番に読み込むか、fseekで読み込み位置まで移動してから読み込む。
位置はoffsetofとかFIELD_OFFSETという名前のマクロを使う。そのようなマクロがない場合は自作する。
読み込むときは、位置とバイトサイズによく注意すること。また、NULLや無効な場所に読み込んではいけない。
位置はoffsetofとかFIELD_OFFSETという名前のマクロを使う。そのようなマクロがない場合は自作する。
読み込むときは、位置とバイトサイズによく注意すること。また、NULLや無効な場所に読み込んではいけない。
330デフォルトの名無しさん
2018/02/16(金) 06:11:24.04ID:W1XJdyx1 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
331デフォルトの名無しさん
2018/02/16(金) 06:26:26.41ID:6scYlSnj >>328
セグメンテーションフォールトを起こす直接の原因は、
memset() の第1引数 &aaa + sizeof(uint32_t) * 2 の部分だろうね。
printf("%p\n", &aaa);
printf("%p\n", &aaa.c);
printf("%p\n", &aaa + sizeof(uint32_t) * 2);
上の3行の出力を比較検討すると理屈が分かると思うけど説明は長くなる。
というか、俺にはポインタ加算について短く平易に説明する能力がない。
#include <stddef.h> // offsetof()マクロの定義
if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c);
で動くと思うけど、
ダミーの構造体に読み込んでから、bの値を見て有効な部分だけ
(あらかじめ0クリアしておいた)返却用の構造体にコピー、とする方が素直かも。
セグメンテーションフォールトを起こす直接の原因は、
memset() の第1引数 &aaa + sizeof(uint32_t) * 2 の部分だろうね。
printf("%p\n", &aaa);
printf("%p\n", &aaa.c);
printf("%p\n", &aaa + sizeof(uint32_t) * 2);
上の3行の出力を比較検討すると理屈が分かると思うけど説明は長くなる。
というか、俺にはポインタ加算について短く平易に説明する能力がない。
#include <stddef.h> // offsetof()マクロの定義
if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c);
で動くと思うけど、
ダミーの構造体に読み込んでから、bの値を見て有効な部分だけ
(あらかじめ0クリアしておいた)返却用の構造体にコピー、とする方が素直かも。
332デフォルトの名無しさん
2018/02/16(金) 12:40:06.06ID:6scYlSnj カッコの対応が合ってないね。
× if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c);
○ if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c));
× if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c);
○ if (b == 1)memset(&aaa.c, 0x00, sizeof(aaa) - offsetof(struct aaa_tag, c));
333デフォルトの名無しさん
2018/02/16(金) 20:12:13.91ID:hi0D4ZsY >>328
構造体のアラインメントでぐぐれ
構造体のアラインメントでぐぐれ
334デフォルトの名無しさん
2018/02/16(金) 20:28:30.02ID:Ja2iVc8/ 328です
皆様情報ありがとうございました
構造体先頭から末尾までのmemsetとは事情が違うということが分かりました
offsetof()やダミーの構造体など、方針を見直します
ありがとうございました
皆様情報ありがとうございました
構造体先頭から末尾までのmemsetとは事情が違うということが分かりました
offsetof()やダミーの構造体など、方針を見直します
ありがとうございました
335デフォルトの名無しさん
2018/02/16(金) 21:00:38.75ID:hi0D4ZsY だからアラインメントでぐぐれって・・・
それむこうにすればできるから
それむこうにすればできるから
336デフォルトの名無しさん
2018/02/16(金) 21:26:52.07ID:5NiD1AgL 328のセグフォはアドレスとポインタの違いが分からない時にやらかすミス
337デフォルトの名無しさん
2018/02/16(金) 22:05:59.54ID:qDhjnryl アライメント無視して詰め込むとミスってバスエラーになるからやらないな
338デフォルトの名無しさん
2018/02/16(金) 22:59:31.13ID:IhCFworu339デフォルトの名無しさん
2018/02/16(金) 23:35:42.63ID:wAiK151t >>336が正解だろう。アライメントは関係ない。
340デフォルトの名無しさん
2018/02/16(金) 23:47:57.54ID:Ja2iVc8/ >>335
アライメントについては、OS、アプリ共に32ビットであり、
メンバも32ビットに揃える(パディングはさせない)ように
考慮されてはいるので、無効にしてみましたが変化はなさそうです
__attribute__ ((packed))付与有無でsizeof(aaa)としてみましたが、
どちらも4バイト×メンバ数となり、やぱりパディングは
されていないのかなと
>>336
構造体は、パディングに関わらず先頭以外の場所へmemsetやmemcpyで
触ってはならないのだろう、という思いに至り、方針を見直そうと思ったのですが
実際、書くとしたらどう書くことになるのでしょう
例えば、a〜zまで並べられているメンバ中、cからyまでゼロで埋める…みたいなので…
アライメントについては、OS、アプリ共に32ビットであり、
メンバも32ビットに揃える(パディングはさせない)ように
考慮されてはいるので、無効にしてみましたが変化はなさそうです
__attribute__ ((packed))付与有無でsizeof(aaa)としてみましたが、
どちらも4バイト×メンバ数となり、やぱりパディングは
されていないのかなと
>>336
構造体は、パディングに関わらず先頭以外の場所へmemsetやmemcpyで
触ってはならないのだろう、という思いに至り、方針を見直そうと思ったのですが
実際、書くとしたらどう書くことになるのでしょう
例えば、a〜zまで並べられているメンバ中、cからyまでゼロで埋める…みたいなので…
341デフォルトの名無しさん
2018/02/17(土) 00:10:47.04ID:OoNlElF9 &aaa+1はaaaの外を指す
342デフォルトの名無しさん
2018/02/17(土) 00:34:30.85ID:2kmwzB0g343デフォルトの名無しさん
2018/02/18(日) 12:45:11.42ID:SXTB1pky C#の質問なのですがスレが他に無いのでここで質問させてください。
VisualStudio2017でDLLの作成をしようと思っています。
DLLプロジェクトのなかでSystem.ConsoleやSystem.IO.Pathクラスを使用したいのですができません。
「現在のコンテキストに 'Path' という名前は存在しません。」というエラーです。
コンソールアプリのプロジェクトなら問題なく使用できます。
どうすればDLLのプロジェクトでも使用できるようになりますか?
VisualStudio2017でDLLの作成をしようと思っています。
DLLプロジェクトのなかでSystem.ConsoleやSystem.IO.Pathクラスを使用したいのですができません。
「現在のコンテキストに 'Path' という名前は存在しません。」というエラーです。
コンソールアプリのプロジェクトなら問題なく使用できます。
どうすればDLLのプロジェクトでも使用できるようになりますか?
344デフォルトの名無しさん
2018/02/18(日) 13:17:23.84ID:G+NN3epc ふらっと C#,C♯,C#(初心者用) Part135
ttps://mevius.5ch.net/test/read.cgi/tech/1517749348/
C#, C♯, C#相談室 Part95
ttps://mevius.5ch.net/test/read.cgi/tech/1508180530/
あたりじゃダメなん?
ttps://mevius.5ch.net/test/read.cgi/tech/1517749348/
C#, C♯, C#相談室 Part95
ttps://mevius.5ch.net/test/read.cgi/tech/1508180530/
あたりじゃダメなん?
345デフォルトの名無しさん
2018/02/18(日) 14:14:22.93ID:SXTB1pky346デフォルトの名無しさん
2018/05/23(水) 20:32:19.60ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
17PZB
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
17PZB
347デフォルトの名無しさん
2018/05/28(月) 09:03:11.75ID:PxBGvXZO c++のライブラリでこれと言った具体例ではないのですかマニュアル通りにやってもissueを見ても上手く動かせないものがあります
そういう時はどういう様に解決すれば良いのでしょうか?
おすすめのデバッグ方法などがあればよろしくお願いします
そういう時はどういう様に解決すれば良いのでしょうか?
おすすめのデバッグ方法などがあればよろしくお願いします
348デフォルトの名無しさん
2018/05/28(月) 10:00:59.91ID:By7WF+qf 使用をあきらめる
とことん追う
コードを公開して助けを得る
とことん追う
コードを公開して助けを得る
349デフォルトの名無しさん
2018/05/28(月) 10:47:43.80ID:PxBGvXZO350放置された蟻人間 ◆T6xkBnTXz7B0
2018/05/28(月) 11:51:19.10ID:gPZUZ1ZE IDEを使ってビルド・ステップ実行すれば、素人でも実行の様子を観察できる。ただし、GUIのあるプログラムを調べるには、ブレークポイントを設定するなどの工夫が必要。
351デフォルトの名無しさん
2018/05/28(月) 12:55:09.72ID:By7WF+qf えらいレベルの低い内容だな
そういうレベルの事を聞いてる?
そもそもテンプレート以外はソースがなかったりするぞ
そういうレベルの事を聞いてる?
そもそもテンプレート以外はソースがなかったりするぞ
352デフォルトの名無しさん
2018/05/28(月) 13:03:18.27ID:By7WF+qf 他の環境も使えるなら
まずは他の環境で試してみて
ライブラリ自体のバグか使う側の問題か
を切り分けするんだろうね
使い方の問題であれば
問題が発生する使い方と問題が発生しない使い方を色々と調べて差を縮めていって絞るとか
具体例が無いとアドバイスはなかなか難しい
環境とか何系ライブラリとかも定まらない?
まずは他の環境で試してみて
ライブラリ自体のバグか使う側の問題か
を切り分けするんだろうね
使い方の問題であれば
問題が発生する使い方と問題が発生しない使い方を色々と調べて差を縮めていって絞るとか
具体例が無いとアドバイスはなかなか難しい
環境とか何系ライブラリとかも定まらない?
353デフォルトの名無しさん
2018/05/28(月) 16:25:02.90ID:XtA12iLy354デフォルトの名無しさん
2018/05/28(月) 17:31:50.91ID:RGX33ATB インストール方法が分からないって感じかな
readmeとかドキュメントのインストール方法や依存関係の記述をきちんと読むとかそんなところじゃない?
readmeとかドキュメントのインストール方法や依存関係の記述をきちんと読むとかそんなところじゃない?
355デフォルトの名無しさん
2018/05/28(月) 20:03:05.46ID:OHc1BnnP 線形代数とか統計とか?
環境構築面倒だよね
複数のライブラリで同じライブラリを使ってるけど指定バージョンが違うとか
まあ頑張ってとしか
環境構築面倒だよね
複数のライブラリで同じライブラリを使ってるけど指定バージョンが違うとか
まあ頑張ってとしか
356デフォルトの名無しさん
2018/05/28(月) 22:45:18.72ID:ODaUYYKL357デフォルトの名無しさん
2018/05/29(火) 07:22:04.45ID:BUfBrikS 公開日時もヒントだよ。その日付よりも後に出たバージョンを使ってないってのが分かる
ビルドオプションがキーになることもあるからmakefileチェックするとか、
ソースからビルドしようとせずにバイナリ使って逃げるとか、
ひどいのになるとdebugビルドは無理でreleaseビルドするしかないなんてのもある
なんにせよエラー表示見ながら試行錯誤するしかない
ビルドオプションがキーになることもあるからmakefileチェックするとか、
ソースからビルドしようとせずにバイナリ使って逃げるとか、
ひどいのになるとdebugビルドは無理でreleaseビルドするしかないなんてのもある
なんにせよエラー表示見ながら試行錯誤するしかない
358デフォルトの名無しさん
2018/06/03(日) 22:15:08.47ID:wOsqZWyw これから時間を掛けて プログラミング言語 つくるつもりです
一体どんな機能を加えようかと。
何かこれがほしい、あれは入れるな、とかあれば 意見ください
一体どんな機能を加えようかと。
何かこれがほしい、あれは入れるな、とかあれば 意見ください
359デフォルトの名無しさん
2018/06/03(日) 22:24:50.41ID:exGCEUzZ 自爆機能は男のロマン
360デフォルトの名無しさん
2018/06/04(月) 08:28:52.50ID:K9p9OoRg361デフォルトの名無しさん
2018/06/04(月) 17:53:26.43ID:IDOvlJIZ C++もしくはC#と完全互換な機能がほしい
362デフォルトの名無しさん
2018/06/20(水) 22:08:55.83ID:V2+8Up+b Illegal instructionってエラーが出るんだけどどういう時に起こりますか?
363デフォルトの名無しさん
2018/06/20(水) 22:12:45.92ID:deMJdxhR メモリを破壊してIllegalなinstructionが実行されたとき
364デフォルトの名無しさん
2018/06/20(水) 22:16:31.34ID:V2+8Up+b はやっ!ありがとうございます
メモリ系ですか
パソコンによってこのエラーが出なかったりするのは何故でしょう?
メモリ系ですか
パソコンによってこのエラーが出なかったりするのは何故でしょう?
365デフォルトの名無しさん
2018/06/20(水) 22:51:07.51ID:AQ4yWUfz 新しいCPUの命令セットを使ったプログラムを古くて部分的にサポートされてないCPUで実行しようとしたときに起こる
366デフォルトの名無しさん
2018/06/20(水) 23:13:47.79ID:V2+8Up+b 確かに古い方のパソコンでエラーが出ます!
あとおもしろい発見をしました
(this=this@entry=0x7ffffffec7a0)と該当エラーの行(例えば100行目)に出ているのですが
その100行目にdouble a = 2;と、エラーの起こさないであろう命令を入れてみました
しかし先ほどと同じ100行目のこの命令にIllegal instructionのエラーが出ます
どうやら100行目に命令があるということが問題のようです
どういうことでしょうか??
あとおもしろい発見をしました
(this=this@entry=0x7ffffffec7a0)と該当エラーの行(例えば100行目)に出ているのですが
その100行目にdouble a = 2;と、エラーの起こさないであろう命令を入れてみました
しかし先ほどと同じ100行目のこの命令にIllegal instructionのエラーが出ます
どうやら100行目に命令があるということが問題のようです
どういうことでしょうか??
367デフォルトの名無しさん
2018/06/23(土) 13:29:59.85ID:6TJT73Kw スタック漏れか
368デフォルトの名無しさん
2018/06/24(日) 20:18:56.13ID:iTeaU+33369デフォルトの名無しさん
2018/07/04(水) 22:34:23.65ID:gFgZc5FG KS7
370デフォルトの名無しさん
2018/07/29(日) 21:29:27.59ID:Xelx6XCB 普通にコンパイルするとダイナミックリンクになるプログラムをスタティックリンクにするにはどうすればいいですか?
371デフォルトの名無しさん
2018/07/29(日) 22:05:02.94ID:k46/2Knz 普通にせずにスタティックライブラリとしてビルドすればいいw
IDEでの設定なり、コマンドラインオプションで指定できるでしょ
IDEでの設定なり、コマンドラインオプションで指定できるでしょ
372デフォルトの名無しさん
2018/07/29(日) 22:10:06.65ID:Xelx6XCB あ!そういうオプションがありました
ありがとうございます
ありがとうございます
373デフォルトの名無しさん
2018/08/22(水) 22:37:09.89ID:/ith9quv 共通暗号方式の DES を高速化する方法はありませんか?
374デフォルトの名無しさん
2018/08/22(水) 22:54:49.80ID:O+8hSQqt PC買い替える
375デフォルトの名無しさん
2018/08/22(水) 23:23:19.35ID:/ith9quv376デフォルトの名無しさん
2018/10/16(火) 17:29:53.23ID:rnwRcPOp DESではどうやっても体感できるほどの差にはならんだろ
よほどデカイか環境がプアじゃない限りは
よほどデカイか環境がプアじゃない限りは
377デフォルトの名無しさん
2019/01/26(土) 20:56:02.99ID:FlqqakqU 大規模なC++のコードに対して、あるライブラリを追加したい。
そのライブラリのnew_tool(仮名).aファイルを
Makefile内のインクルードに追加すれば使える
らしいんだけど、具体的にどうMakeを書けばよいか教えてください。
そのライブラリのnew_tool(仮名).aファイルを
Makefile内のインクルードに追加すれば使える
らしいんだけど、具体的にどうMakeを書けばよいか教えてください。
378デフォルトの名無しさん
2019/01/26(土) 21:07:40.21ID:exLOU4gz 「c++ include makefile」で検索!
379デフォルトの名無しさん
2021/05/03(月) 21:14:36.62ID:7JCEgVe4 へえ
380デフォルトの名無しさん
2021/05/05(水) 11:17:37.27ID:16ICHsbN opencvの32ビット版を使いたいのですが、最新版のインストーラに付いて来たソースコードをCMAKEしたら、X64のソリューションしか作成されませんでした
どうしたらwin32(x86)のソリューションが作成されるでしょうか?
どうしたらwin32(x86)のソリューションが作成されるでしょうか?
381デフォルトの名無しさん
2021/05/05(水) 11:35:59.84ID:CsyVlvqA サンプルをビルドできない→サンプルなんて参考にするだけでいいじゃん
本体をビルドできない→32bitバイナリダウンロードしたら?
答えになってないけどw
本体をビルドできない→32bitバイナリダウンロードしたら?
答えになってないけどw
382デフォルトの名無しさん
2021/05/06(木) 12:26:36.39ID:GHdSH9fo383デフォルトの名無しさん
2021/05/06(木) 13:08:59.95ID:84/gBo5v How to create the OpenCV binary files yourself - Part 1
https://www.youtube.com/watch?v=NnovZ1cTlMs
How to create the OpenCV binary files yourself - Part 2
https://www.youtube.com/watch?v=qGNWMcfWwPU
https://www.youtube.com/watch?v=NnovZ1cTlMs
How to create the OpenCV binary files yourself - Part 2
https://www.youtube.com/watch?v=qGNWMcfWwPU
384デフォルトの名無しさん
2021/05/16(日) 11:42:22.24ID:i0aHhWnL >>380
VSでそのソリューションに対し、x64用の構成を鋳型にして新しい構成を作成し、アーキテクチャをx86に変えてみたらどうなる。
VSでそのソリューションに対し、x64用の構成を鋳型にして新しい構成を作成し、アーキテクチャをx86に変えてみたらどうなる。
385デフォルトの名無しさん
2021/05/20(木) 13:09:22.68ID:bQ5/ppWH cmake
386デフォルトの名無しさん
2021/05/20(木) 14:11:24.28ID:tSAswoHW cmakeでvsのslnを生成するのは一般的だからな
ただしopencvに一般論が当てはまるのかは知らない
ただしopencvに一般論が当てはまるのかは知らない
387デフォルトの名無しさん
2021/06/03(木) 00:19:30.55ID:KAyuKPOb dso(dynamic shared object)は、Linux の *.so のことだと思っていいの?
つまり、shared library と言われている物と dso は同じ?
つまり、shared library と言われている物と dso は同じ?
>>358
プログラミング言語は、現時点で多すぎ、もうお腹いっぱいです…
むしろ、いろんな言語でわりと共通に使えるクラスライブラリを書いてください
互換性とかはあまりとやかくいわないつもりです、要は機能と名前がセットで共通なのがいいです
プログラミング言語は、現時点で多すぎ、もうお腹いっぱいです…
むしろ、いろんな言語でわりと共通に使えるクラスライブラリを書いてください
互換性とかはあまりとやかくいわないつもりです、要は機能と名前がセットで共通なのがいいです
>>359
バルス!も宮崎駿のロマン、なんですか?
バルス!も宮崎駿のロマン、なんですか?
390デフォルトの名無しさん
2022/05/04(水) 09:31:26.67ID:fooXr7Ib for (size_t i=0; i < for.getLength(); ++i){/*処理*/}
こういうコード多いですよね
コンパイラは終了条件のget関数のとこ副作用は無いものとして最適化するんですか?
こういうコード多いですよね
コンパイラは終了条件のget関数のとこ副作用は無いものとして最適化するんですか?
391デフォルトの名無しさん
2022/05/04(水) 10:29:12.88ID:jIlp9s0v 処理の中でlengthに変化ないとコンパイラが確信できたら最適化。グレーだったら最適化されない
コンパイラにもよるんだろうけど
コンパイラにもよるんだろうけど
392デフォルトの名無しさん
2022/05/05(木) 02:35:43.19ID:FeY8iOM4 ジャルジャル、「レギュラーゼロ」でも年間2億円超!?荒稼ぎの“内訳”とは
お笑いコンビ「ジャルジャル」(後藤淳平、福徳秀介)の年収は2億円と、
1月22日放送の「せやねん!」(毎日放送)が試算した。
YouTubeに関しては、8000本という持ちネタを約4年前から毎日投稿し、計算上は
2039 年まで投稿可能。ネタは1日で数十本まとめ撮りしていると紹介され、
あるYouTuberの証言 として、年間4000万〜5000万円の収入があるとした。
また、19年に開始したオンラインサロンは月額1100円。会員数は未公表だが、
キングコング西野の会員が5.8万人を参考に、ジャルジャルは1万人と仮定すると、
これだけでも年間1億円超。加えてライブはチケット代が6000円ぐらいで、昨年は
ツアーを2回開催。一つは16公演(劇場+配信)で1万人を動員し、売上推定は
約4000万円。もう一つは12公演で、動員数は未公表だが、単純に1回目の75%で
計算すると売上推定は約3000万円。合計7000万円が昨年のライブにおける売上と試算。
以上の3つを合計し、ジャルジャルは年間、2億円超を稼いでいると結論づけていた。
お笑いコンビ「ジャルジャル」(後藤淳平、福徳秀介)の年収は2億円と、
1月22日放送の「せやねん!」(毎日放送)が試算した。
YouTubeに関しては、8000本という持ちネタを約4年前から毎日投稿し、計算上は
2039 年まで投稿可能。ネタは1日で数十本まとめ撮りしていると紹介され、
あるYouTuberの証言 として、年間4000万〜5000万円の収入があるとした。
また、19年に開始したオンラインサロンは月額1100円。会員数は未公表だが、
キングコング西野の会員が5.8万人を参考に、ジャルジャルは1万人と仮定すると、
これだけでも年間1億円超。加えてライブはチケット代が6000円ぐらいで、昨年は
ツアーを2回開催。一つは16公演(劇場+配信)で1万人を動員し、売上推定は
約4000万円。もう一つは12公演で、動員数は未公表だが、単純に1回目の75%で
計算すると売上推定は約3000万円。合計7000万円が昨年のライブにおける売上と試算。
以上の3つを合計し、ジャルジャルは年間、2億円超を稼いでいると結論づけていた。
393デフォルトの名無しさん
2022/07/15(金) 20:04:16.25ID:gTFOG38u 以下の2つのパターンでプロジェクトにマニフェストファイルを取り込んだ場合、違いはあるのでしょうか。
また、どちらがポピュラーなのでしょうか。
==============================
前提:App.manifestはexeと同階層に配置。
------------------------------------------------------------
@:プロジェクトを右クリック→「追加」→「既存の項目」
で、すでに作成済みのApp.manifestを追加。
A:プロジェクトを右クリック→「プロパティ」→「マニフェスト ツール」→
追加のマニフェスト
で、すでに作成済みのApp.manifestのパスを記載。
試してみたところ、@Aともにビルド時に正しくマニフェストファイルが読み込まれ、一見動作的な違いは現れませんでした。
ただ、@はプロジェクトのソース一覧にマニフェストが表示されるのに対し、
Aは表示されていません。
ご教示お願い致します。
また、どちらがポピュラーなのでしょうか。
==============================
前提:App.manifestはexeと同階層に配置。
------------------------------------------------------------
@:プロジェクトを右クリック→「追加」→「既存の項目」
で、すでに作成済みのApp.manifestを追加。
A:プロジェクトを右クリック→「プロパティ」→「マニフェスト ツール」→
追加のマニフェスト
で、すでに作成済みのApp.manifestのパスを記載。
試してみたところ、@Aともにビルド時に正しくマニフェストファイルが読み込まれ、一見動作的な違いは現れませんでした。
ただ、@はプロジェクトのソース一覧にマニフェストが表示されるのに対し、
Aは表示されていません。
ご教示お願い致します。
394蟻人間 ◆T6xkBnTXz7B0
2022/07/15(金) 20:40:24.76ID:axBn0Pf7 マニフェストを埋め込まなかった場合は、ユーザーはマニフェストを変更または削除できるでしょう。
それをどう考えるかだね。
それをどう考えるかだね。
395デフォルトの名無しさん
2022/07/17(日) 23:47:43.74ID:SO89GsXj >>394
レスありがとうございます。
挙げたパターンで言うと、@が埋め込んだ場合でAが埋め込まない場合、という解釈でよいのでしょうか?
(言葉の綾かもしれませんが、初学者の私にはどちらも"埋め込んでいる"ように思えます…)
プログラムとしての是非はともかく、VisualStudioなどでプロジェクトを開いたときにマニフェストファイルが表示される@のほうが
わかりやすくて好みですね。
レスありがとうございます。
挙げたパターンで言うと、@が埋め込んだ場合でAが埋め込まない場合、という解釈でよいのでしょうか?
(言葉の綾かもしれませんが、初学者の私にはどちらも"埋め込んでいる"ように思えます…)
プログラムとしての是非はともかく、VisualStudioなどでプロジェクトを開いたときにマニフェストファイルが表示される@のほうが
わかりやすくて好みですね。
396蟻人間 ◆T6xkBnTXz7B0
2022/07/18(月) 04:37:14.05ID:IG4ROsTc ああ、どちらも埋め込んでますね(リソースエディタで確認)。
違いはないようです。
違いはないようです。
397デフォルトの名無しさん
2022/07/26(火) 09:46:29.00ID:KWta55aV398デフォルトの名無しさん
2022/07/30(土) 16:26:22.96ID:paa5jUiA まだあったんかねこのすれ
399デフォルトの名無しさん
2022/12/31(土) 23:42:50.35ID:bCnreZgB Pythonで以下の記述があり、C++に書き直したいです。
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
以下のC++から書き直すとどうなりますか?
#include "opencv2/opencv.hpp"
cv::VideoCapture _vidIn{};
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
以下のC++から書き直すとどうなりますか?
#include "opencv2/opencv.hpp"
cv::VideoCapture _vidIn{};
400デフォルトの名無しさん
2023/03/22(水) 07:25:48.92ID:VJ8vK811 喪中だよ・・
401デフォルトの名無しさん
2023/08/11(金) 05:44:11.79ID:rsk6Ej3H (~。~;)y (-o- )/ ⌒-~ ぽい!
402デフォルトの名無しさん
2023/11/20(月) 12:03:40.95ID:IOBwVD3+ なんやこりゃ、びっくりしたわ
403デフォルトの名無しさん
2024/02/11(日) 02:53:37.58ID:morq3qnL >>1
フラグを勃てると書いたら実にいやらしい
フラグを勃てると書いたら実にいやらしい
404デフォルトの名無しさん
2024/03/11(月) 02:18:46.40ID:rRWPOaAF strlen()が数え間違えるので、自前でchar*単位で回して数えた。解決。
後になって、それはどう考えてもおかしいだろとコメントアウトしていたstrlen()を戻したら、ちゃんと正常動作していた。
実は今、ブレークポイントを設定していない箇所・・・しかも特定の位置で実行停止すると言う(私は)経験のない事例に困惑しきりで、どこかmalloc()失敗していてメモリ喰い破っているのかな・・・と見直しているのですが、見付からず。
一般論として、ポインタ周りが怪しい、ですよねえ・・・。
それ以外の可能性として、どんな事があるでしょうか。
環境はMicrosoft Visual Studio Community 2022のC++ですが、C言語&DXライブラリで書いています。
後になって、それはどう考えてもおかしいだろとコメントアウトしていたstrlen()を戻したら、ちゃんと正常動作していた。
実は今、ブレークポイントを設定していない箇所・・・しかも特定の位置で実行停止すると言う(私は)経験のない事例に困惑しきりで、どこかmalloc()失敗していてメモリ喰い破っているのかな・・・と見直しているのですが、見付からず。
一般論として、ポインタ周りが怪しい、ですよねえ・・・。
それ以外の可能性として、どんな事があるでしょうか。
環境はMicrosoft Visual Studio Community 2022のC++ですが、C言語&DXライブラリで書いています。
405デフォルトの名無しさん
2024/03/11(月) 05:42:49.72ID:rRWPOaAF 何気ない習慣で、ageてなかった。
406デフォルトの名無しさん
2024/03/12(火) 16:17:58.25ID:ny/qS6He エラーがでてるのか?表示してくれてると思うが内容はどうなっているのか?
407404
2024/03/19(火) 19:03:35.85ID:qI3ILkQW >>406
エラーや警告は一切ありませんでした。
と言うか解決した今だから言えますが、私が馬鹿でした。
ええと、構造体ポインタに構造体の実体を代入していました。 そらヒープエリアも突き破るってもんで。
こんな感じ。
struct AAA data[2];
struct AAA *aaa; // *ではなく**
aaa=(struct AAA*)malloc( sizeof(struct AAA*) *2):
aaa[0]=data[0]; // &data[...
aaa[1]=data[1]; // &data[...
プログラムは、(間違った)意図通りにちゃんと動いていたみたいです(笑)。
エラーや警告は一切ありませんでした。
と言うか解決した今だから言えますが、私が馬鹿でした。
ええと、構造体ポインタに構造体の実体を代入していました。 そらヒープエリアも突き破るってもんで。
こんな感じ。
struct AAA data[2];
struct AAA *aaa; // *ではなく**
aaa=(struct AAA*)malloc( sizeof(struct AAA*) *2):
aaa[0]=data[0]; // &data[...
aaa[1]=data[1]; // &data[...
プログラムは、(間違った)意図通りにちゃんと動いていたみたいです(笑)。
408デフォルトの名無しさん
2024/05/03(金) 13:00:20.63ID:Vf2Lxl94 clangは、--targetオプションでターゲットを変更できますが
ひょんなことから、どうも、このオプションを無指定の時の
デフォルト値が、システムにインストールされているmsvcの
バージンによって変化するようなのですが、詳しい方
いらっしゃいませんか。たとえばそれにより、
char16_tがbuilt-in typeになるかどうかに違いが出てきます。
VS2019をインストールしていないとき、clang10やclang16(?)
は、デフォルトでは、char16_tがbuilt-in typeではありません。
このとき、出力された*.llの冒頭に灰化の記述があります:
target triple = "i686-pc-windows-msvc14.0.50727"
ところが、
-fms-compatibility
-fms-compatibility-version=19
を指定すると、char16_tがbuilt-in typeになり、
*.ll の冒頭の記述が変化し、
target triple = "i686-pc-windows-msvc19.0.0"
となります。上記のオプションの代わりにコマンドラインに
--target=i686-pc-windows-msvc19.0.0
と指定してもchar16_tに関してはbuilt-in type になりました。
ここまではいいのですが、不思議なことに、これらのオプションを
全く指定しなくても、なぜか、char16_t が built-in typeになって
いたことがありました。そのときは、インストールした時点で
VS2019がインストールされていたと思います。
今はインストールされていません。
ひょんなことから、どうも、このオプションを無指定の時の
デフォルト値が、システムにインストールされているmsvcの
バージンによって変化するようなのですが、詳しい方
いらっしゃいませんか。たとえばそれにより、
char16_tがbuilt-in typeになるかどうかに違いが出てきます。
VS2019をインストールしていないとき、clang10やclang16(?)
は、デフォルトでは、char16_tがbuilt-in typeではありません。
このとき、出力された*.llの冒頭に灰化の記述があります:
target triple = "i686-pc-windows-msvc14.0.50727"
ところが、
-fms-compatibility
-fms-compatibility-version=19
を指定すると、char16_tがbuilt-in typeになり、
*.ll の冒頭の記述が変化し、
target triple = "i686-pc-windows-msvc19.0.0"
となります。上記のオプションの代わりにコマンドラインに
--target=i686-pc-windows-msvc19.0.0
と指定してもchar16_tに関してはbuilt-in type になりました。
ここまではいいのですが、不思議なことに、これらのオプションを
全く指定しなくても、なぜか、char16_t が built-in typeになって
いたことがありました。そのときは、インストールした時点で
VS2019がインストールされていたと思います。
今はインストールされていません。
409デフォルトの名無しさん
2024/05/23(木) 16:30:49.25ID:xv5nSRGj このプログラムを実行すると1回目のfunc()は呼び出されず、2回目だけ呼び出されるので、
1回目のaの値は4で2回目は5と表示されるんですが、こういうものなんですか?
論理和の仕様上、一つ目の項目を評価してfalseのときしか二つ目の項目を評価しないらしいですが
ちなみにVisual Studio 2019です
#include <iostream>
using namespace std;
int a = 4;
int func() {
a = 5;
return 3;
}
int main(void) {
int b = 2 || func();
cout << a << endl;
int c = func();
cout << a << endl;
return 0;
}
1回目のaの値は4で2回目は5と表示されるんですが、こういうものなんですか?
論理和の仕様上、一つ目の項目を評価してfalseのときしか二つ目の項目を評価しないらしいですが
ちなみにVisual Studio 2019です
#include <iostream>
using namespace std;
int a = 4;
int func() {
a = 5;
return 3;
}
int main(void) {
int b = 2 || func();
cout << a << endl;
int c = func();
cout << a << endl;
return 0;
}
410デフォルトの名無しさん
2024/05/23(木) 16:36:22.83ID:BPzMbngY そういうもの
c++に限らずたいていの言語で同じようになる
c++に限らずたいていの言語で同じようになる
411デフォルトの名無しさん
2024/05/23(木) 16:53:56.61ID:xv5nSRGj412デフォルトの名無しさん
2024/05/24(金) 02:03:57.45ID:1vUdw0qC アンドは全評価
オアは順次評価
オアは順次評価
413デフォルトの名無しさん
2024/05/24(金) 02:04:55.48ID:1vUdw0qC いやアンドもフォルスになったらそこで評価止まるか
間違えちゃった
間違えちゃった
414デフォルトの名無しさん
2024/05/24(金) 11:11:20.56ID:73k9oLNx415 警備員[Lv.1][新芽]
2024/05/24(金) 13:35:55.45ID:ngJd/n5C 下のmake_test()で、testのコンストラクタとstd::vector<int>のデストラクタが呼ばれる順番は、規格で定められていますか?
visual studio 2022で確認用クラスを作ってテストしたらコンストラクタが先でしたが、規格で定められているかが知りたいです。
struct test {
using itr = std::vector<int>::iterator;
test(itr begin, itr end);
};
test make_test() {
std::vector<int> v{};
// do something
return {v.begin(), v.end()};
}
visual studio 2022で確認用クラスを作ってテストしたらコンストラクタが先でしたが、規格で定められているかが知りたいです。
struct test {
using itr = std::vector<int>::iterator;
test(itr begin, itr end);
};
test make_test() {
std::vector<int> v{};
// do something
return {v.begin(), v.end()};
}
416デフォルトの名無しさん
2024/06/08(土) 09:42:34.51ID:Kcr3cAzI >>409
> int b = 2 || func();
この描き方が良くない
int (b = 2) == true || func(); にしろとまでは言わないが
普通に読むと
int b = (2 || func()); を意図してるのかとも思ってしまう(もちろん思わないが)
> int b = 2 || func();
この描き方が良くない
int (b = 2) == true || func(); にしろとまでは言わないが
普通に読むと
int b = (2 || func()); を意図してるのかとも思ってしまう(もちろん思わないが)
417デフォルトの名無しさん
2024/06/08(土) 09:45:54.98ID:Kcr3cAzI >>415
コンストラクタが先で決まってる
コンストラクタが先で決まってる
418デフォルトの名無しさん
2024/06/08(土) 22:00:38.46ID:SQewuPnz >>416
いやこれは、
int b = (2 || func());
を意図したものです
なので、
int d = func();
int b = 2 || d;
と2行に分けて処理することにしました
たしかにboolじゃないものを論理和で比較するのは、ちょっと変かもしれませんが
いやこれは、
int b = (2 || func());
を意図したものです
なので、
int d = func();
int b = 2 || d;
と2行に分けて処理することにしました
たしかにboolじゃないものを論理和で比較するのは、ちょっと変かもしれませんが
419デフォルトの名無しさん
2024/06/09(日) 09:47:53.65ID:XLDZv0sl int b = func() || 2; じゃだめなん
420デフォルトの名無しさん
2024/06/09(日) 11:55:50.03ID:8t1zQd4u421デフォルトの名無しさん
2024/06/10(月) 16:00:14.58ID:YXHAsqQy さすが隔離病棟
422デフォルトの名無しさん
2024/06/10(月) 19:27:15.16ID:hd/oL/6W MISRA-C 違反だろ
論理演算子の両側は、実質的なbool 値しか書けない。
整数などはダメ!
演算順序が紛らわしいものは、カッコでくくるとか
if 整数
もダメ!
if b = 2
もダメ!
b == 2 の間違いなのか紛らわしい
論理演算子の両側は、実質的なbool 値しか書けない。
整数などはダメ!
演算順序が紛らわしいものは、カッコでくくるとか
if 整数
もダメ!
if b = 2
もダメ!
b == 2 の間違いなのか紛らわしい
423デフォルトの名無しさん
2024/06/11(火) 00:37:22.43ID:OSVD3Fpv >>422
MISRA-Cなんてのがあるんですね、初めて知りました
ちゃんとルールに規定されていますね
(5) ルール12.4 論理演算子「&&」・「||」の右側オペランド
【ルール】
論理演算子&&又は||の右側のオペランドには、副作用があってはならない。
【解説】
&&演算子、||演算子では、第1項目で結果が決まってしまうと、それ以降の評価を行いません。
そのため、第2項目以降に、副作用(値の変更など)が行われる処理を記述してしまうと、処理される場合とされない場合があります。
誤解を与える可能性があるため、第2項移行に副作用のある処理を記述することを禁止しています。
MISRA-Cなんてのがあるんですね、初めて知りました
ちゃんとルールに規定されていますね
(5) ルール12.4 論理演算子「&&」・「||」の右側オペランド
【ルール】
論理演算子&&又は||の右側のオペランドには、副作用があってはならない。
【解説】
&&演算子、||演算子では、第1項目で結果が決まってしまうと、それ以降の評価を行いません。
そのため、第2項目以降に、副作用(値の変更など)が行われる処理を記述してしまうと、処理される場合とされない場合があります。
誤解を与える可能性があるため、第2項移行に副作用のある処理を記述することを禁止しています。
424デフォルトの名無しさん
2024/06/11(火) 00:48:25.01ID:mLiyqLkB 何がしたいコードなのこれ?どんな時に必要?
式の評価のお勉強?
式の評価のお勉強?
425デフォルトの名無しさん
2024/06/11(火) 02:00:53.42ID:59SEyAxW さあね
ただ質問者が聞きたかったのは「一つ目の項目を評価してfalseのときしか二つ目の項目を評価しない」と言う部分だから
コードそのものに意味なんて無いと思うけど
初心者に良くある「聞きたいことを上手く説明できないので例となるCodeを書くが、そもそもちゃんと理解していないのでおかしなものになっている」ってやつかと
ただ質問者が聞きたかったのは「一つ目の項目を評価してfalseのときしか二つ目の項目を評価しない」と言う部分だから
コードそのものに意味なんて無いと思うけど
初心者に良くある「聞きたいことを上手く説明できないので例となるCodeを書くが、そもそもちゃんと理解していないのでおかしなものになっている」ってやつかと
426デフォルトの名無しさん
2024/06/11(火) 05:29:30.07ID:7n9sgmId 男性の精子の減少、携帯電話の使用と関係か 最新研究
2023/11/02
https://www.cnn.co.jp/fringe/35211064.html
放射線と被曝
https://www.kan-etsu-hp.ne.jp/wp-content/themes/kan-etsu-hp/assets/kanetsu-hospital/department/pdf/radiology/radiation.pdf
>>エネルギーが極端に大きくなると X 線やガンマ線と呼ばれる放射線の一種になります。
※電磁波音波攻撃被爆している?
MrIは強力な磁場を利用しているので被爆しない
冷凍した人間の脳組織を解凍した後も正常に機能する技術開発
2024.05.12
https://karapaia.com/archives/52331859.html
1立方ミリメートルの脳の断片をハーバード大学とGoogleの研究者がナノメートル単位で3Dマッピングすることに成功
2024年05月10日
https://gigazine.net/news/20240510-human-brain-mapped-in-spectacular-detail/
幼児期の脳活動から18歳時点でのIQを予測できるという研究結果
2023/09/09
https://gigazine.net/news/20230909-brain-activity-toddler-predict-18-iq/
パーキンソン病の原因物質、脳内の可視化に成功
2024年6月6日 0時00分
https://www.asahi.com/articles/ASS652V7RS65ULBH00GM.html
東工大、磁束集中器を用いない高感度「ダイヤモンド量子センサ」を開発
2024/06/07
https://news.mynavi.jp/techplus/article/20240607-2961238/
2023/11/02
https://www.cnn.co.jp/fringe/35211064.html
放射線と被曝
https://www.kan-etsu-hp.ne.jp/wp-content/themes/kan-etsu-hp/assets/kanetsu-hospital/department/pdf/radiology/radiation.pdf
>>エネルギーが極端に大きくなると X 線やガンマ線と呼ばれる放射線の一種になります。
※電磁波音波攻撃被爆している?
MrIは強力な磁場を利用しているので被爆しない
冷凍した人間の脳組織を解凍した後も正常に機能する技術開発
2024.05.12
https://karapaia.com/archives/52331859.html
1立方ミリメートルの脳の断片をハーバード大学とGoogleの研究者がナノメートル単位で3Dマッピングすることに成功
2024年05月10日
https://gigazine.net/news/20240510-human-brain-mapped-in-spectacular-detail/
幼児期の脳活動から18歳時点でのIQを予測できるという研究結果
2023/09/09
https://gigazine.net/news/20230909-brain-activity-toddler-predict-18-iq/
パーキンソン病の原因物質、脳内の可視化に成功
2024年6月6日 0時00分
https://www.asahi.com/articles/ASS652V7RS65ULBH00GM.html
東工大、磁束集中器を用いない高感度「ダイヤモンド量子センサ」を開発
2024/06/07
https://news.mynavi.jp/techplus/article/20240607-2961238/
427デフォルトの名無しさん
2024/06/11(火) 05:29:57.50ID:7n9sgmId 日常的な蓋内全体の脳脊髄液の動態をマクロ的に観測する手法の開発に成功
2024/06/07
https://news.mynavi.jp/techplus/article/20240607-2961214/
細胞の内部を鮮明に観察できる蛍光顕微鏡技術を開発 阪大など
2024/05/07
https://news.mynavi.jp/techplus/article/20240507-2941335/
脳が鮮明に見える!世界最強の磁束密度で脳をスキャンするMRI「イズールト」
2024.04.05
https://nazology.net/archives/148090
※5分で全身スキャン完了するのかな
2024/06/07
https://news.mynavi.jp/techplus/article/20240607-2961214/
細胞の内部を鮮明に観察できる蛍光顕微鏡技術を開発 阪大など
2024/05/07
https://news.mynavi.jp/techplus/article/20240507-2941335/
脳が鮮明に見える!世界最強の磁束密度で脳をスキャンするMRI「イズールト」
2024.04.05
https://nazology.net/archives/148090
※5分で全身スキャン完了するのかな
428デフォルトの名無しさん
2024/06/11(火) 06:55:52.99ID:3zjiFVVb 電磁波兵器の特許情報/Google検索で下記が判明
電磁波過敏症 低周波騒音被害 の症状が出現
設立 1998年 テクノロジー犯罪の撲滅
Https://media.toriaez.jp/s2972/32686.pdf
P77-身体・運動機能が遠隔から操作される P78-五感が遠隔から操作される
ギャングストーキングと電磁攻撃 - 広島修道大学学術リポジトリ
https://shudo-u.repo.nii.ac.jp/record/3395/files/SG63205.pdf
下記を頭部などで再現
人間の「第六感」 磁気を感じる能力発見
2019/03/19
https://www.sankei.com/article/20190319-6UGPQVLP4BLEDJYGVSX3WW6A4A/
髪の毛ほど薄いのに音を75%カット!MIT開発の「革新的防音カーテン」
2024.05.13
https://nazology.net/archives/149896
言葉に出さずとも内なる声を解読する、脳の読み取り装置が解発される
2024.05.20
https://karapaia.com/archives/52331884.html
電磁波過敏症 低周波騒音被害 の症状が出現
設立 1998年 テクノロジー犯罪の撲滅
Https://media.toriaez.jp/s2972/32686.pdf
P77-身体・運動機能が遠隔から操作される P78-五感が遠隔から操作される
ギャングストーキングと電磁攻撃 - 広島修道大学学術リポジトリ
https://shudo-u.repo.nii.ac.jp/record/3395/files/SG63205.pdf
下記を頭部などで再現
人間の「第六感」 磁気を感じる能力発見
2019/03/19
https://www.sankei.com/article/20190319-6UGPQVLP4BLEDJYGVSX3WW6A4A/
髪の毛ほど薄いのに音を75%カット!MIT開発の「革新的防音カーテン」
2024.05.13
https://nazology.net/archives/149896
言葉に出さずとも内なる声を解読する、脳の読み取り装置が解発される
2024.05.20
https://karapaia.com/archives/52331884.html
429デフォルトの名無しさん
2024/06/11(火) 10:42:59.93ID:GrH0S5VC int b = (func() != 0) || (2 != 0);
これで違反回避だ
これで違反回避だ
430デフォルトの名無しさん
2024/06/15(土) 03:56:25.09ID:Ywoe/U/8 初学者です。独習C++で学習中なので何かアウトプットしようと考えていますがアプリ開発の情報が乏しくGUIの学習も難しいです…しかしC++本で勉強していても実際どう使われるのかイメージが湧きづらいことが多く何か目的、ステップのようなものがあれば教えていただきたいです
431デフォルトの名無しさん
2024/06/15(土) 08:11:38.18ID:h+pAIb35 AIに組み込まれた検閲による命令拒否を打ち消してあらゆる種類の質問に応答できるようにする「アブリテレーション」とは?
2024年06月14日
※自分の身近な人の嘘や陥れようかが話されたことと実際の動き【動画撮影含む】っを解析すれば判明
スポーツで動的シミレーションなどをする不正をしているや審判の判定がおかしいも判明
日常生活の動きも同時に併用されればボイス・トォ・スカルを使用しているかが判明
スマフォにAIが搭載されるので容易に判定
120フレームと8k【人間の網膜の解像度と同じ】あればかなり制度が上がる
相手の望まない手助けは数週間持続する高いストレスを与える!
2024.06.13
↕サイコパスはどう考えるのかな
使えない人」を排斥するとき周りの人の心は痛みにくいと判明
2021.05.22 SAT
ネット上で問題発言をする人は、暗い性格特性「ダーク・トライアド」かもしれない
2021.04.02 FRI
ナルシストは他の人よりも早くCEOの地位にたどり着く
2021.02.09 TUE
つい被害者を責めてしまう「公正世界仮説」とは何なのか?
2019.07.22 MON
「無能」でもOK? 社会的地位の高い人ほど信頼されやすい理由とは
2019.06.02 SUN
2024年06月14日
※自分の身近な人の嘘や陥れようかが話されたことと実際の動き【動画撮影含む】っを解析すれば判明
スポーツで動的シミレーションなどをする不正をしているや審判の判定がおかしいも判明
日常生活の動きも同時に併用されればボイス・トォ・スカルを使用しているかが判明
スマフォにAIが搭載されるので容易に判定
120フレームと8k【人間の網膜の解像度と同じ】あればかなり制度が上がる
相手の望まない手助けは数週間持続する高いストレスを与える!
2024.06.13
↕サイコパスはどう考えるのかな
使えない人」を排斥するとき周りの人の心は痛みにくいと判明
2021.05.22 SAT
ネット上で問題発言をする人は、暗い性格特性「ダーク・トライアド」かもしれない
2021.04.02 FRI
ナルシストは他の人よりも早くCEOの地位にたどり着く
2021.02.09 TUE
つい被害者を責めてしまう「公正世界仮説」とは何なのか?
2019.07.22 MON
「無能」でもOK? 社会的地位の高い人ほど信頼されやすい理由とは
2019.06.02 SUN
432デフォルトの名無しさん
2024/06/15(土) 08:11:59.31ID:h+pAIb35 「問題を指摘する人」に問題があると思い込む心理バイアス「自発的特性転移」が陰謀論を生んでいるという主張
2024年05
悪いニュースを伝えた人は理不尽に嫌われてしまうことが明らかに
2019.05.17
「恋人がサイコパス」だった時の見分け方とは
2018.12.09 SUN
ロンドン市民の娯楽だった?!近代イギリスの公開処刑
2023/12/17
スラップ訴訟
>>ある程度の発言力や社会的影響力のある、社会的に優位といえる立場の者が、特に発言力や影響力を持たない相対的弱者を相手取り訴訟を起こすこと。
巨大IT企業から「法的措置をちらつかせる停止通告書」を受け取った場合の対処方法とは?
2024年02月01日 08時00分
2024年05
悪いニュースを伝えた人は理不尽に嫌われてしまうことが明らかに
2019.05.17
「恋人がサイコパス」だった時の見分け方とは
2018.12.09 SUN
ロンドン市民の娯楽だった?!近代イギリスの公開処刑
2023/12/17
スラップ訴訟
>>ある程度の発言力や社会的影響力のある、社会的に優位といえる立場の者が、特に発言力や影響力を持たない相対的弱者を相手取り訴訟を起こすこと。
巨大IT企業から「法的措置をちらつかせる停止通告書」を受け取った場合の対処方法とは?
2024年02月01日 08時00分
433デフォルトの名無しさん
2024/06/15(土) 08:44:52.16ID:q65PQFXc std::spanってどういう時に使うんですか?適当な範囲にアクセスしたいだけならIterator使えばいいだけですよね?
434デフォルトの名無しさん
2024/06/15(土) 10:23:47.26ID:sguIT4c6 サイバーエージェント、画像認識できる75億パラメーターの日本語LLM公開 商用利用OK
サイバーエージェントは6月13日、日本語大規模言語モデル(LLM)に画像認識機能を追加した大規模視覚言語モデル(VLM)「llava-calm2-siglip」を公開した。
「ChatGPT」画像を見ながら人間みたいに話せる新機能、今後数週間でリリースと予告
OpenAIは6月14日、同社の公式Instagramアカウントを通じ、ChatGPT(GPT-4o)に音声と映像を同時に理解する機能を追加し、今後数週間以内にリリースすると発表した。
画像生成AI「Stable Diffusion 3 Medium」公開 プロンプトの理解力が上がり、リアルな画像が生成可能に
Stability.aiは6月12日、同社が開発する画像生成AI「Stable Diffusion 3」シリーズの最新モデル「Stable Diffusion 3 Medium」を発表、無償の非商用ライセンスおよびクリエイターライセンスの下で利用可能だ。
サイバーエージェントは6月13日、日本語大規模言語モデル(LLM)に画像認識機能を追加した大規模視覚言語モデル(VLM)「llava-calm2-siglip」を公開した。
「ChatGPT」画像を見ながら人間みたいに話せる新機能、今後数週間でリリースと予告
OpenAIは6月14日、同社の公式Instagramアカウントを通じ、ChatGPT(GPT-4o)に音声と映像を同時に理解する機能を追加し、今後数週間以内にリリースすると発表した。
画像生成AI「Stable Diffusion 3 Medium」公開 プロンプトの理解力が上がり、リアルな画像が生成可能に
Stability.aiは6月12日、同社が開発する画像生成AI「Stable Diffusion 3」シリーズの最新モデル「Stable Diffusion 3 Medium」を発表、無償の非商用ライセンスおよびクリエイターライセンスの下で利用可能だ。
435デフォルトの名無しさん
2024/06/15(土) 17:21:13.13ID:qHH8tCo3 >>433
生配列でもarrayでもvectorでも受け取るインターフェースを提供するとき
iteratorで足りてるなら別にそれでもいいが、メモリ連続を仮定する機能を提供するならspanの方がわかりやすいだろう
生配列でもarrayでもvectorでも受け取るインターフェースを提供するとき
iteratorで足りてるなら別にそれでもいいが、メモリ連続を仮定する機能を提供するならspanの方がわかりやすいだろう
436デフォルトの名無しさん
2024/06/17(月) 10:58:29.00ID:kFL6GMVs437デフォルトの名無しさん
2024/06/17(月) 23:25:12.33ID:P6C1rQNL >>435
確かに生配列ならspanが良さそうですね。ありがとうございました
確かに生配列ならspanが良さそうですね。ありがとうございました
438デフォルトの名無しさん
2024/08/23(金) 14:44:24.57ID:cOT+fWMl C++20でコルーチンてのが追加されてたの今気づいたわ
ワイは同じようなことをアセンブラでespとebpをいじってからのjmpで実現してた
環境非依存な標準でやってくれるなら助かるやで
ワイは同じようなことをアセンブラでespとebpをいじってからのjmpで実現してた
環境非依存な標準でやってくれるなら助かるやで
439デフォルトの名無しさん
2024/09/20(金) 11:00:03.55ID:pjqEQxr6440デフォルトの名無しさん
2024/10/02(水) 13:02:05.18ID:XbzwGALZ >>439
ほんそれ+++
ほんそれ+++
441デフォルトの名無しさん
2024/11/04(月) 00:14:55.01ID:x9luqst6 プロジェクトでblosc2_decompress(c-blosc2のやつ)を使いたいが
「エラー LNK2001 外部シンボル "@blosc2_decompress@16" は未解決です。」となる
(C#のBwtDecompress.Decompressと同じことをしたい)
メインのプロジェクトはVS2015、Win32、Releaseでビルドしていて
プロジェクト→プロパティ
C/C++→全般→追加のインクルードディレクトリに追加済
リンカー→全般→追加のライブラリディレクトリに追加済
リンカー→入力→追加の依存ファイルに*.lib追加済
ライブラリ(c-blosc2)のビルドはWin32、Release
git clone https://github.com/Blosc/c-blosc2.git
cd c-blosc2
mkdir build
cd build
cmake .. -G "Visual Studio 14 2015" -A Win32 -DCMAKE_BUILD_TYPE=Release
これで作成されたソリューションファイルをVS2015で開き、
ビルド→構成マネージャ:Release指定
としてビルドしている。(結果:クリーン: 129 正常終了、0 失敗、4 スキップ)
なんで外部参照エラーになるか教えて下さい…
「エラー LNK2001 外部シンボル "@blosc2_decompress@16" は未解決です。」となる
(C#のBwtDecompress.Decompressと同じことをしたい)
メインのプロジェクトはVS2015、Win32、Releaseでビルドしていて
プロジェクト→プロパティ
C/C++→全般→追加のインクルードディレクトリに追加済
リンカー→全般→追加のライブラリディレクトリに追加済
リンカー→入力→追加の依存ファイルに*.lib追加済
ライブラリ(c-blosc2)のビルドはWin32、Release
git clone https://github.com/Blosc/c-blosc2.git
cd c-blosc2
mkdir build
cd build
cmake .. -G "Visual Studio 14 2015" -A Win32 -DCMAKE_BUILD_TYPE=Release
これで作成されたソリューションファイルをVS2015で開き、
ビルド→構成マネージャ:Release指定
としてビルドしている。(結果:クリーン: 129 正常終了、0 失敗、4 スキップ)
なんで外部参照エラーになるか教えて下さい…
442デフォルトの名無しさん
2024/11/04(月) 14:14:21.88ID:x9luqst6 あげさせてもらいます。
443デフォルトの名無しさん
2024/11/04(月) 15:45:52.06ID:IyJSMCPH 素数ファイルの拡張子がcかcppかごっちゃになってないか
444デフォルトの名無しさん
2024/11/04(月) 15:50:08.50ID:CKUWq5U/ マングリ返し
445デフォルトの名無しさん
2024/11/04(月) 16:44:50.47ID:x9luqst6446デフォルトの名無しさん
2024/11/04(月) 16:46:32.74ID:x9luqst6 今まで使っていたプロジェクトのほうのソースファイルの中はたしかに*.cpp、*.cが混在しています。
しかし、ライブラリを追加するまでは問題なくビルド出来てました。
c-blosc2のソースのことでしょうか?
しかし、ライブラリを追加するまでは問題なくビルド出来てました。
c-blosc2のソースのことでしょうか?
447デフォルトの名無しさん
2024/11/05(火) 12:29:40.07ID:YSt/y3gD extern "C" {
馬鹿には無理
}
馬鹿には無理
}
448デフォルトの名無しさん
2024/11/06(水) 00:49:44.00ID:/djK2LwE >>447
それはやってます。
それはやってます。
449デフォルトの名無しさん
2024/11/06(水) 02:05:09.13ID:dRKi/GB8 >>441
@16とか付いてるってことは__stdcallで呼び出そうとしてるわけだから、メイン側のプロジェクトに/Gzオプション付いてるって落ち?
@16とか付いてるってことは__stdcallで呼び出そうとしてるわけだから、メイン側のプロジェクトに/Gzオプション付いてるって落ち?
450デフォルトの名無しさん
2024/11/06(水) 13:01:47.61ID:/djK2LwE451デフォルトの名無しさん
2024/11/06(水) 13:32:11.67ID:/djK2LwE ダウンロードしたライブラリのソースをいじるのは行儀がよくないかもしれませんが、
__fstcall blosc2_decompressと明示的に宣言するよう修正したことでなんとかなりました。
ありがとうございました。
__fstcall blosc2_decompressと明示的に宣言するよう修正したことでなんとかなりました。
ありがとうございました。
452デフォルトの名無しさん
2024/11/25(月) 07:50:33.58ID:jxPTXtA0 こんにちは、初歩的な質問なんですが、
FILE* const fp = fopen(file name, “r”);
の一行はとはどのようなことをしているのですか?
FILE**のようになぜ*を2つ重ねたんですか?あまり理由がわかりません
FILE* const fp = fopen(file name, “r”);
の一行はとはどのようなことをしているのですか?
FILE**のようになぜ*を2つ重ねたんですか?あまり理由がわかりません
453デフォルトの名無しさん
2024/11/25(月) 07:52:02.93ID:jxPTXtA0 こんにちは、質問が2つあります。
質問1: エラーの特定と解決方法についてJavaでエラーが発生した際、
エラーメッセージが大量に表示されてしまい、内容を把握しきれません。
また、ライブラリをimportしただけで自分が理解していない部分でエラーが発生することが多く、
エラーメッセージを見てもどこで何が原因かを特定できないことがあります。
エラー解決のために効果的な方法やアプローチはありますか?
質問2: エラー処理の行数が多いことについて
エラー処理は特定の条件で発生する特殊な処理だと思うのですが、
実際にはメインのロジックよりもエラー関連の処理の行数が多くなることがあります。
これに納得感が持てないのですが、これは一般的なことなのでしょうか?
もし改善策があれば教えてください。
質問1: エラーの特定と解決方法についてJavaでエラーが発生した際、
エラーメッセージが大量に表示されてしまい、内容を把握しきれません。
また、ライブラリをimportしただけで自分が理解していない部分でエラーが発生することが多く、
エラーメッセージを見てもどこで何が原因かを特定できないことがあります。
エラー解決のために効果的な方法やアプローチはありますか?
質問2: エラー処理の行数が多いことについて
エラー処理は特定の条件で発生する特殊な処理だと思うのですが、
実際にはメインのロジックよりもエラー関連の処理の行数が多くなることがあります。
これに納得感が持てないのですが、これは一般的なことなのでしょうか?
もし改善策があれば教えてください。
454デフォルトの名無しさん
2024/11/25(月) 07:52:35.61ID:jxPTXtA0 自分、よく半角と全角の切り替えよくミスするのですがどのように切り替えていますか?
455デフォルトの名無しさん
2024/11/25(月) 07:53:49.40ID:jxPTXtA0 いつも有意義な解説ありがとうございます。
WindowsGDIのメモリリーク検出についての質問です。
DeleteObject関数を忘れた場合の検出方法はあるのでしょうか?
ご回答ありがとうございます。
過去にメモリリークで大変苦労したので...
おっしゃる通り今は新規に作る場合はメモリリークを起こさないよう強く意識しています。
WindowsGDIのメモリリーク検出についての質問です。
DeleteObject関数を忘れた場合の検出方法はあるのでしょうか?
ご回答ありがとうございます。
過去にメモリリークで大変苦労したので...
おっしゃる通り今は新規に作る場合はメモリリークを起こさないよう強く意識しています。
456デフォルトの名無しさん
2024/11/25(月) 07:54:36.82ID:jxPTXtA0 youtuberも大変だな
池沼質問者しか観てないな
池沼質問者しか観てないな
457デフォルトの名無しさん
2025/03/26(水) 03:07:05.06ID:Jz1d/5gc いまどきのCって、
unsigned long foo(double d)
{
union {
double d;
unsigned long i;
} u;
u.d = d;
return(u.i);
}
みたいなコードでも、dをメモリに置かずにレジスタ間コピーしてくれる
みたいですけど、いつ頃からこの様な最適化がされる様になったのでしょうか?
unsigned long foo(double d)
{
union {
double d;
unsigned long i;
} u;
u.d = d;
return(u.i);
}
みたいなコードでも、dをメモリに置かずにレジスタ間コピーしてくれる
みたいですけど、いつ頃からこの様な最適化がされる様になったのでしょうか?
458デフォルトの名無しさん
2025/03/26(水) 12:29:46.04ID:bllph6O/ >>457
90年代ですでに引数渡し出来てました。構造体も渡せたけどコピーになるから嫌われてたけど
90年代ですでに引数渡し出来てました。構造体も渡せたけどコピーになるから嫌われてたけど
459デフォルトの名無しさん
2025/03/26(水) 12:34:43.30ID:bllph6O/ あ、すんません。そんなレベルの低い話ではないか。
レジスタで。というのはCPUとコンパイラの実装次第なので環境がわからないと何とも言えないような
amd64ならwandboxで色んなバージョンのコンパイラ試せますね
レジスタで。というのはCPUとコンパイラの実装次第なので環境がわからないと何とも言えないような
amd64ならwandboxで色んなバージョンのコンパイラ試せますね
460デフォルトの名無しさん
2025/04/02(水) 12:04:47.44ID:k9Y5euIy 質問とunion関係無いな
質問者の意図が判らなくなるから
サンプルコードは必要最小限に汁
質問者の意図が判らなくなるから
サンプルコードは必要最小限に汁
レスを投稿する
ニュース
- 【速報】NYダウの下げ幅が1000ドルを超えた [蚤の市★]
- 長野智子 フジテレビ報告書で〝誤報〟判明「文春は謝罪するべき」…女性アナF氏を「3悪人」扱い [ぐれ★]
- 米商務長官 トランプ関税「撤回の可能性ない。 世界はアメリカから搾取やめるべき。関税率是正なら交渉の余地あり」 [Hitzeschleier★]
- 【速報】 1ドル=144円 [お断り★]
- 【宗教】日本、仏教国で仏教離れ最多 信者の4割、現在「無宗教」 米研究所調査 ★2 [樽悶★]
- 長野智子 フジテレビ報告書で〝誤報〟判明「文春は謝罪するべき」…女性アナF氏を「3悪人」扱い ★2 [ぐれ★]
- 【訃報】日経平均先物、ガチで下落が止まらないマイナス1400 [943688309]
- 日本の番組「中国人はカラス食べる」と発言捏造🥺…普通の日本人「ゴキブリ食うのに、カラスは食わないの?🤪」 [441660812]
- トランプさん「関税の次は金融だ、ドルの供給を停止してAppleペイやクレカ決済を凍結する」 [709039863]
- じゃあ関税以外でアメリカの製造業を立て直す方法があるなら言ってみろよ [512028397]
- 【超絶悲報】日経時間外、-2500突破 [126042664]
- カリフォルニア州知事「米国への報復関税、ウチだけは勘弁して貰えませんか?」各国に要請 [795614916]