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


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

C++相談室 part130



1 名前:デフォルトの名無しさん(ワッチョイ f37a-QmV0) mailto:sage [2017/03/31(金) 08:47:49.65 ID:UkLjKqcm0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part129
echo.2ch.net/test/read.cgi/tech/1483940967/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

2 名前:デフォルトの名無しさん (ワッチョイ bf54-lR6P) mailto:sage [2017/03/31(金) 16:52:18.52 ID:CoeIAoH10.net]
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----

3 名前:デフォルトの名無しさん (ワッチョイ 3f78-QHHb) [2017/03/31(金) 17:03:31.51 ID:qlAKv2q70.net]
>>1

4 名前:デフォルトの名無しさん (ワッチョイ ef14-oQcP) mailto:sage [2017/04/01(土) 09:35:38.04 ID:JSPgwSTt0.net]
テンプレートで曖昧なものは強制的に解決させる方法ってあります?
template<typename A, typename B> void func(A a, B b);
func(2.f,3.f); // float
func(2.,3.); // double
func(2.f,3.);// floatで呼び出したい

5 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/01(土) 10:06:09.92 ID:vvD/Bq3hr.net]
こういう質問を見ると
何処に落とし穴が有るのだろうと勘ぐってしまう

6 名前:デフォルトの名無しさん (ワッチョイ d3a6-agmj) mailto:sage [2017/04/01(土) 10:15:43.84 ID:vxnrpS460.net]
「強制的に」の解釈だろうね

7 名前:デフォルトの名無しさん (ワッチョイ cf29-MCV6) [2017/04/01(土) 10:21:35.44 ID:8wn5/JcH0.net]
func<float, float>(2.f, 3.);

8 名前:今日は何の日? (ワッチョイ bf7a-mgDT) mailto:sage [2017/04/01(土) 11:36:07.15 ID:3A8hlFXh0.net]
'f' 一文字で済む方法が2行上に示されているが…

func(2.f,(float)3.); // てへっ

出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
スペシャライゼーションか非テンプレート版でイグザクトマッチを
用意すればいいじゃないかな

func(2.,3.f); の時は float 優先なのか第一引数優先なのか
ロジックによっては元の設計を見直すべきかも

9 名前:デフォルトの名無しさん (ワッチョイ ef14-oQcP) mailto:sage [2017/04/01(土) 11:43:51.07 ID:JSPgwSTt0.net]
>>8
>出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
そういうことです
static_castが可能な型同士に限定されるとは思いますが

>スペシャライゼーションか非テンプレート版でイグザクトマッチ
なるほど

なおfunc(2.,3.f)でもfloatですね

10 名前:デフォルトの名無しさん (ワッチョイ a356-8BmZ) [2017/04/01(土) 11:59:09.40 ID:gOIdtRSt0.net]
お前にテンプレートはまだはやい



11 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/01(土) 12:50:11.46 ID:vvD/Bq3hr.net]
>スペシャライゼーションか

実用性皆無の糞コードしか想像出来ない

12 名前:デフォルトの名無しさん (ワッチョイ 3f3b-MCV6) [2017/04/01(土) 18:22:19.01 ID:2DXDopa10.net]
そもそも糞コードしか書けない人は何に対してもそうだろ

13 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/04/01(土) 19:25:28.02 ID:Pijd2zbh0.net]
練習しなきゃ良いコードは書けるようにならない

14 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/01(土) 19:35:34.93 ID:iUvRbgEsr.net]
そうだな
ただ練習したら必ず良いコードが書ける訳でもない
例えばPODをコピーするのにpragma pack1してmemcpyし始めるK&Rおじさんとか

15 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/04/01(土) 19:38:01.60 ID:p1TV7r2C0.net]
個人的には関数引数の弱い型への変換という
C++言語規約上の暗黙的変換とは逆の流れを引き起こすような記述を
通常と同じような見かけの記述にすることは紛らわしいと希ガス

コード共通化を重視するなら>>7に従うか、あるいはfunc(2.f, 3.f)にするとかして呼び出し元で型を明示し、
そうではなくて弱い型への暗黙的変換を伴うバージョンのfunc()が他とは別のコードになる(スペシャライゼーション対象足りえる
なら、スペシャライゼーションの代わりにfuncを別名にするとかとにかく一目でわかるようにするのが実用的
かと、

16 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/04/01(土) 21:58:54.19 ID:Pijd2zbh0.net]
>>14
練習とは既にあるより良い方法を真似することだから身につかないのは練習になっていないかやる気が無いかだ

