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

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

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

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
2019/02/10(日) 15:14:36.29ID:nGIVWkyn
>>413
実数はエンティティですか?
符号付整数はエンティティですか?
2019/02/10(日) 15:16:29.18ID:sKzQuR0e
あーやだやだ
こういう宗教じみた設計論語るやつ
2019/02/10(日) 15:16:40.47ID:0+1G/wKU
>>414
値です
2019/02/10(日) 15:17:40.51ID:0+1G/wKU
>>415
現実を見据えて追求すると自然と出てくる答えです
2019/02/10(日) 16:25:18.62ID:scT3207q
親クラスとライフサイクルが同じか数値型なら実体、そうでないならポインタでいいだろ。

動的確保よりコピーやmoveのほうがコストが低い場合とか検討の余地はあるけど、考えすぎると禿げる。
419デフォルトの名無しさん
垢版 |
2019/02/10(日) 16:31:34.44ID:25jgEgQt
>>401
デストラクタは virtual に汁
2019/02/10(日) 20:26:50.17ID:EWmLbbO6
どうせそこまで最適化も厳密なメモリ管理も必要なプログラムじゃないだろ。
2019/02/10(日) 21:57:11.00ID:sKzQuR0e
>>417
ほらね、こういう精神論がでてくる
2019/02/11(月) 01:02:52.04ID:QKPibkAC
組み込み以外に使い道あるんですか?
2019/02/11(月) 07:24:34.72ID:KN5ZTrY9
OS作ったり、ブラウザ作ったり、3Dバリバリのゲームを作ったり、他の言語向けに機械学習や科技計算等のライブラリを作ったり、いろいろあるよ
424デフォルトの名無しさん
垢版 |
2019/02/11(月) 12:01:51.83ID:itY+kGJR
RubyはC++が嫌いだからCで書かれている
2019/02/11(月) 12:06:46.94ID:QKPibkAC
>>423
天才達だけに許された言語なのでしょうか?
もっと身近なプロダクトはないんですか?
2019/02/11(月) 12:32:11.46ID:PRVQuzHN
古い例だとニコニコ動画がC++
まあおかげで開発がスケールせずオワコン化したわけだが
427デフォルトの名無しさん
垢版 |
2019/02/11(月) 12:32:14.48ID:itY+kGJR
the door is open
2019/02/11(月) 12:43:40.65ID:MmPS3pUZ
>>425
聞いてばっかりじゃなくてお前がどういうものを探しているか書いたら?
2019/02/11(月) 13:10:19.37ID:Y0EVtjJ+
CADとか画像処理とかビット演算系アルゴリズム(cf.ZDD)なんかは
まだまだ他の言語には負けないね
2019/02/11(月) 13:44:01.42ID:HT+vwAFW
>>426
>開発がスケールせずオワコン化した
これってどういう意味ですか?
2019/02/11(月) 13:51:23.27ID:awXFg/MG
JavaからC++勉強中です
C++の場合、他のクラスのオブジェクトを複数持たせるときは、一般的にどうするんでしょうか

・コンテナにオブジェクトそのものを突っ込む(一番わかりやすいけど、ムーブの定義忘れとかでミスが出そう)
・コンテナにオブジェクトへのポインタを持たせる(コンテナ解放時に、クラスごとに同じようなメモリ解放処理書くのかしら)
・コンテナにポインタをスマートポインタで持たせる

辺りをネットで読ませてもらいましたが、こんな感じで良いんでしょうか?
不勉強な上、他のオブジェクト持つという基本的なことなので、なんかもっと簡単な方法を見落としてる気がしてしまいまして
2019/02/11(月) 13:54:24.78ID:QKPibkAC
>>431
時と場合によりますので一般的な答えはありません
2019/02/11(月) 14:06:14.14ID:fD0IDjkv
>>431
Javaのオブジェクト参照はC++のポインタに該当する。
C++のオブジェクトは、型を持ったバイト列だと考えていい。
C++で自動変数を宣言すると、スタックにバイト列が割り当てられる。
newやスマポやコンテナを使うと、ポインタによりヒープでメモリーが割り当てられる。
ポインタも型を持ったバイト列。ポインタは配列のように周りのメモリーにアクセスできる。
C++のクラスは構造体に関数群を追加したもの。C++でクラスを継承すると、関数群とバイト列を引き継いだサブクラスになる。
2019/02/11(月) 14:12:14.41ID:0TxoCFW6
>>431
大体、その3つの通りで、そこに述べられたものの上から優先的に選ぶ。
つまり、普通にメンバ変数にオブジェクトとして宣言するのがC++では
最も効率が良くて伝統的な書き方。それでは問題が生じる場合にオブジェクトの
ポインタとして持たせる。スマートポインタは後になって導入されたもので、
人気があるものではないので無視して良い。

