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

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

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

前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
2018/10/24(水) 00:53:06.37ID:8GMcdoBP
>>547
私の解釈? ポインタが生まれた理由?
なんでその内容を俺にレスしたのか意味不明
549デフォルトの名無しさん
垢版 |
2018/10/24(水) 00:54:55.11ID:pa4PW987
x Cにレジスタに
o CにLDA使用時のレジスタに
2018/10/24(水) 01:19:39.17ID:PoD9V6zI
carとcdrに付いて小一時間
こちらの方が先だべ
2018/10/24(水) 01:36:02.36ID:uSP3iZ9v
>>538
ありがとうございます説明が足りなかったかもしれません
メンバ変数の配列をコンストラクタでリスト初期化する場合どうしたらいいですか?
Hoge::Hoge() : mPiyo(0) ←これの二次元配列版を知りたいのです
2018/10/24(水) 01:52:38.02ID:PadB6FUj
>>551
同じだよ {} で初期化すればいい。

Hoge::Hoge() : mPiyo{} {
ほにゃらら
}

ってことね。
2018/10/24(水) 10:45:25.32ID:jfcHBGCr
>>547
言語実装ベースの思い込みが過ぎる。
言語規格中のポインタは型だし、変数ではない値もあり得るし、ポインタの指す先の型の違いは大きさだけではない。

↓「ポインタ型」で検索して確認されたし。
http://kikakurui.com/x3/X3010-2003-01.html
2018/10/24(水) 11:12:54.29ID:uSP3iZ9v
>>552
ありがとう
無事できました
555デフォルトの名無しさん
垢版 |
2018/10/24(水) 11:21:48.24ID:wUNs4a59
> void (*)(void) h_ptr = f; // 型 変数で書いてみた→エラーかい!

当然知ってると思うけど

void (*h_ptr)(void) = f;

これは * と () の優先順位が原因だ

よく * と [] で混乱してるひともいるけど

char **hoge;
char *hoge[];
char (*hoge)[123]:
char (*hoge)[]: // エラーかい!
2018/10/24(水) 11:24:53.60ID:PadB6FUj
>>551
今では (C++11 以降では) 宣言時に初期化も書けるから、

struct Hoge {
int a[10][10] = {};
public:
Hoge(void);
};

って感じでも書ける。

複数のコンストラクタがあるときに、
どのコンストラクタが起動したときでも初期化はしないといけないみたいなときには、
この方式で書いた方が何度も同じことを書かなくてよいので面倒くさくなくて良いかも。
2018/10/24(水) 11:47:35.18ID:uSP3iZ9v
>>556
なるほど
コンストラクタにつらつら書くよりもヘッダで宣言時に初期化した方が綺麗ですね
2018/10/24(水) 11:57:27.21ID:PadB6FUj
アセンブラとかから C に入門したら色々と自動化されてて
ありがたいなーってなってポインタで躓いたりしづらいけど、
レイヤが違うという意識を持ってないと変に機械の理屈に引きずられることもある。

言語の理屈だとポインタはアドレスを入れるものじゃなくて、
ポインタを値として見たものをアドレスと呼んだりもするってだけ。
結局はポインタにアドレスが入ってるんだけど、まずポインタありき。

ポインタに対する演算ってのは指す先をいくつ進めるとか、
指す先の間隔がいくつだというものであって、
アドレスを演算して実現するってのは実装上の都合。
アドレスが連続しているということさえ保証はない。

たとえば

char a[2];

とあったときに

(intptr_t)(&a[1])-(intptr_t)(&a[0])

が 1 になることは言語仕様では保証されない。
(これが 1 にならないような変な環境はまず無いと思うんだけど。)

具体的に機械でどう動いているかから見ると肌感覚として理解しやすい場合もあるのはわかるが、
言語の理屈と混同しないように、一旦それは抽象の壁の向こうに押しやる必要もある。
2018/10/25(木) 06:51:43.64ID:GIa2VIfF
ラムダ式でthisを指定してそのクラスのメソッドを呼び出したところ、そのクラスのメンバ変数がすべて0になっててコンストラクタも動作してない状態になってたのですが、使い方間違ってますか
2018/10/25(木) 07:15:13.40ID:kug3Loto
>>559
インスタンスが既に破棄されているのでしょう
c++ ではオブジェクトの寿命管理は自分でやる必要があります
(参照があるから破棄されないということはない)
561デフォルトの名無しさん
垢版 |
2018/10/25(木) 11:40:30.80ID:5Cy/pQlU
>>559
[&*this]
こうしたっていう意味?
2018/10/25(木) 22:05:25.00ID:GIa2VIfF
ラムダ式にはthisを指定しました
インスタンスは生きています
ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら正しい値が読み取れました
2018/10/25(木) 22:40:27.12ID:ovezBLdW
auto f = [this]() {... };
てな感じにキャプチャはしてるんだよね。してないとコンパイルエラーになるし。

