!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 157
https://mevius.5ch.net/test/read.cgi/tech/1624846971/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 158
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ブーイモ MMcf-4SjH)
2021/12/25(土) 12:11:46.61ID:xxeaCAplM355デフォルトの名無しさん (ワッチョイ 7b7b-P46e)
2022/03/19(土) 13:30:03.55ID:fvSihUDg0 返信ありがとうございます
++、--の場合は、前置、後置で
式の評価順が通常と異なると覚えました
式の評価順を理論から理解していないので
忘れてしまって失敗するかもしれませんが、
そのうち定着すると思っています
++、--の場合は、前置、後置で
式の評価順が通常と異なると覚えました
式の評価順を理論から理解していないので
忘れてしまって失敗するかもしれませんが、
そのうち定着すると思っています
356デフォルトの名無しさん (ワッチョイ 13ad-bSSa)
2022/03/19(土) 15:38:29.74ID:CZI3HevE0 よくわからない場合や使うと分かり辛くなる場合は使わないで冗長な書き方した方が良いかも知れない。
使わなくても最近のコンパイラは最適化掛ければ適当にうまいことやって最終的に作られるコードは同じになる可能性が高いと思う。
使わなくても最近のコンパイラは最適化掛ければ適当にうまいことやって最終的に作られるコードは同じになる可能性が高いと思う。
357デフォルトの名無しさん (アウアウウー Sa5d-oCcm)
2022/03/19(土) 17:00:25.72ID:mw5TX/57a b = a++;
の右辺を評価した結果は aの元の値で、副作用として aのアドレスにあるオブジェクトをインクリメントしているのでは
代入されるのは aの内容でなく、アドレスを持たない値で
の右辺を評価した結果は aの元の値で、副作用として aのアドレスにあるオブジェクトをインクリメントしているのでは
代入されるのは aの内容でなく、アドレスを持たない値で
358デフォルトの名無しさん (アウアウウー Sa5d-oCcm)
2022/03/19(土) 17:03:51.29ID:mw5TX/57a a++ は右辺値で、 ++a は左辺値
359デフォルトの名無しさん (スッップ Sd33-2DeC)
2022/03/19(土) 17:12:51.80ID:X795CU5ld どっちも右辺値としないとまずい
int main(){
int a=0;
int* p;
p=&(++a); // コンパイルエラー
p=&(a++); // こっちも
}
int main(){
int a=0;
int* p;
p=&(++a); // コンパイルエラー
p=&(a++); // こっちも
}
360デフォルトの名無しさん (アウアウウー Sa5d-oCcm)
2022/03/19(土) 17:42:57.61ID:mw5TX/57a そうだね、失礼しました
361デフォルトの名無しさん (ワッチョイ 11f0-B0ie)
2022/03/19(土) 17:50:05.80ID:nPptgbtB0 : BassClass(
std::format (IdPrefix, index, numBank)),(
std::format (NamePrefix, ++index, numBank))
ちょうどこんな感じのコンストラクタでラッパーするコード書いてたんだけど
インクリメントしてない方までつられて増えちゃうんだよね
C++のコード片でスマソン
std::format (IdPrefix, index, numBank)),(
std::format (NamePrefix, ++index, numBank))
ちょうどこんな感じのコンストラクタでラッパーするコード書いてたんだけど
インクリメントしてない方までつられて増えちゃうんだよね
C++のコード片でスマソン
362デフォルトの名無しさん (スッップ Sd33-kk3k)
2022/03/19(土) 18:11:19.38ID:8Fsv/onud d = ++a + b-- + --c + a++;
この結果は
++a;
--c;
d = a + b + c + a;
b--;
a++;
だよね
実際はこんな書き方しないほうがいいがw
この結果は
++a;
--c;
d = a + b + c + a;
b--;
a++;
だよね
実際はこんな書き方しないほうがいいがw
363デフォルトの名無しさん (ワッチョイ 7be9-noGs)
2022/03/19(土) 18:25:12.86ID:d0FibUHe0364デフォルトの名無しさん (ドコグロ MMbd-zKmY)
2022/03/19(土) 18:39:08.49ID:Uza1/JxDM365デフォルトの名無しさん (ワッチョイ 8bbb-35g2)
2022/03/19(土) 19:05:15.57ID:9SMEw2CG0 以下のような関数がインラインで実行されてるだけで、評価自体は++が先に行われてるんでないの?知らんけど
int inc(int* a) {
int ret = *a;
*a = *a + 1;
return ret;
}
int inc(int* a) {
int ret = *a;
*a = *a + 1;
return ret;
}
366デフォルトの名無しさん (アウアウウー Sa5d-63z5)
2022/03/19(土) 19:10:54.79ID:fJWxsuK3a 引数の評価順なんてCPUでも変わるだろ。
367デフォルトの名無しさん (ワッチョイ 8161-2DeC)
2022/03/19(土) 20:25:22.26ID:hj0ig94x0 未定義動作警察だ!
未定義動作の動作は定義されていないのでコンパイラは何をしてもいい
> d = ++a + b-- + --c + a++;
このコードの場合、
++a;--c;d=...; b--;a++;相当のコードを吐いてもいいし、
tmp=a;a=tmp+1;--c;d=...; b--;a=tmp+1; 相当のコードを吐いてもいい。
大抵は未定義動作がないことを前提に最適化をかけるが。
極端なことを言えば、d=42としてもいい。
この文の見た目の動作は定義されていないから
未定義動作の動作は定義されていないのでコンパイラは何をしてもいい
> d = ++a + b-- + --c + a++;
このコードの場合、
++a;--c;d=...; b--;a++;相当のコードを吐いてもいいし、
tmp=a;a=tmp+1;--c;d=...; b--;a=tmp+1; 相当のコードを吐いてもいい。
大抵は未定義動作がないことを前提に最適化をかけるが。
極端なことを言えば、d=42としてもいい。
この文の見た目の動作は定義されていないから
368デフォルトの名無しさん (ワッチョイ fb43-0XB4)
2022/03/20(日) 00:26:15.18ID:dAApHicf0 fgetsのファイル終了・エラー時の戻り値がNULLなのはなぜですか?
他の入出力関係の関数の戻り値はEOFになっています
いま入出力の勉強をしてるんですが、関数の引数や戻り値が少しずつ違うので覚えるのが難しいです
使っていくうちに覚えていくものでしょうか?
他の入出力関係の関数の戻り値はEOFになっています
いま入出力の勉強をしてるんですが、関数の引数や戻り値が少しずつ違うので覚えるのが難しいです
使っていくうちに覚えていくものでしょうか?
369デフォルトの名無しさん (ワッチョイ 8bbb-35g2)
2022/03/20(日) 00:53:13.92ID:tmhbCmKs0 細かな仕様はよく使うもの以外は毎度調べるよ
まあCの関数は数が少ないから全部覚えてるって人も少なくないかも
まあCの関数は数が少ないから全部覚えてるって人も少なくないかも
370デフォルトの名無しさん (ワッチョイ 8b63-noGs)
2022/03/20(日) 00:57:50.69ID:rKPZjyik0 よく使う関数の戻り値調べると面白いぞ
printfが何を返しているかとか、それは何故なのかとか
戻り値を使っている人を見たことがないけれど
printfが何を返しているかとか、それは何故なのかとか
戻り値を使っている人を見たことがないけれど
371はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d93e-bSSa)
2022/03/20(日) 01:37:41.92ID:u4Grkyrm0 >>361
こういう場合については未定義ではないが未規定の動作が含まれる。
副作用完了点の間で同一のオブジェクトに複数回の書き換えが生じた場合には未定義の動作となるが、
書き換えが一度の場合はその書き換えがどのタイミングで起こるかわからないというだけで、
未定義の挙動にはならない。
こういう場合については未定義ではないが未規定の動作が含まれる。
副作用完了点の間で同一のオブジェクトに複数回の書き換えが生じた場合には未定義の動作となるが、
書き換えが一度の場合はその書き換えがどのタイミングで起こるかわからないというだけで、
未定義の挙動にはならない。
372デフォルトの名無しさん (スッップ Sd33-kk3k)
2022/03/20(日) 08:21:37.14ID:e7HuEm7id373デフォルトの名無しさん (ワッチョイ 7b7b-P46e)
2022/03/20(日) 10:46:46.29ID:+oGVYZOT0 組み込みのソフトしていると
使わない関数が多くて忘れていきます
使わない関数が多くて忘れていきます
374デフォルトの名無しさん (スッップ Sd33-2DeC)
2022/03/20(日) 11:48:15.83ID:w4XPcyomd <stdio.h>は使えないとして組み込み系って使える標準ライブラリあるの?
375デフォルトの名無しさん (ワッチョイ 1302-dhUW)
2022/03/20(日) 12:55:28.41ID:DiBIkIVz0 windows.h
376デフォルトの名無しさん (スッップ Sd33-2DeC)
2022/03/20(日) 13:05:34.82ID:w4XPcyomd 使える標準ライブラリを聞いたつもりなんだが
あと<Windows.h>はOS依存のライブラリな
あと<Windows.h>はOS依存のライブラリな
377蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-S5Ea)
2022/03/20(日) 13:25:28.64ID:y5NxTTYed 標準っていっても何の標準かわからん。
ANSI CとかC89とかあるだろ。
ANSI CとかC89とかあるだろ。
378デフォルトの名無しさん (スッップ Sd33-2DeC)
2022/03/20(日) 13:41:32.19ID:w4XPcyomd ANSI C, C89〜C17 の規格で存在を要求されてるライブラリ
組み込みコンパイラだとそもそもC89かC99しかサポートしてないだろうし、
fileIOとかは欠けてるだろうから何なら使えるか聞きたい
組み込みの環境も多数あるだろうから >>373 みたいな人が普段どういう関数使ってるか気になった
組み込みコンパイラだとそもそもC89かC99しかサポートしてないだろうし、
fileIOとかは欠けてるだろうから何なら使えるか聞きたい
組み込みの環境も多数あるだろうから >>373 みたいな人が普段どういう関数使ってるか気になった
379デフォルトの名無しさん (スッップ Sd33-kk3k)
2022/03/20(日) 13:42:12.13ID:e7HuEm7id それぞれ組み込むシステムに付属してるだろ
一元的な名前はない
ひょっとしたらstdio.hという名前かもしれない
一元的な名前はない
ひょっとしたらstdio.hという名前かもしれない
380デフォルトの名無しさん (ワッチョイ 13ad-bSSa)
2022/03/20(日) 14:14:31.30ID:4KnLtgrc0 組み込みって言っても小さくても Linux 動いちゃうようなのもあるし、何とも言えんな。
381デフォルトの名無しさん (アウアウウー Sa5d-63z5)
2022/03/20(日) 14:19:28.79ID:BOo0cJz/a string.h は普通に使えた
382はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d93e-bSSa)
2022/03/20(日) 17:31:23.40ID:u4Grkyrm0 C の規格は「規格合致ホスト処理系」「規格合致フリースタンディング処理系」を規定していて、
フリースタンディング処理系はライブラリとして float.h iso646.h limits.h stdarg.h stdbool.h stddef.h stdint.h の内容に限定している。
この範囲なら実行環境に左右されずに用意できるはずという判断なんだろう。
フリースタンディング処理系はライブラリとして float.h iso646.h limits.h stdarg.h stdbool.h stddef.h stdint.h の内容に限定している。
この範囲なら実行環境に左右されずに用意できるはずという判断なんだろう。
383デフォルトの名無しさん (スッップ Sd33-2DeC)
2022/03/20(日) 19:31:33.68ID:w4XPcyomd 組み込み向けの最低限の規格があるのか
#defineとtypedefしかないが
なるほどこれなら環境がどんなにショボくても用意できそう
#defineとtypedefしかないが
なるほどこれなら環境がどんなにショボくても用意できそう
384デフォルトの名無しさん (ワッチョイ d9da-SQ3f)
2022/03/20(日) 20:07:23.09ID:mxx3UMQ+0 ファイルディスクリプタを使ってEOFを知りたいんだけどどうしたらいい?
普通にreadすりゃ0になるからわかるし、そもそもファイルなら
求めたサイズより小さく読めるからわかるけど
ちょうどぴったりでreadしたあとに、つぎのreadをせずに知りたい
feofとかファイルポインタだで使えんがや
普通にreadすりゃ0になるからわかるし、そもそもファイルなら
求めたサイズより小さく読めるからわかるけど
ちょうどぴったりでreadしたあとに、つぎのreadをせずに知りたい
feofとかファイルポインタだで使えんがや
385デフォルトの名無しさん (ブーイモ MM33-35g2)
2022/03/20(日) 20:57:34.02ID:cOd2oDpEM unblocking modeでopenしたfdをreadして判定すれば
386デフォルトの名無しさん (ワッチョイ 292c-kNuw)
2022/03/20(日) 22:28:44.17ID:aLyHOWc60 ファイルのサイズを取得して、そこへseek するとか?
そもそも、ファイルを開いて、ファイルの終わりにseek できるかも。
元々、ファイルの追記モードもあるぐらいだから
そもそも、ファイルを開いて、ファイルの終わりにseek できるかも。
元々、ファイルの追記モードもあるぐらいだから
387デフォルトの名無しさん (スップ Sd33-kk3k)
2022/03/20(日) 22:54:16.07ID:pl7vy6aed >ちょうどぴったりでreadしたあとに、つぎのreadをせずに知りたい
そもそもreadが終端まで来たらつぎにreadしてもファイルアクセスせずに0を返すから同じだろう
そもそもreadが終端まで来たらつぎにreadしてもファイルアクセスせずに0を返すから同じだろう
388デフォルトの名無しさん (ワッチョイ fb43-SD5K)
2022/03/20(日) 23:19:06.05ID:dAApHicf0389384 (ワッチョイ d9da-SQ3f)
2022/03/21(月) 16:21:59.97ID:nqBLTVDb0 >>387
後出し情報であれやけど
readしたデータをどこかに送信、最後のデータには最後フラグを立てる
みたいなやつなので、ぴったりのときに困ってたんよ
バッファを2面用意して、すぐ送信せず常に1回貯めて送信するのが
正解なんだろうなぁ・・・ まあいいけど
後出し情報であれやけど
readしたデータをどこかに送信、最後のデータには最後フラグを立てる
みたいなやつなので、ぴったりのときに困ってたんよ
バッファを2面用意して、すぐ送信せず常に1回貯めて送信するのが
正解なんだろうなぁ・・・ まあいいけど
390デフォルトの名無しさん (ワッチョイ 2910-tpIf)
2022/03/21(月) 17:02:36.51ID:geQt3ukX0 ファイルサイズと読み出し位置から残りサイズ計算するぐらいか?
391デフォルトの名無しさん (ドコグロ MM63-zKmY)
2022/03/21(月) 18:07:17.68ID:bPJRBgFUM >>389
ファイルサイズわかってるならlseek(fd, 0, SEEK_CUR) で現在位置調べりゃいいだけかと
ファイルサイズわかってるならlseek(fd, 0, SEEK_CUR) で現在位置調べりゃいいだけかと
392デフォルトの名無しさん (ワッチョイ d9da-SQ3f)
2022/03/21(月) 21:41:26.44ID:nqBLTVDb0 一応、ファイルじゃないときのことも考慮したかった
393デフォルトの名無しさん (スップ Sd73-2DeC)
2022/03/21(月) 22:38:50.94ID:j56ex+kVd ファイルディスクリプタが0とか"/dev/stdin"という名前のファイルを考慮し始めたらそれはもう無理じゃ?
394デフォルトの名無しさん (ワッチョイ 5336-yL30)
2022/03/21(月) 23:41:34.24ID:/12E7ImH0 なんかバグやセキュリティホールの温床になりそうだな。
395デフォルトの名無しさん (ワッチョイ 292c-kNuw)
2022/03/21(月) 23:55:00.11ID:avj/Dp0k0 キャッシュとか、同期・非同期処理とか、ブロックされる・されないとか、
ブロックデバイス・シーケンシャルかとか、リダイレクト・パイプとか、
共有の有無とか、メモリ内共有かどうかとか、
そんな事を考えだしたら、キリがない
なんせ、Linux API の7割は、IO の説明だから、10年以上掛かる
ブロックデバイス・シーケンシャルかとか、リダイレクト・パイプとか、
共有の有無とか、メモリ内共有かどうかとか、
そんな事を考えだしたら、キリがない
なんせ、Linux API の7割は、IO の説明だから、10年以上掛かる
396デフォルトの名無しさん (ワッチョイ 13ad-bSSa)
2022/03/22(火) 02:05:16.87ID:vyk85loe0 1バイト単位なら fdopen() しちゃって FILE * でバッファリングさせた方が楽だな。feof() も使えるし。
1バイト単位ではなく1000バイト単位とか、大きい塊でバッファリングする必要がある場合は自作して feof() みたいなチェックができるようにする。
(それでも FILE * でのバッファリングがあった方が遅いストレージにあるファイルなら読み出し効率上がると思うが)。
1バイト単位ではなく1000バイト単位とか、大きい塊でバッファリングする必要がある場合は自作して feof() みたいなチェックができるようにする。
(それでも FILE * でのバッファリングがあった方が遅いストレージにあるファイルなら読み出し効率上がると思うが)。
397デフォルトの名無しさん (ワッチョイ fb96-SjDQ)
2022/03/24(木) 22:37:34.92ID:jD8pMP9K0 以下はライブラリバージョンが1より大きければ処理を有効する例です
#if LIBRARY_VERSION > 1
…
#endif
この「LIBRARY_VERSION」は何者ですか?
どこに定義されているのでしょうか?
#if LIBRARY_VERSION > 1
…
#endif
この「LIBRARY_VERSION」は何者ですか?
どこに定義されているのでしょうか?
398デフォルトの名無しさん (ワッチョイ 8bbb-35g2)
2022/03/24(木) 23:58:11.94ID:ItLF0V9z0399デフォルトの名無しさん (ワッチョイ 29d2-2DeC)
2022/03/24(木) 23:59:45.82ID:bdM8JANZ0 MSVC環境ならカーソル合わせてF12キー押せばいい
gccとかは知らん
gccとかは知らん
400デフォルトの名無しさん (ワッチョイ 7b7b-kNuw)
2022/03/25(金) 00:14:08.19ID:sET9XTXv0 >>397
独習Cからの抜粋と予想して記載します
複数の開発環境で同じヘッダファイルを使用する際の
ライブラリバージョンの差異でエラーとなるのを防ぐための
テクニックです
各自が自分の開発環境に合わせて
#define LIBRARY_VERSION 1などと
定義する必要があります
独習Cからの抜粋と予想して記載します
複数の開発環境で同じヘッダファイルを使用する際の
ライブラリバージョンの差異でエラーとなるのを防ぐための
テクニックです
各自が自分の開発環境に合わせて
#define LIBRARY_VERSION 1などと
定義する必要があります
401デフォルトの名無しさん (スップ Sd33-Dya/)
2022/03/25(金) 06:50:38.08ID:0hAphrOld いえ、それはそのライブラリの作者(メンテナンスしてる人)が標準ヘッダ内で定義すべき内容です
ユーザーは>>397を自分のファイル内で使用してバージョンの差異を吸収できます
ユーザーは>>397を自分のファイル内で使用してバージョンの差異を吸収できます
402デフォルトの名無しさん (ワッチョイ 3696-VQaK)
2022/03/26(土) 01:22:16.42ID:EYuSPLit0403デフォルトの名無しさん (ワッチョイ 3696-DtE+)
2022/03/26(土) 16:05:05.08ID:EYuSPLit0 コンパイル(リンク)時に、同じプロジェクト内の別ソースの関数などを呼び出せるのはなぜ?
インクルードして教えてる訳でもないのに、もしかして全ソースを探しに行ってるんですか?
インクルードして教えてる訳でもないのに、もしかして全ソースを探しに行ってるんですか?
404デフォルトの名無しさん (ワッチョイ b1d2-JyYd)
2022/03/26(土) 17:27:18.26ID:T/pJeR6z0 全ソースから探し出すのがリンク
includeとかで関数宣言だけは見えるようにする必要はあるが。
main.c
-----------
char* func(int size);
int main(){
char* p=func(16);
}
-----------
funcという名前の関数は、
前方宣言(1行目)してるのでリンク時に探しに行く。
リンク時の解決用に定義した関数(とその実装)を.objファイルに一覧としてまとめる。
リンクという作業では、.objと.libと.dllから"func"という名前の関数を探し出す。
見つからなかったり2つ以上見つかったらリンクエラーになる。
古いCだと前方宣言がなければ int func(); 決め打ちで前方宣言扱いしたりする。
includeとかで関数宣言だけは見えるようにする必要はあるが。
main.c
-----------
char* func(int size);
int main(){
char* p=func(16);
}
-----------
funcという名前の関数は、
前方宣言(1行目)してるのでリンク時に探しに行く。
リンク時の解決用に定義した関数(とその実装)を.objファイルに一覧としてまとめる。
リンクという作業では、.objと.libと.dllから"func"という名前の関数を探し出す。
見つからなかったり2つ以上見つかったらリンクエラーになる。
古いCだと前方宣言がなければ int func(); 決め打ちで前方宣言扱いしたりする。
405デフォルトの名無しさん (スップ Sdb2-iclU)
2022/03/26(土) 18:26:49.41ID:kmPIEuI7d >>403
(古典的な)Cではアセンブラソースに変換してアセンブル→リンクされるが
通常の関数名や変数名はアセンブラのグローバルシンボルに変換され
リンク時に他のアセンブラソースから参照できるようになる
一方関数内のローカル変数やstatic宣言された関数や変数はローカルシンボルとして扱われ他のアセンブラソースからは参照できなくなる
(古典的な)Cではアセンブラソースに変換してアセンブル→リンクされるが
通常の関数名や変数名はアセンブラのグローバルシンボルに変換され
リンク時に他のアセンブラソースから参照できるようになる
一方関数内のローカル変数やstatic宣言された関数や変数はローカルシンボルとして扱われ他のアセンブラソースからは参照できなくなる
406デフォルトの名無しさん (ワッチョイ 3696-DtE+)
2022/03/26(土) 23:45:36.64ID:EYuSPLit0 よく分かりました、ありがとうございました
407デフォルトの名無しさん (ワッチョイ 3696-VQaK)
2022/03/27(日) 21:02:14.58ID:angONFKk0 グローバル変数の修飾子の意味は次の意味で合っているでしょうか?
修飾子なし:変数の実体を定義
extern修飾子:定義済みの変数を参照する
static修飾子:変数の実体を定義して、その変数を他のファイルからexternさせない
修飾子なし:変数の実体を定義
extern修飾子:定義済みの変数を参照する
static修飾子:変数の実体を定義して、その変数を他のファイルからexternさせない
408デフォルトの名無しさん (ワッチョイ b110-VQaK)
2022/03/28(月) 11:08:20.21ID:c4HYTfCO0 適当にググって見つかったexternとstaticの解説
ttps://daeudaeu.com/extern/
ttps://daeudaeu.com/static/
ttps://daeudaeu.com/extern/
ttps://daeudaeu.com/static/
409デフォルトの名無しさん (ワッチョイ 55c7-DtE+)
2022/03/29(火) 00:24:04.59ID:c+1KPnOj0410デフォルトの名無しさん (スップ Sdb2-iclU)
2022/03/29(火) 06:11:36.84ID:7UUvIzLId そんなに信用されてもw
411デフォルトの名無しさん (ワッチョイ b110-UE6D)
2022/03/29(火) 08:18:01.14ID:C0VnxRTv0 自分で色々なパターンでコンパイルして確認しないのかな?って思う。
412デフォルトの名無しさん (スッップ Sdb2-JyYd)
2022/03/29(火) 08:55:46.71ID:tKmNrPY6d413デフォルトの名無しさん (ドコグロ MM96-XX5V)
2022/03/29(火) 13:03:41.11ID:M0Gs9C4cM llvm-14 の、ソースツリーの外にcmake ディレクトリができる下品な感じ、なんとかならないの?
414デフォルトの名無しさん (ワッチョイ 09e4-Nuys)
2022/03/29(火) 15:17:04.78ID:X58TTE+20 >>413
cloneしたディレクトリの直下にbuildディレクトリ作ってそこでcmake 〜 ../llvmじゃいかんの?
今どきソースのディレクトリで直接ビルドしないのは下品というより上品ではないですか
cloneしたディレクトリの直下にbuildディレクトリ作ってそこでcmake 〜 ../llvmじゃいかんの?
今どきソースのディレクトリで直接ビルドしないのは下品というより上品ではないですか
415デフォルトの名無しさん (ドコグロ MM96-XX5V)
2022/03/29(火) 18:15:06.70ID:U1DxU1KgM416デフォルトの名無しさん (ブーイモ MM96-gJLc)
2022/03/29(火) 18:20:46.45ID:1zZAboUWM ソースツリーの中にbuildフォルダ作るのは上品なん?
417はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d23e-Slbg)
2022/03/29(火) 18:47:55.98ID:4oPH291+0 autotools でも out-of-tree build は出来るようにするのが一般的な作法。
あらゆるプロジェクトでそうしているというほどではないと思うけど、ごく普通にある。
あらゆるプロジェクトでそうしているというほどではないと思うけど、ごく普通にある。
418デフォルトの名無しさん (ワッチョイ 09e4-UE6D)
2022/03/29(火) 22:23:02.11ID:X58TTE+20 https://llvm.org/docs/CMake.html を見るとソースフォルダの外でビルドしなきゃいけないような感じに書いてあるけど、
https://clang.llvm.org/get_started.html を見るとリポジトリ直下にbuild作ってそこでビルドすればいいように書いてあるから、llvmはお上品にビルドできるのですわ
https://clang.llvm.org/get_started.html を見るとリポジトリ直下にbuild作ってそこでビルドすればいいように書いてあるから、llvmはお上品にビルドできるのですわ
419デフォルトの名無しさん (ドコグロ MM96-XX5V)
2022/04/01(金) 12:18:00.47ID:BXJ/mUbsM llvm-14
まだゴミw
色んなものがダメになるw
まだゴミw
色んなものがダメになるw
420デフォルトの名無しさん (ワッチョイ 6fb3-7L1B)
2022/04/12(火) 19:31:59.59ID:B1tFLWvv0 char buf[256];
memset(buf, NULL, sizeof(buf));・・・(1)
memset(buf, 0, sizeof(buf));・・・(2)
(1)と(2)同じ事をしていると思うのですが、どっちで記述するのがメジャーですか?
memset(buf, NULL, sizeof(buf));・・・(1)
memset(buf, 0, sizeof(buf));・・・(2)
(1)と(2)同じ事をしていると思うのですが、どっちで記述するのがメジャーですか?
421蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd02-qTly)
2022/04/12(火) 19:35:46.65ID:Dt0TGPDOd NULLはポインタだから(2)が正しいよ。
422はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a23e-vtdv)
2022/04/12(火) 20:06:33.56ID:5njWaFr40 >>420
言語仕様に厳密にいうと前者で初期化しようとした場合に buf が 0 で初期化されることは保証されないし、
コンパイルエラーになることもありうる。
整数定数式の 0 がポインタに変換したときに空ポインタになることは保証されるので
NULL が単に #define NULL 0 として定義している環境もよくあるんだが、
仕様上の NULL は「処理系定義の空ポインタ定数に展開する」ということになっていて
整数の 0 を書ける文脈に NULL を書いて通るとは限らないんだ。
そんで「整数定数式の 0」がポインタに変換されたときに空ポインタになることは保証されるが、
定数式ではない文脈での整数の 0 は空ポインタになることは保証されていないし、
逆に空ポインタを整数に変換したときに 0 であるとも限らない。
if 文などの制御式としてポインタを置いても問題ないのは C の制御式は !=0 が補われたかのように動作するというルールのおかげ。
言語仕様に厳密にいうと前者で初期化しようとした場合に buf が 0 で初期化されることは保証されないし、
コンパイルエラーになることもありうる。
整数定数式の 0 がポインタに変換したときに空ポインタになることは保証されるので
NULL が単に #define NULL 0 として定義している環境もよくあるんだが、
仕様上の NULL は「処理系定義の空ポインタ定数に展開する」ということになっていて
整数の 0 を書ける文脈に NULL を書いて通るとは限らないんだ。
そんで「整数定数式の 0」がポインタに変換されたときに空ポインタになることは保証されるが、
定数式ではない文脈での整数の 0 は空ポインタになることは保証されていないし、
逆に空ポインタを整数に変換したときに 0 であるとも限らない。
if 文などの制御式としてポインタを置いても問題ないのは C の制御式は !=0 が補われたかのように動作するというルールのおかげ。
423デフォルトの名無しさん (ワッチョイ 6fb3-7L1B)
2022/04/12(火) 20:07:57.92ID:B1tFLWvv0424ハノン ◆QZaw55cn4c (ワッチョイ 57e6-ZAg2)
2022/04/20(水) 22:16:48.28ID:vxzn/db60425デフォルトの名無しさん (ワッチョイ 97b3-4qoo)
2022/04/22(金) 15:01:50.27ID:YxI2bgUE0 (ソースtt.c)
#include <stdio.h>
#include <math.h>
void main()
{
double d;
int a;
d = 1.234;
a = round(d);
printf("%d\n", a);
}
$gcc tt.c
/tmp/cc0NPwg6.o: 関数 `main' 内:
tt.c:(.text+0x23): `round' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
こんな短いソースなのに解決できない。助けてー(´・ω・`)
OSはLinuxです
#include <stdio.h>
#include <math.h>
void main()
{
double d;
int a;
d = 1.234;
a = round(d);
printf("%d\n", a);
}
$gcc tt.c
/tmp/cc0NPwg6.o: 関数 `main' 内:
tt.c:(.text+0x23): `round' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
こんな短いソースなのに解決できない。助けてー(´・ω・`)
OSはLinuxです
426デフォルトの名無しさん (ワッチョイ ff02-DCm/)
2022/04/22(金) 15:04:48.71ID:SxzvmxoM0 どうせリンクしてないとかそんなんだろ
427蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdbf-i8wU)
2022/04/22(金) 15:05:51.08ID:BJPJNuGwd >>425
古いコンパイラにはroundがないかもしれない。
古いコンパイラにはroundがないかもしれない。
428蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdbf-i8wU)
2022/04/22(金) 15:06:16.30ID:BJPJNuGwd -lm
429デフォルトの名無しさん (ワッチョイ ff02-DCm/)
2022/04/22(金) 15:12:16.74ID:SxzvmxoM0 gccなら -lmで動的リンクする簡易オプションがある、プログラム内だけで完結したいならコンパイラ付属のmathライブラリのソースも含めてコンパイル
430デフォルトの名無しさん (ワッチョイ ff02-DCm/)
2022/04/22(金) 15:14:29.72ID:SxzvmxoM0 動的リンクだとmathは浮動小数点の扱いが実行環境に依存するので静的リンク推奨
431デフォルトの名無しさん (ワッチョイ 97b3-4qoo)
2022/04/22(金) 15:26:22.00ID:YxI2bgUE0 ありがとう
gcc tt.c -lm
でコンパイル通りました。
gcc tt.c -lm
でコンパイル通りました。
432デフォルトの名無しさん (スププ Sdbf-DCm/)
2022/04/22(金) 15:44:53.29ID:I04xh82td 割とよく使う標準ライブラリなのに一々リンク方法をユーザーに選択させるという事の意義を考えるように、おまじないじゃないぞ
433デフォルトの名無しさん (スププ Sdbf-DCm/)
2022/04/22(金) 17:13:59.15ID:RFW8R+x+d roundかtruncかfloorかはたまたceilかもしれないrintとその一味のヤバいやつら
こんなもんさっさと追放しろよ
こんなもんさっさと追放しろよ
434デフォルトの名無しさん (ワッチョイ ff02-DCm/)
2022/04/22(金) 17:31:11.41ID:SxzvmxoM0 整数型で表せない整数をdoubleで表したい時も稀にある
どうせ前後の整数(±1)は表せない不連続すきっ歯領域だし、どう丸まろうが影響無い部分だよ、って意図の明示に
どうせ前後の整数(±1)は表せない不連続すきっ歯領域だし、どう丸まろうが影響無い部分だよ、って意図の明示に
435デフォルトの名無しさん (ワッチョイ ff02-DCm/)
2022/04/22(金) 17:49:02.83ID:SxzvmxoM0 用途は思い浮かばないでもないが、適切に使われてないケースが多分99%
436デフォルトの名無しさん (ワッチョイ 9663-JgK/)
2022/04/23(土) 13:45:19.22ID:+Gd9xYyP0 表せないときは整数型多倍長処理作る
437デフォルトの名無しさん (ワッチョイ 2cae-E6ke)
2022/04/24(日) 11:54:23.21ID:S9c+iUdl0 GMPでそ
C++じゃないとちょっと使いにくいけど
C++じゃないとちょっと使いにくいけど
438デフォルトの名無しさん (ワッチョイ 51e6-DWDP)
2022/04/24(日) 15:18:10.66ID:Qwrn6LYl0439デフォルトの名無しさん (スフッ Sd94-6n8/)
2022/04/25(月) 03:24:41.99ID:LAuA6+3Dd 多倍長整数とか言ってる人は意図汲めてなくね?
正確性も表現力も不要だけど、それでも整数に相当する巨大数が要るのは極を利用した求根アルゴリズム(方程式解法)とかでしょうよ
たとえば、求めたい関数fの根がその逆数関数1/fの極と等しい事を利用するとか
もしdoubleの範囲を多倍長整数/任意桁数演算で308桁を陽に扱必要があるけど、そもそも極判定は指数部のみで行えるわけで、各桁の数字を陽に保持する意味が無い
一方で指数が巨大なdoubleを生で足すのは悪手
丸めれば各々の積分経路での評価値は真値から一旦遠ざかるけど、一貫した丸めを行う限りは10000万回も足せば互いに相殺されて均される
正確性も表現力も不要だけど、それでも整数に相当する巨大数が要るのは極を利用した求根アルゴリズム(方程式解法)とかでしょうよ
たとえば、求めたい関数fの根がその逆数関数1/fの極と等しい事を利用するとか
もしdoubleの範囲を多倍長整数/任意桁数演算で308桁を陽に扱必要があるけど、そもそも極判定は指数部のみで行えるわけで、各桁の数字を陽に保持する意味が無い
一方で指数が巨大なdoubleを生で足すのは悪手
丸めれば各々の積分経路での評価値は真値から一旦遠ざかるけど、一貫した丸めを行う限りは10000万回も足せば互いに相殺されて均される
440デフォルトの名無しさん (スフッ Sd94-6n8/)
2022/04/25(月) 03:38:21.89ID:LAuA6+3Dd ちょっと拵えすぎたような設定だったかもしれないけど、300桁を陽に保持して、ハードウェアの恩恵も無しに一万回加算とか、向かないどころかあまりにも非現実的過ぎる例もある
という例程度に
あとdouble使ってればinfが返ってくる可能性があるのが最大の利点
もしinfを引き当てられれば、それを与正入力がその浮動小数点実装における最高精度の解だと理論的に保証される
という例程度に
あとdouble使ってればinfが返ってくる可能性があるのが最大の利点
もしinfを引き当てられれば、それを与正入力がその浮動小数点実装における最高精度の解だと理論的に保証される
441デフォルトの名無しさん (スフッ Sd94-6n8/)
2022/04/25(月) 03:44:18.07ID:LAuA6+3Dd 訂正と補足
それを与正→与えた入力
(1/f)(x)→inf
と
f(x) → 0
と
fの根はそのx
は論理的に同値
それを与正→与えた入力
(1/f)(x)→inf
と
f(x) → 0
と
fの根はそのx
は論理的に同値
442デフォルトの名無しさん (ワッチョイ 3802-6n8/)
2022/04/25(月) 05:05:51.34ID:ueJIdSJ50 INF見付かれば恣意的に収束/発散閾値を調整しなくてエレガントだよな
俺は素性の事前に分かってて留数定理使えるような関数くらいしか扱わないから、気にせずそのまま足しちゃうわ
積分経路は(楽だから)正方形に取り、均等に4分割して極のある範囲を再帰的に絞り込んでる、下手にニアミスしたりするとかえって桁落ちしたりして整数倍からズレる
±0.1くらいなら、きっと極を囲めてるものと想定
Cで数値計算入門みたいな本で勉強してるけど、浮動小数点の特殊値とかエラーの扱いとかの記述が一切抜け落ちてて困る
俺は素性の事前に分かってて留数定理使えるような関数くらいしか扱わないから、気にせずそのまま足しちゃうわ
積分経路は(楽だから)正方形に取り、均等に4分割して極のある範囲を再帰的に絞り込んでる、下手にニアミスしたりするとかえって桁落ちしたりして整数倍からズレる
±0.1くらいなら、きっと極を囲めてるものと想定
Cで数値計算入門みたいな本で勉強してるけど、浮動小数点の特殊値とかエラーの扱いとかの記述が一切抜け落ちてて困る
443デフォルトの名無しさん (スフッ Sd70-6n8/)
2022/04/25(月) 19:15:48.77ID:o7ajKrF0d 実質ハードの実装に収束(発散)判定任せて綺麗に見えてるだけだがな
しかし比較無しに符号、複素数なら東西南北まで得られるのは便利
しかし比較無しに符号、複素数なら東西南北まで得られるのは便利
444デフォルトの名無しさん (ワッチョイ 73b3-jUKb)
2022/05/09(月) 06:57:39.16ID:Egg1/KgR0 20年くらい前、Windows98が使われてた頃なんですが
char s = ''; // ←シングルクォーテーション2個
っという書き方が許されてた記憶があるんですが、記憶違いかな?
今Linux上のgccでコレをコンパイルすると「error: empty character constant」になる
char s = ''; // ←シングルクォーテーション2個
っという書き方が許されてた記憶があるんですが、記憶違いかな?
今Linux上のgccでコレをコンパイルすると「error: empty character constant」になる
445デフォルトの名無しさん (アウアウウー Sa1f-cwrN)
2022/05/09(月) 07:35:16.71ID:QnLN+NJ0a あえてなのかバグなのかは知らんけど20年前のコンパイラがそういう記法を通してたってだけだろ
446デフォルトの名無しさん (ワッチョイ 73b3-jUKb)
2022/05/09(月) 08:27:27.53ID:Egg1/KgR0 >>445
冷静に考えてみたらコンパイラもOSも違うからそういうことだな
冷静に考えてみたらコンパイラもOSも違うからそういうことだな
447デフォルトの名無しさん (ワッチョイ 3ebb-RieT)
2022/05/09(月) 10:42:17.80ID:qGH53jdv0 ''で何が代入されるの?
448デフォルトの名無しさん (ワッチョイ 8f69-XDj1)
2022/05/09(月) 11:12:38.36ID:DLFHVgdp0 '\0' や 0 と同等の動作なんかねぇ
449デフォルトの名無しさん (ラクッペペ MMe6-PUK/)
2022/05/09(月) 11:15:27.95ID:DuxsXAR8M 普通に考えれば空文字だと思う
450デフォルトの名無しさん (ワッチョイ 7310-PvPk)
2022/05/09(月) 11:35:54.50ID:lTlzTKNA0 NULL 「何もないよー」な意味をあらわす単語
空文字 長さ0文字の文字列のこと
この解釈でOK?
空文字 長さ0文字の文字列のこと
この解釈でOK?
451デフォルトの名無しさん (ワッチョイ 8f69-XDj1)
2022/05/09(月) 11:37:44.15ID:DLFHVgdp0 文字と文字列は違う 今話題に上がってるのは文字のほう
452デフォルトの名無しさん (ラクッペペ MMe6-PUK/)
2022/05/09(月) 12:02:23.30ID:ItS/vT2KM 長さ0文字の文字列なら""(ダブルコーテーション)では?
453デフォルトの名無しさん (アウアウウー Sa1f-KEdX)
2022/05/09(月) 14:03:39.88ID:KBCMvYUWa >>448
まあそれが一番ありがちかと
まあそれが一番ありがちかと
454はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-PvPk)
2022/05/09(月) 17:13:19.74ID:9vSL2/iz0 >>444
言語仕様にはそれを通す規定は見つからないな。
少なくとも一文字は必要であることになってる。
C89 ではすでにそうなってるし、後の仕様でも変更はない。
出来る処理系があったのだとしたらあくまで処理系の拡張。
「たとえば 'ab' などのように二文字以上を含む場合は処理系定義」という意味の規定はあるので
雑に任意個の文字を受け付けるようにしたらうっかり 0 個も通してしまったとか、
意図的ではない挙動 (コンパイラのバグ) だった可能性もあるし。
言語仕様にはそれを通す規定は見つからないな。
少なくとも一文字は必要であることになってる。
C89 ではすでにそうなってるし、後の仕様でも変更はない。
出来る処理系があったのだとしたらあくまで処理系の拡張。
「たとえば 'ab' などのように二文字以上を含む場合は処理系定義」という意味の規定はあるので
雑に任意個の文字を受け付けるようにしたらうっかり 0 個も通してしまったとか、
意図的ではない挙動 (コンパイラのバグ) だった可能性もあるし。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」 [ぐれ★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 【苺ましまろ】立民衆院議員、人気漫画の水着少女画像を「醜悪」タイ人少女の性搾取事件と関連付け…党内で反発 [少考さん★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★5 [蚤の市★]
- 「残業キャンセル界隈」若者が増加?「職務放棄」との批判も…“定時退社の権利”どこまで通用するか [七波羅探題★]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 【超速報】統一教会、陳謝 [519511584]
- 高市政権「かけてもつながらない。機能していない」防衛当局間のホットライン機能せず [834922174]
- 【高市悲報】中国軍「公海で空母の発着訓練するって事前通告したのになんで自衛隊機は急接近してきたんだ…?」中国軍困惑★2 [931948549]
- 30過ぎた大人おじさんが大学生(昔)のままのファッションをする「おじさんキッズコーデ」、炎上して問題視される。 [153490809]
