次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part130 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ f37a-QmV0)
2017/03/31(金) 08:47:49.65ID:UkLjKqcm08今日は何の日? (ワッチョイ bf7a-mgDT)
2017/04/01(土) 11:36:07.15ID:3A8hlFXh0 'f' 一文字で済む方法が2行上に示されているが…
func(2.f,(float)3.); // てへっ
出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
スペシャライゼーションか非テンプレート版でイグザクトマッチを
用意すればいいじゃないかな
func(2.,3.f); の時は float 優先なのか第一引数優先なのか
ロジックによっては元の設計を見直すべきかも
func(2.f,(float)3.); // てへっ
出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
スペシャライゼーションか非テンプレート版でイグザクトマッチを
用意すればいいじゃないかな
func(2.,3.f); の時は float 優先なのか第一引数優先なのか
ロジックによっては元の設計を見直すべきかも
9デフォルトの名無しさん (ワッチョイ ef14-oQcP)
2017/04/01(土) 11:43:51.07ID:JSPgwSTt0 >>8
>出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
そういうことです
static_castが可能な型同士に限定されるとは思いますが
>スペシャライゼーションか非テンプレート版でイグザクトマッチ
なるほど
なおfunc(2.,3.f)でもfloatですね
>出題の意図は func(2.f,3.); には手を加えないでということかにゃ?
そういうことです
static_castが可能な型同士に限定されるとは思いますが
>スペシャライゼーションか非テンプレート版でイグザクトマッチ
なるほど
なおfunc(2.,3.f)でもfloatですね
10デフォルトの名無しさん (ワッチョイ a356-8BmZ)
2017/04/01(土) 11:59:09.40ID:gOIdtRSt0 お前にテンプレートはまだはやい
11デフォルトの名無しさん (オッペケ Sr17-bOuD)
2017/04/01(土) 12:50:11.46ID:vvD/Bq3hr >スペシャライゼーションか
実用性皆無の糞コードしか想像出来ない
実用性皆無の糞コードしか想像出来ない
12デフォルトの名無しさん (ワッチョイ 3f3b-MCV6)
2017/04/01(土) 18:22:19.01ID:2DXDopa10 そもそも糞コードしか書けない人は何に対してもそうだろ
13デフォルトの名無しさん (ワッチョイ f37a-QmV0)
2017/04/01(土) 19:25:28.02ID:Pijd2zbh0 練習しなきゃ良いコードは書けるようにならない
14デフォルトの名無しさん (オッペケ Sr17-bOuD)
2017/04/01(土) 19:35:34.93ID:iUvRbgEsr そうだな
ただ練習したら必ず良いコードが書ける訳でもない
例えばPODをコピーするのにpragma pack1してmemcpyし始めるK&Rおじさんとか
ただ練習したら必ず良いコードが書ける訳でもない
例えばPODをコピーするのにpragma pack1してmemcpyし始めるK&Rおじさんとか
15デフォルトの名無しさん (ワッチョイ f359-HQfx)
2017/04/01(土) 19:38:01.60ID:p1TV7r2C0 個人的には関数引数の弱い型への変換という
C++言語規約上の暗黙的変換とは逆の流れを引き起こすような記述を
通常と同じような見かけの記述にすることは紛らわしいと希ガス
コード共通化を重視するなら>>7に従うか、あるいはfunc(2.f, 3.f)にするとかして呼び出し元で型を明示し、
そうではなくて弱い型への暗黙的変換を伴うバージョンのfunc()が他とは別のコードになる(スペシャライゼーション対象足りえる
なら、スペシャライゼーションの代わりにfuncを別名にするとかとにかく一目でわかるようにするのが実用的
かと、
C++言語規約上の暗黙的変換とは逆の流れを引き起こすような記述を
通常と同じような見かけの記述にすることは紛らわしいと希ガス
コード共通化を重視するなら>>7に従うか、あるいはfunc(2.f, 3.f)にするとかして呼び出し元で型を明示し、
そうではなくて弱い型への暗黙的変換を伴うバージョンのfunc()が他とは別のコードになる(スペシャライゼーション対象足りえる
なら、スペシャライゼーションの代わりにfuncを別名にするとかとにかく一目でわかるようにするのが実用的
かと、
16デフォルトの名無しさん (ワッチョイ f37a-QmV0)
2017/04/01(土) 21:58:54.19ID:Pijd2zbh0 >>14
練習とは既にあるより良い方法を真似することだから身につかないのは練習になっていないかやる気が無いかだ
練習とは既にあるより良い方法を真似することだから身につかないのは練習になっていないかやる気が無いかだ
17デフォルトの名無しさん (ワッチョイ 3f6f-MCV6)
2017/04/02(日) 07:31:30.34ID:NX0JHgEX0 誰か15を日本語訳してくれ
18デフォルトの名無しさん (オッペケ Sr17-bOuD)
2017/04/02(日) 07:42:27.51ID:0DgUIb4er >>17
・func(0.0f, 0.0)は一見精度落ちない様に見えるがfloatに落ちるのが嫌
・だからfnuc<float>の様な明示的な呼び出しにするか、fnuc_fの様な名前で工夫すべき
・template<> func<double,float>なんて特殊化する暇があったら
非テンプレートのfuncf作れ
・つまりfloat v;「v=0.0;」もコンパイラーの警告だけなのでNG
・もう変数名はシステムハンガリアンしか無いぜ
・func(0.0f, 0.0)は一見精度落ちない様に見えるがfloatに落ちるのが嫌
・だからfnuc<float>の様な明示的な呼び出しにするか、fnuc_fの様な名前で工夫すべき
・template<> func<double,float>なんて特殊化する暇があったら
非テンプレートのfuncf作れ
・つまりfloat v;「v=0.0;」もコンパイラーの警告だけなのでNG
・もう変数名はシステムハンガリアンしか無いぜ
19デフォルトの名無しさん (オッペケ Sr17-bOuD)
2017/04/02(日) 08:00:42.30ID:0DgUIb4er 型変換に於ける定数のルールはC++11で見直されたので
「v=0.0;」は例が良くなかったな。まあいいか
「v=0.0;」は例が良くなかったな。まあいいか
20デフォルトの名無しさん (ワッチョイ f359-HQfx)
2017/04/02(日) 08:01:44.33ID:M04XElTC021デフォルトの名無しさん (ワッチョイ bf6b-agmj)
2017/04/02(日) 11:47:36.98ID:XLcHLDuG0 計算がメインの、建築用CADとか、航空流体力学のちょっとしたソフトとかだと、過剰ではないかもしれない
doubleとfloatとでの四つの組み合わせがちょくちょく登場する計算、
funcのfloatとdoubleの組み合わせで厳密に誤差計算しているような気がする
もしもそうだとすると単精度の誤差すらも気にするようなヤバいシステムがコードの背後に見える
……トカマク式核融合炉の制御ソフトの一部かもな
doubleとfloatとでの四つの組み合わせがちょくちょく登場する計算、
funcのfloatとdoubleの組み合わせで厳密に誤差計算しているような気がする
もしもそうだとすると単精度の誤差すらも気にするようなヤバいシステムがコードの背後に見える
……トカマク式核融合炉の制御ソフトの一部かもな
22デフォルトの名無しさん (スッップ Sddf-M0et)
2017/04/03(月) 21:44:49.44ID:muLND53td AD変換器なんてノイズ多い環境じゃ16bit以上のものなんて使えないぞ
電力関係なら12bit位だろ
いかにその分解能でしっかり制御するかが重要で
算数的な精度なんてどーでもいいのさ
電力関係なら12bit位だろ
いかにその分解能でしっかり制御するかが重要で
算数的な精度なんてどーでもいいのさ
23デフォルトの名無しさん (ワッチョイ b310-MCV6)
2017/04/03(月) 21:49:37.61ID:iUZo1Vn10 最後の1行を除き同意
24デフォルトの名無しさん (スッップ Sddf-M0et)
2017/04/03(月) 22:07:16.82ID:muLND53td 偉い人向けに表示上だけは電卓に合わせないとうるさいって話かな
25デフォルトの名無しさん (ワッチョイ f37a-QmV0)
2017/04/03(月) 22:36:46.92ID:rMPFCCT20 電池とかのラインで使われてる計測器だと有効なのは小数点以下は3桁くらいまでかな
26デフォルトの名無しさん (ワッチョイ b310-MCV6)
2017/04/03(月) 22:41:35.95ID:iUZo1Vn10 最小目盛りの10分の1
27デフォルトの名無しさん (ワッチョイ ef14-oQcP)
2017/04/03(月) 22:48:03.77ID:teq5sGj/0 数学的なベクトルのクラスで
template<int N> vec{ double v[N];};
などとした場合、コンストラクタで各成分を指定したいようなときって
どうするのが筋ですかね?
それとも引数の数が変わるのがわかってるようなケースはテンプレートすべきではない?
template<int N> vec{ double v[N];};
などとした場合、コンストラクタで各成分を指定したいようなときって
どうするのが筋ですかね?
それとも引数の数が変わるのがわかってるようなケースはテンプレートすべきではない?
28デフォルトの名無しさん (オッペケ Sr17-bOuD)
2017/04/03(月) 22:59:42.22ID:/XngI6+6r こういういかにもな質問を見ると、
何処に落とし穴が有るのだろうと勘ぐってしまう
何処に落とし穴が有るのだろうと勘ぐってしまう
29デフォルトの名無しさん (ワッチョイ bf80-QHHb)
2017/04/03(月) 23:08:28.79ID:BzAHvGte030デフォルトの名無しさん (ワッチョイ ef14-oQcP)
2017/04/03(月) 23:15:39.73ID:teq5sGj/0 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);};
みたいな
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.93ID:xWKBtMgw0 可変長テンプレートじゃだめなの
32デフォルトの名無しさん (ワッチョイ ef14-oQcP)
2017/04/03(月) 23:38:46.07ID:teq5sGj/0 そんなのありましたね・・・
調べてみます
調べてみます
33デフォルトの名無しさん (ワッチョイ bfcc-hXdu)
2017/04/04(火) 02:27:46.41ID:cqsAbaT40 template<int... args>
34デフォルトの名無しさん (ワッチョイ 733c-kVPK)
2017/04/04(火) 12:47:55.32ID:CFV3B2Uw0 Nは要素数だからそれじゃダメやろ
35デフォルトの名無しさん (スッップ Sddf-mnw5)
2017/04/04(火) 13:09:36.94ID:6xG2515ud template <typename... T> は機能するけどこの場合ちょっとやだな
36デフォルトの名無しさん (ワッチョイ 3f91-MCV6)
2017/04/04(火) 15:20:53.13ID:SRqXkALx0 sizeof... の使いどころじゃね?
37デフォルトの名無しさん (オッペケ Sr17-bOuD)
2017/04/04(火) 17:42:54.88ID:Xbh3DIbfr 質問者がコンストラクターを使用したいと言っている以上
残念なコードになることは不可避
static_assertでも入れとくしかない
残念なコードになることは不可避
static_assertでも入れとくしかない
38デフォルトの名無しさん (オッペケ Sr17-bOuD)
2017/04/04(火) 20:17:58.88ID:Xbh3DIbfr ネタも投下されないようなので取り敢えず貼っとくか
http://ideone.com/MjE67k
http://ideone.com/MjE67k
39デフォルトの名無しさん (ワッチョイ bf80-QHHb)
2017/04/04(火) 20:55:09.83ID:vk9hQqDM040デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/06(木) 07:41:45.88ID:aL+qmOiO0 質問ですが、bool型の変数x値(true/false)をint型の1/0に変換する場合、
(int)xで正しいの?それとも演算子を使ってx!=falseとか!!xとすべき?
あるいは
int y; if(x) { y = 1; } else { y = 0; }
式にやらなきゃダメ?
そもそもC++においても「!」、「!=」、「==」(オーバーロードされていないやつ)はintを返すんやろうか…
(int)xで正しいの?それとも演算子を使ってx!=falseとか!!xとすべき?
あるいは
int y; if(x) { y = 1; } else { y = 0; }
式にやらなきゃダメ?
そもそもC++においても「!」、「!=」、「==」(オーバーロードされていないやつ)はintを返すんやろうか…
41デフォルトの名無しさん (ワッチョイ be14-4Usw)
2017/04/06(木) 07:49:27.05ID:XYhavOUb0 x?1:0
42デフォルトの名無しさん (ワッチョイ f3b4-GJ90)
2017/04/06(木) 08:13:07.80ID:WJuxfIBi0 N4660の
7.6p6
8.3.1p9
8.10p1
あたりを読んでから質問するという発送は無いものか
7.6p6
8.3.1p9
8.10p1
あたりを読んでから質問するという発送は無いものか
43デフォルトの名無しさん (ワッチョイ 7f93-+TA9)
2017/04/06(木) 08:18:19.01ID:3pIc1pJU044デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/06(木) 08:36:31.85ID:8pWbCGLcr 一般人はtypeidを知らない可能性があるが
auto x = (0 == 0);
と書いてxの上にマウスカーソルを持って行く知能は欲しいところ
auto x = (0 == 0);
と書いてxの上にマウスカーソルを持って行く知能は欲しいところ
45デフォルトの名無しさん (ワッチョイ 7f93-+TA9)
2017/04/06(木) 08:49:41.77ID:3pIc1pJU0 一般人てコンパイラって何?な人?
46デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/06(木) 10:25:11.03ID:zY+rYc0kr 企業に勤めていて日常的にC++言語を使うような人、かな
47デフォルトの名無しさん (ワッチョイ 7f93-+TA9)
2017/04/06(木) 11:12:46.55ID:3pIc1pJU0 日常的にC++使っててtypeid知らないなんて死刑だろ
48デフォルトの名無しさん (スッップ Sd92-dvjh)
2017/04/06(木) 11:30:17.09ID:b6mS5n8zd 知っていても使わないなあ
試しに実験したことはあるかも
試しに実験したことはあるかも
49デフォルトの名無しさん (スッップ Sd92-dvjh)
2017/04/06(木) 11:30:45.11ID:b6mS5n8zd C++たまにしか使いません
50デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
2017/04/06(木) 18:35:51.13ID:H/56SjdK0 少し前からDXライブラリの勉強を始めました
「ポンクソフト」というサイトさんの「C/C++言語とDXライブラリでゲーム作成入門」というページを真似ながら勉強しています
そこの「6.オセロの作成」に先程着手したんですが、何度見返しても以下のエラーが出て実行できません
一つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行67
二つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行80
解決方を求めて「C3872」「0x200e」などと検索したんですが、解決方を見つけることは叶いませんでした
どなたか私に原因と解決方を教えて下さい
「ポンクソフト」というサイトさんの「C/C++言語とDXライブラリでゲーム作成入門」というページを真似ながら勉強しています
そこの「6.オセロの作成」に先程着手したんですが、何度見返しても以下のエラーが出て実行できません
一つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行67
二つ目:コードC3872「'0x200e':この文字を識別子で使用することはできません」行80
解決方を求めて「C3872」「0x200e」などと検索したんですが、解決方を見つけることは叶いませんでした
どなたか私に原因と解決方を教えて下さい
51片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-+G+c)
2017/04/06(木) 18:43:30.36ID:0SmLVS9od >>50
全角文字と半角文字の違いに気を付けて。コンピュータは全角と半角を区別する。
全角文字と半角文字の違いに気を付けて。コンピュータは全角と半角を区別する。
52デフォルトの名無しさん (ワッチョイ f26b-D6lx)
2017/04/06(木) 18:43:47.28ID:oAa8xYYx0 そこのURLを貼ってくれると話はさらに早くなる
53デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
2017/04/06(木) 18:53:48.85ID:H/56SjdK054デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/06(木) 19:06:55.02ID:zY+rYc0kr そりゃpriorityの後に変な文字が入ってるからな
U+200EはC++で使っていい文字に入っていない
U+200EはC++で使っていい文字に入っていない
55デフォルトの名無しさん (ワッチョイ f22a-UNHW)
2017/04/06(木) 19:17:42.97ID:NIAe6HmI0 確かに67行目と80行目の"priority"の右に見えない文字 (LRM) が入ってるね
なんでこんなもんが紛れてるのか謎だけどそれを消せばコンパイル通るんじゃない
なんでこんなもんが紛れてるのか謎だけどそれを消せばコンパイル通るんじゃない
56デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
2017/04/06(木) 19:19:47.39ID:H/56SjdK057デフォルトの名無しさん (ワッチョイ fb4a-TXVw)
2017/04/06(木) 19:23:16.61ID:H/56SjdK0 >>55
消したらコンパイル通りました
今までは「サイトのコピペ」→「解説読んで納得」→「各文に自分が分かるようにコメント付け」という方法で勉強してたので、
これを機にコピペはやめて全て自分で打ち込むことにします
ありがとうございました
消したらコンパイル通りました
今までは「サイトのコピペ」→「解説読んで納得」→「各文に自分が分かるようにコメント付け」という方法で勉強してたので、
これを機にコピペはやめて全て自分で打ち込むことにします
ありがとうございました
58デフォルトの名無しさん (ワッチョイ cf7a-02AM)
2017/04/06(木) 20:18:57.75ID:yrLcUnI00 >>42
普通その数字が何を意味するのかすらわからねえよ
普通その数字が何を意味するのかすらわからねえよ
59デフォルトの名無しさん (ワッチョイ 52c3-7E04)
2017/04/06(木) 21:09:55.73ID:i8ka60Xp0 >>42
なんで贈り物送らないといけないのか
なんで贈り物送らないといけないのか
60デフォルトの名無しさん (ワッチョイ cfb5-H1JN)
2017/04/07(金) 00:12:27.63ID:GKfKrOhh0 >>57
コピペ後に理解というやり方から
理解した上で打ち込むって考え方がいいと思うよ
実務でも似たような処理をコピペした時に
別の変数参照するように変える必要があったのに
1ヶ所変え忘れて問題になった何て言う事例もありがち
コピペ後に理解というやり方から
理解した上で打ち込むって考え方がいいと思うよ
実務でも似たような処理をコピペした時に
別の変数参照するように変える必要があったのに
1ヶ所変え忘れて問題になった何て言う事例もありがち
61デフォルトの名無しさん (ワッチョイ d2ed-2ODd)
2017/04/07(金) 00:44:12.95ID:T22AFNFv0 勉強中は兎も角、実務でコピペコーディングしてバグ仕込むとか入念に拷問した後死刑でも仕方ないレベルだからな
62デフォルトの名無しさん (ワッチョイ cf7a-02AM)
2017/04/07(金) 01:17:29.90ID:hMKnjdw+0 そんなにコピペすることってあるか?
63デフォルトの名無しさん (ワッチョイ 0775-yu7M)
2017/04/07(金) 02:53:31.90ID:k32kujyO0 ないアルよ
64デフォルトの名無しさん (ワッチョイ fb79-xvm/)
2017/04/07(金) 03:15:46.83ID:2Lzx/lCN0 まあ、スニペットなんて言い方してても実態はコピペだからな。
65デフォルトの名無しさん (ワッチョイ 2213-D6lx)
2017/04/07(金) 12:08:05.92ID:9gQAwyyc0 プログラミングなんて同じことの繰り返しなんだから、コピペで済ませたほうがいいよ
66デフォルトの名無しさん (スップ Sdb2-C2yt)
2017/04/07(金) 12:42:46.10ID:ykM1heJrd コード書いてていうほどコピペしなくね
67デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/07(金) 14:14:16.56ID:FkJcTuLk0 コピペしなきゃいけない自分が情けなくなるね
同じことを二度は言わないスマートさが足りないんだって
同じことを二度は言わないスマートさが足りないんだって
68デフォルトの名無しさん (JP 0H2e-TKAZ)
2017/04/07(金) 15:08:17.29ID:4pSi19lZH 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++だとどう書けばいいんですか?
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.15ID:FkJcTuLk0 namespace
{
extern int a[]; // prototype
int a[] = {1,2,3,4};
}
int getitem(int n) {
return a[n];
}
{
extern int a[]; // prototype
int a[] = {1,2,3,4};
}
int getitem(int n) {
return a[n];
}
70デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/08(土) 12:17:44.66ID:TFmwEDa6r extern int a[]; はprototypeじゃないけどな
71デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/08(土) 13:44:56.17ID:L4KgTOQ90 未だにexternの役割がよくわかんね;
付けなくても宣言できて勝手に外部リンケージになるし…
K&R本はどっか行った;
付けなくても宣言できて勝手に外部リンケージになるし…
K&R本はどっか行った;
72デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/08(土) 16:54:00.75ID:LBU0hU+r0 実体を定義するのかしないのか曖昧なところをはっきりさせたり
デフォで内部結合なものを強制的に外部結合させたり
無名namespaceは逆で強制的に外部結合なものに妨害工作する
デフォで内部結合なものを強制的に外部結合させたり
無名namespaceは逆で強制的に外部結合なものに妨害工作する
73デフォルトの名無しさん (アウアウイー Sa97-lIlP)
2017/04/08(土) 17:25:09.91ID:8P1QJwbCa74デフォルトの名無しさん (ワッチョイ fb56-Hufg)
2017/04/08(土) 17:34:57.89ID:8rt7+cSn0 //static int a[]; // prototype
static int a[] = {1,2,3,4};
これでOK
static int a[] = {1,2,3,4};
これでOK
75デフォルトの名無しさん (アウアウイー Sa97-lIlP)
2017/04/08(土) 17:54:16.17ID:8P1QJwbCa ↓みたいに、相互参照するstaticなデータを初期化するときはどうするのよ?
こういうのは、CとC++で互換性あるコードは書けんのかね?
#include <stdio.h>
struct 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;
}
こういうのは、CとC++で互換性あるコードは書けんのかね?
#include <stdio.h>
struct 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;
}
76デフォルトの名無しさん (ワッチョイ 36a3-D6lx)
2017/04/08(土) 18:22:48.95ID:lscI+aDp0 前方宣言の方のstaticを削りゃいいんじゃね?
77片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-+G+c)
2017/04/08(土) 18:29:35.52ID:QtLPEhOXd static変数を別の翻訳単位から参照するのはおかしいんじゃね? 俺だったらexternにするぞ。
78デフォルトの名無しさん (ワッチョイ 72cc-n0J+)
2017/04/08(土) 20:50:02.31ID:N0c155CY0 K&RならC勉強していた女子社員にやったわ
姉貴が蛍光ペンで目茶苦茶にしてくれたからもう要らなかったんけどねw
姉貴が蛍光ペンで目茶苦茶にしてくれたからもう要らなかったんけどねw
>>71
lib や *.o を単独で配布して,そのヘッダを書くとき(lib/o の中に静的変数がある)ときは,extern はないと困るだろうな,とは思う
extern 不要論を連呼するキチガイがいるらしいから,注意したほうがいい
lib や *.o を単独で配布して,そのヘッダを書くとき(lib/o の中に静的変数がある)ときは,extern はないと困るだろうな,とは思う
extern 不要論を連呼するキチガイがいるらしいから,注意したほうがいい
80デフォルトの名無しさん (ワッチョイ be14-4Usw)
2017/04/08(土) 21:34:09.29ID:ATd5Gv2i0 でも実際extern からアクセスしろってライブラリは見たこと無い
普通関数じゃね?
普通関数じゃね?
81デフォルトの名無しさん (ワッチョイ 72cd-8Vmj)
2017/04/08(土) 21:38:17.52ID:J+fRzcYw0 クソライブラリを使うときにexternないと困るな
>>80
例えば <cstdio> の FILE *stdout とか
外部のライブラリの中の静的変数へのプロトタイプとして
FILE *stdout;
て書くと多分そのモジュールに stdout が確保されてしまうんじゃないかな?
関数は
int f();
だけで実体がないのだったらプロトタイプだとわかるけれども
変数は実体を伴うのか参照なのかを区別できない気がする
関数だけ提供するライブラリが存在するのは理解できる
例えば <cstdio> の FILE *stdout とか
外部のライブラリの中の静的変数へのプロトタイプとして
FILE *stdout;
て書くと多分そのモジュールに stdout が確保されてしまうんじゃないかな?
関数は
int f();
だけで実体がないのだったらプロトタイプだとわかるけれども
変数は実体を伴うのか参照なのかを区別できない気がする
関数だけ提供するライブラリが存在するのは理解できる
83デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/08(土) 21:56:34.32ID:LBU0hU+r0 >>75
つ__cplusplus
つ__cplusplus
84デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/08(土) 23:26:49.13ID:TFmwEDa6r externの必要性をとうとう理解してしまったQ
それに対し相変わらずコミュ障のもう一人のクソコテ
それに対し相変わらずコミュ障のもう一人のクソコテ
85デフォルトの名無しさん (アウアウイー Sa97-lIlP)
2017/04/08(土) 23:36:29.56ID:8P1QJwbCa >>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++でも無警告でコンパイル通ったけど、
まぁ面倒ですこと(゚д゚)!
#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++でも無警告でコンパイル通ったけど、
まぁ面倒ですこと(゚д゚)!
86デフォルトの名無しさん (ワッチョイ 7f8c-7E04)
2017/04/08(土) 23:39:18.99ID:bfo0YVHI0 >>85
わざわざc使わなくてもc++だけでよかでしょ?
わざわざc使わなくてもc++だけでよかでしょ?
87デフォルトの名無しさん (ワッチョイ cf7a-02AM)
2017/04/09(日) 00:00:11.10ID:cP8aqgv30 Cでも使いたい人には自分でラッパー作ってくれと言ってるわ
88デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 00:52:09.49ID:djBIOydUr89デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 01:02:23.00ID:djBIOydUr90片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c)
2017/04/09(日) 07:01:35.78ID:qFsmFYyfd わっしょい、わっしょい
91片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c)
2017/04/09(日) 07:08:55.81ID:qFsmFYyfd 自分の理解できないことを、何でもコミュ症で片付けるやつ、嫌い。
92片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd92-+G+c)
2017/04/09(日) 07:13:22.07ID:qFsmFYyfd 言語障害って日本語があるのに、何で意味不明な略したりするのかな。臆病者だから?
>>84
ところが C には仮定義というものがあって,仮定義しておけば静的変数を共有できるんだよ
だから extern は要らない子!と主張できるんだ
ここは C++ だから,仮定義が出来ない前提で話しているだけだよ
君はまだまだ浅いね
ところが C には仮定義というものがあって,仮定義しておけば静的変数を共有できるんだよ
だから extern は要らない子!と主張できるんだ
ここは C++ だから,仮定義が出来ない前提で話しているだけだよ
君はまだまだ浅いね
94デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 08:37:34.70ID:djBIOydUr95デフォルトの名無しさん (ワッチョイ 130e-+TA9)
2017/04/09(日) 09:10:41.09ID:A2LIIX7y0 仮定義はリンカが頑張って実現してるんだが
リンカのマップ情報とか見たことないの?
リンカのマップ情報とか見たことないの?
96デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 09:37:03.20ID:djBIOydUr なるほど
仮定義というものが何なのか理解していないのでこういうとんちんかんな発言になるのだな
仮定義というものが何なのか理解していないのでこういうとんちんかんな発言になるのだな
97デフォルトの名無しさん (ワッチョイ 130e-+TA9)
2017/04/09(日) 10:11:41.88ID:A2LIIX7y0 それはこっちの台詞だyo
98デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/09(日) 10:30:05.69ID:elB46Etj0 仮定義ってなんだっけ
extern int a; が複数の翻訳単位にあったら勝手にaの実体が1個できるというやつだっけ;
C++には無いの?(驚愕
extern int a; が複数の翻訳単位にあったら勝手にaの実体が1個できるというやつだっけ;
C++には無いの?(驚愕
>>98
仮定義はリンカにおんぶにだっこしてもらう仕様だよ
extern を書かなくてもいい、というものだ
実体を持たない普通の外部変数と同じように
int evil_global;
とか書くだけでいい、ヘッダに extern int evil_global; と書く必要がなくなる(宣言部分での初期化はできないことに注意)
いやまあ、ちょっと追いきれていないところがあって、まだ俺も浅いのはみとめるが、とりあえず C++ にはないので、みなかったことにしている
議論が続きそうだが俺は参加しないよ
仮定義はリンカにおんぶにだっこしてもらう仕様だよ
extern を書かなくてもいい、というものだ
実体を持たない普通の外部変数と同じように
int evil_global;
とか書くだけでいい、ヘッダに extern int evil_global; と書く必要がなくなる(宣言部分での初期化はできないことに注意)
いやまあ、ちょっと追いきれていないところがあって、まだ俺も浅いのはみとめるが、とりあえず C++ にはないので、みなかったことにしている
議論が続きそうだが俺は参加しないよ
>>94
仮定義は翻訳単位に閉じたとはいいきれないよ
仮定義は翻訳単位に閉じたとはいいきれないよ
101デフォルトの名無しさん (ワッチョイ bf35-D1KF)
2017/04/09(日) 11:04:16.30ID:Cfl4+wb20102デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 17:20:17.02ID:djBIOydUr >>98
>複数の翻訳単位にあったら勝手にaの実体が1個
それはQの妄想というやつで仮定義とは別
なおISO/ IEC 9899:2011では未定義動作になっているので仮に実体が一個になっても違反ではない
>複数の翻訳単位にあったら勝手にaの実体が1個
それはQの妄想というやつで仮定義とは別
なおISO/ IEC 9899:2011では未定義動作になっているので仮に実体が一個になっても違反ではない
103デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/09(日) 19:24:59.42ID:elB46Etj0 「仮定義」でググッたらあったわ;
ttp://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/devwin32/tentativedefinitions_xml.html
extern、static、初期化のいずれも無しの変数宣言っぽいものが(関数外のスコープで)複数個現れたとき、
C言語規格の方が高度なことをしてくれるのか
(C++では>>102によると未定義動作とのことなので同じ結果になるかどうかは規格外の仕様に拠る。
しかし上の説明だけでは関数宣言にexternを付ける意味がまだわかんね;
ttp://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/devwin32/tentativedefinitions_xml.html
extern、static、初期化のいずれも無しの変数宣言っぽいものが(関数外のスコープで)複数個現れたとき、
C言語規格の方が高度なことをしてくれるのか
(C++では>>102によると未定義動作とのことなので同じ結果になるかどうかは規格外の仕様に拠る。
しかし上の説明だけでは関数宣言にexternを付ける意味がまだわかんね;
104デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
2017/04/09(日) 19:56:25.40ID:9WDYOgp70105デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/09(日) 20:10:15.00ID:elB46Etj0 いやすまん「規格外の仕様に拠る」はやや誤解して書いてたわ;
下記の通り、未定義動作を含むコードは合法には成り得ず、実行できるかもしれないが、結果は保証されない。(つまり違反
ttp://www.c-lang.org/detail/undefined_behavior.html
>未定義の動作に対して,その状況を無視して予測不可能な結果を返してもよい。
>翻訳時又はプログラム実行時に,文書化された,環境に特有な方法で処理してもよい(診断メッセージの発行を伴っても伴わなくてもよい。)。
>さらに(診断メッセージを出力し)翻訳又は実行を中断してもよい。
ここで、診断メッセージ云々とか「文書化された,環境に特有な方法で処理」とは安全に実行を止めることを意味する
Windowsでアプリのクラッシュ時に出てくるダイアログとか、コアダンプとかがそれにあたる
下記の通り、未定義動作を含むコードは合法には成り得ず、実行できるかもしれないが、結果は保証されない。(つまり違反
ttp://www.c-lang.org/detail/undefined_behavior.html
>未定義の動作に対して,その状況を無視して予測不可能な結果を返してもよい。
>翻訳時又はプログラム実行時に,文書化された,環境に特有な方法で処理してもよい(診断メッセージの発行を伴っても伴わなくてもよい。)。
>さらに(診断メッセージを出力し)翻訳又は実行を中断してもよい。
ここで、診断メッセージ云々とか「文書化された,環境に特有な方法で処理」とは安全に実行を止めることを意味する
Windowsでアプリのクラッシュ時に出てくるダイアログとか、コアダンプとかがそれにあたる
106デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/09(日) 20:15:29.79ID:elB46Etj0 ていうか最初の疑問に戻るんですが、総合すると、CでもC++でも「extern」 = 「外部リンケージ」、でおkなのでは…
ただ外部リンケージの意味で省略可能だったり、
ANSI Cにおいては「仮定義」に関する仕様が追加されてるから話が複雑化したように見えているだけで、
ただ外部リンケージの意味で省略可能だったり、
ANSI Cにおいては「仮定義」に関する仕様が追加されてるから話が複雑化したように見えているだけで、
107デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 20:16:15.29ID:djBIOydUr >下記の通り、未定義動作を含むコードは合法には成り得ず
何というか、「下記」のどこを縦読みするとそうなるんだか
何というか、「下記」のどこを縦読みするとそうなるんだか
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ券】物価高対策の“おこめ券”全米販は1枚477円で販売へ 鈴木農水大臣「国民の皆様に活用いただきやすいよう工夫いただいた」★2 [ぐれ★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★5 [蚤の市★]
- 神田沙也加さん元恋人で元俳優の前山剛久 六本木のメンズラウンジ勤務を報告「真叶(まなと)です。よろしく」 [muffin★]
- 【麻雀】プロ雀士の岡田紗佳さんが勝訴、点数計算めぐる発言は「違法とは言えず」 大宮簡裁 [征夷大将軍★]
- ハリウッド実写版『ストリートファイター』初映像解禁 リュウ&春麗らのビジュアルも公開 [muffin★]
- 【老舗文具メーカー】「生成AIで制作していた」――サクラクレパス、“AI疑惑”ポスターの調査結果を報告 ★2 [ぐれ★]
- 名鉄の名古屋駅再開発に大幅な遅れ、人手不足と建設費高騰、バスセンター・ホテルの営業終了にも影響か [943688309]
- 【高市悲報】片山さつき「かじ取り間違えてデフレになったらどうすんの!😡」😲 [359965264]
- カツ丼できた!wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
- VTuber叩きが大流行してる理由、1枚の画像で解説される…!! [858219337]
- 参政党議員「クジラの肉を食べないのは流通や販路に問題があるからだよね?」 [592058334]
- __トランプ、G7に代わる「Core 5」構想、米 中 露 印 日をまとめる巨大枠組み、世界秩序の再編につながる可能性 [827565401]