17 名前:デフォルトの名無しさん (ワッチョイ 3f6f-MCV6) [2017/04/02(日) 07:31:30.34 ID:NX0JHgEX0.net]
誰か15を日本語訳してくれ

18 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/02(日) 07:42:27.51 ID:0DgUIb4er.net]
>>17
・func(0.0f, 0.0)は一見精度落ちない様に見えるがfloatに落ちるのが嫌
・だからfnuc<float>の様な明示的な呼び出しにするか、fnuc_fの様な名前で工夫すべき
・template<> func<double,float>なんて特殊化する暇があったら
 非テンプレートのfuncf作れ
・つまりfloat v;「v=0.0;」もコンパイラーの警告だけなのでNG
・もう変数名はシステムハンガリアンしか無いぜ

19 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/02(日) 08:00:42.30 ID:0DgUIb4er.net]
型変換に於ける定数のルールはC++11で見直されたので
「v=0.0;」は例が良くなかったな。まあいいか

20 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/04/02(日) 08:01:44.33 ID:M04XElTC0.net]
>>18
最後の二つはイラン
やっても良いが第1項目の対策としては過剰すぐる、



21 名前:デフォルトの名無しさん (ワッチョイ bf6b-agmj) mailto:sage [2017/04/02(日) 11:47:36.98 ID:XLcHLDuG0.net]
計算がメインの、建築用CADとか、航空流体力学のちょっとしたソフトとかだと、過剰ではないかもしれない

doubleとfloatとでの四つの組み合わせがちょくちょく登場する計算、
funcのfloatとdoubleの組み合わせで厳密に誤差計算しているような気がする
もしもそうだとすると単精度の誤差すらも気にするようなヤバいシステムがコードの背後に見える
……トカマク式核融合炉の制御ソフトの一部かもな

22 名前:デフォルトの名無しさん (スッップ Sddf-M0et) mailto:sage [2017/04/03(月) 21:44:49.44 ID:muLND53td.net]
AD変換器なんてノイズ多い環境じゃ16bit以上のものなんて使えないぞ
電力関係なら12bit位だろ

いかにその分解能でしっかり制御するかが重要で
算数的な精度なんてどーでもいいのさ

23 名前:デフォルトの名無しさん (ワッチョイ b310-MCV6) [2017/04/03(月) 21:49:37.61 ID:iUZo1Vn10.net]
最後の1行を除き同意

24 名前:デフォルトの名無しさん (スッップ Sddf-M0et) mailto:sage [2017/04/03(月) 22:07:16.82 ID:muLND53td.net]
偉い人向けに表示上だけは電卓に合わせないとうるさいって話かな

25 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/04/03(月) 22:36:46.92 ID:rMPFCCT20.net]
電池とかのラインで使われてる計測器だと有効なのは小数点以下は3桁くらいまでかな

26 名前:デフォルトの名無しさん (ワッチョイ b310-MCV6) [2017/04/03(月) 22:41:35.95 ID:iUZo1Vn10.net]
最小目盛りの10分の1

27 名前:デフォルトの名無しさん (ワッチョイ ef14-oQcP) mailto:sage [2017/04/03(月) 22:48:03.77 ID:teq5sGj/0.net]
数学的なベクトルのクラスで
template<int N> vec{ double v[N];};
などとした場合、コンストラクタで各成分を指定したいようなときって
どうするのが筋ですかね?
それとも引数の数が変わるのがわかってるようなケースはテンプレートすべきではない?

28 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/03(月) 22:59:42.22 ID:/XngI6+6r.net]
こういういかにもな質問を見ると、
何処に落とし穴が有るのだろうと勘ぐってしまう

29 名前:デフォルトの名無しさん (ワッチョイ bf80-QHHb) [2017/04/03(月) 23:08:28.79 ID:BzAHvGte0.net]
>>27
俺は配列で初期化して渡してる。
一瞬本末転倒な気もするが、これが一番スッキリする。

