C++相談室 part164

■ このスレッドは過去ログ倉庫に格納されています
2023/05/09(火) 11:50:52.06ID:EYc2I7oW0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part163
https://mevius.5ch.net/test/read.cgi/tech/1672409791/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/07/25(火) 12:01:03.86ID:RkQ0FrMx0
>>544
ごめん、まじめに教えて
これ何の意図?

これに意味がある具体的なコンパイラって何の何version?
2023/07/25(火) 12:08:13.03ID:YIf2r9Dz0
VC++6.0という大昔にデファクトスタンダードだったコンパイラだ
2023/07/25(火) 12:10:00.81ID:RkQ0FrMx0
>>546
ほんとにごめん、何の意味があるの?
2023/07/25(火) 12:12:51.37ID:YIf2r9Dz0
例外飛ばすと自動変数の破棄全部ふっ飛ばして戻ってくる酷いポンコツだったな
よくこんなの皆つかってたなというかコレしかなかったからな
2023/07/25(火) 12:13:49.52ID:akUn9hsS0
>>545
for の初期化節で変数宣言した場合にその外側のブロックがスコープになるコンパイラが存在し、
その対抗策としてこういうマクロを導入するという方法があったという話だろ。
2023/07/25(火) 12:14:32.19ID:YIf2r9Dz0
>>547
意味がわからないなら知らなくていい
当時を知らないなら理解しようとするだけ無駄というもの
2023/07/25(火) 12:24:31.68ID:RkQ0FrMx0
>>549
ありがとう、そしてありがとう

>>548
VC6がポンコツは同意。
あのころMSはディンカムウェアからstd c,c++ ライブラリを買って導入してたけど、そもそもc++の仕様準拠がメチャクチャだったと認識してます
もうVC使わなくなって長いので気にしなくなった
2023/07/25(火) 12:39:41.95ID:RkQ0FrMx0
『for内スコープ』の仕様にvc6は未対応だ、という事実を認識し
責任者がvc6を選択した案件で納品する

なら、その条件に従って書く(つまらないつまづきに繋がる書き方を避ける)のが他者に対して親切な技術者だと思うが

「そういう話はマ板で」か
2023/07/25(火) 12:56:14.20ID:akUn9hsS0
>>551
言語仕様が改訂されたんだよ。
C++98 が成立するちょっと前まで for 文の外側のブロックをスコープとするルールで正しかった。
ARM (The Annotated C++ Reference Manual) でも旧ルールで説明されている。

VC の出来が悪かったのは事実だと思うが
スコープルールに関しては互換性を是とするウィンドウズの価値観に合わせて
意図的に変更を遅らせたのだと思う。
2023/07/25(火) 14:00:38.34ID:uSv6E5akF
いと懐かしき
2023/07/25(火) 14:23:07.06ID:kV+p+cpE0
Visual C++ 6.0がリリースされたのが1998年じゃん
25年前じゃん。全然最近じゃないじゃん
遠い過去のことをつい最近って話すのはやめてほしいね
2023/07/25(火) 14:31:50.00ID:MikqYz6X0
>>555
だまれ小僧! 最近じゃよ
2023/07/25(火) 14:44:27.15ID:vokyohz+0
20年くらいまえのソースコードだったら
読む機会がないわけでもないからなぁ。
最近と言えるかどうかはともかくとして
経緯を知っておくに越したことはない
2023/07/25(火) 14:44:43.95ID:iTChcdyRa
25年前に30代だった人の多いスレ
2023/07/25(火) 14:54:13.97ID:218oSqZIM
現役世代なら25年前なら20代
2023/07/25(火) 14:55:29.80ID:MikqYz6X0
だまれ小僧ども!
2023/07/25(火) 16:16:06.83ID:uXZxGhnB0
おじいちゃんかな入力使ってそう
2023/07/25(火) 16:50:53.20ID:akUn9hsS0
リアルで トントカイモ をやったことある世代だわ……
2023/07/25(火) 20:33:32.87ID:RkQ0FrMx0
>>560
そこは
黙れ小僧、お前にSUNが救えるか!
じゃないの?

