次スレを立てる時は本文の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:UkLjKqcm019デフォルトの名無しさん (オッペケ 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 >下記の通り、未定義動作を含むコードは合法には成り得ず
何というか、「下記」のどこを縦読みするとそうなるんだか
何というか、「下記」のどこを縦読みするとそうなるんだか
108デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
2017/04/09(日) 20:18:42.95ID:9WDYOgp70 >>106
追加じゃなく追認な
追加じゃなく追認な
109デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/09(日) 20:19:44.66ID:elB46Etj0110デフォルトの名無しさん (ワッチョイ cf59-dxaC)
2017/04/09(日) 20:34:41.52ID:elB46Etj0 >>108
互いに正しく適合する「宣言」と「定義」からなるプログラムにとって「仮定義」の概念は不要なのだから、
この場合何を追認したかというと既存のソースコードにおける「extern」の誤用を追認したとしか考えられないのでは…
つまり言語規格の既存の条項が「追認」されたわけではなく、あくまで条項が「追加」されたんである
(多分「追認」なんて定義もされていないだろうし、
互いに正しく適合する「宣言」と「定義」からなるプログラムにとって「仮定義」の概念は不要なのだから、
この場合何を追認したかというと既存のソースコードにおける「extern」の誤用を追認したとしか考えられないのでは…
つまり言語規格の既存の条項が「追認」されたわけではなく、あくまで条項が「追加」されたんである
(多分「追認」なんて定義もされていないだろうし、
111デフォルトの名無しさん (ワッチョイ 722b-Crua)
2017/04/09(日) 20:52:23.27ID:k8qrPdcw0 >>106
> 総合すると、CでもC++でも「extern」 = 「外部リンケージ」、でおkなのでは…
ちょっと端折り過ぎかな
n3797(C++14) 7.1.1 Storage class specifiers Example:
static int b; // b has internal linkage
extern int b; // b still has internal linkage
> 総合すると、CでもC++でも「extern」 = 「外部リンケージ」、でおkなのでは…
ちょっと端折り過ぎかな
n3797(C++14) 7.1.1 Storage class specifiers Example:
static int b; // b has internal linkage
extern int b; // b still has internal linkage
112デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
2017/04/09(日) 21:03:07.96ID:9WDYOgp70113デフォルトの名無しさん (ワッチョイ f6bc-+TA9)
2017/04/09(日) 21:04:18.72ID:9WDYOgp70 今となっては忸怩たる思いだが
俺は「追認された」張本人の1人であって
俺は「追認された」張本人の1人であって
114デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 21:32:38.73ID:djBIOydUr115デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 21:52:43.91ID:djBIOydUr116デフォルトの名無しさん (オッペケ Sr57-GJ90)
2017/04/09(日) 22:01:05.39ID:djBIOydUr >103
そのサイトのANSI Cの説明は多分ウソだぞ
同じ内容なはずのISO Cはそんな定義じゃないから
そのサイトのANSI Cの説明は多分ウソだぞ
同じ内容なはずのISO Cはそんな定義じゃないから
117デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/10(月) 14:43:46.26ID:DheowmrF0 おまえら規格票くらい買うか、せめてドラフトくらい用意しろや
External object definitions
Semantics
If the declaration of an identifier for an object has file scope and an initializer,
the declaration is an external definition for the identifier.
A declaration of an identifier for an object that has file scope without an initializer,
and without a storage-class specifier or with the storage-class specifier static,
constitutes a tentative definition. If a translation unit contains one or
more tentative definitions for an identifier, and the translation unit contains
no external definition for that identifier, then the behavior is exactly as
if the translation unit contains a file scope declaration of that identifier,
with the composite type as of the end of the translation unit, with an initializer equal to 0.
If the declaration of an identifier for an object is a tentative definition and
has internal linkage, the declared type shall not be an incomplete type.
今どき「ANSI C」とか言っちゃってるサイトは眉に唾してかかれ
External object definitions
Semantics
If the declaration of an identifier for an object has file scope and an initializer,
the declaration is an external definition for the identifier.
A declaration of an identifier for an object that has file scope without an initializer,
and without a storage-class specifier or with the storage-class specifier static,
constitutes a tentative definition. If a translation unit contains one or
more tentative definitions for an identifier, and the translation unit contains
no external definition for that identifier, then the behavior is exactly as
if the translation unit contains a file scope declaration of that identifier,
with the composite type as of the end of the translation unit, with an initializer equal to 0.
If the declaration of an identifier for an object is a tentative definition and
has internal linkage, the declared type shall not be an incomplete type.
今どき「ANSI C」とか言っちゃってるサイトは眉に唾してかかれ
118デフォルトの名無しさん (ワッチョイ 138f-+TA9)
2017/04/10(月) 14:44:01.60ID:DheowmrF0 EXAMPLE 1
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage extern
int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to previous
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to previous
int i4; // valid tentative definition, refers to previous
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to pre vious, whose linkage is external
extern int i2; // refers to pre vious, whose linkage is internal
extern int i3; // refers to pre vious, whose linkage is external
extern int i4; // refers to pre vious, whose linkage is external
extern int i5; // refers to pre vious, whose linkage is internal
EXAMPLE 2
If at the end of the translation unit containing
int i[];
the array i still has incomplete type, the implicit initializer causes it to have one element,
which is set to zero on program startup.
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage extern
int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to previous
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to previous
int i4; // valid tentative definition, refers to previous
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to pre vious, whose linkage is external
extern int i2; // refers to pre vious, whose linkage is internal
extern int i3; // refers to pre vious, whose linkage is external
extern int i4; // refers to pre vious, whose linkage is external
extern int i5; // refers to pre vious, whose linkage is internal
EXAMPLE 2
If at the end of the translation unit containing
int i[];
the array i still has incomplete type, the implicit initializer causes it to have one element,
which is set to zero on program startup.
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- 【山形】クマ駆除で誤射した猟友会隊員に町が1663万円請求へ...弾当たり男性大けが2023年 小国町 [nita★]
- VIP過疎すぎてつまらない😭
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 映画観て「どこがよかった」とか言えない
- 任天堂から認証コードが送られてこなくてログインできないんだが助けて
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
