【初心者歓迎】C/C++室 Ver.105【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 06:54:38.08ID:6xUIrXDu
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/
2019/05/05(日) 22:37:15.85ID:RPhfdkos
>>32
有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な
2019/05/05(日) 22:39:39.67ID:RPhfdkos
途中だった。

有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な発言をしてきたかのような印象操作は卑怯だとは思わないか?
2019/05/05(日) 22:39:39.95ID:3EWrT4Pn
>>33
https://twitter.com/yumetodo/status/1020966071702966273
>言うまでもなく独習C++は時代遅れの化石で有害ゴミ行き。
使っていますが…
https://twitter.com/5chan_nel (5ch newer account)
2019/05/05(日) 22:41:08.48ID:3EWrT4Pn
>>34
https://twitter.com/yumetodo/status/1020966071702966273
>言うまでもなく独習C++は時代遅れの化石で有害ゴミ行き。

印象操作などではありえず、ずばり「有害ゴミ」指定されちゃってますが…
https://twitter.com/5chan_nel (5ch newer account)
2019/05/05(日) 22:42:08.10ID:RPhfdkos
>>36
twitterの方は見てなかった。失礼した。
2019/05/05(日) 23:27:07.88ID:DzyvOKLj
プログラミングの最初の一歩すらわからない状態から始めるのか
Pythonやjsやphpなんかである程度書ける状態から始めるのかで話が変わると思う
後者ならググりながら適当になんか書いてみればいいと思う
2019/05/05(日) 23:43:52.77ID:3EWrT4Pn
>>38
>ググりながら適当になんか書いてみれば
それは C/C++ に関していえば、ちょっと危険な気が… 逆に Python や ruby をやるのなら、それでもいいと思いますが…
2019/05/05(日) 23:57:02.81ID:TxpPZKKr
>>39
それに強く同意。
C++ には未定義の挙動が多すぎるので、
表層的な理解で使うのは大変に危険である。
2019/05/06(月) 01:21:26.82ID:oGUqqIoM
C++に関してググって出てくる情報って適当なの多いよなw
Qなんとかとか特にw
2019/05/06(月) 04:37:01.34ID:z7Cz8mZC
どうも最近は最新のC++の機能を使うべきだとしつつ
自分なりにとりあえず適当に書くのは危険とか言う意見が多いけど
人間もあくまで動物なので手を動かして書かなきゃ覚えないしCの時代から続く古臭い書き方は長年の積み重ねでセオリー確立してんだから
そういう学習方法を否定するのは違うと思うよ

クラス、ひいては最新の機能を正しく使う、なんて初心者がいきなり目指すようなことじゃない
2019/05/06(月) 06:08:09.39ID:Geq8Gq1G
>>42
手を動かして覚えることは誰も否定していないし、むしろそれは強く推奨したい。ただ、C/C++の場合は表面的な理解だけで動いたから良しとして進むのは危険で、基本的な部分は正しく理解しておくことは必要だと思う。
ある程度の基礎がある状態なら、新しい機能やライブラリの関数もググって得られる情報から正しい仕様を理解して習得できるが、基礎ができていない状態でそれは難しい。
初心者がとりあえず適当に切り貼りして動かそうというやり方をするなら、他の言語から入った方がいいと思う。ググって調べた断片的な情報だけでなく入門書等で基礎を押さえつつ、実際に書いて愚直に挙動を確認しながら理解をしていくのが良いと思う。
2019/05/06(月) 11:40:40.36ID:vu8V8zIe
>>42
>人間もあくまで動物なので手を動かして書かなきゃ覚えないし
プログラミングは特に、自分で書いて書いて書きまくって読んでというところは同意
となれば、ちょっと書く気になろうという心の動きを、分厚い教科書で潰したくない、という趣旨は理解
さて、困ったものです、そういうときに使える教科書があればいいのですが、C/C++ の教科書って高くて分厚いですからね…私もメイヤーズはまだ積読だし、いつ読む気になるかな?
2019/05/06(月) 13:27:09.96ID:MWPsBkkn
300ページ未満の入門書…
2019/05/06(月) 13:46:12.30ID:z7Cz8mZC
まぁ確かにサンプルコードの切り貼りとかは危ないだろうしネットの情報だけってのはね
でも独習みたいな古臭い(03以前)入門書なんて初心者にうってつけだと思うんだけど

・・・って、twitterでこき下ろしてる奴のアカウント名に見覚えあるわw
そいつ勘違いの激しい学生ちゃんだから言ってること真に受けない方がいい
2019/05/06(月) 16:16:47.15ID:yQTWUAYp
isocppで推薦されてる原則と実践の前の版がたまたま
近くの図書館にあったから読んでみたけど、意外と面白いな。
2019/05/06(月) 16:19:28.55ID:K/rO19sE
>>46 見つけられなかったので比較的に新しいやつの中から探して一例として出したけど、
そやつひとりだけが言ってるわけじゃないよ。 良いと評価している人も当然いるんだけど、
あくまで私の観測範囲で私が総合的に感じた漠然敵な印象の話なんで。
2019/05/06(月) 16:20:48.53ID:K/rO19sE
今の時点でそれなりに C/C++ をわかるようになっている人の思う「良い本」というのは
「昔に学んだ」という体験だからさ、今から学ぶという人の事情とはやっぱり時代が違うと思う。
自分が読んだ本を言えても、それを強く勧めるほどの自信はないな。

例えば私が最初に買った C++ 本は ARM なんで、これにはいわゆる STL さえ載ってないんだけど、
当時としては妥当な選択肢だったし、十分にわかりやすかった。
でももちろん、今の時代に ARM を勧めるなんて馬鹿馬鹿しくてあり得ないでしょ。

昔の C++ を身に着けてから徐々に知識を更新してきていると昔の C++ と今の C++ が
滑らかに繋がっているように錯覚してしまうけど、昔の C++ を学んでから今の C++ というのは
結構な飛躍があると思うんだよ。
今から学ぶなら C++11 程度は想定している本の方がいいんじゃないかな、と個人的には思う。
2019/05/12(日) 18:12:45.12ID:wqyHUvPG
>>49
> C++11 程度は想定している本の方がいいんじゃないかな

しかし、C++03 までのからくりをしらずして、C++11 のあれこれを理解できるかな?とも思うのです、ranged for の for(auto &item; vec) の & の意味とか…これはあんがい簡単にクリアできるのやもしれませんけど
2019/06/13(木) 17:42:42.66ID:KieG+j09
テンプレート特殊化を前方宣言したいんだけど、
コンパイルエラーが出て詰んでるんですけど、
どうやればいいですか?
例えば以下のようなことがしたいんですが。

template<class T>
struct A {};

template<>
struct A<int>;

template<>
struct A<float> {
A<int> f() { //エラー : 認識できない型A<int>が使われいます。
return A<int>{};
}
};

template<>
struct A<int> {
int value;
};
2019/06/13(木) 23:30:30.78ID:CsiJtfL2
A<float>::fを定義するにはA<int>の定義(classのサイズ)が必要
fの定義をA<int>のあとにすればできる
https://ideone.com/Vv0Psu
5351
垢版 |
2019/06/14(金) 00:54:44.79ID:rrlL2Eyk
>>52
おお!マジで出来たw
ありがとう
54デフォルトの名無しさん
垢版 |
2019/06/18(火) 08:26:42.73ID:YBHtdulC
入門書の入力された文字列が同じかどうかを判断するコードなのですが
https://ideone.com/vaASOS
14行目のif(str1[i]!=str2[i])break;がどういう意味なのかさっぱり理解できません
文字コードが同じじゃなければbreakッて意味ですか?
len+1してるのも意味がわからないです・・・
説明よろしくお願い致しますm(_ _)m
55デフォルトの名無しさん
垢版 |
2019/06/18(火) 09:08:30.02ID:Sq2beh5p
文字コードが同じじゃなければbreakということでいいんじゃない?
len+1しているのはヌル文字があるから
2019/06/18(火) 09:20:54.17ID:R6plNfEa
まず配列について勉強だね
デバッガのステップ実行で追っていくといいよ
57デフォルトの名無しさん
垢版 |
2019/06/18(火) 09:21:46.85ID:3nOE2mBA
プログラム板の精神病コテ 松本卓朗 さん殺害予告!
https://mevius.5ch.net/test/read.cgi/tech/1560808598/
2019/06/18(火) 11:28:13.79ID:uO3416eX
文字列が同じ = 1文字1文字全部同じ = 1文字でも違えば違う
strlenは文字数を返すけど最後の\0を含まない
最後の\0まで比較しないと入力した文字列と先頭部分が一致したら一致してしまうのでlen+1
2019/06/18(火) 11:38:40.31ID:YX5RP0uz
文字列長の短いほうを len としないと突破したところを参照してまうぞ

str1 = asd\0
str2 = asdf\0
で str2 の len+1 まで str1 を参照すると嘔吐
2019/06/18(火) 11:39:47.81ID:YX5RP0uz
まぁ 文字列長がちがったら いきなり不一致って脱出してもいいんだけどね
2019/06/18(火) 11:50:07.19ID:uzZY1452
https://ideone.com/JUWWBr
分かり易くなったゾ

変数を減らせばラク
lenで判定してるイマイチな書き方を排除すればもっとラク
要するに分かりにくく書いてるから分かりにくいだけだよ
2019/06/18(火) 12:00:25.27ID:YX5RP0uz
元々は入門書に書かれてたコードか
むむむ
2019/06/18(火) 12:36:36.95ID:uzZY1452
ループを再帰に直せば終了条件がもっと分かり易くなるゾ
再帰にして時系列の1段階ずつ見せればその1段階ごとにどういう判断してるか分かり易いでしょ

bool scr(char* p, char* q){//string compare recursive
if( *p == '\0' || *q == '\0' ){
if( *p == *q ){
return true;
}
return false;
}
if( *p != *q ){
return false;
}
return scr(p+1, q+1);
}

元のヤツは文字コードと文字列の長さがこんがらがってぐちゃぐちゃになってるから分かりにくいんだなコレ
同じ文字列かどうかを、「文字コードが同じか」と「文字列の長さはどうか」、この二つで判断してるでしょ
判定するのに全く別の二つのものを取り扱ってるから分かりにくいんだよ

forのカウンタのiの取り扱いも分かりにくい
文字列長さの境界の+1の有無も分かりにくい

文字コードが同じじゃなければbreakしてlenで判定、すんごく分かりにくいでしょ
何せ「文字コードが同じじゃなければbreak」、その通りなんだけど「意味が理解できない」と来てる、意味が分かってるのに「分からん」と言ってるワケだ
結局はbreakしてるはiのカウントを止めるためと、lenと比較するためにforのスコープ超えた場所でiの値を参照するため

これ入門書の前段階までにfor文の外側でiの値を参照してる例がないと詰まる箇所だよ
for文の外側でiの値を使う、この意味が分からんと「文字コードが同じじゃなければbreak」まで分かってても全体が分からないようになってる
2019/06/18(火) 12:55:58.74ID:GYXVYwQo
ポインタを知らないであろう初学者にポインタ演算を使って分かりやすいとする鬼畜の所業
2019/06/18(火) 16:53:31.85ID:eB4Ftz1Y
>>57~63回答ありがとうございます
説明下手でスイマセン。このコードが書いてある前のページに文字列の比較は出来ないため
str1==str2と書いて判定は出来ないと書いてあったのに
14行目でstr1[i]!=str2[2]で判定してるのがよくわからないです
strlenは\0返さないのですね。そこはスッキリしました。ありがとうございます
2019/06/18(火) 18:05:58.84ID:U3/WUc9c
>>65
str1==str2はポインタ(それぞれの文字列が格納されている先頭アドレスの値)を比較してるだけ。
str1[i]!=str2[i]は、str1とstr2のi番目の文字を比較している。
2019/06/18(火) 18:50:13.29ID:ujoReLWG
>>66
文字列の中身を比較してるんじゃなくて先頭のアドレスを比較していて
str1[i]!=str2[i]は文字列の中身を比較してるってことなんですね
もやもやが解けました。ありがとうざいます
2019/06/18(火) 19:28:14.92ID:U/JJd+xv
>>59
馬鹿なの?
2019/06/18(火) 20:04:16.08ID:ADibu3ht
きゃー はずかしい><
70デフォルトの名無しさん
垢版 |
2019/06/18(火) 22:39:27.24ID:R4l3qwnJ
int a = b - 1;
if (a < 0){
 a = 0;
}

これのスマートな書き方を教えてください。
2019/06/18(火) 22:45:19.63ID:BC11WozD
ここで聞いていいのかわからないけど
組み込み系で上位割り込みでライト、下位割り込みでリードする場合割り込み禁止する必要ありますか?
2019/06/18(火) 23:11:51.18ID:gZnFDsgJ
>>70
それ以上にスマートな書き方なんてない
素直が一番

>>72
atomicにアクセスできないなら必要
readの途中でwriteが発生したらダメだし、
writeの途中でreadが発生してもダメなんだから、上位/下位は関係無い
2019/06/18(火) 23:13:26.53ID:48k2aFsK
>>70
bの型が不明な場合はスマートな書き方は特に無い
2019/06/18(火) 23:24:05.71ID:f34xyyaF
>>70
int a = b < 1 ? 0 : b - 1;
2019/06/18(火) 23:28:32.54ID:BC11WozD
>>72
何故ダメなのかが理解できてません。
書き忘れてましたが割り込みはタイマで周期的に発生させてます。
リード中にライトが発生しても下位割り込みは一周期遅れて上位割り込みのライト結果をリードするだけではないのですか?
2019/06/18(火) 23:45:23.52ID:gZnFDsgJ
>>75
writeの割り込みが発生するまではreadは進行するんじゃないの?
だから「readの途中で」なんだけど
「2つの割り込みは完全制御下にあり、read中にwriteは発生しない」なら大丈夫だよ、当然
2019/06/19(水) 00:02:23.61ID:/MswhT0Q
>>75
>リード中にライトが発生しても下位割り込みは一周期遅れて
ここがちょっと勘違いを感じる
割り込み処理が終わったら、割り込まれた処理の続きをするのよ
低レベルにDBのrollbackみたいな複雑な仕組みはないのよ
2019/06/19(水) 02:33:40.48ID:v2+76oWz
char型の動作がどうもわからない。
例えば 
char str[] = "abc"; として
cout << &str[0]; ----> abc
になるのはなんで? index 0番だから a がでると思ったんだけど...
初心者ですまん
2019/06/19(水) 03:26:09.45ID:0DgdOBcz
>>78
&str[0]に付いてる&はアドレスを取得する演算子だから、strの最初の文字「a」のアドレスを取得するという意味になり、
結果的には cout << str; と同じことになる。
2019/06/19(水) 05:18:40.21ID:xxgeB2IO
>>78
cout << &str[0] << '\n';
cout << str[0] << '\n';
この2行でソースと実行結果を見比べれば腑に落ちるんじゃないかな。
2019/06/19(水) 08:25:58.04ID:huda4IDC
>>76
>>77
下位割り込みのリードが一命令で完了するなら「リードの途中でライト」が発生しないので割り込み禁止しなくていいということですか?
例えばリードライトの対象が配列なら割り込み禁止要、変数単体なら不要
2019/06/19(水) 09:03:32.83ID:bPRT+MIA
>>81
アセンブラ確認してほんとに一命令なら良いけどそうじゃないなら結局危険じゃない?
Cで1行だからアセンブラでも一命令とはかぎらんよ
2019/06/19(水) 09:06:41.55ID:zjjAtQWn
ちなみに上位下位って割り込みの優先度のこと?
2019/06/19(水) 09:22:03.41ID:RukLP400
たとえ1命令でも安全かどうかはcpuによる
あいまいな質問にはあいまいな回答しか返らない
マニュアル読むのが正解
2019/06/19(水) 09:54:17.80ID:huda4IDC
>>82
なるほど。極端な例ですがcでword変数への代入処理一行だったとしてもアセンブラでは上位バイト、下位バイトを分けて代入してるかもしれませんもんね。

>>83
そうです。

>>84
アセンブラで一命令でもまずい場合ありますか?例えでもよいのでご教授頂けたら助かります。
86デフォルトの名無しさん
垢版 |
2019/06/19(水) 11:34:02.00ID:kjBiA8ae
vector<std::vector<char> > vec;
の二次元配列で、一行を削除するのはどうしたらよいのでしょうか。

int row = 1;
vec.erase(vec.begin() + row );
ではだめなんでしょうか。
87デフォルトの名無しさん
垢版 |
2019/06/19(水) 11:40:44.36ID:kjBiA8ae
すみません。これでちゃんと動きました。
お騒がせしました。
2019/06/19(水) 15:30:59.62ID:2x/CN7xY
>>70
int  a = max(b - 1, 0);
というような書き方を見たことが有る。
2019/06/19(水) 20:53:07.15ID:RukLP400
>>85
だから一般論で答えられないって言ってんの
使ってるcpuのマニュアル読め
書いてあるから
2019/06/19(水) 23:49:00.15ID:v2+76oWz
>>79
>>80
回答ありがとう。
そもそもaddress-of演算子でIndex 0番を指定してるのに アドレス値じゃなくて 文字が出てくることが混乱の元だった。

char型については>> 演算子がオーバーロードされててc-stringとして解釈される。
実際のアドレスを出力したい時は
cout << (void *)&str[1]; とする
って感じでいいのかな?
91デフォルトの名無しさん
垢版 |
2019/06/23(日) 01:18:33.15ID:X4lwQ0L+
学校の課題でバブルソートアルゴリズムを使った画像処理の課題で、VSの警告にfor-loopの定義が無効です:最初の条件はテストを満たしていません。ループボディは実行されませんと出てきます。これはどういった原因で出てくる警告なのか教えほしいです
2019/06/23(日) 01:30:30.52ID:xbroTRmV
ループの初期状態でループ終了条件を満たしている
2019/06/23(日) 01:31:24.99ID:xbroTRmV
単純化すればこういうこと
for (int i = 0; i < 0; i++)
2019/06/23(日) 06:24:41.17ID:TKCAljQF
てst
95デフォルトの名無しさん
垢版 |
2019/06/23(日) 11:28:18.87ID:6GXr3JQp
最近BS/CSが映らなくなった人はここを見ると良い
【B-CAS改造】Bカスカード2038化書き換えツール配布所 205
https://mevius.5ch.net/test/read.cgi/avi/1560914909/1-100
96デフォルトの名無しさん
垢版 |
2019/06/24(月) 06:51:52.73ID:lwUqObiG
FILE* file;
file=fopen("test.txt","w");
fclose(file);

これでソリューションのフォルダ内にtest.txtファイルが作られると読んでる入門書には書いてあるのですが
VisualStudioのフォルダ内、何処を探しても生成されてません;何処に有るのでしょうか?
2019/06/24(月) 09:37:54.94ID:LpgW8DGO
ドキュメントにプロジェクトを作らなかったか?
その中かと
2019/06/24(月) 10:06:16.55ID:N4e4wdnY
>>96
「ソリューションのフォルダ内」であって「VisualStudioのフォルダ内」じゃないぞ
2019/06/25(火) 07:24:49.37ID:jHEFOU5u
>>96
取りあえずコマンドプロンプト開いて
dir /s /b ¥test.txt
ってやってみ
2019/06/26(水) 01:39:16.88ID:6WTwK8fu
STLコンテナ「set」の特定要素を削除したいとき

set<int> s = {1,2,3};
for (auto itr = s.begin(); itr != s.end(); ++itr) {
cout << *itr << endl;
if (*itr == 2) s.erase(itr);
}

これの実行結果が
1
2
1
3
となるのですが、erase後に最初に戻っているように見えるのは偶然、つまり不定の動作ですか?
なお、正しいイタレータの使い方は以下のようになるのは承知してます

for (auto itr = s.begin(); itr != s.end(); ) {
cout << *itr << endl;
if (*itr == 2) itr = s.erase(itr);
else ++itr;
}
2019/06/26(水) 07:52:05.91ID:Re4GWmuT
>>100
erase で無効になったイテレータの使用により動作は未定義となります。
そのコードの場合は erase 直後にくるループ条件にある比較時点で。
2019/06/26(水) 09:02:19.59ID:16uFKMyS
いやいや
2019/06/26(水) 09:07:00.61ID:Re4GWmuT
あ、インクリメントのほうが先か。ごめんなさい。
2019/06/26(水) 14:50:08.20ID:7raG/MY1
未定義動作を起こしてるんで
プログラムがたまたまクラッシュもせずに最後まで動いたというレベルからの偶然
2019/06/26(水) 23:47:19.51ID:6WTwK8fu
やはり偶然なんですね
ありがとうございました
2019/06/28(金) 01:54:12.27ID:kYWVUvHS
constを外すのに使う const_cast<T&>(t) ですが、Tをいちいち書くのが面倒なので
そうだdecltypeを使えば楽できると思ったものの、remove_constも併用しないといけないみたいですね
参照だったらさらにremove_referenceも必要で、これじゃTがくっそ長くない限り有り難みが薄いですね
なんかもっといいやり方ないですかね?

const int i = 0;
const_cast<remove_const<decltype(i)>::type&>(i) = 1

const int& j = i;
const_cast<remove_const<remove_reference<decltype(j)>::type>::type&>(j) = 2;
2019/06/28(金) 01:56:07.93ID:5qyojIkB
>>106
テンプレート構造体内部の型。
2019/06/28(金) 02:11:51.51ID:4VImPalK
const_cast<decay_t<decltype(i)>&>(i)
で大体事足りる

まあ大抵は
using U=decay_t<...>;
とかしておくが
2019/06/28(金) 03:26:31.25ID:kYWVUvHS
>>108
有り難うございます。decayなんてあるんですね
ここ見るといろいろ機能あるようで
https://ja.cppreference.com/w/cpp/types/decay

type_traitsってあんまり詳しくないですけど、よくこんなの考えたなぁと感心します
仕組みを知らないと魔法使ってるみたいに見えますね
110デフォルトの名無しさん
垢版 |
2019/06/28(金) 18:20:06.99ID:SuTGhcfs
作りたいものにC++が必要なので1から学んでるプログラミング初心者です

biginteger という型の使い方・使い道がよくわからず悩んでいます。
2019/06/28(金) 21:15:56.74ID:+JSlLfql
C/C++の標準にそんな型ないよ
C#にBigIntegerあるみたいだね
使い方は普通の整数型と同じ
使い道は、大きな整数を扱いたい時

使い道がわからないものを無理に使う必要ないんじゃね?
2019/06/28(金) 21:19:18.85ID:U9hxi1vj
多倍長整数ならboostには入ってるからそのうち標準にも来るかもね
2019/06/28(金) 21:46:26.65ID:FS2l1RCX
>>110
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
私は biginteger が欲しかったので自分で書くことにしました
114110
垢版 |
2019/06/29(土) 19:00:51.29ID:gqtgvd1f
標準の型じゃなくて読み込んでるライブラリ?のクラスだったみたいです
そっちのマニュアルを見て見たら詳しく書いてありました…
いろいろ教えていただきありがとうございました。
2019/07/24(水) 09:52:41.24ID:0j2752sC
オブジェクト指向を使ってないアプリを c++ (コンパイラはg++6)で作るのは良でしょうか?それとも推奨されないでしょうか?

当方、意図せずにそうなってしまいました。
Cで書いてるつもりだったのですが、Cでは認められないと知らずにブロック頭以外の所での変数の宣言などを使っていて、
エラーにならなかったのは、Makefile が c++
用の流用で、ソースの拡張子が.cc だったからでした。

こんな c++ コンパイラの使い方は、許される事なのか、良くある事なのか気になりました。
2019/07/24(水) 10:00:57.54ID:zKJbgf3R
Cで書いてるつもりがC++になってた、は良くはないけど別に気にすることじゃないかと
Cであることが要件ならCに直せばいいし、C++でもokならそれでもいいし
要件満たすものが出来てんならひとまずokじゃない?
2019/07/24(水) 10:52:12.93ID:yY+SPHit
ブロック頭以外の所での変数の宣言はC言語で認められてるでしょ
118115
垢版 |
2019/07/24(水) 12:47:15.91ID:qoUieyoj
>>116 どうもです。
ひとまず動いてるのですが、気になりました。

例えば、「完全にcで書いていてcでコンパイル出来るものでも、c++ 必要なものでも、どちらにも拡張子は .cc に統一して、どちらにも常にコンパイラは c++ を使う」と言う態度ってどうでしょう?
c++ が c の上位互換ならこれで良いように思えます。
119115
垢版 |
2019/07/24(水) 12:48:43.68ID:qoUieyoj
>>117
そうなのですか?
私の見た情報が古かったのですかね。
2019/07/24(水) 13:31:50.28ID:zKJbgf3R
>>118
いや、プログラムってそもそも道具なんだから何で書かれてるかとかどうでもいいかと
複数人で開発していて他人もコードを見ることがある、技術情報として発信する、要件として言語の指定がある
とかいう縛りがあるならその縛りに応じるようにコードを書き直せば良い
個人的にはCでなければ困るというのでなければC++にするし、多少の困りくらいなら回避してC++にする
基本的にC++はCの上位互換
121115
垢版 |
2019/07/24(水) 20:52:46.78ID:qoUieyoj
私が知りたかったのは、ソースを書くのに何言語を選ぶべきか、でははないです。
知りたかったのは、例えば、
「ソースが c -> gcc 。ソースが c++ -> g++」
をしないで
「一切合切どちらも常に g++ 」でも良いのか?でした。
2019/07/24(水) 21:07:11.23ID:0jLIOgkf
>>121
ダメです。兄弟はもう袂を分かちました。
30年前の仕様しか使わないと心に決めているならお好きに…
123115
垢版 |
2019/07/24(水) 22:28:11.62ID:tRuObC3H
>>122
>>121
>ダメです。兄弟はもう袂を分かちました。
>30年前の仕様しか使わないと心に決めているならお好きに…

どうもです。そうなのですね。
「一切合切 gcc 」はダメでも「一切合切 g++ 」なら大丈夫かと思ってしまいました。
なにぶん始めたばかりでして、この辺りの常識がないのです。
2019/07/24(水) 23:59:42.77ID:7wBUx5ir
良い悪いじゃないけど
実質的にCのプログラムでしかないなら純粋なCのプログラムとして書き直して
Cコンパイラとの組み合わせで使っていた方が幸せだと思うよ
125115
垢版 |
2019/07/25(木) 13:26:54.50ID:A3AJFf0Q
その方がサイズも小さく速度も速いですかね。
トライしてみます。
2019/07/27(土) 08:53:41.05ID:zR8v2AWF
>>125
ブロック変数宣言の位置だけがブロックの冒頭ではないというだけなら、通常、
速度低下は全く無く、それをブロックの冒頭に書き直しても速くなることは
有りません。

また、コンストラクタ、デストラクタ、仮想関数、STL、コンテナなどを使わない限り
通常、C++がCより遅くなるということは有りません。
2019/07/28(日) 00:37:20.66ID:YxeZH1gr
Embedded C++みたいなこと言ってんな
2019/08/05(月) 22:51:14.97ID:DMRdHfR+
これからC++勉強しようと思うのですが、
開発環境は何を入れるのがおすすめですか?

Visual Studio Communityが無料で良いのでしょうか
他におすすめあれば御紹介願います

あと、C++勉強に当たっておすすめ定番の本あれば
ご教示ください
2019/08/05(月) 22:55:30.85ID:vqN4pUkV
今時ならUbuntu入れてatomなりvs codeなり入れりゃいいんじゃないかな
純粋にc++の勉強したいなら

VCは独自仕様が酷すぎるから言語学習には不向き
2019/08/05(月) 23:01:28.37ID:nblSLoEW
VCの独自仕様が気に入らんのならVS2019で対応したLLVMツールセットを使えばいい
初心者にIDEなしはモチベ維持が困難
2019/08/05(月) 23:18:05.24ID:f20npl5p
独自仕様ならGCC、未実装ならVCってかんじだがどちらも独自仕様はオプションで制御できる
まあWindows環境でやるならVisualStudio使わないのはマゾ

おすすめできる定番の本についてはどれも一長一短だし
テンプレートの利用くらいまで扱ってればとりあえずなんでもいいと思う
2019/08/05(月) 23:29:17.63ID:vqN4pUkV
vcのは独自と言っても、なぜかコンパイルが通らない
なぜかコンパイルが通る
なぜかリンクエラーが起こる
みたいなあまり明文化されていないのだから面倒
structとclassがリンカで別物ってのは酷すぎる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況