sunのccって何だっけ

でも個人的にはc++ユーザなら2014年以降の話をして欲しい
2023/07/25(火) 21:15:39.67ID:2EbZvvbp0
(昔話うぜー)
2023/07/25(火) 21:54:33.88ID:akUn9hsS0
>>563
古い規格に基づいたコードが消滅しているならそれでもいいけどさ。
2023/07/25(火) 22:52:02.65ID:ngER/Udx0
>>539
アドレスをとったらメモリエリアシング除けで最適化が抑止される
そう思っていた時期が僕にもありました先週
2023/07/25(火) 23:10:43.20ID:akUn9hsS0
アドレスとエイリアスは別枠なんだわ。
ポインタを数値として表示させると同じなのに == で比較すると偽値 (エイリアスではない) ということがあり得る。
pointer provenance の概念について調べてみると面白いかもね。
2023/07/26(水) 07:52:30.48ID:Ymbp6+unM
古いコードに執着しはじめるならもういい加減引退した方がいい
2023/07/26(水) 13:05:53.40ID:Z/zSkMd/0
>>568
誰かが書き換えなきゃ新しくはならんのだぞ。
2023/07/26(水) 14:04:23.46ID:nSMXTC2xM
まったく無いとは言わないが20年以上も昔のコードを弄る機会って実際どれくらいあるのか
あまりに不毛な主張だろう
2023/07/26(水) 14:22:14.82ID:x/JHBN7Z0
>>129
これが実現出来ればそういう心配事も無くなるんだがな
2023/07/26(水) 14:24:26.98ID:Z/zSkMd/0
ちなみに俺は少なくとも C++11 以降だろ (C++20 は時期尚早かもしれない) 派だし
趣味でプログラミングしているから実務現場はわからない。
でも確実に 20 年前くらいのコードは生きてるよ。
質問サイトで (古いコードの意味について尋ねる質問に対して) 歴史的な事情を説明したことは何度もあるから。
それが割合としてどんくらいかというと確かに少なくはあると思うが……。
2023/07/26(水) 17:59:22.96ID:EGwoK+U90
11は妥当かも。新しいauto は11から一部、で14で増えた訳よね
C++の仕事で、例えばauto使ったらダメって言われたら、工エエェェ(´д`)ェェエエ工 アンタ達何でCじゃなくてC++使ってるん?てならんか

(マ板的な話でごめんね)
仕事で、Cで未だに99がダメとかいう頭おかしい現場もあり、問い詰めると周辺ツール整備の予算の都合と言い訳される。そういうのを切る政治のために喫煙所活動したり、元社の海外部署の圧を使ったりする

まあでも、自衛隊の武器でもC++あったよ…ただ、武器にはちゃんと使用期限があって。5年とか。継続で使いたい場合には再整備事業が起きる。次の期限いっぱいまで修理可能であるように求められるのね

新規は14以上、保守は11以上、は妥当かもね
2023/07/26(水) 20:17:04.26ID:zBy57xkKM
動的に重たい機能(例外とか)を取り除いたembeded c++に再チャレンジしてほしいわ。

c with structure and template くらいの。
2023/07/26(水) 20:27:29.80ID:qeWM+gpE0
また禿に死ぬべきだって言われるだけだぞ
2023/07/26(水) 20:36:31.16ID:J6WrB9lP0
俺も趣味でしか使ってないけど、OSSのメンテやってる外人がCで書かれたコードのこと
クソの山と呼んでるのを見かけてみんなそう思ってると信じちゃった
2023/07/26(水) 20:45:03.48ID:T1zuvG990
「クソの山」って英語で何ていうの?
578デフォルトの名無しさん (ワッチョイ dff0-4APs)
垢版 |
2023/07/26(水) 20:47:33.68ID:e36yYIxR0
>>577
stacked shit
ソースはフルメタル・ジャケット
2023/07/26(水) 21:11:20.60ID:T1zuvG990
My intestine is a kind of FIFO.
580デフォルトの名無しさん (ワッチョイ 0720-rRCM)
垢版 |
2023/07/26(水) 21:14:18.52ID:4fMh7lxL0
bullshit
2023/07/26(水) 21:21:43.95ID:Z/zSkMd/0
>>576
現実がクソなんだよ。
それでもコードにしなきゃならないところ(低レイヤとか速度がいるところとか言語を跨ぐインターフェイスとか)でCが使われるから必然的にクソになる。
他の言語で書いたところでたぶんクソだぞ。
2023/07/26(水) 22:07:29.96ID:iOxX8HKcM
自分としては古いC++のコードの方がクソの山に見える
Cはまだまし
583デフォルトの名無しさん (ワッチョイ 6701-I2OL)
垢版 |
2023/07/26(水) 22:16:26.68ID:jPIzcFjy0
5chからの新しいお知らせは、他の板には出ないんだな
2023/07/27(木) 04:04:24.35ID:QeVlkja60
古い事自体は悪い訳ではないよね
質が低いけど影響範囲が大きくて修正されずに生き延びてる糞コードが悪いだけで
2023/07/27(木) 09:00:04.57ID:zEDi2bcm0
>>578
stackだけだと積むというだけで高さはわからないような
they stacked shit that highというのが原文
2023/07/27(木) 09:00:15.65ID:GoQM94Wca
>>582
ほんそれ
+1
2023/07/27(木) 09:39:10.27ID:4LOg1fU50
>>576
PythonとかJavaScriptだけの世界に生きてる人たちはC++はクソとか言ってそうな気がする
2023/07/27(木) 09:49:28.34ID:GoQM94Wca
実際C++は糞だと思う
Cの方がマシ
2023/07/27(木) 10:16:37.98ID:+SEMblDr0
VCでビルドしたC++ライブラリって
mingwでビルドしたオブジェクトファイルとリンクできないよね?
Cライブラリだとできるけども
2023/07/27(木) 10:25:00.16ID:uqLQvp0Q0
c++だとマングリングの規則がコンパイラごとに違うから無理なはず
2023/07/27(木) 10:37:09.86ID:+SEMblDr0
>>590
ありがとうございます
2023/07/27(木) 11:15:58.50ID:p+3LvAw40
COM の規約で運用するという方法もあるけど割とめんどい
2023/07/27(木) 12:11:09.64ID:+SEMblDr0
C++ライブラリとCライブラリの両方があったので
素直にCライブラリの方を使うことにします
594デフォルトの名無しさん (アウアウウー Sa2b-4APs)
垢版 |
2023/07/27(木) 14:18:54.70ID:SGfMLUd3a
>>585
その原文の訳が「まるでそびえ立つクソだ!」だからhighly stacked shitあたりだろうけど、あれはハートマン軍曹という異常者の語彙だから、多分pile of shitなんかの方が一般的かもね
2023/07/27(木) 21:44:21.80ID:alYzqiaL0
msvcからmingwに移行しようと思い、7zを展開したらディフェンダーちゃんが反応したので何かと思ったら
2023/07/27(木) 22:58:54.41ID:p+3LvAw40
実行ファイルを生成するものは割りとひっかかる
2023/07/28(金) 10:55:13.63ID:Zgvcm9f5a
7zを展開する前にファイルをExoplorerから右クリックで開いて
ディフェンダー無効にしてから展開するだけだろ
2023/07/28(金) 13:11:52.02ID:6yxKL9JFd
Defenderに無害認定されるまで戦い続けるマ?
2023/07/28(金) 13:58:16.94ID:AMhr/ZcZ0
どういう設定でコンパイルしたら有害認定されるかむしろ知りたいわ
2023/07/28(金) 20:53:22.55ID:nOGNEf1T0
oss物は使ってくれるなというms様のお達し?
2023/07/28(金) 21:03:20.13ID:iCEYdRhP0
wslでLinux飲み込んだのに?
2023/07/28(金) 21:12:30.62ID:yKS6EUDz0
そういや従量課金回線むけに通信量を制限するソフトを入れたら
通信を阻害するマルウェアとして検出されたことがある。
解釈によってはそりゃそうだと思うし、
セキュリティツールは疑陽性が増えてでも偽陰性を
減らす方向に調整するのはしょうがないんじゃねーの
603デフォルトの名無しさん (ワッチョイ 8f9c-JfPF)
垢版 |
2023/07/29(土) 01:25:10.10ID:eLz5SM1d0
マイクロソフトとしてはストアアプリとして配信して欲しいんだろうね
ZIPなどの野良アプリ配布は不遇の時代よ
2023/07/29(土) 01:41:06.31ID:mO2Fj1W+0
テレメスパイウェアage
2023/07/30(日) 09:49:16.34ID:azQXcNDBa
>>599
コンパイル後のexeがなぜか毎回消える問題は何かのバージョンで過去にあった
2023/07/30(日) 11:40:03.78ID:/52qmc2G0
>>605
恥ずかしがり屋め//
2023/07/30(日) 19:58:32.07ID:cURCmIiS0
Defender様はOS内蔵のC#で作ったexeも容赦なく消してくるぞ
名前が他と被ってたり変な場所に置いたりしてると割と起こる
2023/07/30(日) 23:32:06.49ID:Phugis3j0
初期化していないstd::optional <int>をdereferenceすると0として扱われます
boost::optional <int>だとAbortされるのですが
なぜstdではこのようになっているのかどなたかご存知ですか?
$ cat test.cpp
#include <optional>
#include <boost/optional.hpp>
#include <iostream>
using namespace std;
int main () {
std::optional <int> i0;
cout << *i0 << '\n';
if (i0) cout << "Initilized\n";
else cout << "Not initilized\n";
boost::optional <int> i1;
cout << *i1 << '\n';
return 0;
}

$ ./test
0
Not initilized
test: /usr/include/boost/optional/optional.hpp:1212: boost::optional<T>::reference_type boost::optional<T>::get() [with T = int; reference_type = int&]: Assertion `this->is_initialized()' failed.
Aborted (core dumped)
2023/07/30(日) 23:50:56.20ID:1/o7VgXA0
>>608
どちらも事前条件違反での未定義動作の結果。
「0として扱う」と定められているわけじゃない。
boost が assert で止めてくれているのは親切。
2023/07/30(日) 23:58:13.09ID:Phugis3j0
boostの方が親切ですよね
何でstdでなくしたんでしょ?
2023/07/31(月) 00:15:55.53ID:ulrQSEBD0
stdはパフォーマンスを気にしたんでしょうかね?
2023/07/31(月) 00:17:50.97ID:kuDsfsru0
未定義動作をどうしようとコンパイラの勝手
2023/07/31(月) 00:42:57.84ID:ulrQSEBD0
>>612
boostでは初期化済みかどうかを確認していたのを
stdでなぜ確認を外したのか?って問いになります
>>611に書いたようにパフォーマンスってこでしょうかね?
2023/07/31(月) 01:10:19.51ID:cE0Z6rmj0
>>613
std::optionalの仕様がboost::optionalを参考にしたのは確かだろうけど、
std::optionalの実装はboost::optionalの実装をもとにしたわけじゃないだろうから、
不要なチェックが無い状態でむしろ自然。
何か意図を持って「なくした」「外した」などという事実がおそらく無い。
仮に意図的だったとして、ここで誰かがその質問にyes/noを答えても本当かどうかはわからない。
どうしても気になるならライブラリ実装者に聞くべき。
2023/07/31(月) 02:06:40.22ID:ulrQSEBD0
仕様はboostが元になっているのは間違いないので
規格に入れるときになぜこれを変えたのか理由が分かればなと考えました
proposal追ってる人でご存知の方がいればなと思いましたが
自分でも読んでみます
2023/07/31(月) 03:26:45.40ID:cE0Z6rmj0
>>615
仕様はどちらも事前条件違反での未定義動作で、変わってない。
なので仕様について調べてもおそらく答えは出ない。
assertの有無は実装の範疇。
2023/08/02(水) 01:27:09.22ID:UwRg95UI0
プログラミングの面接を受けた。言語は何でもいいというので今使ってるC++で予め申請。
ロジックを問う問題なので言語で差はつかない、という話... だったが実際は文字列処理
の問題が多く、これはスクリプト系とかの方が有利じゃないか

C++にはなんで文字列のsplit系はないんだろ。どうしてます? <- あ、これが雑多な質問w
2023/08/02(水) 01:29:42.76ID:UwRg95UI0
ちなみに自分は以前Pythonを使っていた時期もJavaを使っていた時期もあるけど
今は頭が「C++脳」になっている気がして、とっさにそれらを使うとなると不安を感じたのだった
やはり常日頃から他の言語も回しておくべきだろうか
2023/08/02(水) 01:31:05.25ID:UwRg95UI0
マ系の話かもしれないですね、すみません
2023/08/02(水) 01:45:10.69ID:JKibevwe0
次の問題でグラフにプロットしろとか言われそうだなw
2023/08/02(水) 01:58:11.71ID:Vhf3uqZN0
>>617
普通は申告した技能に嘘がないことを確かめるのが
面接の主な目的であって
正解率に意味があるような試験ではないよ。
2023/08/02(水) 06:20:23.71ID:NkBPLpHI0
>>617
istringstream と getline を使えば、区切られた文字を順番に取り出せる。
空白文字区切りなら、getline の代わりに >> が使える。

https://maku77.github.io/cpp/string/split.html
623デフォルトの名無しさん (アウアウウー Sa1f-IPSQ)
垢版 |
2023/08/02(水) 09:31:21.06ID:4pI1Wfnva
>>617
C/C++でそれが出来て初めて「C/C++が使えます」って言えるんだ
2023/08/02(水) 09:36:40.40ID:y1hozJP20
1つの言語で覚えたあたらしい機能を実現するのに他の言語ではどう書く?って感じで比較しながら書くと記憶が精緻化しやすく忘れにくくなる
625デフォルトの名無しさん (アウアウウー Sa1f-IPSQ)
垢版 |
2023/08/02(水) 10:22:30.40ID:4pI1Wfnva
>>618
「C++脳」
良く言えるな
C++も不安だらけじゃないか
2023/08/02(水) 12:38:15.38ID:y1hozJP20
コーディングテストのはずがメインメソッド作ってって言われたときはこちらからお断り申し上げたことがある
2023/08/02(水) 12:43:22.62ID:y1hozJP20
チンチンシュッシュシュですわ
2023/08/03(木) 09:24:52.48ID:lr2Ednh70
>>625
あ、別にC++が得意という意味でなく、それ以外の言語を使うとき頭がすぐに切り替わらない、
というぐらいの話で

結局そのとき自分は文字をチェックして区切り文字の位置を調べてstring.substr()で切り出し
vector<string>に追加というベタな感じを。でも他の言語でsplit()を呼んで終わりなのと比べると
無駄に焦ったと思われ >>622はすっかり忘れていた
2023/08/03(木) 09:35:40.45ID:IPuBCl990
自分で作れよw
簡単だろ
2023/08/03(木) 09:36:19.80ID:HBD/4AdY0
>>628
C++20 以降なら std::views::split を使えるよ。
2023/08/03(木) 20:08:30.72ID:IJZbd6wk0
>>628
c++がマニアックなのはまぁわかる
他の言語に切り替わらないっていうのは鍛錬不足じゃあ無いのかね
c++で書いたものを見ながら別の言語に書き換えるっていう作業の時間が足りてないんじゃない?
632デフォルトの名無しさん (ワッチョイ 43a5-IPSQ)
垢版 |
2023/08/04(金) 21:09:58.67ID:5lu3SOws0
プリプロセッサディレクテブでマクロを組む方法はないでしょうか?
#ifndef XX
#define XX 1
#endif

define_default (XX, 1); <-こんな感じにマクロ化したい
2023/08/05(土) 01:51:28.51ID:L/LBNngA0
🤔…(こんな感じとは?)
2023/08/05(土) 02:15:04.78ID:L/LBNngA0
スマン言いたい事分かった

直接の回答は:わからん。
多分、君の実装アイデアでは無理。
C++というかCな気がするが、コンパイラの規格の中に翻訳作業のステージが確か7つ位定義されてて、その一つがプリプロセス。で無限ループしないようになってたような。


本当にやりたいであろう事(定数定義の記述に定形があって煩雑なのをシンプルに書きたい)なら、私なら別の方法でやる、けどそれは聞かれてないよね
2023/08/05(土) 09:38:26.20ID:wvUeqD5zd
定義をマクロ定義する事はできないよ
都度意味を変えてincludeで読み込ませるとか
2023/08/05(土) 10:20:09.70ID:9rqysa6s0
よく分からんがC++の範疇じゃなくてcamkeとかコンパイラオプションでやる事っぽく見える
637デフォルトの名無しさん (ワッチョイ 31a5-mBaV)
垢版 |
2023/08/05(土) 22:30:35.02ID:a9xEz2i50
コンパイルオプションでdefineを省略されていればデフォルト値を使うようなコードの構造にしたいのですが、
なるたけmakeやコンパイル環境に依存しないことが希望です。
プリプロセッサを使うと煩雑で読みづらくなってしまうので、カプセル化したいです。
C++ならもう少し洗練された方法がないものかと思うところですが、
定数定義の記述定形があって煩雑なのをシンプルに書く方法があれば教えて下さい
2023/08/05(土) 23:17:58.10ID:NzC+Rt9F0
現状のサンプルコードを書いた方が答えやすい
639デフォルトの名無しさん (ワッチョイ 31a5-mBaV)
垢版 |
2023/08/05(土) 23:34:29.13ID:a9xEz2i50
#ifndef XX1
#define XX1 1
#endif

#ifndef XX2
#define XX2 0
#endif
:
2023/08/06(日) 00:25:50.71ID:Mgx3ApDu0
C++ はなるべくマクロを使わずに済む方向に進化してはいるが
マクロを使うのであればそれより良い方法はないと思うよ。
2023/08/06(日) 01:54:30.05ID:7ys7hHtb0
俺ならテンプレート引数のデフォルト引数を使うけど、
既存のコードを何とかしたいって事かい?
2023/08/06(日) 04:00:21.32ID:VdM0xi000
>>637
君の求めてるエレガントな方法は、知らない。スマンね

私がもし 今すぐ 仕事でやる必要があるなら
XX1 1
XX2 0
というテキストファイルから、君の例示したソースファイルを生成する「ツール」を勝手に作って使い、手で書いたフリをする

数百あるならツールに意味があるし
もし聞かれたらツールで生成したと答えるが、正直どうでもいい
メンテフェーズでの1件2件の追加修正は手で書きゃいい
643デフォルトの名無しさん (ワッチョイ 7510-7C81)
垢版 |
2023/08/06(日) 04:31:49.92ID:VdM0xi000
ここって#とかの文字書けるのかな...


#!/bin/bash

put_data_list()
{
cat <<EOF
XX1 1
XX2 0
EOF
}


main()
{
while read NAME VAL
do
cat <<EOF
#ifndef $NAME
#define $NAME VAL
#endif

EOF
done
}

put_data_list | main
2023/08/06(日) 11:54:26.68ID:Mgx3ApDu0
その手のパラメータをマクロとして大量に定義する
必要があるときというのは
開発・実行環境ごとに切り分けたいという要求なことが多くて、
そうだとしたら環境依存を避けたいという要件設定が
ナンセンスってことになるんよ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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