30 名前:デフォルトの名無しさん (ワッチョイ ef14-oQcP) mailto:sage [2017/04/03(月) 23:15:39.73 ID:teq5sGj/0.net]
double d[]={0.,1.,2.};
vec v(d);
みたいなことですかね?
あと今思いついたのは共通に処理できるところだけ
template<int N> struct vec_base{double v[N];}
template<int N> struct vec {};
template<>strct vec<3> : public vec_base<3>{ vec(double, double, double);};
みたいな



31 名前:デフォルトの名無しさん (ワッチョイ bfcd-jsM4) [2017/04/03(月) 23:18:11.93 ID:xWKBtMgw0.net]
可変長テンプレートじゃだめなの

32 名前:デフォルトの名無しさん (ワッチョイ ef14-oQcP) mailto:sage [2017/04/03(月) 23:38:46.07 ID:teq5sGj/0.net]
そんなのありましたね・・・
調べてみます

33 名前:デフォルトの名無しさん (ワッチョイ bfcc-hXdu) mailto:sage [2017/04/04(火) 02:27:46.41 ID:cqsAbaT40.net]
template<int... args>

34 名前:デフォルトの名無しさん (ワッチョイ 733c-kVPK) mailto:sage [2017/04/04(火) 12:47:55.32 ID:CFV3B2Uw0.net]
Nは要素数だからそれじゃダメやろ

35 名前:デフォルトの名無しさん (スッップ Sddf-mnw5) mailto:sage [2017/04/04(火) 13:09:36.94 ID:6xG2515ud.net]
template <typename... T> は機能するけどこの場合ちょっとやだな

36 名前:デフォルトの名無しさん (ワッチョイ 3f91-MCV6) [2017/04/04(火) 15:20:53.13 ID:SRqXkALx0.net]
sizeof... の使いどころじゃね?

37 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/04(火) 17:42:54.88 ID:Xbh3DIbfr.net]
質問者がコンストラクターを使用したいと言っている以上
残念なコードになることは不可避
static_assertでも入れとくしかない

38 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/04/04(火) 20:17:58.88 ID:Xbh3DIbfr.net]
ネタも投下されないようなので取り敢えず貼っとくか
ideone.com/MjE67k

39 名前:デフォルトの名無しさん (ワッチョイ bf80-QHHb) [2017/04/04(火) 20:55:09.83 ID:vk9hQqDM0.net]
>>30
まさにそれ。
イロイロ思考した末にそこに辿り着いた。
C++11以降なら初期化リストやstd::arrayが使えるんだけどね…

40 名前:デフォルトの名無しさん (ワッチョイ cf59-dxaC) mailto:sage [2017/04/06(木) 07:41:45.88 ID:aL+qmOiO0.net]
質問ですが、bool型の変数x値(true/false)をint型の1/0に変換する場合、
(int)xで正しいの?それとも演算子を使ってx!=falseとか!!xとすべき?
あるいは
 int y; if(x) { y = 1; } else { y = 0; }
式にやらなきゃダメ?

そもそもC++においても「!」、「!=」、「==」(オーバーロードされていないやつ)はintを返すんやろうか…



41 名前:デフォルトの名無しさん (ワッチョイ be14-4Usw) mailto:sage [2017/04/06(木) 07:49:27.05 ID:XYhavOUb0.net]
x?1:0

42 名前:デフォルトの名無しさん (ワッチョイ f3b4-GJ90) mailto:sage [2017/04/06(木) 08:13:07.80 ID:WJuxfIBi0.net]
N4660の
7.6p6
8.3.1p9
8.10p1
あたりを読んでから質問するという発送は無いものか

43 名前:デフォルトの名無しさん (ワッチョイ 7f93-+TA9) [2017/04/06(木) 08:18:19.01 ID:3pIc1pJU0.net]
>>40
std::cout << typeid(!0).name();
こんくらいやってみた?

44 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/06(木) 08:36:31.85 ID:8pWbCGLcr.net]
一般人はtypeidを知らない可能性があるが
auto x = (0 == 0);
と書いてxの上にマウスカーソルを持って行く知能は欲しいところ

45 名前:デフォルトの名無しさん (ワッチョイ 7f93-+TA9) [2017/04/06(木) 08:49:41.77 ID:3pIc1pJU0.net]
一般人てコンパイラって何?な人?

46 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/06(木) 10:25:11.03 ID:zY+rYc0kr.net]
企業に勤めていて日常的にC++言語を使うような人、かな

47 名前:デフォルトの名無しさん (ワッチョイ 7f93-+TA9) [2017/04/06(木) 11:12:46.55 ID:3pIc1pJU0.net]
日常的にC++使っててtypeid知らないなんて死刑だろ

48 名前:デフォルトの名無しさん (スッップ Sd92-dvjh) mailto:sage [2017/04/06(木) 11:30:17.09 ID:b6mS5n8zd.net]
知っていても使わないなあ
試しに実験したことはあるかも

49 名前:デフォルトの名無しさん (スッップ Sd92-dvjh) mailto:sage [2017/04/06(木) 11:30:45.11 ID:b6mS5n8zd.net]
C++たまにしか使いません

50 名前:デフォルトの名無しさん (ワッチョイ fb4a-TXVw) mailto:sage [2017/04/06(木) 18:35:51.13 ID:H/56SjdK0.net]
少し前からDXライブラリの勉強を始めました

「ポンクソフト」というサイトさんの「C/C++言語とDXライブラリでゲーム作成入門」というページを真似ながら勉強しています
そこの「6.オセロの作成」に先程着手したんですが、何度見返しても以下のエラーが出て実行できません

一つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行67
二つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行80

解決方を求めて「C3872」「0x200e」などと検索したんですが、解決方を見つけることは叶いませんでした
どなたか私に原因と解決方を教えて下さい



51 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-+G+c) mailto:sage [2017/04/06(木) 18:43:30.36 ID:0SmLVS9od.net]
>>50
全角文字と半角文字の違いに気を付けて。コンピュータは全角と半角を区別する。

52 名前:デフォルトの名無しさん (ワッチョイ f26b-D6lx) mailto:sage [2017/04/06(木) 18:43:47.28 ID:oAa8xYYx0.net]
そこのURLを貼ってくれると話はさらに早くなる

53 名前:デフォルトの名無しさん (ワッチョイ fb4a-TXVw) mailto:sage [2017/04/06(木) 18:53:48.85 ID:H/56SjdK0.net]
>>51
エラーの出た行を3回ほど確認しましたが全角文字は見当たりませんでした

>>52
「ttp://ponk.jp/cpp/dxlib/othello」です

54 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/06(木) 19:06:55.02 ID:zY+rYc0kr.net]
そりゃpriorityの後に変な文字が入ってるからな
U+200EはC++で使っていい文字に入っていない

55 名前:デフォルトの名無しさん (ワッチョイ f22a-UNHW) mailto:sage [2017/04/06(木) 19:17:42.97 ID:NIAe6HmI0.net]
確かに67行目と80行目の"priority"の右に見えない文字 (LRM) が入ってるね
なんでこんなもんが紛れてるのか謎だけどそれを消せばコンパイル通るんじゃない

56 名前:デフォルトの名無しさん (ワッチョイ fb4a-TXVw) mailto:sage [2017/04/06(木) 19:19:47.39 ID:H/56SjdK0.net]
>>54
今まで見るだけの確認作業してましたがpriorityの直後でdeleteキー押したら確かに謎の文字が消えました!

>>51-52>>54
質問に答えていただきありがとうございました

57 名前:デフォルトの名無しさん (ワッチョイ fb4a-TXVw) mailto:sage [2017/04/06(木) 19:23:16.61 ID:H/56SjdK0.net]
>>55
消したらコンパイル通りました

今までは「サイトのコピペ」→「解説読んで納得」→「各文に自分が分かるようにコメント付け」という方法で勉強してたので、
これを機にコピペはやめて全て自分で打ち込むことにします

ありがとうございました

58 名前:デフォルトの名無しさん (ワッチョイ cf7a-02AM) mailto:sage [2017/04/06(木) 20:18:57.75 ID:yrLcUnI00.net]
>>42
普通その数字が何を意味するのかすらわからねえよ

59 名前:デフォルトの名無しさん (ワッチョイ 52c3-7E04) mailto:sage [2017/04/06(木) 21:09:55.73 ID:i8ka60Xp0.net]
>>42
なんで贈り物送らないといけないのか

60 名前:デフォルトの名無しさん (ワッチョイ cfb5-H1JN) mailto:sage [2017/04/07(金) 00:12:27.63 ID:GKfKrOhh0.net]
>>57
コピペ後に理解というやり方から
理解した上で打ち込むって考え方がいいと思うよ

実務でも似たような処理をコピペした時に
別の変数参照するように変える必要があったのに
1ヶ所変え忘れて問題になった何て言う事例もありがち



61 名前:デフォルトの名無しさん (ワッチョイ d2ed-2ODd) mailto:sage [2017/04/07(金) 00:44:12.95 ID:T22AFNFv0.net]
勉強中は兎も角、実務でコピペコーディングしてバグ仕込むとか入念に拷問した後死刑でも仕方ないレベルだからな

62 名前:デフォルトの名無しさん (ワッチョイ cf7a-02AM) mailto:sage [2017/04/07(金) 01:17:29.90 ID:hMKnjdw+0.net]
そんなにコピペすることってあるか?

63 名前:デフォルトの名無しさん (ワッチョイ 0775-yu7M) [2017/04/07(金) 02:53:31.90 ID:k32kujyO0.net]
ないアルよ

64 名前:デフォルトの名無しさん (ワッチョイ fb79-xvm/) [2017/04/07(金) 03:15:46.83 ID:2Lzx/lCN0.net]
まあ、スニペットなんて言い方してても実態はコピペだからな。

65 名前:デフォルトの名無しさん (ワッチョイ 2213-D6lx) mailto:sage [2017/04/07(金) 12:08:05.92 ID:9gQAwyyc0.net]
プログラミングなんて同じことの繰り返しなんだから、コピペで済ませたほうがいいよ

66 名前:デフォルトの名無しさん (スップ Sdb2-C2yt) [2017/04/07(金) 12:42:46.10 ID:ykM1heJrd.net]
コード書いてていうほどコピペしなくね

67 名前:デフォルトの名無しさん (ワッチョイ 138f-+TA9) [2017/04/07(金) 14:14:16.56 ID:FkJcTuLk0.net]
コピペしなきゃいけない自分が情けなくなるね
同じことを二度は言わないスマートさが足りないんだって

68 名前:デフォルトの名無しさん (JP 0H2e-TKAZ) [2017/04/07(金) 15:08:17.29 ID:4pSi19lZH.net]
static int a[]; // prototype
static int a[] = {1,2,3,4};
int getitem(int n) {
return a[n];
}

このコード、
gcc -Wall -c -o hoge.o hoge.c
だったら何のエラーも警告も出ないけど、
g++ -Wall -c -o hoge.o hoge.c
だとaのサイズがわからん、とエラーになるんですが、
c++だとどう書けばいいんですか?

69 名前:デフォルトの名無しさん (ワッチョイ 138f-+TA9) [2017/04/07(金) 17:44:51.15 ID:FkJcTuLk0.net]
namespace
{
extern int a[]; // prototype
int a[] = {1,2,3,4};
}

int getitem(int n) {
return a[n];
}

70 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/08(土) 12:17:44.66 ID:TFmwEDa6r.net]
extern int a[]; はprototypeじゃないけどな



71 名前:デフォルトの名無しさん (ワッチョイ cf59-dxaC) mailto:sage [2017/04/08(土) 13:44:56.17 ID:L4KgTOQ90.net]
未だにexternの役割がよくわかんね;
付けなくても宣言できて勝手に外部リンケージになるし…
K&R本はどっか行った;

72 名前:デフォルトの名無しさん (ワッチョイ 138f-+TA9) [2017/04/08(土) 16:54:00.75 ID:LBU0hU+r0.net]
実体を定義するのかしないのか曖昧なところをはっきりさせたり
デフォで内部結合なものを強制的に外部結合させたり

無名namespaceは逆で強制的に外部結合なものに妨害工作する

73 名前:デフォルトの名無しさん (アウアウイー Sa97-lIlP) mailto:sage [2017/04/08(土) 17:25:09.91 ID:8P1QJwbCa.net]
>>69の方がC++としてモダンなのはわかるが、>>68がC++だけエラーになる理由がわからん。
gcc以外のコンパイラでもだめなんだろうか?

74 名前:デフォルトの名無しさん (ワッチョイ fb56-Hufg) [2017/04/08(土) 17:34:57.89 ID:8rt7+cSn0.net]
//static int a[]; // prototype
static int a[] = {1,2,3,4};

これでOK

75 名前:デフォルトの名無しさん (アウアウイー Sa97-lIlP) mailto:sage [2017/04/08(土) 17:54:16.17 ID:8P1QJwbCa.net]
↓みたいに、相互参照するstaticなデータを初期化するときはどうするのよ?
こういうのは、CとC++で互換性あるコードは書けんのかね?
#include <stdio.h>

st

76 名前:ruct A {
char *s;
struct A *p;
};

static struct A a[];
static struct A b[] = {{"1st in b[]", a}, {"2nd in b[]", a+1}};
static struct A a[] = {{"1st in a[]", b}, {"2nd in a[]", b+1}};

int main(){
printf("%s, %s\n", a[0].s, a[0].p->s);
printf("%s, %s\n", b[1].s, b[1].p->s);
return 0;
}
[]
[ここ壊れてます]

77 名前:デフォルトの名無しさん (ワッチョイ 36a3-D6lx) mailto:sage [2017/04/08(土) 18:22:48.95 ID:lscI+aDp0.net]
前方宣言の方のstaticを削りゃいいんじゃね?

78 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-+G+c) mailto:sage [2017/04/08(土) 18:29:35.52 ID:QtLPEhOXd.net]
static変数を別の翻訳単位から参照するのはおかしいんじゃね? 俺だったらexternにするぞ。

79 名前:デフォルトの名無しさん (ワッチョイ 72cc-n0J+) mailto:sage [2017/04/08(土) 20:50:02.31 ID:N0c155CY0.net]
K&RならC勉強していた女子社員にやったわ
姉貴が蛍光ペンで目茶苦茶にしてくれたからもう要らなかったんけどねw

80 名前: ◆QZaw55cn4c (ワッチョイ beff-rt0y) mailto:sage [2017/04/08(土) 21:28:14.31 ID:gcfXcmks0.net]
>>71
lib や *.o を単独で配布して,そのヘッダを書くとき(lib/o の中に静的変数がある)ときは,extern はないと困るだろうな,とは思う
extern 不要論を連呼するキチガイがいるらしいから,注意したほうがいい



81 名前:デフォルトの名無しさん (ワッチョイ be14-4Usw) mailto:sage [2017/04/08(土) 21:34:09.29 ID:ATd5Gv2i0.net]
でも実際extern からアクセスしろってライブラリは見たこと無い
普通関数じゃね?

82 名前:デフォルトの名無しさん (ワッチョイ 72cd-8Vmj) [2017/04/08(土) 21:38:17.52 ID:J+fRzcYw0.net]
クソライブラリを使うときにexternないと困るな

83 名前: ◆QZaw55cn4c (ワッチョイ beff-rt0y) mailto:sage [2017/04/08(土) 21:39:43.39 ID:gcfXcmks0.net]
>>80
例えば <cstdio> の FILE *stdout とか

外部のライブラリの中の静的変数へのプロトタイプとして
FILE *stdout;
て書くと多分そのモジュールに stdout が確保されてしまうんじゃないかな?
関数は
int f();
だけで実体がないのだったらプロトタイプだとわかるけれども
変数は実体を伴うのか参照なのかを区別できない気がする

関数だけ提供するライブラリが存在するのは理解できる

84 名前:デフォルトの名無しさん (ワッチョイ 138f-+TA9) [2017/04/08(土) 21:56:34.32 ID:LBU0hU+r0.net]
>>75
つ__cplusplus

85 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/08(土) 23:26:49.13 ID:TFmwEDa6r.net]
externの必要性をとうとう理解してしまったQ
それに対し相変わらずコミュ障のもう一人のクソコテ

86 名前:デフォルトの名無しさん (アウアウイー Sa97-lIlP) mailto:sage [2017/04/08(土) 23:36:29.56 ID:8P1QJwbCa.net]
>>83
#ifdef __cplusplus
#define _static
#define _extstatic extern
namespace {
#else
#define _static static
#define _extstatic static
#endif

_extstatic struct A a[];
_static struct A b[] = {{"1st in b[]", a}, {"2nd in b[]", a+1}};
_static struct A a[] = {{"1st in a[]", b}, {"2nd in a[]", b+1}};

#ifdef __cplusplus
}
#endif

まぁ、確かにこんだけ書けばCでもC++でも無警告でコンパイル通ったけど、
まぁ面倒ですこと(゚д゚)!

87 名前:デフォルトの名無しさん (ワッチョイ 7f8c-7E04) mailto:sage [2017/04/08(土) 23:39:18.99 ID:bfo0YVHI0.net]
>>85
わざわざc使わなくてもc++だけでよかでしょ?

88 名前:デフォルトの名無しさん (ワッチョイ cf7a-02AM) mailto:sage [2017/04/09(日) 00:00:11.10 ID:cP8aqgv30.net]
Cでも使いたい人には自分でラッパー作ってくれと言ってるわ

89 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/09(日) 00:52:09.49 ID:djBIOydUr.net]
>>85
>こんだけ書けばCでもC++でも無警告でコンパイル通ったけど
そんな文法違反な糞コードを「ボクのパソコンでは動いたもん」みたいに自慢されても…

90 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/09(日) 01:02:23.00 ID:djBIOydUr.net]
>>77
ひょっとして、もしかするとお前の頭では
「extern」=「外部リンケージ」なのか?



91 名前:片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c) mailto:sage [2017/04/09(日) 07:01:35.78 ID:qFsmFYyfd.net]
わっしょい、わっしょい

92 名前:片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c) mailto:sage [2017/04/09(日) 07:08:55.81 ID:qFsmFYyfd.net]
自分の理解できないことを、何でもコミュ症で片付けるやつ、嫌い。

93 名前:片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c) mailto:sage [2017/04/09(日) 07:13:22.07 ID:qFsmFYyfd.net]
言語障害って日本語があるのに、何で意味不明な略したりするのかな。臆病者だから?

94 名前: ◆QZaw55cn4c (ワッチョイ beff-rt0y) mailto:sage [2017/04/09(日) 07:31:21.97 ID:ArlDNXBP0.net]
>>84
ところが C には仮定義というものがあって,仮定義しておけば静的変数を共有できるんだよ
だから extern は要らない子!と主張できるんだ
ここは C++ だから,仮定義が出来ない前提で話しているだけだよ

君はまだまだ浅いね

95 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/09(日) 08:37:34.70 ID:djBIOydUr.net]
>>93
ん?extern要らない説の根拠は(翻訳単位に閉じた)仮定義じゃなくて
リンカが頑張ることだったと記憶していたのだが
ひょっとしてもしかすると、アフォ?

96 名前:デフォルトの名無しさん (ワッチョイ 130e-+TA9) [2017/04/09(日) 09:10:41.09 ID:A2LIIX7y0.net]
仮定義はリンカが頑張って実現してるんだが
リンカのマップ情報とか見たことないの?

97 名前:デフォルトの名無しさん (オッペケ Sr57-GJ90) mailto:sage [2017/04/09(日) 09:37:03.20 ID:djBIOydUr.net]
なるほど
仮定義というものが何なのか理解していないのでこういうとんちんかんな発言になるのだな

98 名前:デフォルトの名無しさん (ワッチョイ 130e-+TA9) [2017/04/09(日) 10:11:41.88 ID:A2LIIX7y0.net]
それはこっちの台詞だyo

99 名前:デフォルトの名無しさん (ワッチョイ cf59-dxaC) mailto:sage [2017/04/09(日) 10:30:05.69 ID:elB46Etj0.net]
仮定義ってなんだっけ
extern int a; が複数の翻訳単位にあったら勝手にaの実体が1個できるというやつだっけ;
C++には無いの?(驚愕

100 名前: ◆QZaw55cn4c (ワッチョイ bf35-D1KF) mailto:sage [2017/04/09(日) 10:53:03.36 ID:Cfl4+wb20.net]
>>98
仮定義はリンカにおんぶにだっこしてもらう仕様だよ
extern を書かなくてもいい、というものだ
実体を持たない普通の外部変数と同じように
int evil_global;
とか書くだけでいい、ヘッダに extern int evil_global; と書く必要がなくなる(宣言部分での初期化はできないことに注意)

いやまあ、ちょっと追いきれていないところがあって、まだ俺も浅いのはみとめるが、とりあえず C++ にはないので、みなかったことにしている
議論が続きそうだが俺は参加しないよ








[ 続きを読む ] / [ 携帯版 ]

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

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