【初心者歓迎】C/C++室 Ver.97【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 - 暇つぶし2ch50:デフォルトの名無しさん
15/12/04 04:58:58.14 wpzjFC8X.net
くれぐれも pragma で disable するとか反則技は無しにしてください

51:デフォルトの名無しさん
15/12/04 08:05:37.51 eJgp+Ap7.net
それはエラーではく警告なので既に表示できてる

52:デフォルトの名無しさん
15/12/04 08:24:02.11 uoWB06OP.net
もう付き合う必要ないだろ

53:46
15/12/04 08:37:07.91 lNfIPK42.net
>>49
何故警告が出るか?の問いに正確に答えたのになぜ殺たし

54:デフォルトの名無しさん
15/12/04 09:44:49.42 ezzwHQH9.net
>>48
char32_t に直接対応する書式指定は定義されていない。 C なら int_least32_t の
typedef ってことになってるから PRIdLEAST32 でいけるんだろうけど、エラーメッセージを
見る限りは C++ っぽいな。 C との移植性を考慮してる処理系なら C++ でも
PRIdLEAST32 でいけるかもしれない。
普通に考えれば確実に 32 ビットある unsigned long あたりにキャストして %08lX で表示
すれば移植性含めて確実なんだろうけど、それがダメってことなら・・・
unsigned long x = unko をはさむんならいいの?
%p で HANDLE が表示できるのは、たまたま typedef の定義が void* か、ポインタの
表現形式が同じなだけ。移植性は無い。
size_t のフォーマットは C99 でようやく %zu が定義されてる。 C99 未対応の環境を含めて
移植性を持たせようと思ったら、やっぱりキャストすることになるんだろうな。

55:デフォルトの名無しさん
15/12/04 12:41:53.04 eOr3TAvt.net
>>53
一見すると警告が出ている理由を聞いているように見えるが
事前に回答に対して付けてる注文が、警告されない方法を要求された場合に得られるものに対しての注文になっている点を見逃していたな

56:デフォルトの名無しさん
15/12/04 12:58:29.43 GzeAUkqU.net
printfでsize_tをポータブルに扱うにはzを使う。16進だったら%zx
MSVCではそのままでは使えず、手順を踏めば使えるようになるが、
>>49のようなアホには教えてやらない。
yahoo知恵袋とかに知ってる奴がいるかも知れないからそっちで聞け。二度と来るな。

57:デフォルトの名無しさん
15/12/04 13:20:37.25 cTLbcsjq.net
char32_t を受けるフォーマット文字列が
→ ある
 そのフォーマット指示教えて
→ ない
 キャストしたうえでそれを正しく受けれるフォーマット文字列を当てろ

58:デフォルトの名無しさん
15/12/04 13:31:24.33 yphLFvrP.net
みんな親切だな
こんな無礼な奴に教えてるとか

59:デフォルトの名無しさん
15/12/04 18:25:08.71 tMlpAt0c.net
>MSVCではそのままでは使えず
へー、俺はそのまま使えてるけど

60:デフォルトの名無しさん
15/12/05 01:25:48.24 XrhXlWwy.net
>>45
printf の書式に関してはキャストが正しいやり方だと思うけど…

61:デフォルトの名無しさん
15/12/05 14:44:28.99 8o6AWzwu.net
そういや
printf("%04x", unsigned(unko))
みたいなキャストの書き方する人をめっきり見かけなくなったな

62:デフォルトの名無しさん
15/12/06 16:56:31.72 w0JG1OnY.net
>>61
C++で追加された書き方だっけ。わざわざCと非互換な書き方するのもな

63:デフォルトの名無しさん
15/12/07 10:24:26.90 kLiwVdVP.net
コンストラクタで変換するイメージだから割りと使うなぁ。

64:デフォルトの名無しさん
15/12/07 12:35:07.38 EdmvAvM2.net
普通に使うよね
大体Cスタイルキャストみたいな強いキャストしてほしくないけど
static_castみたいな長ったらしいのは打ちたくない時とか

65:デフォルトの名無しさん
15/12/07 12:43:32.10 OioPlMJu.net
>>64
>>61の危険性はCスタイルキャストと同じだろ。

66:デフォルトの名無しさん
15/12/07 12:50:44.53 MCOGyvev.net
前in64_tとuint64_tを変換しようとして
n = static_cast<unsigned>(m);
って書いて嵌ったなぁ。
unsignedはunsigned intとして評価されて、その環境でのunsigned intが32bitしか無かったのが原因なんだけど。

67:デフォルトの名無しさん
15/12/07 13:29:16.51 Hqr6JCCE.net
intは2~4バイトだかんね

68:デフォルトの名無しさん
15/12/07 14:03:46.21 JxHjK4i3.net
>>65
61みたいなケースに限った話だったの?

69:デフォルトの名無しさん
15/12/07 15:14:45.21 6rSJBSiX.net
unsigned(i)

(unsigned)i
って、どちらもreinterpret_cast相当で同じなんじゃないの?
危険性も同じでは?
カッコで囲う分、unsigned(i)の方がプログラマのミスを防げそうってのはあるが
(unsigned)(i)って書けば同じことだし

70:デフォルトの名無しさん
15/12/07 16:52:08.66 FMrKVVi9.net
static_castを使わないと駄目なんかなぁ

71:デフォルトの名無しさん
15/12/07 20:40:29.05 PFJ6xruc.net
そもそもキャストなんて限られたところでしか使わないから
>>64
> static_castみたいな長ったらしいのは打ちたくない時とか
みたいな理由はすごく違和感ある
xxx_cast< > の方が grep し易いし

72:デフォルトの名無しさん
15/12/07 20:46:33.27 YI9JvcYw.net
>>69
おまえがreinterpret_castを理解していないことはわかった

73:デフォルトの名無しさん
15/12/07 20:59:38.29 vSptre4r.net
Cスタイルキャストをサーチしてくれるツール知らない?
GCCだとワーニング出せるんだけどVC++にはないんだよなあ

74:デフォルトの名無しさん
15/12/07 21:19:35.71 MCOGyvev.net
>>73
cpplintで出来なかったっけ?

75:デフォルトの名無しさん
15/12/07 21:39:05.15 vSptre4r.net
>>74
ありがと
cpplintのソース見るとやってるみたいだね試してみるわ

76:デフォルトの名無しさん
15/12/07 22:16:48.23 YS1sGdfb.net
プログラムの経験はあまりないのでなるべく詳しく教えてほしいです
printfによってSegmentation faultが出てしまいました
貰ったプログラムを見ていると関数の初めと終わりにprintf文が書かれてあり、
#ifdef DEBUGで消されてありました。デバッグ用だろうと思いdefine DEBUGを書いて実行したのですが、
あるpthread_createで呼び出された関数を通るとsegmentation faultになってしまいました。。。
調べてみるとどうやらpthread_createで呼び出された関数のprintfが有るか無いかだけでsegmentation faultになるかならないかということが分かりました。
printfがあるかないかのsegmentation faultということが凄く不思議です。
printfが領域を壊しているということでよいのですよね?
ちなみに確か、printf("\tchar xxxxxxxxxxx(www = %d,yyy = %d, zzz = %d); {\n",int www, int yyy、int zzz); とprintf("xxxxxxx end\n")こんな感じでした。

・このpthreadで生まれる関数のprintfの中身をいったん入れるデータ領域などは、pthread_createの時に新たに作られるのでしょうか?
それとも元々のプログラムを実行したときに作られる領域を共有しているのですか?
 ・↑だとしたらpthread_createの時に領域をどれだけ確保しているかとか、わかるのでしょうか?その領域を広げれば解決できるのでしょうか?
・というか、そもそも前提はあっていますか?
・こんな可笑しなエラー、ほかにもありましたら教えてください。
コンパイルはwindows版eclipseのgcc crosscompilerです
実行環境はFreeBSD、ハードウェアのスペックはよくわかりませんが組み込み系です
よろしくお願いします~!

77:デフォルトの名無しさん
15/12/08 00:06:06.37 YwewJazw.net
>>76
前提が違っている
バグは問題の個所以前に存在する。printfも含むがそことは限らない。

78:デフォルトの名無しさん
15/12/08 00:14:31.96 y9imTVGc.net
#ifあたりで構造が崩れてるとか・・・

79:デフォルトの名無しさん
15/12/08 00:47:51.17 EGf1sWrT.net
printfの有無、最適化オプションで結果が変わる、
なにか変数の初期化忘れを疑う

80:65
15/12/08 01:07:46.79 xTQHW/dy.net
>>68
別に>>61に限ったつもりは無かったけど、あの形のキャストをどう呼ぶかわかんなかったんだ。
規格上はキャスト式のひとつで function notation と言うらしい。
で、>>64が言うには「Cスタイルキャストみたいな強いキャストしてほしくない」ときに
function notation を使うらしいんだけど、単一の式に対する function notation でのキャストの効果は
Cスタイルキャストと同じで依然として「強いキャスト」が実行されてしまうことになるから、
何かおかしなことを言ってると思ってる。
>>69
reinterpret_cast と const_cast の効果が両方発動したりもするよ。
>>73
GCC の -Wold-style-cast だよね。
でもなぜか同じ危険性でも function notation だと検出されないんだ・・・。

81:デフォルトの名無しさん
15/12/08 02:03:07.89 R0PV8G/t.net
>>80
意味解って言ってんのか?
せめて試してから言ってるんだよな?

82:デフォルトの名無しさん
15/12/08 02:57:32.43 Uz/uPJvZ.net
>>69
>>80
static_castが抜けてるよ

83:デフォルトの名無しさん
15/12/08 03:02:51.98 R0PV8G/t.net
> reinterpret_cast と const_cast の効果が両方発動したりもするよ。
試して言ってるならこの例頼むよ。忘れんなよ。

84:デフォルトの名無しさん
15/12/08 03:05:30.26 xTQHW/dy.net
>>81
何を試せって話なのかよくわかんなかったけど、>>83と合わせて、これでいいの?
URLリンク(melpon.org)
typedef int* intptr;
intptr x;
void f(double const* p)
{
x = (intptr)p; // ok
x = intptr(p); // ok
x = static_cast<intptr>(p); // error
}
prog.cc: In function 'void f(const double*)':
prog.cc:7:30: error: invalid static_cast from type 'const double*' to type 'intptr {aka int*}'
x = static_cast<intptr>(p); // error

85:デフォルトの名無しさん
15/12/08 05:01:43.22 RVFMry3L.net
>>80
>でもなぜか同じ危険性でも function notation だと検出されないんだ・・・。
これ初めて知ったよ
確かにold-styleじゃないけどさ

86:デフォルトの名無しさん
15/12/08 05:23:07.34 RVFMry3L.net
細かいが初心者スレなので一応訂正しておく
function notationじゃなくてfunctional notationな

87:デフォルトの名無しさん
15/12/08 08:24:16.94 1IXf9fjC.net
【 オンラインTCGエディター 】 >>1
デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。
設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。
個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正。

機能制限した下位版を5万円以上で発売 + デュエリ-グ用に改造した上位版でサーバー稼動=営業開始。