デバッガでみておかしいだけならデバッガがうまく動いてないだけでは?
cout << this->hoge;
とかして見てみたらどうでしょう。
564デフォルトの名無しさん
垢版 |
2018/10/26(金) 16:36:40.82ID:8hqqerJ0
>>562
>ラムダ式内から直接呼ばずにグローバル変数に保持したインスタンス変数経由で同じメソッドにアクセスしたら

warning読み飛ばしてるだけだと思うが
warningにそうしろって書いてあるはず
565デフォルトの名無しさん
垢版 |
2018/10/26(金) 16:37:20.12ID:8hqqerJ0
あとグローバルにしなくても
ラムダ式を呼ぶ側の関数内のローカル変数で保持しても多分いける
566デフォルトの名無しさん
垢版 |
2018/10/28(日) 23:19:51.00ID:CM0THx8+
複数のファイルをコンパイルするとき、ソースファイルの読み込み順番ってc++ではどのように決定されるのでしょうか?
2018/10/28(日) 23:35:05.21ID:oH4yrJrN
読込み順番ってのが何を言おうとしているのかよくわからんぞ。
2018/10/29(月) 00:15:12.84ID:LkYf8yJz
>>566
それぞれ別の翻訳単位として、独立に処理されるぞ。
依存関係があって先に読み込ませる必要があるファイルは、#includeで明示的に指定した順に読み込ませる必要があるよ。
2018/10/29(月) 01:17:32.57ID:wGJRVi/I
先に読み込ませれば (ヘッダを include したり宣言を書いたりしなくても) 定義したものが利用可能になると思ったってことなのかな?
570デフォルトの名無しさん
垢版 |
2018/10/29(月) 11:30:00.64ID:VxCr7qKV
ならんやろ
2018/10/29(月) 12:50:50.62ID:X5D3cySa
ソースファイルの読み込み=ソースのコンパイルとして
makeなり 統合環境なりが 依存関係チェックして必要と思われた順にコンパイラを起動しコンパイルしてる
2018/10/29(月) 19:30:19.13ID:MQrExvvX
>>571
>makeなり 統合環境なりが 依存関係チェックして必要と思われた順

別に make による依存度チェックが必須だとは思っていません
最悪、アプリケーションを構成する全ソースを全部コンパイルしたっていい
やっていることがよくわからないのなら、全部再コンパイルするバッチを書いてもいい、と思っています
2018/10/29(月) 19:53:08.30ID:QH06ucqh
>>572
確かに、時間が無駄になるだけで、それにより動作が変わってしまう等の害を及ぼすことはないからなー

結局 >>566 が聞きたかったことは皆目見当がつかんけどもw
574デフォルトの名無しさん
垢版 |
2018/10/29(月) 19:59:30.68ID:+o2CKGU+
vectorで複数のstd::stringの各要素を収納して管理してみたいのですが、
実際、vectorの特定の要素にアクセスしてstringのデータを入れようとするとエラーになってしまいます。
例えば、次のようなコードの場合です。
std::string A = "bookA";
std::string B = "bookB";

std::vector<std::string> booktitle;
booktitle[0] = A;//コンパイルエラー

vectorで複数のstd::stringのデータを収納したい場合にはどうしたらいいのでしょうか?
2018/10/29(月) 20:43:24.49ID:b4sCrQ/m
>>574
booktitle.push_back(A);
2018/10/29(月) 20:48:05.90ID:MQrExvvX
>>573
FreeBSD 2, 3, 4 (くらいかなあ) 時代には、OS カーネルを再度コンパイルすることはあたりまえだったんですけれども、最近はそういう話はすたれてしまいましたね…
577デフォルトの名無しさん
垢版 |
2018/10/29(月) 21:00:10.54ID:+o2CKGU+
>>575
ありがとうございます。
例えば、vectorにpush_backで100個のstd::stringのデータを入れたけれど、38個目のデータを別のものに変更したいという場合、
38個目のstd::stringのデータを直接指定して別のものをいれるということはできないんでしょうか?
2018/10/29(月) 21:54:36.97ID:b4sCrQ/m
>>577
38個以上格納した後なら、
booktitle[37] = A;
で書き換えられる。
2018/10/29(月) 22:57:36.19ID:oZEcP9DN
>>577
c の普通の配列みたいに中身に拘らずとりあえずサイズ100の配列を用意したい場合は
v.resize(100) でいけるのでその辺りも併せて覚えておきましょう
2018/10/29(月) 23:25:38.01ID:Id14AobK
関数の中でポインタ変数を作ったら、その関数から出る時、ポインタ変数は消えるけど、ポインタ変数の中身はどっか別にあって消えないってことで良いんですかね?
その中身を消すのがdelete関数ってことですか?ややこしいな・・・
581デフォルトの名無しさん
垢版 |
2018/10/29(月) 23:52:04.87ID:JGxixszg
そのとおり
記録には残らないが記憶に残る
2018/10/30(火) 00:19:02.74ID:tYtIFLkW
ありがとう。すみませんもう一つ。
ポインタ変数のアドレスを格納するのに、なぜ二重ポインタが必要なのかがいまいちわかりません。
単に”番地”を格納するだけなら普通のポインタでも良いような気がしてしまいます。
2018/10/30(火) 00:27:02.34ID:Md8WzUxK
それは、32ビット浮動小数点のビットパターンを32ビットintに入れておけば
float型とかいらないと言ってるようなもの
584デフォルトの名無しさん
垢版 |
2018/10/30(火) 00:36:21.09ID:H/liFP07
アドレス値がほしいとき
引数でアドレス入れる変数のアドレスを渡すことがある
2018/10/30(火) 00:46:04.26ID:0KkuIlNz
>>582
情報量としては実際のところメモリアドレスなので同じだけれど型が違う

pがint へのポインタなら
*p はアドレス位置にある int を返すし、
p++ すると int のサイズ分増えるし、
p[i] はintのサイズかけるiのメモリ位置にある int になる

上記の int を char やポインタ型に入れ替えると動作が異なることがわかる。
なんの型で読み書きするのかとかサイズの計算なんて人がコードで書けばいいじゃん、
という流儀もあるだろうがcは違う

例外としてなんの型だか不明なものを扱うときには、
とりあえずvoid*で保持しておいて計算やアクセスするときに
明示的に型を指定して用いることもある
586デフォルトの名無しさん
垢版 |
2018/10/30(火) 00:55:27.51ID:H/liFP07
アドレス渡さないと変数(今回の場合アドレスを格納する領域)に値を格納できない
コレはどんな変数でも同じ

アドレスを格納する変数もただの変数だからな
2018/10/30(火) 07:33:46.97ID:rZekkOWs
>>580
>ポインタ変数の中身はどっか別にあって消えないってことで良いんですかね?
(ポインタ変数の中身はポインタだが、ポインタが指してる先と読み替えよう)
指してる先はどっか別にあってって、言語が自動で作ってくれるわけじゃないよ
ポインタが指す先もプログラマが作らなきゃならない
だから消える所に作れば(自動変数な)消えるし、消えない所に作れば(静的変数やnewな)消えない

>>582
二重ポインタ(って表現もナニだが…)も
ポインタを指してるってだけの普通のポインタだから
2018/10/30(火) 12:09:39.01ID:yVkeMr3S
「戻り値ではなく、引数の書き換えで呼び出し元に新たな値を渡したい」

・関数側宣言はポインタで受けて 呼び出し側は変数に&つけてポインタを渡す (c/c++)
 関数実装の際 *でデリファレンスして代入

・関数側宣言は参照で受けて 呼び出し側は変数をそのまま渡す (c++)
 関数実装の際 そのまま代入
589デフォルトの名無しさん
垢版 |
2018/10/30(火) 15:15:26.58ID:p4LrBCE7
>>582
freeしたあと確実にNULL代入したいためにポインタのポインタで管理しておくことはある
590デフォルトの名無しさん
垢版 |
2018/10/30(火) 15:17:35.76ID:p4LrBCE7
あと二重ポインタとかダブルポインタとかいう用語は使わない方が良い

ポインタのポインタ(たまにポインタの配列)
配列のポインタ

のどっちかにしろ
2018/10/30(火) 15:22:49.70ID:yVkeMr3S
void my_free(void** ptr) { free(*ptr); *ptr = NULL; }
.......

char *data = malloc(size);
.......
.......
my_free(&data);
/* これ以降 data = NULL になってるから参照するとヌルポになる */
592デフォルトの名無しさん
垢版 |
2018/10/30(火) 15:59:22.21ID:KCmKruF1
ポインタほんとむずい
2018/10/30(火) 16:02:47.46ID:QNssPyY0
わからないときは図に描いて整理
2018/10/30(火) 16:08:12.80ID:Id9/5UCV
>>590
なんで?
double pointerも十分すぎるくらい市民権得てると思うけど。
2018/10/30(火) 18:50:51.23ID:rAbIHznq
>>594
char pointer と double pointer が並んでも?
2018/10/30(火) 21:19:57.26ID:4lskY4LV
自分がそう呼ぶかどうかはともかくとして、
ダブルポインタやdouble pointer でググればわかるようにそう呼称されることも大変多いわけだから
ポインタのポインタをダブルポインタと呼ぶことが多いことを知らんでいるわけにはいかんのが現実
2018/10/30(火) 21:22:07.40ID:ri95Blut
**ダブル ***トリプル ****クアドラプル?
うーん
2018/10/30(火) 21:37:01.52ID:zgde8yLC
それを外人のプログラマに説明して通じるかどうか
2018/10/30(火) 21:46:50.04ID:QNssPyY0
使うのはポインタのポインタまでにしとかないと書いててワケわからなくなるぞ
2018/10/30(火) 21:51:59.77ID:ri95Blut
素朴な疑問だけど、ビット演算の | と論理演算の ||
前者を「オア」と呼んで後者を「ダブルオア」と呼ぶ?
2018/10/30(火) 22:01:11.64ID:ojdn3tn8
>>600
|| は論理演算子の「論理or」
| はビット演算子の「ビット or」…あまりそういういいかたはしないような気もしますが
2018/10/30(火) 22:05:37.02ID:ri95Blut
ダブルポインタの流れで気になったのよね
言葉だけの疎通で どう言ってたかな?と

※ 「ビットor」 「or」 後者は前後の文意で汲んでくれ のような使い方してるわ
2018/10/30(火) 22:10:43.59ID:4lskY4LV
明示的にビット毎のorを指すときは bitwise or と書くけど日本語ではなんていうんだ
教科書なら「ビット毎の論理和」でいいんだろうけど古臭い

声に出して読むときは2つ組みの方をオアオアとかアンドアンド
2018/10/30(火) 22:17:49.01ID:NmwiF06a
doubled pointerだよ。dがつく。
2018/10/30(火) 22:30:53.82ID:4lskY4LV
>>604
世間で使われてる用語を使わず「理屈で言えばこうだ」と
勝手に言葉を作ってると造語症と思われるぞ
2018/10/30(火) 22:34:37.41ID:NmwiF06a
自分の頭がおかしいので休憩します。
2018/10/30(火) 22:43:13.11ID:J31Dj26+
double linked list のdoubleは行きのポインタ(リンク)と帰りのポインタでdoubleだし
日本語より論理的と言われがちな英語も割といい加減だよね
日本語では双方向リストと実に論理的な呼称
2018/10/30(火) 22:47:46.33ID:fzlT+aGo
いや double pointer, triple pointer と増やしていけるし数学的なのかな
これ式で日本語でたまに使われるのは2重(2段)ポインタ、3重ポインタか
2018/10/30(火) 23:00:20.94ID:yt1zemAy
>>598
むしろ英語圏の人のほうがよく使ってる
2018/10/30(火) 23:08:47.77ID:/tj4m1Wy
>>603
JIS だと「ビット単位のOR演算子」と「論理OR演算子」と書かれている。
あくまで訳語のひとつでしかないけど、JIS の性格を考えれば公式訳と言ってよかろ。

| と || の代替表記として bitor と or があるので、発音するときはこれでいくのもアリかもね。
2018/10/30(火) 23:13:11.59ID:VN5Yl689
二重ポインタを思わず「ハンドル」と言ってしまって怪訝な顔をされる俺。
2018/10/30(火) 23:23:20.21ID:/tj4m1Wy
C99 をざっと見た感じでは double を指すポインタは "pointer to double" という書き方になっているけど、
カジュアルな場面で double pointer と言わないとも言い切れないだろうし、
これについては >>595 の言い分に説得力を感じる。

英語がよくわかる人の肌感覚ではどんなもんなんやろね?
2018/10/30(火) 23:38:22.13ID:EION13qU
ポインタへのポインタでしかないもんを
ダブルポインタと言い換えるの気味悪い
614デフォルトの名無しさん
垢版 |
2018/10/30(火) 23:42:13.26ID:H/liFP07
だからな

ただの変数だからな
ただのポインタも例外じゃない
2018/10/31(水) 00:07:15.80ID:Y0YI6J+Y
>>607
doubly linked list じゃね?
https://books.google.com/ngrams/graph?content=double+linked+list%2Cdoubly+linked+list&;case_insensitive=on&year_start=1800&year_end=2008&corpus=15&smoothing=3
2018/10/31(水) 07:22:13.82ID:NyWYateD
>>613
お前さんの感覚なんてどうでもいい
pointer to pointer c でググると
Double Pointer (Pointer to Pointer) in C
https://www.geeksforgeeks.org/double-pointer-pointer-pointer-c/
が最初に出て来る現実を見なよ
617デフォルトの名無しさん
垢版 |
2018/10/31(水) 13:47:07.97ID:XAA9QXm2
悪貨は良貨を駆逐する
2018/11/01(木) 05:49:53.11ID:G1B9TB4r
おまえら、本当の0からの初心者にも、やさしくしろよな。
619デフォルトの名無しさん
垢版 |
2018/11/01(木) 11:03:26.87ID:z733lC2q
初心者だから何でも許されるというのは間違った考え
安田はジャーナリストとしては初心者
無能に仕事を任せるのは損失
2018/11/01(木) 11:45:07.51ID:JcPwSOae
むしろ無能を起用した側の責任も
ジャーナリストは自己だが
2018/11/01(木) 19:27:13.53ID:8DVitDyR
>>619
そういうお前が一番の初心者じゃねえのかw
2018/11/01(木) 22:02:58.74ID:ydgxPLcy
プログラム全体でただ1つだけ走らせることが出来る、ある機能を提供するライブラリを作りたいんですけど
シングルトンで実装するのが一般的なんですかね よくわからん
623デフォルトの名無しさん
垢版 |
2018/11/01(木) 23:40:18.35ID:BwvtJmQs
それただのcの関数やんけ
staticのメンバ関数で十分
2018/11/02(金) 00:29:41.77ID:Jt96ZoUI
スレッドの数なのか変数の数なのか
なんでライブラリがそんなことを強制せにゃならんのか
2018/11/02(金) 00:36:09.11ID:4QeJVSF3
よくわからん状態で作って、システム停止状態になる予感
626デフォルトの名無しさん
垢版 |
2018/11/02(金) 00:38:05.60ID:KoqyjIsr
リエントラントな関数にしとけば平気
627818
垢版 |
2018/11/02(金) 08:51:49.18ID:PHrFLYGt
>>819
そんな考えだったら、スレタイの、【初心者歓迎】をはずせ。
2018/11/02(金) 09:42:25.75ID:4QeJVSF3
未来から来た男
629627
垢版 |
2018/11/02(金) 11:02:16.38ID:PHrFLYGt
失礼しました。
630627
垢版 |
2018/11/02(金) 11:07:37.07ID:PHrFLYGt
>>818>>819さん、ごめんなさい。
2018/11/02(金) 13:27:51.33ID:yBRnKDna
>>819
>絶対許さない
え、どういうことですか?
632デフォルトの名無しさん
垢版 |
2018/11/02(金) 13:50:23.22ID:33vh4D4i
vector<int> v{1, 2, 3, 4};
と定義して &v[0] からのバイト列にアクセスすると
01 00 00 00, 02 00 00 00, 03 00 00 00, 04 00 00 00
と連続して確保されているようですが
●これは仕様上保証されていますか?

また
vector< vector<int> > w{{1, 2}, {3, 4}};
と定義して &w[0][0] からのバイト列にアクセスすると
01 00 00 00, 02 00 00 00, ?? ?? ?? ??, ?? ?? ?? ??
後半がランダム?

になるようですが
連続に
01 00 00 00, 02 00 00 00, 03 00 00 00, 04 00 00 00
と確保されるように2次元のvectorを定義するにはどうすれば出来ますか?
それとも出来ないのでしょうか?
2018/11/02(金) 13:51:24.50ID:kca9Lljk
お前ら、未来と会話すんなよ
パラドックス起きるぜ
2018/11/02(金) 13:54:46.41ID:kca9Lljk
>>632
エンディアンもintサイズも固定じゃないので保証されない
2018/11/02(金) 14:03:14.42ID:Jb5Djrng
vector の連続性について
 ttp://cranehouse.dojin.com/program/vector.html
 ttps://www.wdic.org/w/TECH/std::vector#xE3x83xA1xE3x83xA2xE3x83xAAxE3x83xBCxE3x81xAExE9x80xA3xE7xB6x9AxE6x80xA7
2018/11/02(金) 14:52:24.63ID:kca9Lljk
vectorには本体データの他に管理データもあったりするので
そのvectorを作ると間にゴミに見えるデータが入りうる
637デフォルトの名無しさん
垢版 |
2018/11/02(金) 14:54:42.97ID:KQJo2ZCc
ありがとうございます

int (*hoge)[要素数]; じゃなくて
int *hoge[]; みたいにポインタの配列になってるということでしょうか?
2018/11/02(金) 14:59:33.45ID:Jb5Djrng
w[0] が返す vector の次元(大きさ)と
w[1] が返す vector の次元(大きさ)は異なっててもいい
から、そもそも論で 2次元配列 とは等価にならんし
2018/11/02(金) 15:06:38.51ID:kca9Lljk
前者だと要素追加しようとしたらどんちゃん騒ぎだよね
640デフォルトの名無しさん
垢版 |
2018/11/02(金) 15:14:04.01ID:KQJo2ZCc
とりあえず「出来ない」という方向で仕様検討します
641デフォルトの名無しさん
垢版 |
2018/11/02(金) 16:46:54.30ID:ggr9EF3w
>>632 >>640
array< array<int, 2>, 2 > w{ {{1, 2}, {3, 4}} };
2018/11/02(金) 17:22:12.50ID:0I6l0gim
適当なラッパーを作って
期待する形のバイト列にするイテレータをくっつける
とかいった方法が考えられるかなぁ。

まあ場合によるけど、
大きさがコンパイル時に確定してよいのなら、
>>641 の方式が確実だと思う。

多次元配列を作る場合ってほとんどの場合はコンパイル時か
オブジェクト構築時には大きさが決まってると思うんよね。
後から伸ばしたり縮めたりってあんまりしなくなくなくなくない?
2018/11/02(金) 18:31:51.95ID:ibjOz3iU
1次元での連続性の要求は理解できるけど、2次元以降の多次元で配置の連続性の要求って何処からきてる?

思い浮かぶのが画像データぐらいだけど、それなら1次元+演算でも代用可能だし…
2018/11/02(金) 19:23:30.08ID:XwJWkHNz
2次元配列状のデータを2次元ベクタに一発で流し込めるからじゃない?
2018/11/02(金) 23:47:26.58ID:NDSywfh9
環境に関して質問です。
windows10でcの環境作りたくて、コンパイラにminGWを入れたのですが、実行時エラーがでなくて不便です。
例えば、
char c='x';
printf("c: %s",c);
のように出力時のフォーマットを間違えたら、LinuxではRuntime error〜となにかしらエラーがでていたのに、エラーも何も出ずに(c: すら出ないで)終了します。

minGWの仕様なのか否か。
または、
windows10でminGWを使い、実行時エラーを出す方法を教えてください。
2018/11/03(土) 00:16:22.42ID:q3m1JbMq
>>645
言語仕様的には未定義なので、実行した結果がどうであっても言語仕様通り。
ランタイムに捕捉できることを期待しない方が良いと思う。
C/C++ っていうのはそういうもんだから。
2018/11/03(土) 00:23:55.55ID:v6aDDcip
>>645
minGWを使ったことないんで間違っているかも知れないが
GCCならGDB使えば実行時エラーを捕捉出来るんじゃないか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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