二番目のポインタとして持たせるのは、例えば、今定義している最中の
クラス(自分自身)と同じ型のデータで、子どもや親にあたるデータへ
リンクを作りたいようなときか、または、ある基本クラスを継承した
色々なクラスのオブジェクトを持ちたい場合に用いる。
2019/02/11(月) 14:16:41.10ID:fD0IDjkv
C/C++では、sizeofキーワードを使えば、簡単にvoid以外の型のサイズがコンパイル時に取得できる。Javaではオブジェクトのサイズを簡単に取得することはできない。
C/C++はよくオブジェクトのサイズやバイトの並びを意識してプログラミングする。
2019/02/11(月) 14:17:25.55ID:a3vDiVrE
結局CのポインタってJavaとかの言語で表すなら何なんだ?
2019/02/11(月) 14:23:20.42ID:fD0IDjkv
なぜなら、例えばスタックに巨大なデータを割り当てると、スタックオーバーフローというエラーが発生するし、
ヒープだって、巨大なデータの割り当ては失敗することがある。
また、構造体を変更すると、構造体のサイズやデータ構造が変化して、互換性の問題が発生することがある。
2019/02/11(月) 14:24:23.31ID:awXFg/MG
>>434氏他
丁度今、ウェブ上のC++で書かれたCompositeパターンのソースを読ませて頂いてました
正に2番目で実装されてましたが、都度メモリ解放処理書くくらい当たり前なんですね、流石C++です

独学なもんで、こうはっきり言ってもらえると本当にありがたいです、使い分けて行きたいと思います
他の皆様もありがとうございました、勉強になりました
2019/02/11(月) 14:34:10.39ID:fD0IDjkv
>>436
Javaの動的配列はCのポインタに近いが、Javaの配列では危険なアクセスは制限されているし、参照カウントで管理されている点が異なる。
Javaのオブジェクト参照は、参照カウントで管理されており、C++の構造体/クラス型に対するstd::shared_ptrに該当する。
2019/02/11(月) 14:37:16.50ID:BEdrdhIs
しかし、std::shared_ptrはヌルポを指定できるが、Javaはできない。
2019/02/11(月) 14:49:43.57ID:0TxoCFW6
>>438
C++ は、デストラクタに必ずメモリ解放処理を書いておけば、そんなに
メモリーリークを気にすることはない。多くの場合にはそれで完全に処理できるから。

次のように書くだけで、ほとんどの場合、メモリーリークは起きない:
class CMyClass {
 BYTE *m_pBuf;
 CMyClass() {  // コンストラクタ
   m_pBuf = NULL;  // メモリをまだ未割り当てであることをマークするためにこうしておく
 }
 ~CMyClass() {  // デストラクタ
  if ( m_pBuf != NULL ) {
   delete [] m_pBuf;   // メモリの解放
  }
 }
}
2019/02/11(月) 14:52:47.12ID:dGdUrFsa
すごく古い書き方だ
2019/02/11(月) 14:54:57.57ID:BEdrdhIs
>>441
ナマポの場合、代入したらまずいよ。例外安全にも問題があるし。
2019/02/11(月) 14:55:46.62ID:DnOcmNTU
確かに、人に教えるレベルじゃないね
2019/02/11(月) 14:56:36.09ID:0TxoCFW6
>>441
正しくは、次のようにアクセス制御のための「public :」を書かないといけない。

class CMyClass {
protected :
 BYTE *m_pBuf;   // 高速化のため、自動的には初期化はされないのでコンストラクタで初期化する。
public :
 CMyClass() {  // コンストラクタ
   m_pBuf = NULL;  // メモリをまだ未割り当てであることをマークするためにこうしておく
 }
 ~CMyClass() {  // デストラクタ
  if ( m_pBuf != NULL ) {
   delete [] m_pBuf;   // メモリの解放
  }
 }
}

なお、必要に応じて、コンストラクタの中で、m_pBuf = new BYTE [xxx]; のように書いても良い。

それと、BYTE は、「オブジェクト」ではないので、あなたの書いているような場合には、
BYTE *m_pBuf の部分を CSomeObject m_pObj; のように変えて、m_pObj = new CSomeObject;
のようにする。
2019/02/11(月) 14:58:34.69ID:BEdrdhIs
>>445
ダメだこりゃ。
2019/02/11(月) 15:03:05.98ID:MkFOBvt9
良い子のみんなは>>441の危険性が理解できるまではスマートポインタを使ってね
おじさんとのお約束だよ
2019/02/11(月) 15:11:57.93ID:Qk3j4qw0
>>445のデストラクタでnullチェック必要?
nullポインタをdeleteしても問題ないはずだが
二重解放防止にはならんし意味わからん
2019/02/11(月) 15:18:49.80ID:BEdrdhIs
>>448
超独自仕様の組み込み開発とか、メモリー管理がbuggyなプログラムでは意味があるらしい。
例えば解放したメモリーブロックをアクセスするような行儀の悪いプログラムでは意味がある。
2019/02/11(月) 15:19:34.89ID:eS7AzULV
>>441 >>445
・ 初期化を初期化リストでやらずに代入でやるのは邪悪。
・ delete に NULL を渡した場合には何もしないことが保証されているので、
  無駄にヌルチェックする必要はない。
・ ポインタ型や整数型の値もまたそういう型の「オブジェクト」である。
  (元質問者が Java から入ってきてるから「Java の用語で言うところの」という意味?)
2019/02/11(月) 15:19:51.73ID:3tLemvMU
初心者なので確認
コンストラクタの中に飛び込む前のメンバの初期化で例外発生したら m_pBuf は中途半端になるから
コンストラクタの中で代入するんじゃなく、メンバ初期化子で初期化しろ
という認識でいいのかしら
2019/02/11(月) 15:29:14.84ID:BEdrdhIs
>>451
「C++ 例外安全」でググれ。ナマポを使わずに、素直に生配列、コンテナ、スマポのどれかを使えば済むこと。マネージされてないナマポは村八分にしろ。
2019/02/11(月) 15:39:02.97ID:3tLemvMU
なんとなくわかった   ような気がする
生ポそのものはコンストラクタもデストラクタに何ら操作しないから宙ぶらりんこになるのか
2019/02/11(月) 15:41:57.41ID:dGdUrFsa
ちょっち理解は大変だけど生ポはスマポにドンドン置き換えたい
2019/02/11(月) 15:43:11.94ID:BEdrdhIs
スマポならコピーコンストラクター・代入のややこしさからも解放される。
2019/02/11(月) 15:52:25.23ID:eS7AzULV
まあまあ。
スマートポインタを活用しろというのはその通りだが、
ポインタ (や例外機構) を理解せずに
思考停止してスマートポインタを使うのはあかんやろ。

ここの元質問者はまだそこを理解しようとしている
ところなんだから、スマートポインタを使わなかった場合にどう書けば良いのか、
きちんと書くと面倒くさすぎるという体験も必要だろ。
2019/02/11(月) 16:16:38.24ID:fD0IDjkv
所有権の管理は人類には早すぎる。
所有権が変動するときは、スマポでOK.
2019/02/11(月) 16:28:46.52ID:fD0IDjkv
こんなときはナマポを使ってもよい:

処理の中で所有権が移動・消滅しない場合。
バイナリーデータやPODを生で扱う場合。
処理系がナマポやトークンやハンドルの入力を要求する場合。
2019/02/11(月) 16:36:19.07ID:QKPibkAC
生ポはスマポのオーバーヘッドすら許容できないときに使うものです
だから初心者は無理して生ポを使わなくていいです
2019/02/11(月) 16:59:08.84ID:V2lM2C5l
>>434
スマポは後になって導入されたもので人気がない、なんて意見は一般的ではないので無視して良い
2019/02/11(月) 18:19:37.85ID:j549IniP
スマポをC#のusing感覚で使ってる
2019/02/12(火) 13:19:56.52ID:VqanzRzk
エアプwwwwwwwww今は参照カウントじゃねーよw残念だったなクソ蟻wwww
2019/02/12(火) 13:20:43.00ID:VqanzRzk
それで、Cの生ポってC/C++以外で表現するなら何なんだ?
2019/02/12(火) 16:02:24.32ID:VerJGrBE
>>463
native int
2019/02/12(火) 17:27:09.82ID:VqanzRzk
>>464
仮装アドレス的な意味で来るとは思ってなかったwでも本質はそうだよなあ
2019/02/12(火) 17:29:23.18ID:t+DTqVP+
CALL -151
2019/02/13(水) 06:16:37.08ID:2WlGbphz
>>463 今の言語は極力「生のポインタ」が見えないようにしてるからなぁ。
オレの乏しい知識で無理矢理ヒネリ出すなら、
「古いBASICの peek, poke のアドレス指定に変数を使った場合」かのう。
型のない単なるアドレスって言うか数値だけど。
468デフォルトの名無しさん
垢版 |
2019/02/13(水) 15:13:52.62ID:Yg4iFXpY
upvar
2019/02/13(水) 15:46:18.41ID:SgfrIpbp
>>463
BYTE  ptr = アドレス値;

BYTE  MEM[4096 * 1024];  // 4GB のメモリ配列


*ptr  --->  MEM[ptr]  // ptr は MEM[] 配列の添え字
2019/02/13(水) 15:46:56.07ID:GHq8zte2
訂正:

BYTE  MEM[4096 * 1024 * 1024];  // 4GB のメモリ配列
2019/02/13(水) 15:48:00.46ID:GHq8zte2
訂正:

Uint32  ptr = アドレス値;
472デフォルトの名無しさん
垢版 |
2019/02/13(水) 18:19:07.37ID:QnNf1eu6
恥の上塗り
2019/02/13(水) 19:18:53.91ID:BFnAt9lr
intptr_t とか、INTPTRとか。
2019/02/13(水) 19:41:39.99ID:D91GFqhb
eax
475デフォルトの名無しさん
垢版 |
2019/02/13(水) 22:43:21.58ID:8CyDgeqf
行儀よく バッファなんて 守れやしなかった
夜のサーバ オーバフロー起こしてまわった
*印見て アナルといわれた 早く添え字になりたかった
信じられぬ カーニハンとの 争いの中で
許しあい いったい何 解りあえただろう
うんざりしながら それでも過ごした ひとつだけ解ってたこと
このポインタからの 卒業
2019/02/14(木) 07:38:16.87ID:fSoz/vTj
まあstatic変数やglobal変数使ってリークしてないとか言い張るバカよりかは
ナマポ使えやとは思う。
それならまだコード修正効くからな。
初心者にスマポ使わせればリークしないコード書かせることができるって考えははっきりいって幻想だわ。
2019/02/14(木) 22:35:36.88ID:vW9ukCJU
昔研究室の後輩でポインタがわからないから全部グローバル変数でプログラム作ってるって奴がいて、
それはそれである意味すごいなって思ったわ。
マルチメディア系ライブラリを触る必要がある研究室なのだが。
元々組込系が得意な奴だったってのもあると思うけど。
2019/02/14(木) 22:50:47.58ID:tlcLfILV
COBOLERだったんじゃね
2019/02/15(金) 00:04:29.72ID:tnuHGyjk
一度切りの使い捨て用途とかなら全然よくね
2019/02/15(金) 00:36:18.42ID:kpfA4lgp
>>476
スマートポインタを使うとコード修正効かなくなるの?どういうこと?
2019/02/15(金) 00:46:46.72ID:TR5VS7Vw
mp4boxをちょこっといじったのを作ろうとしたんだけど、
signed int32の計算で -2112000 / 48000 の結果が 89434 になるんですが。
VS2015のx64です。
2019/02/15(金) 06:57:51.95ID:OZ8Dcboc
>>481 「-2112000 / 48000 の結果が 89434」

その環境を持ってないんで分からないけど、
-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
両者のビットパターンが一致することと関係ありそうね。

被除数の -2112000 を64bitで表現する際に
符号拡張 0x_ffff_ffff_ffdf_c600 とすべきなのに
ゼロ拡張 0x_0000_0000_ffdf_c600 にしちゃって、
その後の計算は64bit正数でやってる感じかな。
2019/02/15(金) 07:20:58.81ID:1DfV94Wg
>>480
本人がスマポ理解できてないってオチだろ
2019/02/15(金) 07:22:53.73ID:1DfV94Wg
>>477
組み込みが得意でポインタがわからない後輩
設定に無理がありすぎw
485482
垢版 |
2019/02/15(金) 07:53:28.61ID:OZ8Dcboc
再び >>481 「-2112000 / 48000 の結果が 89434」 (間違いを訂正)

-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
ビットパターン一致してないね。桁数多くて見間違えちゃった(テヘペロ)。

-2112000 を32bitで表現すると 0xffdfc600 であり、
これをゼロ拡張した 0x_0000_0000_ffdf_fc600 == 4292855330 を
48000 で割り算して小数部を捨てれば 89434 という答えが出る。
ということなら合ってるかな。
2019/02/15(金) 07:57:48.46ID:8MeM2Ami
>>481
コードを https://ideone.com/ に貼っていただけませんか?
2019/02/15(金) 09:49:31.73ID:tuwIijw4
>>481
どうせ48000がunsignedなんじゃねーの
それにつられて -2112000もunsignedになって4292855296
その結果が薬師美代ちゃん
488デフォルトの名無しさん
垢版 |
2019/02/15(金) 13:45:38.25ID:TNDmXWGM
>>479
自分が何してるか判って使う分には問題無いな
適材適所だ
2019/02/15(金) 21:13:40.77ID:kkRd+/gL
>>480
>スマートポインタを使うとコード修正効かなくなる
どういう風に読むとそういう理解になるのか。。
まずは日本語の理解が必要だな。
2019/02/17(日) 07:14:37.91ID:KxX3tJEE
超初歩的な質問になるのですが
scanf関数を使って20個未満の任意の数だけ、数値を配列変数で受け取りたいです
たとえば「2 4 8 9」と入力し、Enterが押されたらそれで確定
num[0]=2
num[1]=4
num[2]=8
num[3]=9
としたいわけです。

どうしたらよいでしょうか?
一応自分で考えたコード(期待通りの動きをしません)を掲載します
for(i=0;i<20;i++){
scanf("%d",&num[i]);
if(num[i]==‘¥n’){
break;
}
}
2019/02/17(日) 07:30:35.53ID:a45/WyPQ
for(i=0;i<20;i++) if (scanf("%d",&num[i]) != 1) break;
2019/02/17(日) 09:09:16.12ID:uZDoAvc4
>>490
scanfや標準ライブラリの関数など、参考書とかで普通の使い方はわかると思うけど、細かい仕様をmsdnやmanコマンドで調べるようにするとかなり理解が広がると思うよ。
2019/02/17(日) 22:37:58.74ID:O/E0SKNM
中途半端なUI使うよりもcsvパーサーを作るかどっかからとってくるかすれば?
2019/02/18(月) 00:02:29.61ID:yZfkTbdS
autoってコンパイル遅くなりますか?
2019/02/18(月) 00:59:53.43ID:aN2QSVsl
>>494
むしろ遅くなる方に振れるでしょうけれど、そんなのどうでもいいのでは?
2019/02/18(月) 01:22:44.39ID:c9cLPpQ7
autoって変数の型宣言の話だよね?
コンパイルは遅くなるのか
速くしたい時はどうすりゃ良いの?
2019/02/18(月) 01:27:51.06ID:ViRlfcsh
C++ の auto は右辺と一致させるように推論するだけの単純機構で、
ややこしい演算で推論するわけではないので、
コンパイル速度ではほとんど差はないと思うよ。
2019/02/18(月) 01:30:04.86ID:tKsXQ0K5
autoはむしろコンパイル速くなるんじゃない?
いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけでいいんだから
C++でコンパイルを速くするのは簡単で、単純にソースファイル数とインクルードするヘッダを減らせばいい
C++のコンパイルが遅いのは主にコンパイル単位という時代遅れで極めて非効率なコンパイル戦略に起因しており、実はコードの複雑さ自体はわりとどうでもいい
2019/02/18(月) 01:31:11.50ID:aN2QSVsl
>>496
C++を言語として選択した時点で「記述の時間やコンパイル時間を投資して実行時間を稼ぐ」という思想なのでは?コンパイル時間を短くする努力はする気がないと思います
2019/02/18(月) 01:32:21.67ID:aN2QSVsl
>>498
>いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけ
この記述はコンパイル時を想定しているの?それとも実行時を想定しているの?
はっきりさせたいので念のために確認します
2019/02/18(月) 05:41:12.34ID:KTgkm+s5
>>490 サーバーの 503 エラーに引っかかって昨日のうちに書けなかったんだが…。

>>491 の方法だと Enter が単純に読み捨てられて scanf() が終了せず
まだ入力をよこせと言ってくるからダメみたいね。

11 22 33 (Enter) だと読み込みが継続、期待通りに動作しない
11 22 33 x (Enter) なら x を解釈する時点で scanf() が 0 を返してループ脱出


先に文字列として1行読み込んで sscanf() と思ったけど…
ndat = sscanf(s, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
&num[0], &num[1], &num[2], &num[3], &num[4], &num[5], &num[6], &num[7], &num[8], &num[9],
&num[10], &num[11], &num[12], &num[13], &num[14], &num[15], &num[16], &num[17], &num[18], &num[19]);
実際に読めた値の個数は ndat に入る。
これは書くのもメンテナンスするのも嫌だなぁ。

strtol() で1個ずつ数値を拾いつつ、地道にポインタ進める方が良いかも。
2019/02/18(月) 05:53:27.02ID:KTgkm+s5
>>500 自分は >>498 の人じゃないけど。
ごく簡単な場合ながら、例えば
int val_a = func(para); // func() がint互換の値を返すかチェックが必要
auto val_b = func(para); // func() の返す型そのまんまで val_b を作ればいい

てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
という考え方にも一理あるかと。
2019/02/18(月) 08:39:38.41ID:KTgkm+s5
瑣末なことだけど val_a, val_b って変数名は良くなかったね。
変数 variable の例なんだから var_a, var_b だわな。
というか、この場合は a, b で十分だ。
2019/02/18(月) 10:06:03.91ID:PGieQvh3
まず計測しろよ
505491
垢版 |
2019/02/18(月) 13:24:52.92ID:fHtoi1qq
>>501
ありがとう。ちゃんと確認してなかったわ。
タブに空白に改行はスキップしやがるんでしたか

別案としては fgets() ⇒ sscanf() になるんかな
2019/02/18(月) 13:29:17.97ID:fHtoi1qq
505の後半は無しで
1文字ずつ切り出して解析してったほうがよさそうね
507デフォルトの名無しさん
垢版 |
2019/02/18(月) 15:27:41.58ID:bbNHvPxv
コンパイル時間にリンク時間は含まれますか?
508デフォルトの名無しさん
垢版 |
2019/02/18(月) 15:28:58.14ID:bbNHvPxv
>>501
scanf は禁止

>>505 が正しい
2019/02/18(月) 15:34:26.17ID:c9cLPpQ7
人間の様な邪悪なものからの入力でscanfは使うなと、ばっちゃは言ってた
2019/02/18(月) 20:54:12.82ID:aN2QSVsl
>>502
>func() の返す型そのまんまで val_b を作ればいい
この発想は実行時なのでは?

>てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
実行時の発想をコンパイル時に適用していいのでしょうか?
2019/02/18(月) 20:54:41.05ID:aN2QSVsl
>>504
コンパイル時間を計測するのですか?…
2019/02/18(月) 20:57:23.82ID:aN2QSVsl
>>509
賛成です、そういうのは1ラインを秘術を尽くして何とか読み込み、後で sscanf() とかを使うべき
2019/02/18(月) 21:15:24.03ID:JRPNr6+t
>>512
今回の例(>>490) のように可能な限り %d で抜き出して打ち切るとなると sscanf 単発では面倒
なんとか行単位でバッファに詰めた後
連続空白などでトークンに区切ってそのトークン単位で sscanf をぶんまわすような
ほのかな中途半端感が
2019/02/18(月) 21:20:31.62ID:etvvcICH
>>510
別に実行時の発想じゃないでしょ
型を書けばコンパイラはその型名に対応する型を解決しなければならないし、
型変換の要否や可否のチェックも必要
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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