下位版の改造および商用利用には、別途で当社との契約が必要。
さ~て、製作ベンダー見つけよっと!ww(クス
スレリンク(entrance2板:-18番)

88:デフォルトの名無しさん
15/12/08 10:56:45.80 mthiYc/w.net
>>80
> function notation だと検出されないんだ・・・
コンパイラに検出してほしいよね
これってlintじゃ検出難しいだろうから
そもそもfunctional notationなんてものが何故導入されたんだ?
こんなもん無い方が良いだろ

89:デフォルトの名無しさん
15/12/08 12:12:33.81 xTQHW/dy.net
>>86
ごめん。流し読みして見落としてた。ありがとう。
>>88
クラス型の一時オブジェクトを作る書式としてはしっくりくるんだけどな。
単一式の場合の特別扱い無しで常に T t(expr...) と同じ動作として定義してくれればよかったのに。
C++98 時点の話だから、たぶんただの設計ミスなんじゃないかと。

90:デフォルトの名無しさん
15/12/08 13:14:18.38 9OJSSokt.net
開発環境 XP SP3 VC++2008EE
Win32 コンソール アプリケーション
MFC=標準Windowsライブラリを使用
ATL=使用しない
文字セット=マルチバイト
実行環境 Windows NT系OS
この環境で以下のような改造したファイルオープンダイアログを
実装しようと思ってるのですが、
URLリンク(i.imgur.com)
どのようにしたらいいのでしょうか?
検索してもうまく探せませんでした。

91:デフォルトの名無しさん
15/12/08 15:25:04.26 lAFQRlE9.net
ファイルダイアログのカスタマイズでググれ
でもEEなら MFC/ATL もリソースエディタもなしでキツイんじゃないか
あと誘導
スレリンク(tech板)l50

92:デフォルトの名無しさん
15/12/08 16:27:08.06 zjJIjn6V.net
ところで結局
(unsigned)(i)

unsigned(i)
は何が違うの?
危険度は同じでは?

93:デフォルトの名無しさん
15/12/08 19:25:14.13 kigfa6aB.net
俺C++知らんのだけど、unsigned char にしたいときはどうするの?

94:デフォルトの名無しさん
15/12/08 19:56:36.38 9OJSSokt.net
>>91
ありがとうございます。

95:デフォルトの名無しさん
15/12/11 08:07:52.26 YV4fREMK.net
using baka = unsigned char;
baka(v)

96:デフォルトの名無しさん
15/12/12 11:02:24.16 J0zYjx2j.net
設定ファイル上のIDとコード上のIDをうまく記述する方法ありますでしょうか
xxx.iniファイルに"HOGE=100"とあり、コード上にenum ID { HOGE };として
mapでid[ HOGE ] = (ここにiniファイルのHOGEの中身 )と記述してるのですが
iniファイル、コード上で2重に書くのがなんか変な感じがしまして
なにか別の方法があればとおもいまして

97:デフォルトの名無しさん
15/12/12 11:08:14.60 e2VDlW7v.net
設定ファイルを実行時に読みとる

98:デフォルトの名無しさん
15/12/12 11:25:49.88 7G0ybzbE.net
enumの具体的な値に影響するようなコードを書いちゃだめ

99:デフォルトの名無しさん
15/12/12 11:29:38.04 msfZv23a.net
書いてることがよくわからんな。
コードに同じ内容を書いているんなら、そのiniファイルは何のために存在しているの?

100:デフォルトの名無しさん
15/12/12 11:41:35.92 fT/m1Hfb.net
>>99
俺もよくわからんが
低脳にレスしてもらいたくないから、低脳にはかいていることが理解できないようにしている
ってことだけは分かる

101:デフォルトの名無しさん
15/12/12 12:31:39.74 /H210tb+.net
ハッシュにすれば

102:デフォルトの名無しさん
15/12/12 12:55:59.15 Gz2IfgKr.net
enum使うの諦めて、文字列で指定するようにして
id["キー"]=値ってやればいいんじゃ
iniファイルはキーの取得もできたはず、少し面倒だけど

103:デフォルトの名無しさん
15/12/12 13:12:36.30 6mDCyx9e.net
C#だと文字列をenum値に変換できるんだけどな
C/C++じゃうまい方法がないね

104:デフォルトの名無しさん
15/12/12 14:17:52.83 Tlws6VKy.net
>>96
enum と ID との結びつきを配列やテーブルで持つのはどうですか?

105:デフォルトの名無しさん
15/12/12 14:34:08.98 zzgKuIEv.net
iniファイル読んで
id[ HOGE ] = ....
を生成するスクリプト書く

106:デフォルトの名無しさん
15/12/12 14:41:14.90 /H210tb+.net
>>105
iniファイルいじっただけでコンパイルし直しかよ

107:デフォルトの名無しさん
15/12/12 14:47:10.22 FWugws3z.net
どうせ後でIdに紐付いたHoge永続オブジェクトをどっかから読み込むんだろ
最初からclass HogeRepositoryで良いじゃん
リスク買ってまでIdを丸出しにしなくて良いよ

108:デフォルトの名無しさん
15/12/12 14:49:53.45 zzgKuIEv.net
>>106
HOGE=100が変更されたら再コンパイル必須だろ
つーか、再コンパイルおそれるって、昭和のジイさんですか?

109:デフォルトの名無しさん
15/12/12 15:32:05.55 Gz2IfgKr.net
>>108
id[HOGE]=100をやりたいって話だろ

110:デフォルトの名無しさん
15/12/12 15:46:21.63 tVgJgcBS.net
enumとini同時に使う意味がないから片方消す
どっちかは要件による
それ以外まともな解決策なんてないと思うが

111:デフォルトの名無しさん
15/12/12 15:48:09.53 tVgJgcBS.net
代替えとしては「名前=値」を「enum数値=値」に変換ツールを作って
メインの方では後者を読み込むというのはあるが、はっきり言って無駄だな

112:デフォルトの名無しさん
15/12/12 21:45:39.70 7G0ybzbE.net
実行時に読み込めよ
何のための設定ファイルだかわかんねえよ
ビルド時に確定させたいならiniにするのが間違い
ヘッダに書けば良い

113:デフォルトの名無しさん
15/12/13 02:33:53.99 qbposeEZ.net
HOGE=0の時、iniファイルに"HOGE=100"って書いてあったら
id[0]に100をいれたいが、HOGEと"HOGE"が必要になるって話じゃないのか

114:デフォルトの名無しさん
15/12/13 03:31:17.37 wqYJ5l85.net
>>112
実行時に読み込む話に決まってるだろボケ

115:デフォルトの名無しさん
15/12/13 08:23:30.44 hMJMcrF3.net
struct{
char *name (HOGE)
int value (100)
}
if(strcmp(name, "HOGE") == 0) {
value = (iniのHOGEの値)
}
じゃあかんのか

116:デフォルトの名無しさん
15/12/13 08:38:10.26 2dKkDW/6.net
>>113
enum の識別子 HOGE と iniファイルや key探索での "HOGE" か
id[HOGE] = FormIniFile("HOGE")
のような記述ならマクロでごまかすかな
#define IMP(arg) id[arg] = FormIniFile(#arg)

117:デフォルトの名無しさん
15/12/13 08:51:55.16 GP8wOhjz.net
iniファイルで値のカンマ区切りを許可する
それ以外を書き込まない
***hoge.ini
HOGE = 100,
FUGA = 101,
PIYO = 102,
*** .hファイル
enum{
#include "hoge.ini"
}

118:デフォルトの名無しさん
15/12/13 09:17:56.38 qbposeEZ.net
>>116
enum増やすたび1行書かなきゃいけないのがネックだよね
enumの定義をマクロにしてカンマ区切りの長い文字列作って…ってのもやってみたが無理矢理感が拭えない

119:デフォルトの名無しさん
15/12/13 09:29:44.34 2dKkDW/6.net
>>118
あまりよいやり方じゃないけど、列挙する箇所を ファイルにしておいて
hoge.inl
 IMP(HOGE1)
 IMP(HOGE2)
enum 定義は
 #define IMP(arg) arg,
 enum {
  #include "hoge.inl"
 };
 #undef IMP
初期化するところで
 #define IMP(arg) id[arg] = FormIniFile(#arg);
 #include "hoge.inl"
無理やり感満載w

120:デフォルトの名無しさん
15/12/13 09:34:03.10 kwkQZ1G0.net
シンボルのHOGEは必須なのか?keyに対応したindexがあればいいならこんなのでいいんだが。
static const char * s_keys[] = {
"HOGE",
"HAGE",
"FUGE",
};
で、iniファイルから読み込んだkeyをs_keysからサーチしてindexを求める。
enum必要ならマクロと#includeでなんとかなるだろ。

121:デフォルトの名無しさん
15/12/13 09:56:45.90 +vfdgVrV.net
class Id { private: int value; // 以下略
class IdCollection : Singleton<IdCollection> {
public: Id get(string const & s) { /* 略 */ }
public: Id hoge() { return get("HOGE"); }
private: void initialize() { loadFromIniFile("ids.ini"); }
private: void loadFromIniFile(string p) { // 以下略
int main() {
DoSomething(IdCollection.instance().hoge());

122:デフォルトの名無しさん
15/12/13 11:11:00.44 kwgRFe9P.net
IDが実質的に2つある時点で簡単な方法は無いだろ
これ以上荒らしてんじゃねえよ

123:デフォルトの名無しさん
15/12/13 12:32:13.41 OeYxj6fv.net
マクロを駆使すれば可能
でも質問者不在でアレコレするのは面倒なのだ
保留

124:デフォルトの名無しさん
15/12/13 14:43:20.17 pXef0Z5L.net
closeしますね

125:デフォルトの名無しさん
15/12/13 18:52:13.38 NZTqhglG.net
>>39
argv[]が64bit整数を使わないといけないような非常に大きな整数の場合、例えば
long long a = foo(argv[1]);
と書けるようなfoo()って標準関数にありますか?

126:デフォルトの名無しさん
15/12/13 19:02:24.12 lukQoPhs.net
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);

127:デフォルトの名無しさん
15/12/13 20:45:56.44 vZabZWT7.net
//a.h
typedef struct aaa_t aaa;
aaa *aaa_0 ();
void aaa_1 (aaa *);
void aaa_2 (aaa *);
void aaa_3 (aaa *);
aaa *aaa_4 (aaa *);
-----------------------------------------
//a.c
struct aaa_t {
int a;
char *b;
void *c;
int d;
int e;
int f;
};
aaa_0 とかの定義
-----------------------------------------
//b.c
#include "a.h"
void f () {
aaa *p = aaa_0 ();
aaa_1 (p);
aaa_2 (p);
aaa_3 (p);
}
今現在Cでこんな感じになってるプログラムをC++にして
struct aaa_t をclass aaaにしてaaa_1とかをaaaのメンバ関数にしようとしたら
ヘッダファイルa.hのほうにclass aaaの定義を書いてその中にint aとかchar *bとかも
書くことになると思うんですけど、そうするとCのときよりも情報が見えるようになってしまうんですが
それを隠したままにできる方法ありますか?

128:デフォルトの名無しさん
15/12/13 20:49:28.59 4HT+vwrK.net
pimplでぐぐる

129:デフォルトの名無しさん
15/12/13 21:28:27.41 vZabZWT7.net
ありがとうございました
ヘッダファイルの方でクラスを抽象クラスにするしかないのかとか思ってました

130:125
15/12/13 21:32:46.95 NZTqhglG.net
>>126
回答ありがとうございました。

131:デフォルトの名無しさん
15/12/13 22:51:14.40 EpxG0SJy.net
>>129
抽象クラスで何か不満でもあるの?それが pimpl で解消される?

132:デフォルトの名無しさん
15/12/13 23:00:33.98 vZabZWT7.net
継承させるのは不満は大有りだった
今教えてもらったものでもCに比べたらポインタの分サイズは大きくなるけど

133:デフォルトの名無しさん
15/12/13 23:13:17.80 EpxG0SJy.net
>>132
そのサイズの増加を受け入れるほどに継承に何か実害がある?
実装隠蔽の手法としてどうも pimpl のほうが人気がある理由がよくわからん。
委譲コード書くのもめんどいし。

134:デフォルトの名無しさん
15/12/13 23:18:54.26 pXef0Z5L.net
継承は基底クラスの実装への依存が発生する悪手なんだよね

135:デフォルトの名無しさん
15/12/13 23:37:27.90 vZabZWT7.net
元々一つなのを二つに分けるのは何か不自然な感じがしたから
サイズに関しては仮想関数へのポインタ持つから継承でも増えるってのもあるし

136:デフォルトの名無しさん
15/12/13 23:44:03.11 XZ6E7GcH.net
>>134
どこに依存が発生してんのよ
URLリンク(ideone.com)

137:デフォルトの名無しさん
15/12/14 00:16:21.17 zTGRmQeT.net
>>135
クラスが二つに分かれるのは pimpl でもいっしょじゃないの?
比較記事もけっこうあるね。
URLリンク(www.google.co.jp)

138:デフォルトの名無しさん
15/12/14 01:42:56.68 MegyS/CV.net
private変数を隠蔽するだけのために面倒くさいことをさせてくれるもんだ

139:デフォルトの名無しさん
15/12/15 02:04:47.70 GD1VdqaI.net
linuxのforkが意味解らん
forkを実行した時点で、forkの戻り値のpidが違うだけの同じコードが実行されるプロセスが複製されるの??
何がどうなってるのかさっぱりだけど衝撃的過ぎる

140:デフォルトの名無しさん
15/12/15 03:33:31.62 AjaVKfD6.net
例えばファイルを開いててfork()して、子プロセスが更新すると
親プロセスでファイルを見ると更新されてる。 

141:デフォルトの名無しさん
15/12/15 05:25:11.90 RYa4o3uw.net
std::vectorを使う時の質問なんですけど、クラスのメンバー変数として宣言する時ってどうやってサイズ指定するんですかね?
#include <vector>
using std::vector;
class vtest
{
public:
vector<int> hoge(10);
}
みたに書くと型を指定しろって言われて、個人的には関数として認識されてるんじゃないかなって思うんですけれど…

142:デフォルトの名無しさん
15/12/15 05:39:14.20 B8igkfF6.net
>>139
その通り
何でこんな面倒な機能があるかはこことか参考になるかと
URLリンク(www.ncad.co.jp)

143:デフォルトの名無しさん
15/12/15 06:58:46.88 1RaqkxGq.net
>>141
vtest() : hoge(10) {}

144:デフォルトの名無しさん
15/12/15 07:05:23.53 RYa4o3uw.net
>>143
つまりはクラスのコンストラクタで渡せ、って事でいいのかな?
なんかいろいろ試してたら
hoge._BConstruct([要素数],[数値])で初期化できるっぽい…?

145:デフォルトの名無しさん
15/12/15 07:13:02.00 RYa4o3uw.net
連投スマン
hoge.resizeで要素数の設定から初期パラメータまで設定できるっぽいな、サンクス

146:デフォルトの名無しさん
15/12/15 09:51:36.66 9AhINhvX.net
>>133
抽象クラスは委譲コードの分の余地がないので
基底への変更にものすごく弱い

147:デフォルトの名無しさん
15/12/15 10:10:25.74 FTksUk/b.net
>>146
「委譲コードの分の余地」ってどんなの?
pimpl にしかできないことっぽいんだけど、思いつかない。

148:デフォルトの名無しさん
15/12/15 10:14:40.27 9AhINhvX.net
>>147
pimplの呼び出し部分で変更余地があるだろ
委譲コードなら何でもそうだけど

149:デフォルトの名無しさん
15/12/15 10:29:07.10 FTksUk/b.net
>>148
それがなんで抽象クラスではできないことになるのか、わからない。

150:デフォルトの名無しさん
15/12/15 11:12:33.82 9AhINhvX.net
>>149
言っている意味がわからない、派生先で委譲するという事か?
その場合も結局クラス定義で委譲先への依存が起こるので同じ事
継承してファクトリ経由で生成しても必ず何処かで実装依存する事は避けられない
pimplの場合はpimplのみの緩衝で防げる

151:デフォルトの名無しさん
15/12/15 11:14:47.92 9AhINhvX.net
訂正、委譲先ではなく委譲元

152:デフォルトの名無しさん
15/12/15 14:19:47.85 Z+PgRVVd.net
>>139
まーWindowsしか知らない人がfork知るとひっくり返るよね
Windowsではスレッドを使うのが一般的だけど
Unix系ではforkでマルチプロセスが基本だったんだよね
他にもファイルの扱いとかいろいろ斬新だよね

153:デフォルトの名無しさん
15/12/15 19:54:49.22 crf4TWR5.net
継承は実行時に合成しにくいんだよね
基底クラスの実装変更が派生クラス全てに影響するし
もうまじさいあくぷんぷん

154:デフォルトの名無しさん
15/12/15 22:34:09.78 46Jh9WrX.net
>>131
vector<int> baka = vector<int>(10);

155:デフォルトの名無しさん
15/12/15 22:52:06.66 FTksUk/b.net
>>150
ごめんよ。↓こんなコードを比べてると思ってるんだけど、あってる?
// PimplInterface.hpp
struct PimplInterface {
int f();
private:
class Impl;
Impl* pimpl;
};
// PimplInterface.cpp
struct PimplInterface::Impl {
int f() { return 1; }
};
int PimplInterface::f() { return pimpl->f(); }
// AbstractInterface.hpp
struct AbstractInterface {
virtual int f() = 0;
};
// AbstractInterface.cpp
struct AbstractInterfaceImpl : AbstractInterface {
int f() { return 1; }
};
「基底の変更」は AbstractInteface つまり外部インターフェースの変更のことで、
pimpl の「委譲コード」が PimplInterface::f() の定義のことだと思うんだけど、
やっぱり「基底の変更にものすごく弱い」とか「実装依存」とか言ってるのが
なんのことだか見えてこないんだ。
*Interface にどんな変更が入った場合に起こる問題のことを言ってるの?

156:デフォルトの名無しさん
15/12/16 11:31:36.35 3uR0/mnz.net
>>155
派生クラスも実装だぞ
基底クラスへの変更は、派生の非公開部分の定義に影響が波及しうる
防止する方法は委譲が簡単で、その極端な物はpimpl

157:デフォルトの名無しさん
15/12/16 11:57:18.05 3uR0/mnz.net
非公開ではなく非仮想部分の定義と言ったほうが良かったかな
派生クラスでpublicメンバ増やす事もよくあるし

158:デフォルトの名無しさん
15/12/16 12:08:47.02 fTEXesYP.net
「インターフェース」なのだからインタフェース以外からアクセスしちゃダメだろう
個人的には利用者側に
AbstractInterface *x = new AbstractInterfaceImpl;
のように使わせることを強制するからインターフェースは使わないけど

159:デフォルトの名無しさん
15/12/16 12:14:31.21 3uR0/mnz.net
>>158
インスタンス化についてはファクトリ云々でとっくに言及したつもりだが…

160:デフォルトの名無しさん
15/12/16 12:40:53.99 3uR0/mnz.net
まあ間違ったことは言ってないはずなので、読めば理解できると思う
それが何の役に立つかは、大規模になってみればわかる

161:デフォルトの名無しさん
15/12/16 23:04:32.63 ReBK9+wB.net
>>156-157
インターフェースが変わったら実装に影響が波及しうるのはあたりまえじゃないの?
それの何が問題になるの?
仮に問題があったとして、 AbstractInteface を変更したときに
AbstractInterfaceImpl に変更が入るのが問題だというのなら、
PimplInterface を変更したときに PimplInterface::Impl や
PimplInterface::f() に変更が入るのも同じように問題なんじゃないの?

162:デフォルトの名無しさん
15/12/17 08:13:07.84 qGFinMD/.net
pimplの目的はクラスのコンパイルコストを実行時コストに転化する事だけ
実装に依存するとかしないとか継承がいいか移譲がいいかとかは関係のない話だよ

163:デフォルトの名無しさん
15/12/17 20:25:09.68 M1gCQnPP.net
>>161
Pimplは公開側のヘッダへの変更がなくなり依存元の定義には影響しない
全く別

164:デフォルトの名無しさん
15/12/17 20:26:53.95 M1gCQnPP.net
>>162
いいやそれも違う
実装をきちんと分離している分、モジュール性は上
継承が無駄な依存関係を作るのはもはや常識だろ

165:デフォルトの名無しさん
15/12/17 20:37:51.88 NMgzdQxk.net
struct large
{
    char data[5'000'000];
};
int main()
{
    auto p = new large{};
    return 0;
}
出力
1>------ ビルド開始: プロジェクト:CppTest, 構成:Debug x64 ------
1> main.cpp
..........main.cpp(8): fatal error C1060: ヒープの領域を使い果たしました。
========== ビルド: 0 正常終了、1 失敗、1 更新不要、0 スキップ ==========
配列のサイズを5MB以上にすると上記エラーが出てコンパイルに失敗するんですが、どのように直せばいいでしょうか。

166:デフォルトの名無しさん
15/12/17 20:42:26.86 T7FXs248.net
c++erはpimplとか言ってるけど所詮はbridgeパターンでしかない
デザインパターンを語るコンテキストではbridgeパターンと呼ぶ
c++に特有のコンパイルコストを削減するテクニックの事を語るコンテキストではpimplイディオムと呼ぶ
pimplイディオムをbridgeパターンの意味で語る人は理解が浅い

167:デフォルトの名無しさん
15/12/17 22:39:55.30 RFQK/sQs.net
>>165
ここは初心者が討論する場です
場違いだから動的メモリをGoogle様に教えを乞え

168:デフォルトの名無しさん
15/12/17 23:51:42.56 SCk0qjaE.net
>>163
それ抽象インターフェースでも同じだろ。
>>164
抽象インターフェースでも実装をきちんと分離できてるだろ。
違うというのなら >>155 のコードに対する変更で、
抽象インターフェースの場合だけ問題が起こるような例を挙げてみろよ。

169:デフォルトの名無しさん
15/12/18 10:44:40.42 mykTsSjn.net
>>166
コンパイルが速いのは翻訳単位の分離の効果の一つでそれだけではないだろ
それとpimplは確かに大部分はbridgeと見ることはできるが
形式上の汎化なので変更のすりあわせは考えなくていい利点がある
>>168
例を挙げてみろという以前に
そもそも>>155では実装が見える位置に必要な時点で論外だと思うが

170:デフォルトの名無しさん
15/12/18 11:16:58.75 auMwa2zz.net
>>169
は?コード読めてないのに偉そうに言ってたの?
hpp →使用者から見える位置
cpp →使用者から見えない位置
だろ?
どちらも実装は使用者から見えないところで好きにできる。

171:デフォルトの名無しさん
15/12/18 11:20:44.51 O/HlozI2.net
>>169
おいおい…

172:デフォルトの名無しさん
15/12/18 18:28:01.68 LQ+VNahf.net
不毛な争いはもうやめようよ
みんなでC#を使おう

173:デフォルトの名無しさん
15/12/18 18:57:55.99 znmCm21O.net
いやいや、漢は黙ってアセンブリでしょ

174:デフォルトの名無しさん
15/12/18 21:25:47.60 LbePE/nB.net
センブリは苦い

175:デフォルトの名無しさん
15/12/19 09:37:32.82 n5v6Wxrv.net
>>165ですが自力で問題を解決できないので、別の質問スレに改めて投稿しようと思います。失礼しました。

176:デフォルトの名無しさん
15/12/19 13:18:46.45 O2ZUrLIw.net
>>175
え gccなら何の問題もないけど。数ギガでもいけるよ。
vcにそんな設定あったかな。

177:デフォルトの名無しさん
15/12/19 17:09:31.16 dNXWfsX0.net
5MB以上が無理ってのはにわかに信じがたいんだが
たかが32bitのフルハイビジョンの画像でも7MBあるのにさー
今時5MB以下じゃ何にも出来ねーじゃん
ありえないと思ってVS3015でコンパイルしたら普通にできたし、当然
struct large
{
    char data[5000000];
};
new large();

178:デフォルトの名無しさん
15/12/19 17:38:00.46 L2SZ6ujc.net
VS3015なら出来るのかも知れないが俺のVS2015じゃ同じくC1060になった
この手順通りにやれば解決すると思うけど面倒くさい
URLリンク(msdn.microsoft.com)
質問者はこれは試したのか?

179:デフォルトの名無しさん
15/12/19 20:20:28.18 8yNt9Gxa.net
>>177
3015・・・

180:デフォルトの名無しさん
15/12/19 20:31:32.46 phu0BYTx.net
バグじゃね
そんな糞コンパイラ捨てちまえ

181:175
15/12/19 20:53:16.90 n5v6Wxrv.net
"vcvarsall amd64"を実行してコマンドライン上で"cl main.cpp"という形にしてもだめでした。
タスクマネージャを見てるとcl.exeが4GB近くメモリを消費した上でコンパイルエラーになっていました。
しかし>>177さんがやったように、newの波括弧を丸括弧に変えるとすぐにコンパイルが完了しました。
どうもありがとうございました。

182:デフォルトの名無しさん
15/12/19 23:34:04.44 O2ZUrLIw.net
() でも {} でもいいのはc++11でしたけ?
c++11準拠のgccならどっちでも出来ます。

183:デフォルトの名無しさん
15/12/21 18:59:46.87 WFqlvm2l.net
GCCがC++11に準拠していたとは初耳です

184:デフォルトの名無しさん
15/12/21 20:12:38.96 KpoKQwNC.net
class Node {
Node *node;
~Node() {
delete node;
}
};
こんなコードを考えたのですが、インスタンス生成時、nodeポインタは常にNULLで初期化されると考えてよいですか?
言語仕様上仮にポインタ型メンバ変数へのNULL初期化が保証されない場合、
delete node;のタイミングで未知のアドレスを参照し、セグメントエラーが発生する気がします。
Clangでは常にNULLで初期化されることを確認していますが、これは言語仕様として本来保証されていることなのでしょうか?

185:デフォルトの名無しさん
15/12/21 20:19:38.56 hysKJ3zZ.net
null初期化は保証されません
コンストラクタで0にしておきましょう

186:デフォルトの名無しさん
15/12/21 21:56:30.70 pRvfBbh1.net
URLリンク(gcc.gnu.org)

187:デフォルトの名無しさん
15/12/22 15:56:31.30 yVaIQO7m.net
>>185
たしかにデフォルトコンストラクタのアセンブラコード読むとNULLでの初期化は行われていませんでした。
Clang上で常にNULLになるのはたまたまなのかもしれません。

188:デフォルトの名無しさん
15/12/22 21:49:46.29 iXAEsn1T.net
nullptr使えカス

189:デフォルトの名無しさん
15/12/22 23:47:23.54 ntafDQl8.net
むぐぐ…

190:デフォルトの名無しさん
15/12/23 01:04:09.01 Bzaz3PF3.net
デバッグモードだと何もしなくてもNULLで初期化してくれるかもね

191:デフォルトの名無しさん
15/12/23 01:32:56.47 xKy7nhKt.net
つてか、デバッグモード時は5A5Aとかbeefとかdeadとかで初期化して欲しい
ゼロだと動いちゃうかもしれない

192:デフォルトの名無しさん
15/12/23 01:35:24.25 arljeKOE.net
feeefeee
ふえぇぇふえぇぇ

193:デフォルトの名無しさん
15/12/23 01:58:19.57 at23GWqE.net
デバッグモードってVSのそれでしょ?
それならcdcd...で初期化されてない?

194:デフォルトの名無しさん
15/12/23 09:21:35.68 ODpqAUDQ.net
"ヘヘヘヘヘヘ…"
だっけ

195:デフォルトの名無しさん
15/12/23 15:31:40.52 ECsqfIr3.net
フフフフ・・・
じゃなかったっけ

196:デフォルトの名無しさん
15/12/23 15:55:47.35 r+tlUph/.net
ハハハハ…
だったかも

197:デフォルトの名無しさん
15/12/23 16:12:39.75 xKy7nhKt.net
cdcd…なら "ヘヘ…" だな

198:デフォルトの名無しさん
15/12/23 22:38:54.77 7WMNq5Xe.net
メルポン ワンドボックス

199:デフォルトの名無しさん
15/12/23 22:57:15.26 1ZCzEE1G.net
構造体のポインタ型メンバは確かに毎回NULLだった気がする。
仕様だと思ってたぜ。
NULL初期化って余計なお節介だな。

200:デフォルトの名無しさん
15/12/23 23:24:02.70 McSS3rOm.net
clangは3.7から配置newの時もゼロ初期化されるようだ
規格でゼロ初期化に変更あったっけ

201:デフォルトの名無しさん
15/12/24 01:00:03.19 VDgCwlJn.net
構造体のメンバでも、ゼロ初期化のコードを明示的に書かない限りゼロに初期化されることは無いと思うけど
もしなっていてもそれはタマタマと考えるべきかと

202:デフォルトの名無しさん
15/12/24 01:10:23.72 K6EVLooj.net
もしかして
new Pod; // 初期化されない
new Pod(); // ゼロ初期化される
の違いが分かってないとか

203:デフォルトの名無しさん
15/12/24 01:19:35.59 fAuO55DH.net
昔それでハマったわ

204:デフォルトの名無しさん
15/12/24 02:01:32.75 V9PGbmLB.net
デフォコンを書いとけばいんだよね・・・

205:デフォルトの名無しさん
15/12/24 11:28:46.92 JZgNJNA5.net
この場合のPodのデフォコンは未実装と考えてよい?

206:デフォルトの名無しさん
15/12/24 12:25:55.70 dR07FXZ0.net
>>202
これ、規格になってる??

207:デフォルトの名無しさん
15/12/24 18:29:24.36 tvPg4lrF.net
これからcを学んで仕事に使うんですが基本的な文法や機能は覚えるとして、他になにかやっておいたほうがいいことってありますか?

208:デフォルトの名無しさん
15/12/24 18:46:20.52 Ar5g1rkf.net
どの分野で、というのが一番大事だわな

209:デフォルトの名無しさん
15/12/24 19:55:11.14 dcfXgtmn.net
組み込み系…かなあ

210:デフォルトの名無しさん
15/12/24 20:13:24.98 dw0e86QI.net
今の時代にcを学ぶ仕事ってすげぇニッチだな

211:デフォルトの名無しさん
15/12/24 22:17:30.83 Ar5g1rkf.net
組み込み系でC言語を使うのが初めてなら↓の本を買っといた方がいいかもしれない
【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版]
あと、職場独自の作法には慣れといた方がいいかもしれない

212:デフォルトの名無しさん
15/12/25 02:23:10.06 0EBqQae1.net
Web系が見た目?華やかなだけで、
安定して儲かってるのが自動車産業で、
その大多数がC言語なのにな

213:デフォルトの名無しさん
15/12/25 03:04:12.73 DzMu9hDD.net
じゃ misra にも慣れとくべきか

214:デフォルトの名無しさん
15/12/25 20:31:38.55 /bEJrxfY.net
>>199
アドレスの参照値がたまたまNULLだったってことだと思うが。
二回目の呼び出しではNULL以外の値が入ってるはずだぜ?

215:デフォルトの名無しさん
15/12/26 22:16:59.57 IeRmux4p.net
CやC++以外の言語しか使ったことないと、数年程度の経験で俺は凄腕のPGだと勘違いしやすい
C++の摩訶不思議な世界に行くと自分はゴミ同然だと気付かせてくれる

216:デフォルトの名無しさん
15/12/26 22:21:14.22 bmbNcMd5.net
と言うとんでもない中二をこじらせてしまうのがC++の悪いところ

217:デフォルトの名無しさん
15/12/26 22:33:59.51 HLaSlD1p.net
C++で数年過ごして数々の厨二的な黒魔術を使いこなすようになってから他の言語に行くとそれが殆ど黒歴史だったと気が付くんだよね

218:デフォルトの名無しさん
15/12/26 22:39:10.27 +JcsFmSH.net
でもまぁC++から他の言語は行きやすいけど
逆はキツイよね

219:デフォルトの名無しさん
15/12/26 23:21:16.13 YV12MLKo.net
C/C++の縛りには慣れておいたほうがいいね
C/C++の縛りは現実の計算機の縛り

220:デフォルトの名無しさん
15/12/27 03:03:31.33 zaprQqTh.net
せっかくいい石採用してるんだから、直接アセンブリ言語使わせてくれよ!
と思う事しばしば

221:デフォルトの名無しさん
15/12/27 09:08:19.31 PMis8xQ4.net
という役に立たないDIY的な発想のヲタを量産してしまうのがCの悪いところ
他人への価値提供のためでなく自分の満足のためにCを採択する

222:デフォルトの名無しさん
15/12/27 13:47:27.66 9EE16oiU.net
それが楽しいということで

223:デフォルトの名無しさん
15/12/28 23:47:04.43 ESQO+1YW.net
1<p->c
というコードを見て一瞬思考が止まった

224:デフォルトの名無しさん
15/12/29 00:03:33.08 J2wZ8xV4.net
>>221それこそまさにC++じゃねw

225:デフォルトの名無しさん
15/12/29 00:17:26.08 yDsgWReu.net
慣れると美味しいC++という事で

226:デフォルトの名無しさん
15/12/29 02:00:39.39 RQT/AIDK.net
C++は熟練者にとって開発効率が向上する方向に進んでいる
単なる趣味でやってるオタがC++のやっかいなところに嵌って暇つぶししたって何の問題もない

227:デフォルトの名無しさん
15/12/29 11:21:41.23 tOZW1499.net
vector<int> v(10);
vector<int> v{10};
これを正しく使い分けないといけない言語改定が開発効率向上とな

228:デフォルトの名無しさん
15/12/29 12:46:42.30 RQT/AIDK.net
>>227
はい。熟練者はそんなところで混乱したりしませんから。

229:デフォルトの名無しさん
15/12/29 13:05:11.52 yDsgWReu.net
func() と func[] の違いぐらいで。

230:デフォルトの名無しさん
15/12/29 13:34:33.37 TUTY/6iG.net
>>227
perfect forwarding(完全転送)という名の完全でも転送でも無いstd::forwardを正しく使うくらい朝飯前だろ?

231:デフォルトの名無しさん
15/12/29 13:53:41.29 m+tOu9MT.net
そらどちらの括弧も同じ意味になる言語の方が稀だろうに。

232:デフォルトの名無しさん
15/12/29 21:40:43.02 PaSnbjgD.net
>>230
「型」の完全転送だからな。

233:デフォルトの名無しさん
15/12/29 22:14:54.20 yDsgWReu.net
[って演算子なんだぞ へへん

234:デフォルトの名無しさん
15/12/29 22:34:59.08 RwgMy6a6.net
>>232
どうしてそう息を吸って吐くように嘘をつくのか
std::forward<string>( std::string{} )
型は変わっている

235:デフォルトの名無しさん
15/12/30 22:59:16.88 gI1ebqZA.net
[]が演算子だなんて規格に明記されてたか?
と思って調べたら13.5節か
何でこんな変なとこに定義が書いてあんだよ

236:デフォルトの名無しさん
15/12/30 23:57:37.11 JlgYQswX.net
Cの時代から演算子だったともうけど・・・
添字演算子とか書いてあるサイトも有るよ

237:デフォルトの名無しさん
15/12/31 01:38:07.39 W0RDddJC.net
昔のネタにあったでしょ。
a[0] でも 0[a] でもいいって。
ちょとウニるわな。

238:デフォルトの名無しさん
15/12/31 16:39:09.60 2szMeuyR.net
>>234
変わってないよね?

239:234
15/12/31 17:19:22.64 QJzU9MHD.net
>>238
どう見ても変わってるのだが
URLリンク(melpon.org)

240:デフォルトの名無しさん
15/12/31 18:09:22.91 QJzU9MHD.net
decltypeはvalue categoryで結果が変わるから立証にはならないか
string型がstring&&型に変わると言いたかった

241:デフォルトの名無しさん
16/01/01 14:17:09.15 7oU3J/K5.net
CSV データのアクセスについて質問です。環境は Unity です。
no, name, state, price
1, yamada, sleep, 100
2, higuchi, alive, 250
3, inage, alive, 170
みたいに、列に名前をつけているデータがあります。
列はたまに動的で、name と state の間に列が割り込んだりします。
はじめは const で state = 2 として、
決め打ちで読み出していたのですが、
列がずれると定義を変更しなくてはいけません。
そこで、列名でアクセスすれば良いのではないかと思い、
例えば 2番の state を調べるときに
state が何列目か一行目を右に調べてから
2行目の何列目という風にアクセスしています。
一応できているのですが、もっと良い方法はないでしょうか。
あるいは、普通こういうときはどうすべきでしょうか。
この読み込んだ CSV は、かなり頻繁にアクセスするので、
そこも踏まえてアドバイス頂けると嬉しいです。
なんでカラムが変わる前提なのかと疑問があると思いますが、
そこはご容赦お願いします。

242:デフォルトの名無しさん
16/01/01 14:33:17.05 R5F49H24.net
>>241
列名 ⇒ 列番号 の対応表を作ればいいだけじゃね?

243:デフォルトの名無しさん
16/01/01 14:33:27.43 yq6n8seg.net
データ部分を二次元コレクションに格納
ヘッダ部分をヘッダ名->インデックスのディクショナリに格納
おしまい

244:デフォルトの名無しさん
16/01/01 21:33:51.36 7oU3J/K5.net
>>242
それだと、列が増えたりする度に定義ソースを書き換えるような…
>>243
すみません、二次元コレクション調べたのですがイミフでした。
にわかなもので、すみません。

const しているのを変数にして、
一番最初に列の名前の場所を動的に拾い、
構造体に放り込んでみます。
みなさん、ありがとうございました。

245:デフォルトの名無しさん
16/01/01 22:01:13.16 NO+H6ZMg.net
>>244
> それだと、列が増えたりする度に定義ソースを書き換えるような…
当然「動的」に作るってこと
>>243
> ヘッダ部分をヘッダ名->インデックスのディクショナリに格納
と同じことを言っている

246:デフォルトの名無しさん
16/01/01 22:22:51.52 dF7ELeO+.net
.NetのDataTableをパクったクラスを作る
ファイルからデータを読み込んで上記クラスのインスタンスに格納する
以上

247:デフォルトの名無しさん
16/01/01 23:36:34.95 9DJLBWi4.net
>>241
>一応できているのですが、もっと良い方法はないでしょうか
いえそれが最善です
>>242-246のたわごとは無視して下さい

248:デフォルトの名無しさん
16/01/02 18:39:57.59 nW8KZWOh.net
#include <iostream>
class A {
public:
A(){}
~A(){}
int i:1;
};
int main(int argc, char const* argv[])
{
A a;
std::cout << a.i ;//0
return 0;
}
UE4のソース見ていると、
メンバ変数末尾に:がついたコードがあるんですが一対何なんでしょう
なぜコンパイルエラーにならないのか?
UEヘッダーツールで後々セッティングするための記述なんでしょうか?
よろしくお願いします

249:デフォルトの名無しさん
16/01/02 18:42:48.44 5/Tw741l.net
ビットフィールド知らんのか

250:デフォルトの名無しさん
16/01/02 18:49:51.57 BIgpFdUh.net
>UE4のソース見ていると
自分が知っているものを他人も知っている前提で物申すな低能

251:デフォルトの名無しさん
16/01/02 18:51:55.62 nW8KZWOh.net
ありがとうございます
使ったことなかったので知りませんでした
どこかで聞いたことぐらいはあったかも知りませんが、
いまいちぐぐり方が難しいので助かりました
C++ デフォルト メンバ変数 : とか結構見当違いな方向でぐぐってました
ありがとうございました

252:デフォルトの名無しさん
16/01/02 19:03:02.99 9k2o+ba6.net
ビットフィールドってなんだっけ?と数秒w
思えば一回も使った事ないです。

253:デフォルトの名無しさん
16/01/02 20:09:45.36 Ko89Gf9x.net
>>250
レスにソース書いてあるのに何を言ってるんだよ

254:デフォルトの名無しさん
16/01/05 18:38:18.23 zgQ43Iu9.net
答え:SQLiteを使う

255:デフォルトの名無しさん
16/01/08 20:37:47.38 gc7pwQgr.net
int func(Form^ form);
この^記号ってどういう意味?

256:デフォルトの名無しさん
16/01/08 20:39:12.47 yJqiucPC.net
>>255
それは別の言語だからVisual C++ C++/CLI関連のスレで訊け

257:デフォルトの名無しさん
16/01/08 20:41:04.59 h+RBpIK2.net
| が bit毎or で & が bit毎のand であるように、
^ は bit毎の xor

258:デフォルトの名無しさん
16/01/08 20:48:43.06 /U+i+vMx.net
>>255-257
いや 2項演算子じゃないぞ
C++/CLI のハンドル型とかいうポインタ(*)の変形らしい

259:デフォルトの名無しさん
16/01/08 20:51:12.19 h+RBpIK2.net
あー 関数宣言記述での話だったか
頭の int が見えてなかった
ありがとね >>258

260:デフォルトの名無しさん
16/01/08 20:59:30.22 2h/9GNmm.net
>>257-259はQの自演

261:デフォルトの名無しさん
16/01/08 21:03:02.67 h+RBpIK2.net
俺 Qz 認定かー なけるorz

262:デフォルトの名無しさん
16/01/08 23:39:42.16 WIwHnmZz.net
別の言語だったんかい

263:デフォルトの名無しさん
16/01/11 13:29:58.86 VxUMtYXU.net
#define template_key_value <K, V>
template template_key_value
class MapA {};
template template_key_value
class MapB {};
これと同じことをより安全に実現する方法って有りますか?

264:デフォルトの名無しさん
16/01/11 13:41:04.34 IUrb95R1.net
>>263
何も危険なことなんて無いような?
そのままじゃコンパイル通らないけど、そこが問題でも無いだろうし。
クラス定義が空だからテンプレートにする意味が無さそうだけど、そういう話でもないだろうし。
何がしたいのかよくわかんない。

265:デフォルトの名無しさん
16/01/11 15:45:01.43 NVJocn8Z.net
CPPを使う意味が分からない

266:デフォルトの名無しさん
16/01/11 22:00:19.19 E66NlO7o.net
>>265
visual studio使えば自動的にc++やん

267:デフォルトの名無しさん
16/01/12 00:23:03.57 fG9YW/Cm.net
>>266
…??

268:デフォルトの名無しさん
16/01/12 00:34:18.71 wtMUPjLq.net
>>267
VisualStudio使ったこと無いの?
昔から.cppを使う慣習があって、VisualStudio含むいくつかの開発環境ではそれに従うと使いやすくなってるんだよ

269:デフォルトの名無しさん
16/01/12 00:36:04.73 wtMUPjLq.net
ああもしかしたら>>265はCPP=Cプリプロセッサの意味か
そうなら紛らわしい書き方すんな

270:デフォルトの名無しさん
16/01/12 09:32:08.92 gKzzuNPX.net
約一名がアホな誤解しただけで、紛らわしくはないだろ

271:デフォルトの名無しさん
16/01/12 11:00:20.32 vQw7MuFL.net
>>264
すみません書き方間違ってました。
#define template_key_value <typename K, typename V>
template template_key_value class MapA {};
template template_key_value class MapB {};
テンプレートが長く複雑になる場合にわざわざ直書きすると、可読性が悪くなるので別名を付けたいと考えています。
ただC++の世界ではマクロが嫌われているようなので、どうしても以下の様な聞き方を強制されてしまうのです。
template <typename K, typename V> class MapA {};
template <typename K, typename V> class MapB {};

272:デフォルトの名無しさん
16/01/12 11:16:41.18 zdBaNW7Z.net
>>271
「嫌われている」から排除を強制と思うのはおかしい。
実際にマクロを使って何が問題なのか、よく考えて判断したほうが自由になれるよ。
使い終わったら #undef してもいいんだぜ。
少なくとも書き込まれた例だけではマクロを使うほどの話とは思わないけど、実際はもっとあるんだろうな。
違いを無視できる話かどうか知らんけど、ひとつのクラステンプレート内にクラスを定義する形でいくらか
マシにできるかもしれない。

273:デフォルトの名無しさん
16/01/12 12:44:56.38 jL8tZsFO.net
template <typename K, typename V> class MapA {};
typedef MapA<string, int> MAP_A_1;
typedef MapA<string, string> MAP_A_2;
とかじゃダメなの?

274:デフォルトの名無しさん
16/01/12 17:49:46.69 rnRes0fv.net
>>263
言うほど短くならないような。
templateが冗長だから頭のtemplateもマクロに含めたら?

275:デフォルトの名無しさん
16/01/12 18:50:45.22 ezb8i33T.net
#define T template
#define L long
#define typename TN

276:デフォルトの名無しさん
16/01/12 23:47:38.33 9sPejAjF.net
>>275
(アカン)

277:デフォルトの名無しさん
16/01/13 13:25:11.31 36fPT7nK.net
こう書けるのが一番理想だな
template <typename K, typename V> class Map {};
class MapA : Map<K, V> {};
class MapB : Map<K, V> {};

278:デフォルトの名無しさん
16/01/13 20:41:54.84 kNuNR485.net
fscanfでcsvファイルからデータを読み出したいのですが、
fscanfの返り値がおかしく、EOFとならずに処理が終了しません。
データの列要素は15なので、返り値も15となるはずなのですが、
「1」と表示されてしまいます。
行は2千万行近くありますが、その値を過ぎても終了しません。
csvファイルのデータ容量は1.42GBあります。
助言宜しくお願いします。
問題だと思われるループとfscanfの部分を記載します。
while(ret=fscanf(fp,

279:デフォルトの名無しさん
16/01/13 20:44:10.04 kNuNR485.net
while(ret=fscanf(fp,"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf",&a,&b,&c,
&d[0][0],&d[0][1],&d[1][0],&d[1][1],&d[2][0],&d[2][1],
&e[0][0],&e[0][1],&e[1][0],&e[1][1])!=EOF){
    処理等
}

280:デフォルトの名無しさん
16/01/13 20:46:51.56 Lg0tGVPB.net
>>278
fopen(); 付近はどうなってるのか

281:デフォルトの名無しさん
16/01/13 20:49:56.90 kNuNR485.net
>>280
すいません書き忘れてました。
FILE *fp
fp=fopen("example.csv","r");
if(fp==NULL){
printf("no file\n");
exit(0);
}

282:デフォルトの名無しさん
16/01/13 20:50:31.77 Lg0tGVPB.net
>>279
ああなるほど、fopen関係なさそう。
> while( (ret = fscanf(fp,"…",)) != EOF){
みたいにカッコで明示すべきでは。
というか、それコンパイル通ってるの?

283:デフォルトの名無しさん
16/01/13 20:50:57.42 XHmQOsbK.net
とりあえず
while ((ret = fscanf()) != EOF) な
ret = fscanf() != EOF だと fscanf() != EOF の論理演算の結果が ret に入る
csvファイルなら fgets() で行を切り出して sscanf() したほうがよさそう
なお、厳密にやり始めると一文字ずつパースするはめになるだろう

284:デフォルトの名無しさん
16/01/13 20:52:18.55 Lg0tGVPB.net
>>282は間違い。コンパイル通るか

285:デフォルトの名無しさん
16/01/13 20:58:57.11 kNuNR485.net
retの部分は解決できました。ありがとうございます。
今確認してみたところ、最終行を迎えたあと、fscanfの返り値は0となっていました。

286:デフォルトの名無しさん
16/01/13 21:02:30.81 kNuNR485.net
最終行を迎えてもEOFである-1が返ってこない理由としては、どのような理由が考えられるでしょか?

287:デフォルトの名無しさん
16/01/13 21:09:44.61 kNuNR485.net
その場しのぎですが、
while((ret=fscanf())!=0)とすることで解決しました。
エクセルファイルの作成方法が間違っていたのかもしれません。
そちらを確認したいと思います。
ありがとうございました。

288:デフォルトの名無しさん
16/01/13 21:10:13.23 Lg0tGVPB.net
ret がunsigned とか

289:デフォルトの名無しさん
16/01/13 21:11:30.82 Lg0tGVPB.net
ああ>>288は無視して。先程から薬が切れて不安定だな俺は。
>>283だけ見て。

290:デフォルトの名無しさん
16/01/14 00:45:24.54 guxsAoup.net
>>285-287
fscanf() の戻り値の仕様見直せ。

291:デフォルトの名無しさん
16/01/14 07:40:34.39 dQ9Y6guQ.net
>>1
RPGツクール2000 , RPGツクールMV URLリンク(tkool.jp) ( JavaScript 採用 )
WOLF RPGエディター URLリンク(www.silversecond.com)
デュエル・マスターズ Android版 ,i-OS版、公式 URLリンク(dm.takaratomy.co.jp)
デュエル・マスターズ対戦CGI ex
URLリンク(web.archive.org)URLリンク(www53.atwiki.jp)
デュエル・マスターズ(デュエマ)DM ONLINE 1.8a  /  VanGuard ONLINE 1.5a
URLリンク(web.archive.org)URLリンク(uhyohyohyo.sak)<)URLリンク(kiimaa.jugem.jp)
「カードファイト!!ヴァンガード」のネット対戦ができる公式オンラインゲーム「Cardfight!! Online」 2015年冬スタート
URLリンク(web.archive.org)URLリンク(supersolenoid.blog63.fc2.com)
遊戯王 Automatic Dueling System
URLリンク(web.archive.org)URLリンク(www3.atwiki.jp)
遊戯王 デュエル・オンライン
URLリンク(web.archive.org)URLリンク(www31.atwiki.jp)
URLリンク(web.archive.org)URLリンク(do.yugioh-portal.net)
ウィクロス( WIXOSS ) WEBXOSS URLリンク(webxoss.com) URLリンク(webxoss.com)
BG(ボードゲーム)Engine URLリンク(web.archive.org)
URLリンク(web.archive.org)URLリンク(14owl.hateblo.jp)
アプレンティス  マジック:ザ・ギャザリング(MtG)オンライン化 URLリンク(homepage1.nifty.com)
URLリンク(web.archive.org)URLリンク(homepage1.nifty.com)

292:デフォルトの名無しさん
16/01/14 07:41:31.92 dQ9Y6guQ.net
【 オンラインTCGエディター 】   >>1,>>291
デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書け。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストしろ。
個vs個、多数乱戦、チームvsチーム、個vsチームを実現し、P2P通信対戦プラグイン有り。
設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみろ。
個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正 + コード記述の仕様書(設計書)を作成。

機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ-グ用でサーバー稼動。

下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。
さ~て、インド人ベンダーと日本人の翻訳担当SEを見つけよっと!ww
スレリンク(entrance2板:-16番)

293:デフォルトの名無しさん
16/01/15 06:36:40.59 KIFGsBEO.net
>ガチンコ・ジャッジ
これ何?
いかにもDQNあがりのヴァカ企画が付けそうな名前だけど

294:デフォルトの名無しさん
16/01/15 07:38:29.68 POz82VxF.net
>>293
ここまで宣伝テンプレ

295:デフォルトの名無しさん
16/01/20 04:13:40.21 CT14PSG+.net
初心者ではないのですが、わからんので教えてください。
$ cat text.txt
aa\nbb
$
となってます。
これを
42 fin.open("test.txt",ios::in);
49 while(fin && getline(fin, buf))
50 cout<<buf<<endl;
な感じで表示すると、
aa\nbb
って表示されます。
どうして
aa
bb
ってならないのでしょうか。何か勘違いしてますか。

296:デフォルトの名無しさん
16/01/20 04:31:24.49 CT14PSG+.net
すみません。アホな事書きました。忘れてください。ペコペコ

297:デフォルトの名無しさん
16/01/23 13:01:50.67 W4+KYwy5.net
ftellの引数は何故const FILE*じゃないのですか

298:デフォルトの名無しさん
16/01/23 14:01:00.59 47kTF92K.net
C に const はあったっけ?

299:デフォルトの名無しさん
16/01/23 14:37:50.67 xYcOlVg1.net
有るに決まってるだろ
しかしftellが作られた当時は無かったかもな、詳しく知らんが
それにftellがファイルに何も書き込まなかったとしても
FILE構造体を何も書き換えないとは限らないしな
排他処理で何か書き換える実装もあり得る
ftellの実装はコンパイラ毎、環境毎に違うし
ベンダーが自分たちで用意するわけだから
いろんな環境に対応しなければならないC言語としては
安易にconstにできないな

300:デフォルトの名無しさん
16/01/23 16:09:29.81 EPxA/CX7.net
ポインタは伝播するしね。
void で引っ張ればどうにでも化ける。
fstream知ってからは怖いって感じはする。

301:デフォルトの名無しさん
16/01/23 16:19:37.61 ruaa+Fti.net
>>277
class Map<typename K, typename V> {};
そもそもこれが書けないC++仕様の怠慢が問題。

302:デフォルトの名無しさん
16/01/23 22:07:23.87 YzHFCyx5.net
URLリンク(cpp-lang.sevendays-study.com)
このサイトの5-2の問題、数字を漢数字に変換する問題をやってるのですが(面倒なので1~3のみとする)
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main() {
string a;
map<string, string> m;
int i;
string names[] = { "1","2","3" };
m[names[0]] = "一";
m[names[1]] = "ニ";
m[names[2]] = "三";
cout << "入力してください:"<<endl;
cin >> a;
string::iterator it = a.begin();
for (it = a.begin(); it < a.end();it++){
cout << m[*it] ;
}
//else { cout << "存在しません"; }
return 0;
}
このコードのcout<<m[*it];の部分でエラーが出てしまいます
自分の考えではiterator itを入力されたaの1文字目から最後の文字まで動かし、そのitが指す値をmapで変換しています
なぜダメなのでしょうか?

303:デフォルトの名無しさん
16/01/23 22:13:15.13 xc9KTHaP.net
map<string, string>なのに*itは文字だから

304:デフォルトの名無しさん
16/01/23 22:53:37.80 YzHFCyx5.net
map<char,string>にしたらうまくいきました。
ありがとうございます。
続いてまた質問なのですが、以下のコードで1から10の乱数を10回発生させてsetにその乱数をいれてるのですが、毎回10個の乱数が同じになってしまいます
何が悪いのでしょうか?(実行すると、coutの結果として22222222222、5555555555のようになります)
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
#include<iostream>
#include<set>
using namespace std;
int main() {
int a;
set<int> number;
for (int i = 0; i < 10; i++) {
srand((unsigned) time(NULL));
a= rand() % 10 + 1;
cout << a ;
number.insert(a);
}

305:デフォルトの名無しさん
16/01/23 22:54:32.40 Ipz3ttx/.net
>>299
つい最近までLinuxではftellするとファイル位置がリセットされるバグがありました
つまり書き込まれてます

306:304
16/01/23 22:56:59.97 YzHFCyx5.net
すみません
srandの部分をコメントアウトしたら解決しました

307:デフォルトの名無しさん
16/01/23 23:04:49.75 2kp06Cdr.net
>>306
srandはプログラム中1回でいい

308:デフォルトの名無しさん
16/01/24 00:56:19.17 fkWZRTEw.net
>>306
今度は「毎回同じ乱数の並びになります」とか言わないのか?
>>307
日本語が不自由な馬鹿は引っ込め

309:デフォルトの名無しさん
16/01/24 01:30:42.36 0rZjknv2.net
randは非推奨

310:デフォルトの名無しさん
16/01/24 01:39:13.09 WyN3o1JX.net
>>308
>>307が理解できないお前が不自由なんだろw

311:デフォルトの名無しさん
16/01/24 05:48:23.27 S0J2srO3.net
>>307>>308 (の前半部)もそれぞれ正しいでしょう。
>>309 の関連で rand() % 10 で0~9の乱数を出すのも疑義あり。
ところで >>304 の症状の報告も完全ではないね。
何度もやってるうちには 4444222222 みたいな、
前半と後半で値が違うっていうパターンも生じるはず。
現代の機械だとかなり稀なタイミングだろうけど。

312:デフォルトの名無しさん
16/01/24 08:51:16.26 fkWZRTEw.net
>>310
お前はいつも日本語が不自由だな
ここは「1回でよい」じゃなく「毎回呼んではだめ」なことを教えてやらんといかんのだ
ついでに消してしまって0回になってしまったのに「1回でよい」は日本語がおかしい

313:デフォルトの名無しさん
16/01/24 09:19:44.06 OknlX178.net
お前らそのうち
stdlib.h使うな、setはおかしい
とか文句言いそうだな

314:デフォルトの名無しさん
16/01/24 09:33:13.94 bw3MWu8t.net
>>305
そう言うバグがもっと早く見つかったじゃね?

315:デフォルトの名無しさん
16/01/24 10:07:36.64 fkWZRTEw.net
FILEをconstにできるか否かについての
「ファイル位置を保持する変数を誤って書き換えてしまった事実からFILEの内容を書き換える何らかの必要性が有ったのだろう」
という意見に対し
「FILE全体がconstになっていればファイル位置の変数の書き換えをコンパイルエラーに出来たはず」
という思考はちょっとずれている

316:デフォルトの名無しさん
16/01/24 10:49:11.35 Aj6v4F1z.net
windowsのCやC++でディレクトリごと消したいので、
system関数で 
rm -r "*"
など実行すると出来ると思うのですが、パスを間違えると全部消してしまいそうで
怖いのですがどうすればよいでしょうか?

317:デフォルトの名無しさん
16/01/24 10:54:20.90 bw3MWu8t.net
>>315
> 「ファイル位置を保持する変数を誤って書き換えてしまった事実からFILEの内容を書き換える何らかの必要性が有ったのだろう」
> という意見に対し
はあ?
恥の上塗りでもしに来たのか? w

318:デフォルトの名無しさん
16/01/24 10:57:22.78 ETeqPEGX.net
>>316
気をつけろ

319:デフォルトの名無しさん
16/01/24 12:20:43.25 Aj6v4F1z.net
>>318
それ以外に良い対策はありますか?

320:デフォルトの名無しさん
16/01/24 12:32:46.58 lehWL+vO.net
ケースバイケースだろうなあ
リソースなら予め登録されたファイルパス以下にあるファイル名以外消せないようにチェックするとか

321:片山博文MZ ◆T6xkBnTXz7B0
16/01/24 12:40:56.45 30PPh5ie.net
フルパスを要求するとか?

322:デフォルトの名無しさん
16/01/24 12:50:28.16 LHp2Xjej.net
あるいは予めchmod -w又はchown root:rootしておくとか。

323:デフォルトの名無しさん
16/01/24 17:42:47.61 cIbjxOLA.net
|何らかの事情で明示的にファイルをクローズしたければ、close関数を使用します。
|ofs.close();
|C言語に慣れていると、open と close が対応付いていないことに違和感を感じるかも知れませんが、 |
|C++ の世界では、自動的に行われるのならば、余計な手を出さずに任せてしまうべきです。
fstream の場合、close()しない方がいんですかねぇ

324:デフォルトの名無しさん
16/01/24 18:09:23.58 7qZdBJlK.net
>>323
エラーを無視して良いのであればデストラクタ任せで良いけど
そうでなければ自分でcloseする

325:デフォルトの名無しさん
16/01/24 19:46:16.98 sP2ua92H.net
>>316
パスを明示して毎回ユーザに承認を求める
現実的には、そのアプリ専用の作業ディレクトリを作りそこだけを消す
何らかの間接指定で可変ならば、親ディレクトリへの相対パスがあればはじく
ちなみに通常ディレクトリごとに適切に権限設定されてれば万一の時の被害も少ない

326:デフォルトの名無しさん
16/01/24 20:36:40.08 WyN3o1JX.net
>>312
いつもってお前は俺をどれと同一人物視してるんだw
都合が悪いレスは全て同一人物とか頭おかしいだろw
元々ループ内で呼んでたからの突っ込みなんだが
お前はそれすら理解できなかったようだな

327:デフォルトの名無しさん
16/01/24 20:56:23.40 BROMbZ7/.net
「この変数はこれまで変更可能だったが、ただ今よりブロック終了までconstとする」って場合どうしますか? 但し、もう一つconst版のオブジェクトを宣言したくはありません。
なぜこんな事をしたいかというと、元々constで初期化で宣言したかったのに、
①初期化のためには資源の調達が必要であり
②初期化が済み次第すぐさま資源の解放をしたい
この場合、
SomeObj o;
{
  資源確保;
  o = 資源による処理;
}// ここで資源は解放される。
以降、oを用いた処理。
となるでしょう。そうなると、最初のoの宣言は、当然直後に代入があるので、constにできません。しかし事実上の初期化が済んだら、もうoはconstにしたいのです。

328:デフォルトの名無しさん
16/01/24 21:03:56.70 50ZcCt7z.net
>>327
「以降」の処理を const& を受け取る関数に移して、そこに渡す。
あるいは初期化済みの SomeObj を返す関数を作る。
しかし資源の確保となると根本的には SomeObj の責務(コンストラクタの処理など)に移したいところ。

329:デフォルトの名無しさん
16/01/24 21:18:25.81 fkWZRTEw.net
>>327
>>328の対処が取れないときは
URLリンク(ideone.com)

330:デフォルトの名無しさん
16/01/24 22:13:23.33 0dMHn0ua.net
>>327
F#?

331:デフォルトの名無しさん
16/01/24 22:19:03.60 WyN3o1JX.net
G♭

332:デフォルトの名無しさん
16/01/24 22:20:15.90 eLuVQ3YF.net
勝手にC++の前提で話してんじゃねーよ
スレタイ読み直せ低能ども

333:デフォルトの名無しさん
16/01/24 22:21:45.85 WyN3o1JX.net
>>332
ブーメラン

334:デフォルトの名無しさん
16/01/24 23:03:43.91 cIbjxOLA.net
>>324
もう使用しないとわかった時点でフォーカス外れる前に自分でcloseした方がお作法ですよね。
なかなかC脳から抜けられない。

335:デフォルトの名無しさん
16/01/24 23:21:22.85 B3HWqMca.net
closeで例外が出てデストラクタ呼ばれたり
デストラクタでのクローズが失敗したらどうなるの?

336:327
16/01/25 02:02:52.33 8FNbwGHh.net
分かった、ブロックをそのままλ式にしてしまうのですね!
const auto o { [&...]()->SomeObj
 {
  資源確保;
  資源から必要な情報をまとめる;
  return SomeObj {情報};
 }()// ここで資源は解放される。
};
以降、oを用いた処理。

337:プログラム初めてやってます
16/01/27 19:48:26.87 GcWX3DUV.net
2ちゃんねる初めてなので、書き方間違ってたらごめんなさい。
負の値の整数値をscanfで読み込んで、
絶対値を求めるプログラムを書きたいのですが
今の所わかってる知識としてはprintfでの簡単な計算と、簡単なif文のみです
課題としては、printf、putsとif文
今までに習った関数を用いてやれと言う事だと思うんですが
どう考えてもわからなかったため、どうか質問させてください

338:デフォルトの名無しさん
16/01/27 19:58:02.06 0xRCKJUw.net
scanfなんて危険で難しい関数を何故初心者に使わせたがるのか

339:デフォルトの名無しさん
16/01/27 20:04:03.17 Fmvz75rf.net
Cは危険な関数から入る傾向あるよね

340:デフォルトの名無しさん
16/01/27 20:10:22.92 j65DqSaH.net
>>338
それ以上に簡単な入力手段がないからだろ

341:デフォルトの名無しさん
16/01/27 20:12:44.23 1VQKsEBj.net
fgetc() じゃきっついか

342:デフォルトの名無しさん
16/01/27 20:24:33.23 ghSXEhkj.net
>>337
URLリンク(ideone.com)

343:デフォルトの名無しさん
16/01/27 20:43:01.06 H/VHXeqj.net
危険な関数と言えば printf() もかなり危険だよね。
printf("hello, world\n"); なら大丈夫だけど、
printf("all 50%discount today\n"); だともう怪しい。
>>339 の言う通りだわ。

344:デフォルトの名無しさん
16/01/27 21:34:21.69 tY0EzgE5.net
Cは低レベルを担当する言語なので扱いは高レベルな者が担当する。なので危険で良い。効率こそ正義
問題はそんなものを初学者に学ばせること。初学者がそんな重要な部分の開発をするわけがないのだから

345:デフォルトの名無しさん
16/01/27 23:06:55.48 eULyfEEH.net
Cより覚えることが少なくてシンプルで他の言語の基礎になっていて
学んだことの応用が効いて実用性のある言語が他にあるか?
初心者が学ぶのに妥当だと思うが

346:デフォルトの名無しさん
16/01/27 23:09:52.37 3jiwec3B.net
むしろCこそ初心者に無駄が大杉

347:デフォルトの名無しさん
16/01/27 23:23:38.65 13Hm1XjY.net
C言語を覚えるのはCPUを覚えるのと大差無いから基本であるが難しい。
一人では全く何もできないコンピュータに1から仕事を教える物でもある。
だが、ラクしてjavaやperlに走る人とは付き合いにくい。

348:デフォルトの名無しさん
16/01/27 23:29:27.89 4Ckw423u.net
覚えることの多寡はやりたい目標で決まるから何とも言えん
電卓として使う程度ならどの言語だって大して変わらんし

349:デフォルトの名無しさん
16/01/27 23:37:38.39 1VQKsEBj.net
入出力がちょっと気を使うけど、
学習の重点となっているところが、入力後から出力前に集約できてれば良いんだが…

350:デフォルトの名無しさん
16/01/27 23:38:02.86 LZEmbO/H.net
派手なGUIゲームを作るならCは遠回りだろうけど
大学の講座とかで教えるならCを超える言語あるかな?
Javaとか?

351:デフォルトの名無しさん
16/01/27 23:44:41.36 4Ckw423u.net
それも講義の内容次第としか
工学系で高級なアセンブリとして使うならC

352:デフォルトの名無しさん
16/01/27 23:50:57.65 eULyfEEH.net
実際問題JAVAとかC#は最初に教えるにしては覚えることが膨大すぎると思うよ
ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう
C++なんかもってのほかだしさ
>CPUを覚えるのと大差無いから基本であるが難しい
CPUに詳しくなって悪いことは無いよね、どんな言語にも応用が利くし
Cはいろんな言語のベースになっているからCを覚えると他の言語に展開しやすい
言語仕様も必要最小限でかつ、ぎりぎり実用可能なレベルで玩具というわけでもない
これがRubyとかなら、matzの実装について詳しくなる必要があるわけだが
こんなものを学んだところで有り難くない

353:デフォルトの名無しさん
16/01/28 05:14:25.23 a6m1UVUK.net
CPUというか、アセンブリ言語を少し知ってると
ポインタの理解あたりが容易になるのは間違いないね。
ただし、特定のCPUに詳しくなりすぎると
慣用表現から外れた独特な書き方を始める弊害もあったり。
・C慣用
for (i = 0; i < 10; i++)
・C++慣用
for (i = 0; i != 10; ++i)
・あるCPUのアセンブラ経験者
for (i = 10; i != 0; --i)
どのループも10回の繰り返しのはずだが、
今となっては3番目は本当に10回か自信がないわ。

354:デフォルトの名無しさん
16/01/28 05:52:39.11 OteWNMPZ.net
・C++慣用
for (i {0}; i < 10; ++i)

355:デフォルトの名無しさん
16/01/28 06:04:06.09 xn/xn1Lr.net
>>354
出直してこい

356:デフォルトの名無しさん
16/01/28 06:35:33.04 OteWNMPZ.net
ひぇっ!

357:デフォルトの名無しさん
16/01/28 06:51:25.56 87VXcHuk.net
>>352
> ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう
そんな特殊な機能は必要になった時に教えればいいだけだろ
バカなのか?

358:プログラム初めてやってます
16/01/28 07:10:42.59 v1B3KP04.net
342>>
342さんありがとうございました!
書き込んでから自分でも考えてみていて、
こんな感じになってました
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/* 読み込んだ整数値の符号を判定 */
int main(void){
int a;
printf("整数を入力してください:");
scanf("%d", &a);
if (a < 0)
a = -a;
printf("絶対値は%dです");
return 0;
}
342さんのコーディングすごいですね!
参考になりました ありがとうございました!

359:プログラム初めてやってます
16/01/28 07:11:49.38 v1B3KP04.net
余計なコメントはいってました・・・ 無視でお願いします・・・;

360:デフォルトの名無しさん
16/01/28 12:31:44.00 a9w0Gglx.net
そもそもプログラミングの基礎は人に習う物じゃない
参考書なりネットなりで一人で勉強するもんだ
基礎から教えて貰わなきゃ理解出来ない時点でプログラマーに向いてない

361:デフォルトの名無しさん
16/01/28 12:36:59.20 mW8CPdak.net
そうか?別に教わってもいいと思うが
でも応用効かないのは向いてないと思う

362:デフォルトの名無しさん
16/01/28 12:43:58.60 U7RHxiIq.net
生涯でただ一つの言語しか覚えられないという宗教的理由があるならC一択
そうでないならCからとか論外

363:デフォルトの名無しさん
16/01/28 12:51:39.77 a9w0Gglx.net
書き方が悪かった
一人で考えても分からない所を聞くのは別にいいと思うが、
授業とかで教えて貰うまで参考書があるのに手も付けない奴は向いてないと言いたかった

364:デフォルトの名無しさん
16/01/28 13:04:08.57 mW8CPdak.net
あまり勤勉なやつも向いてない気がするが
仕事にするんじゃなきゃ関係ないか

365:デフォルトの名無しさん
16/01/28 15:21:07.00 hWNVXd5g.net
数学やプログラミングはいかに楽してそれを済ませるかがテーマな所ありますよね
面倒くさがりでズボラな人が怠惰を求めて勤勉に行き着く過程が王道では
だから教育としてはいかにそれが面倒くさいか、いかにそれをやらずに済ませるかを強調していく

366:デフォルトの名無しさん
16/01/28 16:30:44.07 CWsUf0Ic.net
初心者歓迎なんでね。

367:デフォルトの名無しさん
16/01/28 22:38:32.61 to2yFDLL.net
Cから教えるのが論外とか言っている人は
他のどの言語から教えたほうが良いと思っているのか書くべきだよね

368:デフォルトの名無しさん
16/01/29 03:01:29.22 bzmjGvNe.net
>>363
向いていないというか興味が無いんだと思う
必須授業とかで無理やりやらされてる感じ
>>365
一度作ってしまえば後は利用して効率が上がるからなw
ずっと面倒か作る間だけ面倒で後楽かを選ぶだけで
>>367
ただ批判するだけじゃ誰でもできるからな

369:デフォルトの名無しさん
16/01/29 09:02:47.15 x/sxD8ME.net
(Lispの)Schemeを頭のいい人に教えるのには10分と掛からないってジョエルは言ってる。
Cは頭が良くても10分じゃ覚えきらん。仕様書からしてSchemeの10倍近く分厚いからな。2時間は掛かるんじゃねぇか?

370:デフォルトの名無しさん
16/01/29 09:49:39.15 qombZsi/.net
>>369
仕様書の厚さに比例するっていう観点は公平だと思うよ

371:デフォルトの名無しさん
16/01/29 10:14:08.59 x/sxD8ME.net
ふむ。
仕様書が分厚いからCを教えるのが論外だとするのなら、
手続き型系の言語で教えるのに適した言語はPASCALかLuaあたりになると思う。
Lua良いよLua。PASCALもね。

372:デフォルトの名無しさん
16/01/29 13:26:54.55 cTI0Jdzp.net
Cは概念だと思うけどね。ポインタと構造体を脳内でイメージできるようになったらおkかと。
後はリファレンスさえあれば、一生忘れる事はないと思うけどなぁ。
C++はもう底なしでw でもそれが楽しいのですが。

373:デフォルトの名無しさん
16/01/29 15:52:03.82 9SCZR58b.net
目的に最も近いと思われる言語を教えるのが初学者への配慮であって
入門に最も適した言語なんてのは幻想だと思う

374:デフォルトの名無しさん
16/01/29 17:58:02.16 cTI0Jdzp.net
今は専門学校ではjavaなのかな

375:デフォルトの名無しさん
16/01/29 18:08:01.54 BAJfHtoc.net
うちの専門学校では1年目はC、2年目にJavaだったよ

376:デフォルトの名無しさん
16/01/29 18:47:15.34 i41mJkcJ.net
うちは1年目はPASCAL、2年目にCをやり、3年目にSchemeとPrologを触り、4年目はCで研究したよ。
専門じゃなくて国立だけど。

377:デフォルトの名無しさん
16/01/29 19:53:42.72 XYL4UGBK.net
俺も一年目はPascalだったが
Pascal教えられていたときは激しくモチベが下がった
2年目にCになって無茶苦茶うれしかったよ
だって、Pascalは現場で使われてない言語だったから
何処でも使われてない言語を覚える苦痛と言ったらね
breakが有るくせにreturnが無いあたりも最悪だった
returnが無いから、どうにもこうにも関数の最後までいかないと
関数を抜けれないんだよ!
当然フラグだらけになるし、マジ鬼畜言語だと思った
その点Cは未だに世界中で使われている言語なわけで
だったら覚えてみようってなるし、モチベが上がるってものよ

378:デフォルトの名無しさん
16/01/29 20:07:57.52 cTI0Jdzp.net
ふむふむ Pascalはセミコロンの位置で頭が禿げるw
Delphiとか評判良かったんだけどねぇ。

379:デフォルトの名無しさん
16/01/29 20:57:35.02 6a9kiPQ9.net
>>378
式文とdo-while文にセミコロンを含むか、
各文の間は必ずセミコロンで区切るかの差であって、
どちらも一貫してるよ

380:デフォルトの名無しさん
16/01/29 21:36:27.47 KHfAKsC3.net
ここは血迷ってAWKから入門させよう。ついでに正規表現も学ばせよう

381:デフォルトの名無しさん
16/01/29 21:56:42.92 XYL4UGBK.net
一貫してても使いにくかったら意味ねーんだわ

382:デフォルトの名無しさん
16/01/29 22:13:16.22 V57FZVNV.net
じゃあ苦情の上がっていないJavaScript最強ってことだな

383:デフォルトの名無しさん
16/01/30 03:16:59.92 d4C/IYFO.net
マルチコアが当たり前になってGPGPUの手段が広がって低レベルが回帰の予感

384:デフォルトの名無しさん
16/01/30 12:04:09.34 qiIX3neU.net
そこでllvm-irですよ

385:片山博文MZ ◆T6xkBnTXz7B0
16/01/31 18:52:32.63 KGvneECt.net
Cの文字列はヌル文字があるとそこで終わりだけど、
C++のstd::stringは長さを記録しているから、ヌル文字が
途中に来ても大丈夫!
ということはstd::stringはバイナリデータも扱えるんだ! 大発見だね!

386:デフォルトの名無しさん
16/01/31 18:56:36.30 umKDphm1.net
どうした急に

387:デフォルトの名無しさん
16/01/31 21:04:07.72 kn/5LVuq.net
今更すぎるな
単にC++11以前は連続した領域に確保されることが保証されてなかったからバイナリデータ置き場として使われてなかっただけ

388:デフォルトの名無しさん
16/01/31 21:13:17.94 JH58iwLT.net
>>385の知識が残念なのは言うまでもないとして
話を理解できない>>387はもっと哀れ

389:デフォルトの名無しさん
16/01/31 23:23:19.06 0VTupv6x.net
自分の知識を総動員してドヤ顔してるんだからそっとしておいてやれ

390:デフォルトの名無しさん
16/02/01 00:16:08.05 Jc+yiccs.net
そう指摘されても何を理解できてないのか理解できてないからもっと哀れだわ
ハハッ

391:デフォルトの名無しさん
16/02/01 01:45:26.45 k88EDqNX.net
ここは初心者にフレンドリーでハートウォーミングなインターネットですね

392:デフォルトの名無しさん
16/02/01 04:58:19.06 wHu9vKIt.net
>>390
>>386

393:デフォルトの名無しさん
16/02/01 17:08:19.81 Ev74Df4F.net
>>392のように日本語の文脈も読みとれない知能障害も
生きてて辛いだろうな

394:デフォルトの名無しさん
16/02/01 19:06:25.95 aUqGS129.net
アホが文脈読めとか笑える
スゲーいいこと書いたつもりなんだろうなぁ w

395:デフォルトの名無しさん
16/02/01 21:07:47.33 cp5cboQs.net
最近の2chは過疎も納得の糞さだな。

396:デフォルトの名無しさん
16/02/02 11:36:29.11 NTv/QStd.net
>>387
まじ?
連続性保証されてると思ってたわ。
vectorは03で規格化されてたよね?
stringはされてなかったのか。
ま、いっか。

397:デフォルトの名無しさん
16/02/02 22:25:20.39 +WV++cRd.net
助けてください
実数を2つ入力させて大小比較させるプログラム
URLリンク(codepad.org)

398:デフォルトの名無しさん
16/02/02 22:29:57.47 7f7wf/mW.net
elseの後にifが無いな

399:デフォルトの名無しさん
16/02/02 22:34:55.10 7f7wf/mW.net
あれ?
同じ環境で、同じ入力文字列から読み取った二つの浮動小数点数型数が厳密に一致するって仕様で決まってたっけ?
つまり、入力として
0.1 0.1
って入れた時に、scanf("%lf%lf", &a, &b);なりなんなりした後のa == bの値って処理系依存だっけ?

400:デフォルトの名無しさん
16/02/02 22:58:44.04 +WV++cRd.net
>>398
通りました。ありがとうございます。
けど、最後のはifがなくてはならないのでしょうか。
ストラウストラップ自身のテキストに、最後はelseとなっているのですが。

401:デフォルトの名無しさん
16/02/02 23:00:44.47 7f7wf/mW.net
>>400
ストラなんちゃらってのは知らんけど
(a == b)が付くなら文法上ifが必要。
ifを省くなら括弧も省け。

402:デフォルトの名無しさん
16/02/02 23:05:17.62 +WV++cRd.net
>>399
実際のところ、
「2つの数字の差が1.0/10000000未満である場合に、どちらが大きくてどちらが小さいかを
書き出した後、the numbers are almost equalと書き出すようにプログラムを変更する」
という問題で、これより前にint型をdoubleに変更しろという問題もあって、
a == b はここでは必要ないかもしれないです。

403:デフォルトの名無しさん
16/02/02 23:07:14.24 +WV++cRd.net
>>401
あ。たしかに最後は条件式書いてないです。ありがとうございます!
>>ストラ
C++の設計者です。

404:デフォルトの名無しさん
16/02/02 23:11:00.17 7f7wf/mW.net
>>403
誰かと思ったらB. Stroustrupさんか。
カタカナって難しい

405:デフォルトの名無しさん
16/02/02 23:13:08.88 RveVHAYz.net
ハゲはa<bでもa>bでもなければa==bと考えてしまうほどモウロクしたんだろうか
最近の老衰っぷりを見るとかなり頭がヤバそうだが

406:デフォルトの名無しさん
16/02/02 23:18:37.12 +WV++cRd.net
>>405
細かいエラーは最後の「小数が入力されてない」で一括りなんです。
入門書なんで。

407:デフォルトの名無しさん
16/02/02 23:20:19.55 7f7wf/mW.net
>>406
多分そういうことじゃないと思う。

408:デフォルトの名無しさん
16/02/03 08:53:05.13 6UPbxu8z.net
>>399
その入力の結果
memcmp(&a, &b, sizeof a) で 0 は保障して欲しいところだな
処理系依存だとなんかキモイ

409:デフォルトの名無しさん
16/02/03 10:15:51.45 JXLYa8UB.net
うーむ
0.1 == 0.1
atod("0.1") == atod("0.1")
atod("0.1") == 0.1
ぜんぶ成立してほしい
誰か規格を解読して

410:プログラム初めてやってます
16/02/03 10:19:42.77 lWEagrs5.net
前回は皆さん色々ご検討くださってありがとうございました。
皆さんにお礼も言わずに去ってしまったなと思っていたのですが、
その後、高度な(に私は見えました)話題が続いていたので水を差してはいけないと思って
どうしてもわからない事が出てきてしまって、また来てしまいました。
【二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の
 全整数を加えた値を表示するプログラムを作りなさい       】
という課題なのですが
インクリメント記述、全整数表示まではうまくいったのですが、
この後の合計値がどうしても出せません
ご助力お願い致します。
ここまでできたのですが…
URLリンク(ideone.com)
多分恥ずかしいコーディングだと思います…

411:プログラム初めてやってます
16/02/03 10:21:57.21 lWEagrs5.net
記述し忘れたので追記
2つの整数を入力し a以上b以下の全整数の和を求めなさいとの事でした

412:デフォルトの名無しさん
16/02/03 10:23:18.63 Gb259GwX.net
>>410
for (i = min; i <= max; i++) {sum += i;}

413:プログラム初めてやってます
16/02/03 10:24:14.98 lWEagrs5.net
ありがとうございます!
でも、for文はまだ出てきてなくて、for文を使わずにと言う事でした

414:デフォルトの名無しさん
16/02/03 10:36:23.49 JzoFZA2F.net
またqの炎上学習法か?

415:デフォルトの名無しさん
16/02/03 10:37:46.94 JXLYa8UB.net
>>413
たとえば、1から1000の合計の計算式知ってれば、それを使う

416:プログラム初めてやってます
16/02/03 10:40:20.13 lWEagrs5.net
?? 何かの本ですか? 
一応ある本の課題を見ています
今までに習ったのは簡単なprintfでの計算とif文do文なのですが

417:デフォルトの名無しさん
16/02/03 10:46:44.73 XI3wSbIf.net
>>409
atodと言うものが何物かは知らんが保証は無いんじゃね
ISO/IEC 9899:2011 5.2.4.2.4p6
The accuracy of the floating-point operations (+, -, *, /) and of the library functions in <math.h> and <complex.h> that return floating-point results is implementationdefined,
as is the accuracy of the conversion between floating-point internal representations and string representations performed by the library functions in <stdio.h>, <stdlib.h>, and <wchar.h>.

418:デフォルトの名無しさん
16/02/03 10:48:09.46 XI3wSbIf.net

5.2.4.2.4

5.2.4.2.2 Characteristics of floating types

419:デフォルトの名無しさん
16/02/03 10:51:30.15 O/9tVwNc.net
>>416
min = 5, max = 10, sum = 45て事なら
sum = ((min + max) * (max - min + 1)) / 2;
じゃあかんの?

420:デフォルトの名無しさん
16/02/03 10:53:19.38 Gb259GwX.net
>>416
forはwhileやdoを使って書き直せる。
for (A; B; C) D;
A; while (B) {D; C;}
A; do {if (B) {D; C;}} while (B);

421:プログラム初めてやってます
16/02/03 10:55:10.44 lWEagrs5.net
>>416
416さんありがとうございます!できました!
皆さんもいろいろありがとうございました!

422:プログラム初めてやってます
16/02/03 10:56:18.48 lWEagrs5.net
>>419さんでした;
>>416さんもありがとうございました!

423:プログラム初めてやってます
16/02/03 10:58:29.06 lWEagrs5.net
>>420 420さんでした… ほんとにありがとうございました!

424:デフォルトの名無しさん
16/02/03 11:02:27.43 JXLYa8UB.net
>>417
正確性については実装依存だけど、毎回の同一性まではここでは触れてないね

425:デフォルトの名無しさん
16/02/03 12:55:54.71 R1lQnZw2.net
#include <cstdio>
int main() {
 printf("hello, world\n");
 return 0;
}

g++ (GCC) 4.8.2 を使っているんだが、上のソースがエラーなくコンパイルできる。
しかし printf() は std::printf() と書くべきじゃないかと思うんだ。
あるいは using で省略表記を明示するか。
この書き方でエラーにならないのはC++の規格通りなのか、
あるいはGCC独特の動作なのか教えてほしい。
またGCC独自だとしたら、コンパイル時にエラーとするオプションを知りたい。
(以前は -fhonor-std というオプションが使えたらしいが廃止されたみたい)

426:デフォルトの名無しさん
16/02/03 14:52:41.84 1RubKd28.net
なーる

427:デフォルトの名無しさん
16/02/03 14:54:41.83 XI3wSbIf.net
いつから>>425は規格通りとGCC独特の動作が
アンビバレンツなものであると錯覚していた?

428:デフォルトの名無しさん
16/02/03 15:53:30.47 hvk9CpKQ.net
なんでCは外部リンゲージでexternをつけるのにC++はつけないんですか?

429:デフォルトの名無しさん
16/02/03 16:41:54.73 uEOUJl1K.net
C++のコードからCを呼ぶ時に呼び出し規約の違いを明示する
CのコードからC++を呼ぶことはない
それに C/C++どちらも呼び出し規約が1種類ではないから
一部の関数はそういう指定がある

430:デフォルトの名無しさん
16/02/03 16:47:26.68 XI3wSbIf.net
>>428-429
>Cは外部リンゲージでexternをつけるのにC++はつけない
>CのコードからC++を呼ぶことはない
お前等の個人的なスタイルがさも普遍的であるかのように語られても

431:デフォルトの名無しさん
16/02/03 16:54:04.33 1RubKd28.net
そもそもデフォで外部リンケージを持つから extern はつけなくてもいんじゃねの?
外の変数を使う時はexternが必要ってことで。

432:デフォルトの名無しさん
16/02/03 16:56:12.19 I+U+ZaiG.net
>>425
C++の規格通りっぽい
cstdioとかはシンボルをグローバルにしてもいいししなくてもいいらしい

433:デフォルトの名無しさん
16/02/03 17:00:58.37 XI3wSbIf.net
>>432
へー、規格のどこにそんなことが


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch