[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/19 19:41 / Filesize : 280 KB / Number-of Response : 1014
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 157



1 名前:デフォルトの名無しさん [2021/06/28(月) 11:22:51.50 ID:so+vl3vs0.net]
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 156
https://mevius.5ch.net/test/read.cgi/tech/1601271690/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

2 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:26:33.76 ID:so+vl3vs0.net]
前スレ末期の流れを再掲
> 996 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 09:33:23.09 ID:so+vl3vs0 [1/2]
> printf("%d", sizeof (char)123); とやろうとしたら
> キャストのカッコがsizeofのカッコと解釈されてエラーになるのな
> printf("%d", sizeof((char)123)); ならおkなんだけど
> なんだか気持ち悪い
>
> 997 返信:デフォルトの名無しさん (ワッチョイ cf05-Ibo0)[sage] 投稿日:2021/06/28(月) 10:13:18.97 ID:x/UkG1ge0
> >>996
> sizeofって括弧なしで使えるの? 知らなかった
>
> 998 返信:デフォルトの名無しさん (ワッチョイ 0fda-qjGA)[sage] 投稿日:2021/06/28(月) 10:20:43.69 ID:WejOUFlX0
> >>996
> sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと
> まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという
> おかしな状態になるのでエラーになったのでは?
>
> 999 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 10:38:03.51 ID:so+vl3vs0 [2/2]
> sizeofとキャストはどちらも単項式なので右から結合するはず
> にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ
> 字句解析と意味解析ってことかな
>
> 1000 名前:デフォルトの名無しさん (ワッチョイ 0fd2-kMi9)[] 投稿日:2021/06/28(月) 11:05:48.75 ID:HW6dR9O/0
> そもそも
> sizeof (char)
> paだけでいいものをそう記述してるのが気持ち悪い。

3 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:28:49.59 ID:so+vl3vs0.net]
>>前スレ1000

いやcharのサイズが知りたいのではなく
キャスト式(char)123のサイズを調べようとしたんだ

Cはchar変数の値を使おうとするとintに拡張するし文字定数もint型なので
char型の値を持つ式なんてあるのかって

4 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:37:03.08 ID:XSoi24UgM.net]
cppreferenceのc operator precedenceの項の注釈によるとオペアンドはtype castにはできないって書いてあるね。ただ仕様書の該当箇所は探せなかった

5 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:58:43.53 ID:so+vl3vs0.net]
脚注2は俺が気持ち悪いと言ったことと似てるけどsizeof(int)*pが
(sizeof(int)) * pという算術乗算になるという話なら単項式のsizeofより優先順位が低いからまだわかる

6 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 12:57:31.08 ID:XSoi24UgM.net]
A.2.1が引用元みたいなんで読んでみるとsizeof (int)123はダメだね。
sizeof +(int)123なら動くようだ。sizeof (int){1}も動きそう。

7 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 15:54:14.85 ID:so+vl3vs0.net]
あーそうか
A.2.1. (6.5.3)では
unary-expressionに該当するものの1つに
unary-operator cast-expressionがあるけど
unary-operatorにキーワードsizeofが含まれず、
カッコなしのキャスト式は
sizeof unary-expressionとなっていて
sizeof cast-expressionではないってことか

8 名前:デフォルトの名無しさん [2021/06/29(火) 00:32:13.44 ID:jRoYjmsV0.net]
ところで sizeof((char) 123) と sizeof(char) って同じことだよな?

9 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 01:01:59.00 ID:cYz04uBKM.net]
ポインタキャストは敷居線さえ跨がなきゃ思い通りの値出てくるけど
数値キャストは難しいんだよな

10 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 01:04:11.67 ID:lZY/6JCta.net]
>>8
GCC 9.3.0 では両方とも 1 でした



11 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 01:05:05.10 ID:cYz04uBKM.net]
printf さんの独自性もあるし

12 名前:デフォルトの名無しさん [2021/06/29(火) 02:00:52.74 ID:jRoYjmsV0.net]
>>10
ていうかやるまでもなく結果が同じにならないとおかしいよね。
一方は値を char 型にキャストしているんだから sizeof の結果は char 型のサイズになる。
もう一方は char 型のサイズを求めているから char 型のサイズになる。

13 名前:はちみつ餃子 mailto:sage [2021/06/29(火) 04:29:15.93 ID:OP5z1lEO0.net]
二項演算子のいくつかでは汎整数拡張が適用されることになっているが
sizeof に渡す分には char のオブジェクトは char のオブジェクトだよ。

14 名前:デフォルトの名無しさん [2021/06/29(火) 08:37:44.49 ID:F75/2W0I0.net]
char型 + char型 の式でもint型に拡張されるんだっけ?

15 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 13:20:32.79 ID:f0Xm8hptd.net]
もち
単項プラスでさえ拡張する

16 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 13:41:07.94 ID:dKjX5GmV0.net]
typedefによる新しい型の定義って、コンパイラの工程的にはどの工程で定義されるの?
字句解析?構文解析?プリプロセスじゃないよね

17 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 14:16:01.66 ID:NxeKtV2S0.net]
質問が間違ってる気がするけどね。
コンパイルレベルで処理されるのか、リンクするまで処理されないのか、でしょ。
で、typedefは前者

18 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 20:18:28.43 ID:SX14oDOe0.net]
翻訳段階の何番目でやってんのかって質問だろ

19 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 20:52:30.02 ID:0ahpifum0.net]
構文解析の後 typedef と認知したうえで、シンボルのテーブルに追加してかないと
置換?読み替え?はできないよねぇ…

C言語は、その構造上1回の通読では解決できないんだっけ?

20 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 21:06:15.61 ID:SX14oDOe0.net]
5.1.1.2 Translation phasesくらい読んでから来いよ



21 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 22:00:49.44 ID:NxeKtV2S0.net]
だからぁw
構文解析ってのはパーサね?w←これは例えばbisonで作るやつね?w
字句解析ってのはレキシカルアナライザね?w←これは例えばflexで作るやつね?w
レキシカルアナライザかパーサかって、そもそもレキシカルアナライザってのは
字句区切るだけだよwそれをどんな命令であるかを解釈を決めるのが構文解析ねw

コンパイルの1pass,2passって話なら、まあそれでもいいけどさw
用語がでたらめすぎんでしょ。
だいたいそんなこと知ってどうするんだよ?w

22 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 22:05:17.86 ID:gp7v5PNW0.net]
セキュリティホール探し?

23 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 23:35:14.00 ID:dKjX5GmV0.net]
Cの構文解析器実装してるんだけどBNFのtypedefの扱いがイミフなんだよねー

24 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 23:57:55.23 ID:NxeKtV2S0.net]
>>23
またぁw
BNF関係ないでしょうw

つか、typedefなんて意味不明なんてことはないと思うけど。
特定の記法のことを指してるの?BNFで書かれた
typedefの規則が読みとれないって言ってるの?w

typedef struct {...};

struct {...} xxx;
を区別できないとかそんな話?
よくわかんないけど、変に切り出すんじゃなくて、
ストレートにこれがやりたいけど、これどうしたらいいか
わかんない、って聞く方がいいと思うんだが。
なにいってんだか、知ってる人ほど却ってわかんねーと思うんだが。

25 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 00:35:54.93 ID:dsegDYOD0.net]
typedefがstorage-class specifierに属してることを言ってるなら
構文上の便宜のためだけ(for syntactic convenience only)って6.7.1(5)に書いてあるけど
Annexのsyntax summaryだけ見てる感じかな

かなりエスパーしてるから的外れだったらすまぬ

26 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 01:02:59.78 ID:xHlidKVh0.net]
みなさんレスありがとう
「C BNF」でググって一番上に出るBNFを参考に実装しているんだけど、BNFが古いせいかtypedefの構文が欠落してるような気がして(気のせいでした。↓のレス参照)
でも<typedef-name>という要素はあるからtypedef機能自体はあるらしい
BNFに書いてないってことは構文解析以前の処理になるのかもしれないと思ってここで聞いてみたんだけど
混乱した人もいるみたいですまない

>>25
あー!そういうことですか
なるほど疑問が解けました
typedefをspecifierで扱ってるわけですね
ありがとうございます

27 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 06:48:58.92 ID:tpFz8l2w0.net]
typedefがないってことはK&R Cか

規格票でもドラフトでもいいから拾って読んでみ
www.open-std.org/jtc1/sc22/wg14/

28 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 09:43:56.46 ID:xHlidKVh0.net]
>>27
参照してるBNFはおそらくK&R Cですね
関数の宣言が古いスタイルになっているので
ありがとうございます、参照してみます

29 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 09:12:05.75 ID:17h8nqYk0.net]
リスト型構造体配列って他の言語でもあるのでしょうか?
現在職業訓練で勉強中なのですが、独学でやらないといけない範囲のようでして、
時間的余裕があまりない状態です。

他言語でも似たような考えが出てきて、Cで覚えておくと役立つなど
ございましたら、頑張って挑戦してみようと思っています。

30 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 12:16:52.25 ID:xP6i4weKM.net]
リスト型構造体配列ってのは講師の人の自作用語?
それなら定義を示してもらわんと。



31 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 12:38:05.00 ID:+M7J9sQi0.net]
リンクリストなら他の言語にもある
普通は配列とは言わないからその言葉は謎だけど……

32 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 13:34:21.36 ID:e6axNbpd0.net]
ポインタの代わりに配列のインデックスを保持してるような感じなのかね?
リスト型構造体配列

33 名前:デフォルトの名無しさん [2021/07/17(土) 16:17:40.91 ID:USprSk230.net]
C99かそれ以降の標準的な環境において

(bool)someval



!!someval

って(例外なしに)全くおなじ効果を生むと思っていいですか。

前者はJISX3010の6.3.1.2などで「値が0になるなら0,それ以外なら1」と書かれている一方,
後者は(初学者なので経験がなく,正しい認識ではないかもしれませんが)慣用的な書き方なので
規格票にも書かれておらず,正確に同じ意味なのかどうかを確かめられませんでした。

34 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 00:36:46.74 ID:vIcCvIPT0.net]
>>33
「意味するところは全く違うが、結果だけ見れば全く同じ」です。

35 名前:デフォルトの名無しさん [2021/07/18(日) 01:19:32.77 ID:euqgtMPHa.net]
bool型が導入されたことで得られるメリットはは何かあるでしょうか
またデメリットはあるでしょうか

36 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 07:53:07.50 ID:OEfNT0QGM.net]
メリットは、必ず真偽値になること

デメリットは、必ず真偽値になってしまうこと
例えばエラーコードのようにいい加減な経緯で拡張していくことはできない

37 名前:ハノン mailto:sage [2021/07/18(日) 09:54:45.66 ID:9YAoR/6C0.net]
>>35
ctypes.h の isalpha() とか islower() とかその他大勢は、偽のときは 0 を必ず返しますが、真のときは 1 とは限らない 0 でない別の数を返したりするんですよ
そういうのは紛らわしいので、そういう紛らわしさが減る bool の存在はありがたいですね

38 名前:デフォルトの名無しさん [2021/07/18(日) 16:58:13.77 ID:jPlpwmsoF.net]
関数の () は演算子
キャストの () は演算子
だそうですが
数学の数式で優先度上げるのに相当する () は演算子ですか?

39 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 17:14:40.88 ID:6AMrYKMS0.net]
いいえ

40 名前:デフォルトの名無しさん mailto:33 [2021/07/18(日) 20:03:28.13 ID:i83/r50ia.net]
>>34
ありがとうございます!



41 名前:33 mailto:sage [2021/07/18(日) 20:08:43.08 ID:i83/r50ia.net]
>>34
すんません
入力欄間違えました。

42 名前:はちみつ餃子 mailto:sage [2021/07/18(日) 21:49:36.58 ID:+Ch+KzUq0.net]
>>33
真偽値型にキャストした結果の型は _Bool で、 !! を通した型は int という違いはある。

https://wandbox.org/permlink/zlxhRTGr5Sj8IsiH

整数を扱う多くの場合では整数拡張が入ったりして違いが吸収
されてしまうからどちらでもいい場合がほとんどだと思うけど、
あらゆる状況で完全に同じとは言い切れない。

ちなみに C++ では整数に ! を適用した結果は bool なので、
もちろん !! の結果も bool になる。

43 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 21:52:36.39 ID:V2Gw1I3v0.net]
>>38
違う
一次式を囲む()は
後置式に属する関数呼び出しの()でも
単項式に属するキャスト記法のキャストの()でもない

44 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 22:42:35.27 ID:4j3GDjyk0.net]
>>42
_Generic 便利ですね……。C11から追加されたんだ。

45 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 22:44:22.95 ID:4j3GDjyk0.net]
>>38
ほとんど関係ないけど,Haskelだと優先度を上げる()記法を
$演算子で代用できるから,
「優先度を上げる()を演算子としてみる」というのはそう不自然ではないかも。

でも(たぶん)C言語だとそういうことはない。

46 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 17:37:03.07 ID:3YhpibAgF.net]
こういう認定試験用にC言語勉強するときって
https://www.sikaku.gr.jp/js/cpjv/
32bit版のコンパイラの方が良いんでしょうか?
64bit版でintとかsize_tとかサイズ変わると困りませんか?

47 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 17:41:05.09 ID:GP2gJIPC0.net]
逆にsizeof(size_t)が返す値が処理系定義であることを考え落とす癖がつくと
そこを弱点として狙われるぞ

48 名前:はちみつ餃子 mailto:sage [2021/07/20(火) 15:47:40.82 ID:BjsPOMc70.net]
変わって困ることならむしろ困ってみたほうが勉強になるんじゃね。

49 名前:デフォルトの名無しさん [2021/07/20(火) 17:03:23.21 ID:2ecX9oPqF.net]
> 1級で使用する環境について(公開試験)
コンパイラ Borland C++ Compiler 5.5
JIS X 3010-1993に対応
エディタ TeraPadまたはメモ帳
文字コード:SHIFT-JIS、改行コード:CR+LF

※当コンパイラの操作にはコマンドプロンプトの知識が必要です。
※解答用のソースプログラムは、SHIFT-JISで保存してください。
※指定した保存形式で保存されていない場合は、採点の対象となりません。

・・・なんだかなぁ

50 名前:デフォルトの名無しさん mailto:sage [2021/07/20(火) 18:27:33.17 ID:rDNdpvsmK.net]
せめてC99対応コンパイラにしようよ



51 名前:デフォルトの名無しさん mailto:sage [2021/07/20(火) 18:37:29.47 ID:LjuPHZpl0.net]
JISX 3010 1993で使えない構文や関数を回避して回答する能力を受験者に課すなんてなかなか高度な試験だね

52 名前:デフォルトの名無しさん mailto:sage [2021/07/20(火) 20:03:33.02 ID:Plw9uEZeM.net]
BCCってまだVSの無料版が無かった頃に無料で使えるコンパイラとして粂井氏のHPで紹介されてて使ってたなあ
その時代から何も進化してない資格なんだろうな……

53 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 00:20:28.07 ID:fGno+40ia.net]
bccとかLSI-C(試食版)とか、Cマガの付録で

54 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 07:39:41.26 ID:A0/pIuIc0.net]
BCCは知ってても それだけじゃ困ります

55 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 09:12:39.48 ID:+0/niNvm0.net]
> JIS X 3010-1993に対応

つーことは
int main(void)
{
printf("");
int x; /* これがダメ */
//このコメントもダメ
for(int y = 0; y < 1; y++) ; //これもダメ
}
今どきのコンパイラはみんなOKなのに
うっかり使うと減点されるという陰険な罠だな

56 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 09:45:21.46 ID:DbniEar00.net]
検定する側が時代遅れで
しかもこんなレベルじゃ
最早コボちゃん世代を嗤えませんね?

57 名前:はちみつ餃子 mailto:sage [2021/07/21(水) 10:08:36.90 ID:tIqEOSex0.net]
まあそういう時代もあったというのは知識として有るに越したことは無いが、
前提とされるとだいぶんしんどいな。

58 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 11:16:37.45 ID:CAhJ9aCx0.net]
じじい度検定になっとる

59 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 20:55:54.33 ID:NQ6A/S1F0.net]
Cの範囲内なのにえらいストレスフルやな
//コメントや for 内の変数宣言が禁じられると辛い

60 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 21:11:33.77 ID:kmyfY3M8M.net]
だんだんいじくり回されてワケわからん言語になるんだろうな



61 名前:はちみつ餃子 mailto:sage [2021/07/21(水) 22:43:38.51 ID:tIqEOSex0.net]
>>60
あまり変更するのもどうかと思うけど
昔のままで良しというわけにもいかん部分もあるし、
現実的な妥協点をさぐりながら改定していくしか仕方がないだろ。

62 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 00:04:04.57 ID:0pHC70l40.net]
今日,O'rellyの『Lex & Yacc』で「自己参照型構造体」という概念を知ったんだけど,
これが動作する理屈とかこういう書き方をする利点がマジでわからなくて苦戦してる。

でもこれを理解できるようになればメモリ確保やポインタ参照の話がわかるようになる……
と期待してがんばる。

63 名前:はちみつ餃子 mailto:sage [2021/07/22(木) 00:13:03.51 ID:r7I3CYuM0.net]
基本的なメモリ管理をわからない段階で yacc の本を読んでるのか。
実用を通して理解するのもひとつの道ではあるだろうけど、
最初はもっと単純な事例集みたいなのを見るほうがいいと思う。

64 名前:蟻人間 mailto:sage [2021/07/22(木) 00:14:52.69 ID:24/oAOWdd.net]
>>62
言わば再帰的定義の産物だよ。
論理的に入れ子の構造にする訳。
ヌルポインタで終わり。

65 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 09:38:36.05 ID:ERrrf0sq0.net]
自分が興味あることから掘り下げて行くのはいいと思うよ
とりあえず C言語 リスト構造 とかでググってみて

66 名前:デフォルトの名無しさん [2021/07/22(木) 10:14:39.29 ID:I7nexIleF.net]
struct A { A a; }; ではないからな
struct A { A *p; }; ならただのポインタ

67 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 10:53:20.02 ID:kFdJ5CFB0.net]
Ruby は、Bison, flex だったか?

68 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 12:38:58.69 ID:0pHC70l40.net]
>>63
「勉強不足」といわれればそれはその通りなんだけど
寧ろC言語のやっかいな部分にできるだけ触らないですむように
という動機でlexとyaccを学んでるんですよね……。
↑まあこういう考え方が間違ってるかもということに
『Lex & Yacc』を読んでいて気付きはじめていますが……

>>65
こういう↓ことですよね。
https://dev.grapecity.co.jp/support/powernews/column/clang/031/page02.htm
実は『Lex & Yacc』内ではそのコード概念の名前はでてこなくて
コード断片でggったりしてました。

69 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 12:48:57.06 ID:MMqyZQ9/0.net]
>>66
- A *p;
+ struct A *p;
ここはCスレだぞ

struct A
{
struct A a; //incomplete typeなのでオブジェクトは定義できない
};

70 名前:デフォルトの名無しさん [2021/07/22(木) 14:18:45.83 ID:I7nexIleF.net]
「自己参照型」っていうのが
誤訳なんじゃないかって思ってる

実際には「自己型参照型」でしかない
ポインタを代入するときに自分自身(オブジェクト)のポインタを代入する訳じゃないから
自己を参照してる訳じゃないんだ
ここを誤解するから理解が進まない

>>69 君には伝わってるから良いよ



71 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 14:34:42.13 ID:MMqyZQ9/0.net]
ISO: self-referential structure
JIS: 自己参照する構造体

誤訳かねえ

72 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 14:50:14.55 ID:G9vEgy1w0.net]
int arg;
p = (*p)(arg);

戻りが関数(A)のポインタとなる 引数int を取る関数(A) の宣言もまた
記述が無理な事案ですかの

73 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 15:29:46.76 ID:kFdJ5CFB0.net]
自己参照型は、2分木とか?

親は、2つの子のポインターを持っていて、それが再帰的に続くもので、
親子は同じ構造をしているもの

74 名前:はちみつ餃子 mailto:sage [2021/07/22(木) 16:19:06.28 ID:r7I3CYuM0.net]
わざわざ「自己参照する構造体」という用語が与えられているのは構造体タグのスコープを
説明する文法解説上の都合じゃないかな。

ノードを直列に接続すればリストになったり複数の接続を持てば木になったりというデータ構造のことと、
他のノードへの接続には C ではポインタを使うのが自然だというふたつの事柄を併せると
結果的に自分自身 (を含む構造体) と同じ型のオブジェクトを指すポインタが現れることもあるというだけのことで、
(データ構造、また、その管理においては) 指している型が同じなのか違うのかで
ことさらに区別して考える意味はあまりないように思う。

75 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 16:44:22.00 ID:zX6Mldkk0.net]
C言語の勉強中にリスト構造とかの部分でポインタがよくわからない!って人良く見るけど
実際のところC言語で仕事するときにリストとか二分木ってあんま使わなくね?
構造体の配列は良く見るけど

組み込み系とかだとメモリ少しでも節約するためにリストにしたりするの?

76 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 16:55:22.66 ID:MMqyZQ9/0.net]
> 組み込み系とかだとメモリ少しでも節約するためにリストにしたりするの?

意味がよくわからんが
組み込みでもリストもmallocも普通に使うぞ
OSがなきゃmalloc使えんとでも思っているのか?

77 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 17:03:27.91 ID:zX6Mldkk0.net]
>>76
いや一般的にリソース制約の多い組み込み系だからこそmallocとリスト構造使って
本当に使う分だけメモリ確保するのかなと思ったんだけど
なんか気に触ったのならすみません

78 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 17:12:18.33 ID:MMqyZQ9/0.net]
> C言語で仕事するときにリストとか二分木ってあんま使わなくね?

気に障るってか、数秒えってなった

79 名前:はちみつ餃子 mailto:sage [2021/07/22(木) 17:27:11.52 ID:r7I3CYuM0.net]
>>75
ワイはプロではないし組み込みのこともよう知らんけど
言語処理系を作ったときに当然ながら構文木を組み立てたりはしたし、
宣言した名前を保存するハッシュテーブルはチェイン法を使ったのでリストの一種でもあるわな。
(今なら面倒くさいので C++ で書いてしまう (標準ライブラリのコンテナを使う) だろうけど。)

分野によるとは思うけど、リストや木がそんなにほとんど目にしないというほうが不自然な気がする。

80 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 17:58:20.48 ID:4yFOTvD80.net]
>>77
横からだけどマイコン次第だわな。メモリの動的確保なんて、
そもそも無理ーって処理系もある。コンパイル時にメモリは固定しちゃう。

昨今の32bitのARMマイコンやらESPやら最近触ってるけどmallocも普通にあるし、
サポートライブラリにlistのソース付いてたり(それを使うべきかは悩む)。
更にc++なんかも普通に使えるから、なんか落ち着かんw



81 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 21:02:00.87 ID:NQdyjX4FM.net]
簡単なテキストエディタ作ってみてください

82 名前:デフォルトの名無しさん [2021/07/23(金) 00:04:27.67 ID:efwzK8IKa.net]
っsed

83 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 00:26:23.76 ID:IkF8M4100.net]
あれは簡単なのか?w
コマンド自由に操れる人、果たしているのかな?

84 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 06:51:28.40 ID:U6L8J7vD0.net]
作るのが簡単 ≠ 使うのが簡単

85 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 07:52:07.52 ID:/J+0ROXX0.net]
えー? sed禁止とか言われたら立ち直れんぞ

86 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 09:04:13.56 ID:/WZbwRMt0.net]
sed awkして(ry

87 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 09:41:53.92 ID:lst4CtWH0.net]
Screen EDitor ですねわかります

88 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 18:17:37.42 ID:kuO5Sx1T0.net]
よくUnixについての記事や書籍に,
「sedは入力全体を一度に読み込まず一行ごとに処理するから
動作が遅くならず,メモリ容量も気にしなくていい」
みたいなことが書いてあって,それは概ね事実だと思うんだけど,
C言語でsedを実装するときもviを実装するときに比べて
メモリ確保とかが楽なんだろうか。

89 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 19:24:45.90 ID:Nx0yKcVz0.net]
Ruby では、

IO.readlines は、ファイル内のすべてを読み込むが、
IO#each_line は、1行ずつ読み込む

90 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 19:49:44.19 ID:IkF8M4100.net]
sedにもホールドスペースがあるから、テキスト全体を読み込んで処理する事も出来る



91 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 23:06:00.86 ID:kreL/CiTK.net]
>>88
そらviよりは楽だろうが、Nコマンドとかで複数行抱える必要はあるし、そもそも数百万桁の行食わされるかもしれんし。
オリジナルsedは確か桁数制限あったよね?

92 名前:デフォルトの名無しさん mailto:sage [2021/07/24(土) 00:40:19.89 ID:osiAYP280.net]
>>91
最新の標準Unixだとsedは最低8192バイトだけ読み込めばいいみたいよ。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html

93 名前:デフォルトの名無しさん mailto:sage [2021/07/24(土) 01:03:44.23 ID:3ie/V+ee0.net]
POSIX標準は満たすべき最低レベルを規定しているって事ではないかな?
GNU sed の実装はこうみたいだ

For those who want to write portable sed scripts, be aware that some implementations have been known
to limit line lengths (for the pattern and hold spaces) to be no more than 4000 bytes. The POSIX standard
specifies that conforming sed implementations shall support at least 8192 byte line lengths. GNU sed has
no built-in limit on line length; as long as it can malloc() more (virtual) memory, you can feed or construct
lines as long as you like.

94 名前:62 mailto:sage [2021/07/26(月) 12:30:48.85 ID:yVSFJZsJ6.net]
自己参照型構造体(用語法的に正しくないという指摘もあるけど…)がちょっとわかったかも。

はじめは『もう一度基礎からC言語』の第31回「データ構造(10)〜構造体をポインタでつなぐ」
https://dev.grapecity.co.jp/support/powernews/column/clang/031/page02.htm
を参考にしてたんだけど,記事集の題名からも察せる通り「初めてC言語を学んでいる」
という状態で読むには向いていなかった。

図書館でそれっぽい本を漁って見つけた,
『C実践プログラミング』の17章「高度なポインタ」にある解説が
初学者としては一番わかりやすかった。
わざわざこのスレで報告する需要はないかもしれないけど,
将来に,おなじような概念の理解で詰まっているひとの
助けになるかもしれないからという言い訳でもって書き込ませてください。

--

C言語でデータ構造を作ろうと思ったら,
基本的にコンパイル時から大きさを決め打ちして用意せざる得ないけれど,
無から有を作り出せるー*1]malloc関数を用いることで
コンパイル時ではなく実行時に自由に拡大できるという,
記憶領域を食いにくいのに大規模な情報を格納できるデータ構造を作れる。
なぜ構造体を使うのかは自明すぎるためか書籍では明言されていなかった。
あえて言葉にするなら,
C言語において 複雑な情報を格納できるデータ構造を作るにあたって
「構造体を定義する」ことはもっとも一般的な慣行であることと,
C言語の演算子に自己参照型構造体の操作に非常に便利な演算子
構造体ポインタ演算子->が用意されているということが決め手なのかな。

*1: ちょっと違う気がするけど,書籍にはそう書いてあった。

95 名前:デフォルトの名無しさん [2021/07/26(月) 14:20:07.95 ID:9MzzzjGrF.net]
https://dev.grapecity.co.jp/support/powernews/column/clang/031/page02.htm
観たけど余談が多過ぎてなかなか本題に入らずイライラするω

あと確かに初心者向けではない
入口にたどり着く前に挫折する文章の書き方だと思う

96 名前:デフォルトの名無しさん [2021/07/26(月) 14:22:50.46 ID:9MzzzjGrF.net]
>『C実践プログラミング』の17章「高度なポインタ」にある解説が

君にとって判り易かったのかも知れないが
君の感想文を読むとあまり良い本ではなさそう

97 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 14:35:32.21 ID:5u5J/MDS0.net]
ama zon 4900900648

2冊目か3冊目に読む本
2005年6月21日に日本でレビュー済み
以前、某雑誌の特集で、Cがわかればすべてがわかるというのがあり
ましたが、まぁヨイショのし過ぎな文句なのかもしれませんが、依然
として、知っておいたほうがよい言語だと思います。
Cでプログラムするような機会は、ほんとここしばらく全くないです
けど、Cを勉強していたおかげで今までかなり助かってます。なんと
いってもCの影響を受けた言語は多いですからね、色々応用がきくも
のなのですよ。
で、肝心のこの本ですが、前訳本でも書きましたが、初心者を脱しよ
うとしている人にとっては最適だと思います。よくありがちな、Cの
文法やテクをただ書いているだけの本とは違います。プログラムのス
タイルやプログラムの仕方についての記述が数多くあります。
Cのような言語の場合、どのようにコーディングするのか、言い換え
るとWHATだけでなくHOWについて必ず考えなくてはならないと思いま
す。この本は常に、HOWについて意識した記述をしており、そういった
点が、この本を推奨する大きな理由です。
ただ、この本だけで、ポインタとかのキモはさすがに理解できません
でしたので、別の本を読む必要があります。

98 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 14:52:24.77 ID:9wDqt6nuF.net]
>>74
>(データ構造、また、その管理においては) 指している型が同じなのか違うのかで
>ことさらに区別して考える意味はあまりないように思う。

それ

>>94
>C言語の演算子に自己参照型構造体の操作に非常に便利な演算子
>構造体ポインタ演算子->が用意されているということが決め手なのかな。

まだ誤解してると思う

99 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 14:57:02.20 ID:5u5J/MDS0.net]
不充分。この本だけでは足りない。
2019年4月13日に日本でレビュー済み
敢えてこの本を買う意味が分からない。
20世紀に買ったが、この本だけでは解決できない問題があり、投げた。

よくある fgets & sscanf のコードの部分では、入力バッファのクリアを行う方法が書かれていなかった。
当時はインターネットのコンテンツが今ほど発達しておらず独学ではお手上げ。
他にも何か問題点があった気がするし、今や様々な解説サイト、また「よくある解説サイトの誤りを指摘するサイト」で足りる。

セキュリティ対策についても、wikipediaのサンプルコードやjpcertの「CERT セキュアコーディングスタンダード」など、今では豊富な資料がネットで入手できる。必要なら英文資料だってネットで容易に入手できる(もちろんC99の規格文書も)。

100 名前:デフォルトの名無しさん [2021/07/26(月) 16:06:22.39 ID:+kNv7glZa.net]
諸々のコンパイラや環境がC11に準拠するようになって久しく、また業務やOSSでもC11で導入された新機能を使うようになってきてる印象があるんだけど(要出典w)、こと並列処理に関してはまだまだC99+POSIXスレッドを使ってた方が良さそうね。
久しぶりに並列処理を書いてみようと思ったんだけど、C11で標準規格として導入されたthread.hに対応してるコンパイラが現時点でも(特にUnix系で)ほとんどないことが意外だった。
今のところthread.hをUnixで使いたかったらmusl Cくらいしか選択肢がないし、
ttps://www.etalabs.net/compare_libcs.html
3年前の電子掲示板の書き込み(要は典拠性が低い)ではあるけど
ttps://www.reddit.com/r/C_Programming/comments/94acpl/c11_vs_pthreads/
ほとんどの人がC11ではなくPOSIXが定めてるスレッド使ってるみたいだし。

せっかく汎OS的に並列処理がかけそうな規格なのに、もったいないというかなんというか。。。



101 名前:ハノン mailto:sage [2021/07/26(月) 20:52:03.28 ID:PhHFyA7M0.net]
>>99
>入力バッファのクリアを行う方法
入力バッファのフラッシュは確か MS のコンパイラだけでしか使えない環境依存だったかと
行末に \n が在る、とかのルールがあれば、それが出るまで読み捨てればいいのですが、そういうルールがなければどうしようもない気が

102 名前:ハノン mailto:sage [2021/07/26(月) 20:54:03.66 ID:PhHFyA7M0.net]
>>100
>せっかく汎OS的に並列処理がかけそうな規格

C11 は調べていませんが、C++ と比べてどうですか?私は C++11 以降でそういうのを書いています‥‥

103 名前:はちみつ餃子 mailto:sage [2021/07/26(月) 21:07:00.92 ID:afAoM3cN0.net]
>>100
C11 のスレッドはオプショナルなのでスレッドを提供しなくても C11 準拠を名乗れる。
C の立場からすれば標準ではあまり高レイヤな機能を要求するのは気が引けるだろうし、
かといっていまどきスレッドに全く触れないでいるというわけにもいかないという妥協なんじゃないかな。

C11 のスレッドの基本的なモデルは POSIX のスレッドとそんなに違いがない (名前が違う程度) ので、
かえって乗り換える強い動機にならないのかも。

104 名前:62 mailto:sage [2021/07/26(月) 22:30:44.17 ID:sOMY1Y2o0.net]
>>96
>>98

ご指摘ありがとうございます。
構造体リストについてもう一度 勉強しようと思います。
(他の方も書評の引用

105 名前:などありがとうございます)
『C実践プログラミング』のAmazon書評にあった
『Cクイックリファレンス 第2版』というのを試しに読んでみたところ,
かなり規格網羅的で丁寧だと感じたので,
当面はこれで勉強してみようと思います。
こちらの書籍には「
struct data {
// some code...
struct data *next
}
」という形のコードの解説そのものはありませんが,
ポインタの解説をCの規格に沿ってしてくれているので
かなり良い教科書として使えそうです。

以後言い訳::
いまのところ,まだC言語の規格が全て頭に入っている状態ですらなく,
ましてや実際のプログラミング作法も分かっていない段階なので,
ある書籍を見たときの(現代における)正確性・信頼性の判断が
できないんですよね……。
『C実践プログラミング』は昔のO'Reillyが出している書籍なので
ある程度信頼できるかな,と思って読み進めていたんですが,
(実際,本質を突いていて分かりやすいと感じる部分も多くありました)
時代的にも正味の内容的にも現代において参考にすべき
良書とはいいがたいのかな……?
[]
[ここ壊れてます]

106 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 05:25:18.45 ID:x4yitIm80.net]
ポインターで次へつないでいく、リストみたいな自己参照型。next pointer。
同じ構造体のリスト。
動的関数型のElixir は、片方向リストを使う

a → b → c → d

struct data {
struct data *next
}

これが両方向リストなら、struct data *prev も持たなければならない。
次・前の2方向へ、たどれなければならないから

a ←→ b ←→ c ←→ d

ポインターに、null を代入すれば、次・前は存在しない。
つまり、終端を表す

詳細は、アルゴリズム・データ構造を参照

107 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 10:57:27.91 ID:cZjH0t2V0.net]
>>98
いや確かに -> は自己参照する構造体を使うときに好都合だぞ
(*(*p).next).next が p->next->next で済むんだから

108 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 11:05:53.35 ID:/ekQh9610.net]
双方向で b を削除するのに
b->prev->next = b->next;
b->next->prev = b->prev;
b さよなら
これで済むからありがたい表記ではあるな

109 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 11:39:36.88 ID:neQM5ma+0.net]
>>107
あ、なる
良く出来てんな

110 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 11:42:04.93 ID:sIvc9ZAG0.net]
忘れずにちゃんと成仏させろよな



111 名前:デフォルトの名無しさん [2021/07/27(火) 16:12:06.91 ID:Dog97BpdF.net]
>>106
屁理屈

112 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 17:25:02.44 ID:cZjH0t2V0.net]
>>110
異論があるなら堂々と言えよ
自分の意見が屁理屈かどうか見せずにそれを言うのは卑怯だぞ

113 名前:デフォルトの名無しさん [2021/07/27(火) 18:25:54.21 ID:Dog97BpdF.net]
そもそも話がかみあってない
こっちは気付いてるけど
君は気付いていない
ただそれだけ
だから屁理屈

114 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 18:38:55.37 ID:cZjH0t2V0.net]
結局、自分は尻尾を見せないんだな
やりあう価値もないゴミだな、唾棄

115 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 18:52:50.94 ID:S/tVMF6N0.net]
自己参照型の構造体で固定段数のリンク手繰るのに便利にはなってるけど
自己参照型の構造体があるがゆえに -> ができたんじゃなく
単にポインタの指し先(構造体)のメンバを (*). じゃ遠回りなので直接指定したいがための存在だと思ってる

116 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 19:55:06.48 ID:rlqI0SGsK.net]
>>114
同意だが、.で共用出来なかったんかね?
関数と関数ポインタみたいな感じで、左辺がポインタだったら逆参照してからメンバアクセス。

117 名前:はちみつ餃子 mailto:sage [2021/07/27(火) 23:09:50.37 ID:eiJldbv00.net]
>>115
Rust ではそうしてるんだから C でも

118 名前:最初からそういう選択も出来たはずではあると思う。
だけど違うことをするのに同じ見た目にするのが良いかどうかというのは微妙なところ。
どちらが良いと一概に言えるもんではないからな。
[]
[ここ壊れてます]

119 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 00:16:37.31 ID:GYM2ckiMM.net]
CはRustの派生だったのか、知らなかった

120 名前:はちみつ餃子 mailto:sage [2021/07/28(水) 00:34:49.35 ID:0ASLy6H40.net]
>>117
派生関係も時系列も前提にしてない。
別の選択をしたものが事実として存在するので可能であるのは疑いないと言ってる。



121 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 00:53:01.29 ID:Fz30Fvzo0.net]
FortranやCobolにも導入して欲しいのか?

122 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 01:00:09.40 ID:nkHrLyVI0.net]
うーん?

ある構文(範疇としては演算子の形態論?)について,
「他の言語での採用例があるからC言語がそういう構文を持っていても不思議じゃなかった」
という話が展開されていたと思うんですけど,
どうして「RustはCの派生」とかFortranやCOBOLの構文の話になったんですかね……?

123 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 01:46:29.97 ID:LX2CDHAF0.net]
バカだから

124 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 09:52:29.36 ID:M/k1RjyqH.net]
C99以降で真偽型をboolのように表記したいときは<stdbool.h>を読み込みますが,
規格票には「型boolはマクロとして定義しろ」とあります。
www.open-std.org/JTC1/SC22/WG14/www/docs/n2596.pdf#section.7.18

一般に既存の型から新しい表記の型を定義するときはtypedefを使うべきだと
(典拠は失念したのですが)聞いたことがあります。
たしか,コンパイラによる検査があったりより構文的に厳密になったりするから,
というような理由だったはずです。
真偽型boolがtypedefではなくマクロで定義されている理由ってなんでしょうか。

思い当たる理由としては,C++との互換性がありますが,それをC言語の規格で考慮する意味がない
(というか,C++の規格をC側から参照すると循環的になってしまう気がする)
気がします…。
C規格の論理的根拠の真偽型にかんする節も読みましたが,
「typedefではなくマクロを使う理由」は記載されていませんでした。
www.open-std.org/JTC1/SC22/WG14/www/docs/C99RationaleV5.10.pdf

125 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 10:26:19.41 ID:vTqcwKkg0.net]
マクロだと#undefできるから自分でboolを定義してる古いコードのための移行措置っぽいね
<stdbool.h>をincludeしなければいいと思うけど間接的にincludeされるケースもあるんだろう
_Boolの方は予約語になってる

7.18 (4)
..., a program may undefine and perhaps then redefine the macros bool, true, and false.
プログラムはbool、true、falseマクロをundefineして再定義することができる

7.31.11 (1)
The ability to undefine and perhaps then redefine the macros bool, true, and false is an obsolescent
feature.
⇒ bool、true、falseをundefineして再定義できる特性は廃止されつつある

126 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:14:26.76 ID:I0vZ6ZDJF.net]
Win32APIとか使わずに
Cの標準関数でカレントディレクトリではなく
今実行中のexeのpathを得る方法はどれですか?

127 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:21:24.51 ID:Zs50Z/m/0.net]
int main(int argc, char* argv[])
の argv[0] で実行ファイルへのフルパスがえられるのは環境依存だったかな・・・

128 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:22:28.68 ID:uGnpdH8xa.net]
mainの第2引数の argv[0] にはコマンドラインから入力した通りのコマンド名が入っているんだっけ
フルパスで入っているんだっけ

129 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:24:05.30 ID:uGnpdH8xa.net]
被った
たしか Windows はフルパスだったような…
違ってたらごめんなさい

130 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:27:22.89 ID:TLecxenIM.net]
実装に依存



131 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:35:40.50 ID:uGnpdH8xa.net]
Windows という書き方はよくないかな
シェルの実装によると思います
なので、WSLに持っていくと期待通りに動かなかったりするかもしれません
ここでは Windows限定でよさそうだけど

132 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:20:46.92 ID:6qacKWPx0.net]
え?そう? Windows で C 使う人って今はあまりいないのでは? Linux とかなら分かるけど。

133 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:41:10.64 ID:4VQYix970.net]
powershellはフルパスだけどcmdは入力のまま
結局はCreateProcessに渡した文字列なのでフルパス前提にしちゃだめよ

OSに依存しない方法で確実なのはないよなぁ
argv[0]が
ファイル名のみ:カレント+環境変数pathを走査
相対パス:カレントと連結
絶対パス:そのまま
とかやればそこそこいけるだろうけどめんどくさいな

134 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:54:41.98 ID:vTqcwKkg0.net]
純粋なC標準の範囲では不可能な気がする
カレントディレクトリをとるgetcwd()もPOSIX(unistd.h)だし
C言語の標準ライブラリにはディレクトリ階層の概念自体がなさそう

135 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:55:33.60 ID:uGnpdH8xa.net]
>>131
powershell と cmd で違うのか…
なんでそうしたんだろ
何れにしても、けぅこう面倒なのね

136 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 14:05:55.87 ID:I0vZ6ZDJF.net]
みなさんありがとうございます
dirname(argv[0]) したら argv[0] が壊れました
ほんとうにがりがとうございました

137 名前:蟻人間 mailto:sage [2021/07/28(水) 14:19:05.25 ID:JuarLz62d.net]
本当のニガリが10、あったと?

138 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 14:21:25.34 ID:tV9+c+Bb6.net]
これ解決策じゃなくて愚痴なんだが、main()関数が使えるのはホスト環境で、つまりmain()関数のargv[]引数は「OSによる支援」を前提にできるんだから、実装依存じゃなくて「argv[0]には実行されたファイルのOSにおけるパス名が格納される」みたいな仕様にしてもよかった気がする。
それこそstdint.hみたいに、多種多様な機器への対応を考えなくてもいい関数なんだから、実行環境のファイルシステムやらをある程度は仮定しちゃってもいいわけで。

139 名前:デフォルトの名無しさん [2021/07/28(水) 16:21:41.95 ID:6qacKWPx0.net]
ファイルシステムもOSもない組み込み機器もあるわけで・・・

140 名前:はちみつ餃子 mailto:sage [2021/07/28(水) 16:21:59.41 ID:0ASLy6H40.net]
>>136
どんな OS でも Unix 風のファイルシステムを採用しているというわけではなくて、
たとえば BTRON が採用しているファイルシステムでは
同名のファイルが存在してよく、ディレクトリのような階層化は存在しない。
全体で唯一に区別できる名前 (フルパスに相当するもの) がない。

OS だってファイルシステムだって多種多様なんで、
起動時に「なんらかの」文字列で情報が与えられるということ以上は
環境依存にならざるを得ないよ。



141 名前:はちみつ餃子 mailto:sage [2021/07/28(水) 16:25:16.04 ID:0ASLy6H40.net]
>>137
その場合は通常の main 関数からの起動にはならない (main に意味のある引数が渡されないか特別なスタートアップ経由で起動される)
ので、「main に値が渡されるならば」それなりの OS が仮定できるというのが >>136 の言ってることやで。

142 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:03:22.93 ID:Y6SMxOTL0.net]
>>139
すげぇ
たまには正しくわかりやすい説明できんじゃん
ちょっと見直した

143 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:21:15.71 ID:S51yZazJ0.net]
コード記述してて実行ファイルのフルパスが必要となるんだから
それなりのOSから叩き起こされてること前提よね

144 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:43:00.22 ID:nkHrLyVI0.net]
>>138
> BTRON が採用しているファイルシステムでは
> 同名のファイルが存在してよく、ディレクトリのような階層化は存在しない

知らんかった……。
調べたところBTRONは組込み機器向けのファームウェアじゃなさそうだし,
ホスト環境=「それなりのOSが期待できる」環境あっても,
「あるファイルのパス名が存在して,その絶対値が文字列として一意に定まる」
ことさえ期待できないのか……。

145 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:54:22.92 ID:wp9dn28tK.net]
>>134
dirname()は引数を破壊するのでコピーしてから渡すべし
今回のケースでは結局ダメだけどw

146 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:56:43.36 ID:nkHrLyVI0.net]
> [...] the array members argv[0] through argv[argc-1] inclusive shall contain pointers to strings, which are given implementation-defined values by the host environment prior to program startup.

www.open-std.org/JTC1/SC22/WG14/www/docs/n2596.pdf#section.5.1.2.2.1

C2xでもargv[0]に何が格納されるかは「実装依存」って書いてあるね……めちゃくちゃ残念だ。
あとこれ読んでて気が付いたけど,「ホスト環境」ってhost environmentじゃないのね。
hosted enviromentだから,正確に訳すなら「ホスト済み環境」とかのほうが良いのかな?

147 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 22:12:53.76 ID:vTqcwKkg0.net]
そのhosted environmentはプログラムの実行環境(execution environments)を
・freestanding(自立した環境=OS無しの組み込み系)
・hosted(OSにhostされた環境)
に分けたものだからOSとかプラットフォームを指すホスト環境とはたぶん別の意味

148 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 19:40:44.58 ID:ftRMaVHk0.net]
hosted environmentの概念には明らかにUNIXが背景になってるね
MS-DOSだのCP/MだのROM BASICだのまでは想定してない

149 名前:デフォルトの名無しさん mailto:sage [2021/07/31(土) 21:45:13.12 ID:c1SsRmFt0.net]
>>146
くわしくしりたいです。

「OSというのものは高性能である」という前提が
Unixとかでしか通用しなかったってことですか?

150 名前:はちみつ餃子 mailto:sage [2021/08/01(日) 11:25:29.19 ID:grRzUWQ80.net]
>>147
性能とかじゃなくてモデル化の仕方が多様という話。

たとえば古い時代の BASIC (N-BASIC など) は環境変数やコマンドラインという概念は持たないが、
違う形でデータを受け渡す方法は持っていて、どちらが高性能かというようなものではない。



151 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 18:29:17.83 ID:1DStn3/B0.net]
>>148
今 調べた知識なのでいろいろ間違っているとは思うのですが,
N-BASICとかってそもそも「OS」なんですかね……?

「hosted environmentという概念はUnixを想定したもので,
古いBASICでは通用しない」
という話からは,
1. Unixと古いBASICが同列の概念である
2. hosted environmentは「OSがある環境」を指している
ようなことが読み取れるんですが,

1. N-BASICはUnixのような
「機器→抽象化層1 (HAL/OS) →カーネル→シェル」
みたいな構造では表わせない位置にあるため
Unixと同列(あるいは類似)の概念として扱うのは
違うような気がすること

2. そもそもhosted environmentは
C2x規格の5.1.2.2で規定されている動作を実装した処理環境であって
「OSがある環境」を指してはいないこと
(だからUnixがどう,みたいな話は関係ない?)
www.open-std.org/JTC1/SC22/WG14/www/docs/n2596.pdf#paragraph.5.1.2.2

などから,ちょっと納得しがたいです……。

152 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 18:40:30.22 ID:4Ph4Dvnc0.net]
IPLで起動して、ハードウエアへのアクセスを代行し、
コマンドをタイプして結果を文字で表示するCUI
という観点からはUNIXとBASICは同列だよ

MS-DOSでのデバドラはお行儀でしかなく
アプリが直接I/Oなんて珍しくもなんともないが
一応argc, argvという概念はあった

言い出すとマイクロカーネルをヨイショする連中を嘲笑うように
モノリシックカーネルでいったLinuxは、じゃあOSに非ずなのかと

OSとは何か、何が該当し、何が該当しないのかは
見方が色々で誰もが認める基準はなかなかできない

153 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 19:45:48.16 ID:bX2lzryL0.net]
なんかわざと煽ろうとしている?

154 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 20:00:02.07 ID:tSrdcQx/0.net]
OSから外れた例をわざわざ挙げたのだろうと思っていたが、OSが何か分からない人でしたか...

155 名前:はちみつ餃子 mailto:sage [2021/08/01(日) 20:46:27.86 ID:grRzUWQ80.net]
>>149
> N-BASICとかってそもそも「OS」なんですかね……?

---------- JIS X 0001-1994 ----------
オペレーティングシステム, OS(省略形)

プログラムの実行を制御するソフトウェアであって,
資源割振り,スケジューリング,入出力制御,
データ管理などのサービスを提供するもの。

備考
オペレーティングシステムは,ソフトウェアが主体であるが,
部分的にハードウェア化することも可能である。
-------------------------------------

まあ要するに OS がどのような構成を持つものなのかというのは曖昧で、
Unix 的な立ち位置も OS が持ちうる構成のひとつでしかないんよ。

> Unixと同列(あるいは類似)の概念として扱うのは
> 違うような気がすること

「モデル化の仕方は多様」という例のひとつとして N-BASIC を出している。
違うように感じられるならそれは提示した意図通り。

156 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 20:59:26.94 ID:6Hcq0V/AM.net]
この人の理解が間違えている。
わざと言っているとしたら悪質

157 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:23:59.60 ID:fSdDKS6o0.net]
>>154
俺もわからん。
何がどう間違ってるのか説明しておくれ

158 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:37:13.51 ID:dQpg7mz50.net]
N-BASICは確かにハードウエアを直接制御できるという意味では
OSに近い。ただ今のOSとは全然違う。BASICだと遅すぎるので
大半はマシン語で直接書いてある。今のOSとは考え方が違う。

159 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:43:51.38 ID:4Ph4Dvnc0.net]
BASICそのものはマシン語で書かれているんだが

160 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:54:08.54 ID:1DStn3/B0.net]
>>156
たしかにそういう意味では「OS」といえるのかもしれないですね。
ただ,それだと組込み機器のファームウェアだって
機器を操作できる,対人インターフェースがあるという点ではOSといえることになりません?



161 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:58:23.19 ID:4Ph4Dvnc0.net]
なるね
何か困るの?

162 名前:はちみつ餃子 mailto:sage [2021/08/01(日) 22:05:54.64 ID:grRzUWQ80.net]
>>158
はっきりした基準はないという前提だけどぼんやりとした概念的な部分では
OS はアプリケーションソフトの対比的なものだと思う。
用途ごとのアプリケーションソフトを起動するという前提がないなら機能的に OS 相当のものを
含んでいても普通は OS とは言わないんじゃないかな。

163 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 23:18:55.12 ID:bX2lzryL0.net]
ホントにOSだと主張するなら、ぜひWindowsの仮想環境で動かしてみてくれ

164 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 00:18:03.59 ID:AinH6UQa0.net]
もしかして仮想マシンとエミュレータ混同してる?

165 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 00:39:04.73 ID:5dFVW6Kq0.net]
動かせないのなら、回りくどい事言わず、無理ですと言えば済むよ

166 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 01:06:43.81 ID:AinH6UQa0.net]
amd64で動くN-BASICがあるならできるんじゃない?
無いなら無理だわな

167 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 05:11:39.16 ID:qOaSDvjS0.net]
>>163
>>151

168 名前:デフォルトの名無しさん [2021/08/02(月) 07:46:31.20 ID:HO5h+jLQ0.net]
最近はスマホのカメラ部品にTRON OS入ってるんだって?
もうBIOSやファームウェアもOSになるんじゃないかとも思っちゃう。

169 名前:デフォルトの名無しさん mailto:もちろんネタ [2021/08/02(月) 10:11:13.69 ID:nmkqokJHF.net]
>>152-153
BIOS: BI + OS
DOS: D + OS
OSとは

170 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 10:12:43.19 ID:nmkqokJHF.net]
>>154
>わざと言っているとしたら悪質

ほんそれ
最近そういう書き込みが多い
5chから人を減らす作戦だろう



171 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 11:03:41.91 ID:qOaSDvjS0.net]
>>167
> BIOS: BI + OS
ネタか?
Basic Input/Output System やぞ

> DOS: D + OS
こっちは合ってる

172 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 12:33:14.68 ID:uwbNVnssM.net]
>>169
もちろんネタと書いてあるのでネタなんでしょ。

173 名前:デフォルトの名無しさん [2021/08/02(月) 13:13:02.28 ID:y7YH8RaeF.net]
Basic Interpreter OS

174 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:17:25.48 ID:y7YH8RaeF.net]
質問です
int flagA = 3 == 3;
int flagB = 3 == 3 == 3;
int flagC = 3 == 3 == 1;
の結果が
flagA : 1
flagB : 0
flagC : 1
になるのですが
flag B とか flag C は何が怒っているのでしょうか?

175 名前:デフォルトの名無しさん [2021/08/02(月) 13:31:37.39 ID:HO5h+jLQ0.net]
>int flagB = 3 == 3 == 3;

int flagB = (3 == 3) == 3;

int flagB = (1) == 3;

int flagB = 0;

>int flagC = 3 == 3 == 1;

int flagC = (3 == 3) == 1;

int flagC = ( 1 ) == 1;

int flagC = 1;

176 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:31:42.08 ID:y7YH8RaeF.net]
int flagD = 3 != 3;
int flagE = 3 != 3 == 0;
int flagF = 3 != 3 == 1;

flagD : 0
flagE : 1
flagF : 0
になります

177 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:31:46.39 ID:59KH06XU0.net]
タイホするっ!! ダーン ダーン

int flagB =
ここまでと
3 == 3 == 3
が別のパーツになっていて
== は左から結合するので
(3 == 3) == 3 となり真は1になるので
1 == 3 で偽すなわち0だ

178 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:41:18.14 ID:y7YH8RaeF.net]
解決しました
ありがとうございました

179 名前:デフォルトの名無しさん [2021/08/02(月) 16:38:34.45 ID:qdvnGLBb0.net]
俺が怒っている

180 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 19:33:02.95 ID:YziYRSV70.net]
演算子の優先順位って覚えるのヤダー。自分書くと括弧だらけだわ。
どの辺が塩梅なんかねー?明示的でないと駄目よってコーディングとかもあるし。



181 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 19:49:19.60 ID:5dFVW6Kq0.net]
それでいいよ

182 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 20:03:46.84 ID:Uu01rKAP0.net]
& ^ | なんかのビット演算が比較よか低いのが微妙に嫌

183 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 09:51:48.02 ID:wbx4PwZT0.net]
憶える気のない者は成長しない

184 名前:デフォルトの名無しさん [2021/08/03(火) 10:01:19.19 ID:Z1msEN+ba.net]
結合の優先度は、自分が分かっていても
記憶があやふやな人が不安になるといけないから
結局カッコを明示的に描くかな…

185 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 10:17:52.20 ID:wbx4PwZT0.net]
中学のマイコン部かよ

186 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 13:41:40.87 ID:34OfFMxOr.net]
>>181
覚える気があっても、覚えさせられる気がしねー。

187 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 13:45:58.11 ID:wbx4PwZT0.net]
自分を磨くのは本人なので
そんなお節介は考えなくていい

188 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:20:08.34 ID:kdIV+1e00.net]
CでC++の純粋仮想関数のような事をやりたいのですができますか? 疑似インターフェースです。

189 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:30:35.30 ID:wbx4PwZT0.net]
typedef struct iunknown iunknown;

struct vtable
{
int (*query_interface)(iunknown*, int, void**);
int (*add_ref)(iunknown*);
int (*release)(iunknown*);
};

struct iunknown
{
long count;
vtable* vtbl;
};

みたいなことか?

190 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:31:17.98 ID:wbx4PwZT0.net]
あ、いかんvtableのtypedef忘れたけどまあ許せやw



191 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:32:38.22 ID:lGpJxUYy0.net]
のような事の解釈余地に幅がありすぎ

192 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 19:27:01.81 ID:I3gKaej4M.net]
幅があると言うなら狭めるようなヒント書けばいいだけ
たたき台として>>187はそれほど悪くないと思う

193 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 20:41:05.50 ID:kdIV+1e00.net]
>>187
スゴーイ 感謝感激 ありがとうございます。

typedef struct {
void (*interface_a)();
void (*interface_b();
,
.
} TINTERFACEXXX;

typedef struct {
TINTERFACE ia;

} TOBJA;

なんてリレーションスタイルも考えたんですが、
いずれにしろ、クリーンアーキテクチャーのCでのSOLID原則ができるというところまでこぎつけました。
ありがとうございます。

194 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 23:48:19.32 ID:Ucc8C21f0.net]
COM最強

195 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 14:10:06.71 ID:9IiPo8vtH.net]
奥村晴彦 『改訂新版 C言語による標準アルゴリズム事典』の
「改訂新版 序」に、
> 現代の慣習に従って、[…] EXIT_SUCCESSを0にしたりした
とあるのですが、EXIT_SUCCESSマクロ変数を使った方が
定数即値を決め打ちするよりも可搬的であり、
それこそ「現代の慣習」であるように思うのですが、
実際はEXIT_SUCCESSより0を使う方が「現代的」なんですかね。

なお、誤植も疑ったのですが、集録されている実際のコードにおいても
return 0;と書かれていました。

196 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 14:30:14.22 ID:O0DzK1TA0.net]
>>193
0以外 は1以上も-1以下もあるし、下手すりゃ数値以外の可能性すらあるけど
0 は絶対0なので、少なくともこれに関してだけは
私は許そう

197 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 15:00:49.33 ID:9IiPo8vtH.net]
>>194
なるほど、「0 は絶対0なので」というので納得できました。
ありがとうございます。

198 名前:はちみつ餃子 mailto:sage [2021/08/05(木) 15:20:09.93 ID:igzlcjJl0.net]
>>193
思想的にはともかく、その件については習慣として定着してるという事実があるんで、
事実に逆らってもしょうがない。

ちなみに main 関数だけは return 文を通過せずに } に到達した場合には
return 0; と同じになるという仕様になってるんで、 return 文自体を省略するという
スタイルもある。

199 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 16:18:55.16 ID:TenuDSkO0.net]
>>193
mainの出口は仕方ないんだよ
enumなんて考え方ができる遙か前に決まったことで今さら変えられないというのが現実だ

mainの第2引数だって今ならconst付けそうなところだけど
これまたconstなんかなかった頃に決まったことだ

200 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 17:17:51.97 ID:lrEA3gELa.net]
>>197
歴史的にはそうなのかもしれないけど、それだと「EXIT_SUCCESSを0に」することが「現代の慣習」であることの説明になってなくないような
なんでEXIT_SUCCESSと書いてたのを0と書くようにしたのかが知りたいんでは
もう納得してるみたいなんでアレだけども



201 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 17:57:00.56 ID:TenuDSkO0.net]
enumつったんだけど
話通じてねえな

202 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:23:46.65 ID:sS7OglMj0.net]
マジックナンバーなんて駄目でしよってノリでEXIT_SUCCESSを使ってたけどあまり流行らなかったから0に戻したってことじゃないの?

203 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:25:20.09 ID:sS7OglMj0.net]
>>199
マクロ (#define) の話だからenum関係ないよ

204 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:36:03.13 ID:C1udim1A0.net]
C言語7不思議

enum { A=1 } main(void) { return A; }

このコードは合法か否か?

205 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:54:07.04 ID:nywX30PRM.net]
法なんてない

206 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 20:40:48.16 ID:TenuDSkO0.net]
>>200
だね
じゃあEXIT_SUCCESSはマジックナンバーないのかって

207 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 21:00:13.63 ID:RBdzanHxM.net]
オレのばっちゃが決めたんだ

208 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 21:12:45.92 ID:sS7OglMj0.net]
>>204
マジックナンバーって何かわかってる?
ググってからでないとenumみたいに頓珍漢なこと言って恥かくよ?

209 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 22:30:22.56 ID:TWSeb4Gn0.net]
横だけどeasing関数でマジックナンバーっての見たけど、結局何だったのかわからないままですわ

210 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 22:33:51.51 ID:RyeVbM3/0.net]
線形合同法で作る乱数に出てくる謎定数



211 名前:はちみつ餃子 mailto:sage [2021/08/06(金) 00:25:46.52 ID:xkvwFph10.net]
>>202
基本的には否だが、許容される場合はありうる。
main の型は以下のいずれか。

@ int main(void);
A int main(int argc, char * argv[]);
B 以上の二つのいずれかと等価 †1
C 以上の三つのいずれでもない処理系定義の方法

それとは別に
「main関数の返却値の型がintと適合しない場合,ホスト環境に戻される終了状態は,未規定とする。」†2
とするという文言もある。
C で言う「未規定」というのは処理系が挙動を選択して良いことを意味するので、
適合しなくても適合したときと同等の処理になるように実装している処理系はあるかもしれない。

enum で定義した型 (列挙型) は
「char,符号付き整数型又は符号無し整数型と適合する型とする。型の選択は,処理系定義とする」 †3
とあり、列挙型が int と適合する可能性はある。

また、上述のCとして処理系が main の返却値の型が列挙型であったときを許容するような定義をしているかもしれない。

-------------------------
†1 typedef やマクロによる別名、あるいは型調整などで同等になるものという意味
†2 「適合」に関する規則は複雑なのでここでは説明しない
†3 個別の列挙型ごとに選択してよい

212 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 07:01:45.65 ID:QgUKHcUo0.net]
>>206
おまえさんこそ何かわかってなさそうだな
なぜ、その値なのか由来が不明な定数は
スペルが0であろうがEXIT_SUCCESSであろうが
0x00であろうが本質的に同じことだぞ
UNIXを背景とせずにreturn 0;が説明できるか?

おまえさんみたいにググって拾った情報を丸呑みしてると
わかってないやつの間違った理解が伝搬するだけだぜ

213 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 08:15:51.79 ID:3zvDecHz0.net]
>>210
EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw
値の話じゃないことぐらい理解しろ

非常に稀な例としてEXIT_SUCCESSが0でないシステムが存在する
例えばOpenVMSでは
EXIT_SUCCESS = 1
EXIT_FAILURE = 2
だったりする
fafner.dyndns.org/cgi-bin/conan.com?key=CRTL~exit%2C_exit~Argument&title=VMS%20Help

なのでそういうシステムへの移植を考えてるなら意味はあるけどそんな人はほとんどいないからreturn 0;でいいやんって話

そもそもunixでも0, 1以外の値を返すコマンドは多数あってその場合は自分でEXIT_xxxを定義する必要あるから0, 1だけ定義されててもねぇって感じもあるし

214 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 08:30:30.04 ID:QgUKHcUo0.net]
>>211
おまえさんは>>193が英語の話だと思っていたのかw
0がどういう意味かもわからないならCをやり直せよ

215 名前:はちみつ餃子 mailto:sage [2021/08/06(金) 09:12:19.75 ID:xkvwFph10.net]
>>211
関係ない。 言語仕様としては 0 が成功を表すというのは保証された動作で、
もしもホスト環境の都合と食い違うならランタイムサポート (スタートアップルーチン) で補正すべきこと。
EXIT_SUCCESS 「も」成功を意味する値として使えるというのとは独立した話。

216 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:17:08.98 ID:3zvDecHz0.net]
>>212
まじでマジックナンバー知らんのか?

0じゃ何を意味するかわからんから名前をつけるって話だぞ
EXIT_SUCCESSが英語だから英語の勉強しろって言ってるだけ
日本語使える環境なら
 正常終了 = 0
でもいい

で、>>193の件はそうは言っても正常終了で0以外なんてまずないし、たいていの人はmain()が0を返したら正常終了ってわかるからreturn 0;でいいやってなってるだけ

217 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:19:10.68 ID:3zvDecHz0.net]
>>213
> 関係ない。 言語仕様としては 0 が成功を表すというのは保証された動作
どこで規定されてるのか示してみ
そもそもOpenVMSの処理系は規格違反とでも言うのかよw

218 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:19:24.86 ID:9vf9CEgT0.net]
>>214
ほかはともかく、 0 だけはマジックではなく明確に意味を共通で持たせている
という話なのでは?

219 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:26:12.98 ID:9vf9CEgT0.net]
>>215
mainの戻り値がデフォルトで正常なときは 0 なのは言語仕様に規定されてるね

0又はEXIT_SUCCESSの場合,成功終了
この「又は」はほんとにORなので、EXIT_SUCCESS=1 のときは 0でも1でも正常よ

220 名前:はちみつ餃子 mailto:sage [2021/08/06(金) 09:44:11.58 ID:xkvwFph10.net]
>>215
繰り返すが EXIT_SUCCESS 「も」成功を表すことは保証されている。
それとは関係なく 0 が成功なのは保証された動作

以下は C99 からの抜粋 (日本語は JIS から対応箇所を抜粋)

5.1.2.2.3 Program termination

If the return type of the main function is a type compatible with int,areturn from the
initial call to the main function is equivalent to calling the exit function with the value
returned by the main function as its argument

main関数の返却値の型がintと適合する場合,main関数の最初の呼出しからの復帰は,
main関数が返す値を実引数としてもつexit関数の呼出しと等価とする

7.20.4.3 7.20.4.3 The exit function

If the value of status is zero or
EXIT_SUCCESS, an implementation-defined form of the status successful termination is
returned. If the value of status is EXIT_FAILURE, an implementation-defined form
of the status unsuccessful termination is returned. Otherwise the status returned is
implementation-defined.

statusの値が0又はEXIT?SUCCESSの場合,成功終了(successful termination)状態を処理系定義の形式で返す。
statusの値がEXIT?FAILUREの場合,失敗終了(unsuccessful termination)状態を処理系定義の形式で返す。
それ以外の場合,返される状態は処理系定義とする。



221 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 10:06:15.17 ID:QgUKHcUo0.net]
>>214

#define AHO_NO_3zvDecHz0 0
int main(void)
{
return AHO_NO_3zvDecHz0;
}
こう書いてもなぜ0なのかはわからない
マジックナンバーとはこういうことだぞ

extern int svc_get_success_code();
int main(void)
{
return svc_get_success_code();
}
こういうのと違うからな

222 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 10:38:06.15 ID:3zvDecHz0.net]
>>216
ほとんどの環境で 0 を正常と解釈できるからマジックナンバー扱いでなくてもいいだろって言う判断を奥村晴彦氏がしたってだけの話だと思う

>>217
途中でreturnせずにmain()の最後まで到達したら0を返す(これは言語仕様)という話と返された0が正常終了とみなすかどうかは別の話

> 0又はEXIT_SUCCESSの場合,成功終了
と主張するなら規格のどこで規定されてるのか書いてくれ

223 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 10:53:05.07 ID:QgUKHcUo0.net]
5.1.2.2.3 プログラム終了処理
 main 関数の返却値の型がint と適合する場合,main 関数の最初の呼出しからの復帰は,main 関数が返す値を実引数としてもつexit 関数の呼出しと等価とする。main 関数を終了する}に到達した場合,main 関数は,値0 を返す。

7.20 一般ユーティリティ<stdlib.h>
EXIT_FAILURE
及び
EXIT_SUCCESS
は,整数定数式に展開され,それぞれホスト環境に失敗終了状態又は成功終了状態を返すために,exit関数の実引数として使用することができる。

224 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 11:01:20.62 ID:3zvDecHz0.net]
>>217-218
すまん今規格見たら確かに書いてあったわ
OpenVMSとかは処理系で変換してるんだろうな

>>219
それは単にアホが意味不明な名前付けしてるだけ
そんなレベル低い話はチラ裏にでも書いとけ

225 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 11:25:57.87 ID:QgUKHcUo0.net]
>>222
スペルを変えるだけでは無駄ってことだよ
どこから出てきたのか、何から導いたのかが示されていなければ同じことだ

226 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 11:59:37.28 ID:GGzcYLSBM.net]
>>223
何わけわからんこと言ってるんだよ
EXIT_SUCCESS がわからないならプログラマ辞めちまえよw

227 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 12:04:06.56 ID:QgUKHcUo0.net]
は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ
NO_PROBLEMなんてオレオレマクロでもおまえさんは満足なんだろ
どうりで規格票もロクに読まねえわけだ
プログラマ辞めちまえをそのまま返すぜドスカタン

228 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 13:43:09.92 ID:3zvDecHz0.net]
> は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ
EXITもSUCCESSも英語だから英語「を」理解しろって言ってるんだが?
英語の前にお前は日本語を理解できるようになならないと駄目だなw

229 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 14:26:52.67 ID:QgUKHcUo0.net]
知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの? ちょっと神経わからんなw
Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが
おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ

230 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 14:34:50.29 ID:KBiduyaj0.net]
シェルスクリプトスレの名物キチガイコンビみたいだなお前ら



231 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:10:51.95 ID:3zvDecHz0.net]
>>227
> 知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの?
どこを見たらドヤッてるように見えるんだよ…

> ちょっと神経わからんなw
そもそもドヤるという神経がわからんわw

232 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:15:17.60 ID:QgUKHcUo0.net]
>>229
どこを見るってPCのモニタだがw
1たす1は2なんだぞ〜ぼくすごいだろ〜みたいなお気の毒な姿

233 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:23:31.43 ID:QgUKHcUo0.net]
規格票は英語で書かれているわけだが
読んでないのは誰かさんだったね(プークスクス

234 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:34:06.02 ID:3zvDecHz0.net]
>>230
> どこを見るってPCのモニタだがw
わー、おもしろい

これで満足かな?w

235 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:37:08.92 ID:QgUKHcUo0.net]
スルーすれば逃げられると思っているようなのでもう一度言ってやる

Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが
おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ

236 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 17:07:54.01 ID:3zvDecHz0.net]
露呈したのはEXITやSUCCESSでドヤられたとか思うお前のレベルだろw

237 名前:ハノン mailto:sage [2021/08/06(金) 19:16:51.91 .net]
なんだか香ばしいですね‥‥

>>218
完璧な回答ですね‥‥

238 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:02:31.35 ID:CzNdrnJF0.net]
main以外の関数だと、成功失敗の値は特に決められてはいないんですよね?

239 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:47:42.91 ID:y8oe7xdW0.net]
>>236
うん、決められてないよ

まあユーザ的には0を成功としておけばいい雰囲気だけど
システムコールに近づくとだいたい0が失敗になってくよね
0っつーかぬるぽっつーか

240 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:49:05.43 ID:+/iE6x4C0.net]
(s)scanf() の戻りは渡った非引数への変換に成功した数ですし ケースバイケースですわね



241 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:49:34.62 ID:+/iE6x4C0.net]
s/非/被/

242 名前:はちみつ餃子 mailto:sage [2021/08/07(土) 00:16:24.99 ID:YBZ7G4A60.net]
>>236
規定はないけどある程度の習慣はあって、おおざっぱにまとめると

・関数が受け持つ機能が副作用であり、
 返却値は成功or失敗のみを通知すればよいときは 0 を成功値とする
・関数が意味のある値を返すときはありうる値の範囲ではない値を失敗値とする
 (0、ヌルポインタ、負数、無限、NaNなど)
・入力値 (関数の引数) が正しい限り失敗がないことを見込めるときは
 不正な入力があった場合を未定義とする
 (呼出し前にチェックされているか、ロジック上正しいことをプログラマが保証することを期待する)

という感じだと思う。

あくまでも標準ライブラリやそれを踏襲した習慣をまとめるとこんな感じだろうという私なりのまとめなので
常に正しい選択というわけではないということはことわっておくが、
標準ライブラリを全く使わないようなプログラムもないだろうし
標準ライブラリを真似ておけば全体として一貫性が出て綺麗なんじゃないかな。

243 名前:デフォルトの名無しさん [2021/08/07(土) 00:29:33.44 ID:rXkekRAR0.net]
strcmp

244 名前:はちみつ餃子 mailto:sage [2021/08/07(土) 00:54:21.18 ID:YBZ7G4A60.net]
strcmp は失敗しない。

245 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 06:09:45.55 ID:ZNSsPCBy0.net]
>>234
それでexitやsuccessの意味を知らないと証明したつもりになっているアホを
じゃあドヤる以外のどんな表現をすればいいんだ?

246 名前:ハノン mailto:sage [2021/08/07(土) 08:46:51.55 .net]
>>240
cctypes

247 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 09:05:40.63 ID:AEz+LKNR0.net]
>>243
> それでexitやsuccessの意味を知らないと証明した
どこからそんなアホなことを言い出したんだ?
またPC画面からかな?w

248 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 09:15:42.75 ID:xdlB1E9b0.net]
exitなんかで終わらしちゃダメでしょ
returnで終わらせないと

249 名前:はちみつ餃子 mailto:sage [2021/08/07(土) 09:50:33.76 ID:YBZ7G4A60.net]
>>244
文字判定系の関数に失敗はない。

250 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 11:27:30.28 ID:sspluaGX0.net]
exit は どこでもドアで便利



251 名前:デフォルトの名無しさん [2021/08/07(土) 17:43:31.00 ID:efxonHum0.net]
どこから終わっても良いのか?それとも出口は一つにすべきか?

252 名前:ハノン mailto:sage [2021/08/07(土) 18:13:40.12 .net]
>>249
どこからでも return してよいのか?それとも return 文の記述は一箇所に限定するべきか?

253 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:18:29.86 ID:sspluaGX0.net]
一つの関数内でreturnは一つにするというコーディング規約があったときは
gotoの使用が増えてましたっけ

254 名前:デフォルトの名無しさん [2021/08/07(土) 18:31:09.62 ID:efxonHum0.net]
Cなので仕方がないな。他の言語のように例外処理が try ... catch とかで使えれば gogo なくしても見易く書けるだろうけど。

255 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:35:47.91 ID:HEQEjPMP0.net]
出口を1つにしたほうが達成感がある
だがreturnお前はだめだ

256 名前:デフォルトの名無しさん [2021/08/07(土) 18:36:21.14 ID:efxonHum0.net]
goto なしでやる方法は色々あるが、30年ぐらい前に何も参考にせずに俺が考えついたのは for (;;) のブロックに入れて途中で条件により break する方式。

257 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:44:02.64 ID:608OSAzY0.net]
無限ループって怖くね?

258 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:54:15.41 ID:vvCAvRb50.net]
実利の無いこだわりはやめていただきたく……

259 名前:デフォルトの名無しさん [2021/08/07(土) 18:54:27.54 ID:efxonHum0.net]
>>255
最後のbreakを忘れたらそうなるのでそれだけは注意が必要

260 名前:デフォルトの名無しさん [2021/08/07(土) 18:58:54.78 ID:efxonHum0.net]
ま、しかし、今はそういう例外処理的なやつは躊躇せずにgoto使うけどね。そうしないと見づらいし分かり難くなるから。



261 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 19:27:07.82 ID:HEQEjPMP0.net]
gotoを上手く使えないのは自制心がないやつだけだ
俺みたいに自制心のある人間はgotoとはマブダチになれる

262 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 20:03:57.86 ID:AEz+LKNR0.net]
>>258
に一票

263 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 20:13:31.71 ID:sspluaGX0.net]
フルメタルジャケット思い出したw

264 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 21:20:33.45 ID:ZNSsPCBy0.net]
>>245
あ、じゃあ違うんだな?

> EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw

規格票もロクに読まないからEXIT_SUCCESSがどういう意味かわからんやつが
英語がどうたら言うのは確たる根拠もなく言ってた戯れ言てことだな

PC画面に映ってるアフォはオモロイなwww

265 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 21:41:58.88 ID:AEz+LKNR0.net]
まずマジックナンバーの話なのか規格の話なのかはっきりさせようか…
あと「〇〇がわからないなら□□しろ」と言うのは「〇〇がわからない」と言ってる訳じゃないぞw

266 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 05:41:26.37 ID:X9nZYb130.net]
つまり出鱈目な前提で寝言ぬかしてるってことか

267 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 06:43:20.13 ID:3G5PI5Y70.net]
仮定法も知らないアホかよw

268 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 07:32:57.11 ID:X9nZYb130.net]
根拠なし、前提は出鱈目
恥を知れよまずは

269 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 09:53:42.66 ID:766a9h8SM.net]
仮定法を理解できなかったのか…
可哀想にw

270 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:19:43.20 ID:X9nZYb130.net]
証明も承認もされていない前提で何かぬかして
それを肯定して欲しがるのは二重質問だろアフォ



271 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:55:03.30 ID:3G5PI5Y70.net]
証明とか承認とか、仮定法に全く関係なくて笑える
肯定とかに至っては全く意味不明w

272 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:56:31.55 ID:X9nZYb130.net]
前提を間違ってるのをどんなに言い訳しても無駄だよ

         ,,-―--、
        |:::::::::::::;;;ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        |::::::::::( 」 <仮定法仮定法仮定法仮定法・・・・
        ノノノ ヽ_l   \______________
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |

273 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:58:09.47 ID:o6Sz00kX0.net]
いい加減にしろキチガイコンビ
もう3日目だぞ

274 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 11:40:04.29 ID:3G5PI5Y70.net]
なんの前提も置いてないのに前提が間違ってると言い続けるしかないポンコツBOT並みの知能だからねぇw

275 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 11:45:29.53 ID:X9nZYb130.net]
> EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw

前提: EXIT_SUCCESSがどういう意味かわからない
主張: 英語からやり直せ

該当者がいないんだが
あ、1人いたな規格票読まねえやつがw

276 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 12:51:11.36 ID:aqugezwJ0.net]
>>257
for (;;) するくらいなら do {} while (0); 選ぶかな

277 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 12:53:24.15 ID:3G5PI5Y70.net]
こんなのもわかんねーなら会社辞めちまえまえ!
って言われて会社辞めるアホやな
まあ辞めた方が会社にも本人にも良さそうだけどw

278 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 12:56:23.19 ID:3G5PI5Y70.net]
>>274
同意
無限ループは for(;;)
途中脱出は do {} while(0) を使うな

279 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 13:34:46.83 ID:yE7YGXiy0.net]
なるほどね
do{}while(0)ね

280 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 13:38:12.62 ID:EooHPpNB0.net]
while (1) は、たまに使います



281 名前:ハノン mailto:sage [2021/08/08(日) 14:30:57.58 .net]
>>278
for(;;)
ウォーニングが出ないからこちらを好みます

282 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 14:44:42.99 ID:Cdmlpdjr0.net]
while(1)だとどのツールでどういう警告が出る?

283 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 14:55:49.48 ID:3G5PI5Y70.net]
>>280
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4127?view=msvc-160
最近(でもないか)の奴はwhile(1)だと警告を出さないようにしてるみたいだけど

284 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 15:21:56.83 ID:ubSlJzPI0.net]
Warningって読み方ウォーニング?
ワーニングじゃないの?

285 名前:ハノン mailto:sage [2021/08/08(日) 15:24:23.58 .net]
>>282
Star Wars
×スターワーズ
◎スターウォーズ
って覚えてね

286 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 15:41:10.34 ID:EooHPpNB0.net]
>>280

cl -W4 while.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86

while.c
while.c(5) : warning C4127: 条件式が定数です。

287 名前:ハノン mailto:sage [2021/08/08(日) 15:56:39.95 .net]
>>280,281
うーん、手元の cygwin gcc 10.2.0 では while (1) も while (42) もウォーニングは出ませんね、コメントありがとうございます‥‥昭和は遠くなりにけり

288 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 22:32:52.55 ID:19kZVfwv0.net]
>>282
アメリカ人だと ゥワーニン って言ってた
インド人(会話は英語)は ウォニング ってグまではっきり言ってた

こっちから言うときは片仮名で「ワーニング」って言っても余裕で通じた
まあエンジニアどうしで通じりゃ適当でいいんだよ

289 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 00:46:08.57 ID:OWI9S7jW0.net]
>>282
グーグル翻訳に発音させてみたらどちらともつかぬ半端な発音に聞こえる。

290 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 07:13:46.14 ID:eF2Q2UUf0.net]
>>279
つーかマジックナンバーがないのが魅力

# 組み込みでは無限ループがないほうが珍しい



291 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:00:51.25 ID:5Oj13b1Xd.net]
for(;;) はforeverと読む(俺定義)

292 名前:デフォルトの名無しさん [2021/08/09(月) 11:51:07.90 ID:Lb8CQXvk0.net]
>282
「ア」と「オ」の発音の違いは曖昧。
…というのをトリビアの泉でやってた。

293 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:03:01.28 ID:eF2Q2UUf0.net]
アに近い←米語
オに近い←英語

294 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:40:56.75 ID:GX8oEfXz0.net]
ウォーニング
と発音した方が通じやすいけどな

295 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:42:49.10 ID:78aLRiJY0.net]
while( 条件式 )

そもそも条件式には、実質的なブール値・真偽値しか使えない。
MI

296 名前:SRA-C 違反 []
[ここ壊れてます]

297 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:25:39.38 ID:c/YgMY770.net]
これ最初に間違えた奴誰?

298 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:41:09.70 ID:eF2Q2UUf0.net]
whileの括弧の中は制御式な
== と != は等価式
不等号は関係式

条件式はいわゆる三項演算子だぞ

299 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:54:46.12 ID:Hd/9N5qL0.net]
参考までに

300 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:03:11.33 ID:c/YgMY770.net]
>>295
等価式と関係式の意味的違いがよく分からん



301 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 14:30:20.02 ID:OWI9S7jW0.net]
>>297
・ 優先順位が違う
・ 関係演算子は複素数型をオペランドにとれない

302 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 15:32:43.41 ID:WWM043YB0.net]
結局は成り立つか成り立たないかってことでしょ
その2つを厳密に分ける意味はなに?

303 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 15:43:28.94 ID:qYrd5+ip0.net]
算術式 関係式 論理式 という分類は聞いたことがあるが>>295みたいなのは初耳だなぁ。

304 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:04:49.05 ID:OWI9S7jW0.net]
>>300
条件式 (conditional expression) については C99 なら 6.5.15 に記述がある。
制御式 (controlling expression) という言葉は当たり前のように出現して
明確に定義を与えているらしい箇所がみつからないんだけど
仕様では >>295 の意味で使われていることは自明。

305 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:10:06.60 ID:hymvfobjM.net]
等価式 ⊂ 関係式
でしょ

306 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:23:09.32 ID:JaaB5Egp0.net]
文法定義上の用語だよ
区別する最大の意義は演算子優先順位の定義

>>293が不用意に「条件式」と書いてしまったばっかりに本質的でないツッコミが発生しただけ

307 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:36:37.59 ID:OWI9S7jW0.net]
>>302
構文規則としては

等価式:
  関係式
  等価式 == 関係式
  等価式 != 関係式

と書いてあるからその考え方でも間違いとは言い切れないけど
それを言うなら

シフト式:
  加減式
  シフト式 << 加減式
  シフト式 >> 加減式

だからといって 加減式 ⊂ シフト式 と言ってしまうと (日常的な感覚としては) ちょっと違和感があるし、
このへんの言葉はシンタクスを定義する上での便宜的な概念 (BNF で書くとそうなるってだけ)
だから、演算子の機能上の意味付けとは分けて考える必要がある。

308 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:38:11.39 ID:S8n0VVLE0.net]
>>301
>>295の意味というのがよくわからんけどcontrolling expressionって例えばswitch( )のカッコ内もそうだから等価式と関係式だけじゃないよ

309 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:39:33.74 ID:qYrd5+ip0.net]
>>303
>区別する最大の意義は演算子優先順位の定義

まさにそこが疑問なんだけど、優先順位ごとに全部「△△式」って名前を付けて区別するのは見たことない。

310 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:41:53.02 ID:S8n0VVLE0.net]
>>304
日常的な話をしてるのか規格の話をしてるのかはっきりさせてからレスしてくれ
規格の話をしてるのはあんたともう一人だけだとも思うぞ
>>305のツッコミは別にして…



311 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:51:05.91 ID:OWI9S7jW0.net]
>>307
違う話が混ざってるのは意図的。
レイヤが違うものを混ぜて考えるとおかしいよねという話なんで。

312 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:02:47.61 ID:eF2Q2UUf0.net]
6.8.5.1 while 文 制御式の評価は,ループ本体の各実行の前に行う。
6.8.5.2 do 文 制御式の評価は,ループ本体の各実行の後に行う。
6.8.5.3 for 文 文
for ( 節1 ; 式2 ; 式3 ) 文
の動作は次のとおりとする。式2 は制御式とし,ループ本体の各実行の前に評価する。

313 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:06:46.07 ID:eF2Q2UUf0.net]
条件式なんてオレ用語はwhileの括弧の中で比較だけが許されると思いたがるバイアスの顕れだろ
いいか、もっぺん言うぞ バイアス

314 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:12:09.00 ID:S8n0VVLE0.net]
>>308
要するに荒らしたいと言うことか
ウザいけどこう言う奴は言って聞くわけ無いしな

315 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 17:18:59.09 ID:OWI9S7jW0.net]
>>311
どこを要したの?

316 名前:293 mailto:sage [2021/08/09(月) 18:00:51.96 ID:78aLRiJY0.net]
if ( 条件式 )

Ruby では、条件式にオブジェクトを書いても、
偽になるのは、nil, false の2つだけだが、

他の動的言語では、各型に偽がある。
空文字列・空配列・空辞書、0, 0.0 など

あまりに、バグの組み合わせが多いために、
実質的なブール値・真偽値しか使えないのが普通

それで、TypeScript みたいに型チェックが流行るようになった。
C も同じで、型チェック必須言語

これらが無いと、バグが多すぎて、製品レベルの品質基準にならない

317 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 18:05:14.63 ID:WWM043YB0.net]
ループを制御するための式だから制御式というんだろうけど、

制御式のなかで
例えば

while(i++==10)

なんて出来たとしてもそんな書き方しないだろうし

318 名前:ハノン mailto:sage [2021/08/09(月) 18:20:08.88 .net]
>>314
while 文なら時々します
https://ideone.com/9Tkokb

319 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 18:26:16.77 ID:S8n0VVLE0.net]
>>314
昔は
while((*dst++ = *s++) != '¥0');
とか定番だったけどね

320 名前:ハノン mailto:sage [2021/08/09(月) 18:40:40.16 .net]
>>316
ノンノン!
while (*des++=*src++)
;



321 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 20:27:51.00 ID:eF2Q2UUf0.net]
>>313
勝手にレビュー落ちてろ
俺らには関係ない

322 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 20:56:50.79 ID:CmP62z0OM.net]
while(i++!=10)
なら、あるかも

323 名前:はちみつ餃子 mailto:sage [2021/08/10(火) 01:18:25.50 ID:7+xjomdk0.net]
プログラミング言語C 第2版 (いわゆる K&R) に載っているくらいなので C では珍しくないのは確か。
日本語版の 129 ページあたりに「こうした慣用法はマスターすべきである」と書いてある。

324 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 01:22:24.66 ID:wjw1gmPx0.net]
K&Rは古典なので現代において参考にするようなものではない

325 名前:はちみつ餃子 mailto:sage [2021/08/10(火) 02:16:48.33 ID:7+xjomdk0.net]
あらたに書くときに使うべきではないと思うけど古いコードがあるのも現実なんやで。

326 名前:293 mailto:sage [2021/08/10(火) 11:49:11.43 ID:9wi/dlAk0.net]
++, -- は、バグが多いから、Ruby から排除された

Go でも、単独文でしか書けない。
組み合わせることができない

これらを組み合わせると、MISRA-C 違反。
MISRA-C に則っていないものは、製品レベルとして使えない

Andrew Koenig のC Traps and Pitfalls「Cプログラミングの落とし穴」、
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、2006、MISRA‐C研究会

こういう本を読んでいないだろ

327 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:28:40.74 ID:MOslRoWuM.net]
書いてはいけないが、読める必要はある。
目を背けるな

328 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:38:24.67 ID:PfQcBK0N0.net]
「おやつは300円以内」のようなくだらねえことが延々書き連ねてある
ツッコミどころ満載なやつ馬鹿馬鹿しくて相手してらんね

329 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:45:47.63 ID:21u4vH9ca.net]
>>324
いろんなスレでNG推奨と言われてることから目を背けている奴に何を言っても無駄だろう

330 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:51:29.27 ID:Ix5h21qC0.net]
マ板でぼろぼろに言われてますが、
このコードは何が悪いのでしょう

https://wandbox.org/permlink/JQc6ZwNrcNThSfkY



331 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:52:38.52 ID:PfQcBK0N0.net]
プログラミング以外のところでも「俺様が知らない言葉を使うな」という痛いやつがいるのと同じ

332 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:54:17.27 ID:PfQcBK0N0.net]
>>327
IOCCCのルールを守っていないからだろ

333 名前:ハノン mailto:sage [2021/08/10(火) 18:42:13.96 .net]
テステス

334 名前:ハノン mailto:sage [2021/08/10(火) 18:45:30.07 .net]
>>327
何をやっているのか努力しないと読めないのが辛いです、そういう曲芸を仕事でやられたらボロクソなのも仕方がないとおもいますね

335 名前:蟻人間 mailto:sage [2021/08/10(火) 18:58:54.35 ID:98gOzHW9d.net]
>>327
型キャスト使わなくても型を合わせばいいのに。
ループ変数がcharってありえないでしょう。

336 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 08:41:39.44 ID:19rzwYjH0.net]
doubleでfor回したりはするね

337 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 10:26:21.33 ID:fvD2fRTR0.net]
>327
単純にソースの目的がわからない。
バイトオーダ(エンディアン)の確認?

{{ ... }/*コメ*/}というコーディングもなんかキモイ。

338 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 13:02:40.93 ID:c2ypq8+M0.net]
レスありがとうございました。

>>327は、

https://medaka.5ch.net/test/read.cgi/prog/1625843192/

というスレで、初心者の1が質問を投げるとこから始まります。
入力された文字を逆順で表示したいという内容です。
それで1が貼ったコードを巡り、いつしか省力化の流れになって、
そして投下されたのが>>327です。

339 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 13:57:42.27 ID:EWMgwFeS0.net]
なるほどなあ
とりあえず文字列としてしか使われない領域に意味ありげにint配列使ってるのと、バイトオーダーに依存している、の2点が最大のクソポイントか

340 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 16:04:17.52 ID:fvD2fRTR0.net]
>334
>{{ ... }/*コメ*/}というコーディングもなんかキモイ。
Chromeのせいか?
なんか変な文字化け(変換?)起こしてるっぽい。

>char len,i;
が char len、i; ってなるとか。
FireFoxで開いたら正常表示された。

>335
>入力された文字を逆順で表示したいという内容です。
把握

>327
>Stdin
>abcdefg
7文字ってことは

>printf("%c%c%c%c",...
の最初のループの1文字目は "\0"が出力されてるのかな?それでいいのか?
int t[25];が0クリア



341 名前:されてるならいいけど、
ゴミが残ってると正しく表示されないんじゃないか?
[]
[ここ壊れてます]

342 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 16:25:45.76 ID:91mms/zJ0.net]
バイトオーダー決め打ちなのと
sizeof(int) == sizeof(char) * 4 前提にしつつ 4文字づつパックで処理してる工夫なんだろうけど

わざわざ難しくしてってのおふざけ暴走が生んだ結果だな

343 名前:デフォルトの名無しさん [2021/08/12(木) 04:13:22.60 ID:zN4hKecF0.net]
>>327
それって入力した文字をただ出力したいだけ?
なんでそんなに複雑に書いたの?

344 名前:デフォルトの名無しさん [2021/08/12(木) 04:15:08.28 ID:zN4hKecF0.net]
あ、逆順に出すの?それにしても複雑怪奇だなあ。どうしてそうなった?

345 名前:デフォルトの名無しさん [2021/08/12(木) 06:20:29.21 ID:zN4hKecF0.net]
>>335
そっちのスレにまともなやつのURLを貼っといた。

346 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 07:41:49.84 ID:+O9ZyhRw0.net]
わざと複雑怪奇に書く遊びはC使いの古来の文化だよ

有名サイトだけど
https://www.ioccc.org/

347 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 15:37:03.65 ID:s+UN3BdM0.net]
i>-1 は、i >= 0 の方が、分かりやすい

348 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 16:26:35.93 ID:qgQ8hJHG0.net]
char型のiをわざわざintにキャストしてるのは何か理由があるのか
最初からintでiを定義しておけばいいのに

349 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 17:14:43.67 ID:s+UN3BdM0.net]
8ビットを、32ビットに変換するのは汎整数拡張

実際のCPU でも、8ビットでは処理できないので、
32ビットに変換してから処理して、8ビットに戻す

つまり汎整数拡張は、ほぼ無害

350 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 17:48:37.78 ID:iQcpjp5R0.net]
INT07-C. 数値には符号の有無を明示した char 型のみを使用する
https://www.jpcert.or.jp/sc-rules/c-int07-c.html



351 名前:デフォルトの名無しさん [2021/08/12(木) 19:28:25.65 ID:PwkehoUJ0.net]
処理系によってcharがunsignedだったりするから
ライブラリのポーティングでえらい目にあったりするのよね

352 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 20:05:44.88 ID:s+UN3BdM0.net]
MISRA-C でも、単なるchar 型は使用禁止。
-128〜127 か、0〜255 か、どちらか分からないから

signed char か、unsigned char を、明示して使わなければならない。
または、int8 か、uint8

353 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 20:13:25.34 ID:+O9ZyhRw0.net]
信者以外には全く何の関係もないことだな

354 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:08:22.05 ID:hI2dv5iP0.net]
信仰しなさい。

355 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:18:10.25 ID:qgQ8hJHG0.net]
char「我をたたえよ」
「チャー!」「チャー!」

356 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:20:40.68 ID:iqzxJUR40.net]
やっぱりプログラム板は勉強になります

357 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:22:37.60 ID:ZBXe4sG30.net]
あれは「チャー」って叫ぶのか?「キャー」じゃだめなの?

358 名前:ハノン mailto:sage [2021/08/13(金) 01:00:42.90 .net]
「シャー」が正解です…

359 名前:デフォルトの名無しさん [2021/08/14(土) 01:39:23.05 ID:Znm3fqvr0.net]
きゃら

360 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 16:41:42.16 ID:r/g27g8Q0.net]
ヒャル



361 名前:はちみつ餃子 mailto:sage [2021/08/14(土) 16:51:07.63 ID:xM4RG8+90.net]
語源というか原形は character でその綴りを縮めたのだと考えれば、
(そしてあえて発音をカタカナに当てはめようとするのであれば)
キャー、もしくはキャラが順当なんじゃないかな。

362 名前:ハノン [2021/08/14(土) 19:03:43.32 .net]
欧米人なら letter を使いそうなものを、それを character(=象形文字系統)としたその心が知りたい‥‥どうでもいい話ですみません

363 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 20:55:06.51 ID:kmQRiZG00.net]
characterはcharと略せるけどletterは略せないとか?
一文字でも縮めることにやっきになってたみたいだし

charは「きゃら」だけど、enumを「いなむ」って言っちゃう


364 名前:enumerateは「あにゅむれい」なのに []
[ここ壊れてます]

365 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 21:43:24.21 ID:g6ShE1m2M.net]
アニメで良いよ

366 名前:デフォルトの名無しさん [2021/08/14(土) 22:34:56.70 ID:Znm3fqvr0.net]
性格,性質,気質,特質,特性,特色,人格,品性,高潔さ,正直さ

367 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 22:38:05.04 ID:io8zq2Gb0.net]
むこうの語感的にletterだとアルファベットだけで数字とか記号を含めないかもしれない

368 名前:デフォルトの名無しさん [2021/08/14(土) 23:51:39.71 ID:lbIZmRLc0.net]
>>358
letterだとletになりそうだから嫌ったんだろ

369 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 00:01:55.60 ID:oR5NZ4bd0.net]
いっそのこと単に byte とでもしておけばよかったのかもしれない。

370 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 00:05:31.44 ID:U+FsjVqC0.net]
>>362 が正解
>>363 は単なるバカ



371 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 00:25:17.76 ID:ftNChFXo0.net]
>>364
char8_t ですね

bool が int も無駄が多い

372 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 01:04:08.98 ID:lrNh9u+Sa.net]
歴史的に char と byte はどっちが先なのかな

373 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 04:44:19.93 ID:Jy6PA5Os0.net]
英語圏でもチャーだけどな
ググればすぐわかる

374 名前:デフォルトの名無しさん [2021/08/15(日) 06:15:17.61 ID:FL52AdfHa.net]
https://eow.alc.co.jp/search?q=char

焦がす。

375 名前:デフォルトの名無しさん [2021/08/15(日) 06:18:12.36 ID:0d93Uofwa.net]
char siu

チャーシュー

376 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 16:55:39.88 ID:76TevYyAa.net]
>>368
もうずいぶん昔だけど「キャラクター」とか「インテジャー」とか省略しないで呼んでたぞ
今は「チャー」なんか

377 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 17:59:18.88 ID:oR5NZ4bd0.net]
>>359
enumerate の頭の音はグーグル翻訳だとエに近い発音に聞こえるけど
weblio だと明瞭にイに聞こえる。

378 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 19:39:25.14 ID:Jy6PA5Os0.net]
>>371
英語設定でググってみるといいよ
チャー派とカー派がいてチャー派が優勢のように見える。
reddit見るとお前ガンダム見たことないんか?シャーーー!とかlisperが混乱するだろがってコメントがあってワロ

379 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 19:58:39.32 ID:l+/QmNzh0.net]
care派も結構いるっぽいが

380 名前:デフォルトの名無しさん [2021/08/15(日) 21:05:49.36 ID:g44nIVaSM.net]
プログラムを書くのに読み方なんて意味が通じればどっちでもいいやん



381 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:02:13.11 ID:r0BCUeQy0.net]
初心者です、stdio.hの保存場所が知りたいです

Visual Studio Communuty 2018を使っており、標準ライブラリはインクルードディレクトリに指定された場所にあるということでした
プロパティでインクルードディレクトリを確認したところ、以下のようになっていましたが意味が分かりません
$(VC_IncludePath);$(WindowsSDK_IncludePath);

変数になっているようですが、どこかで確認できるのでしょうか?

382 名前:デフォルトの名無しさん [2021/08/16(月) 00:13:21.48 ID:x3HJsFala.net]
間違っていたらごめんなさい

その $() で囲まれた文字列をコマンドプロンプトから
echo %文字列%
として表示される文字列はどうでしょう

383 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:14:50.67 ID:wg/zbZxl0.net]
その値のところをクリックして<編集...>を選べば評価された値が見えると思う
その画面の右下の「マクロ>>」ってボタンを押せば使われてる変数の値も見える
上の構成がDebugかReleaseかで値が違う変数もあるけどIncludePathはたぶん同じ

2019で確認したから微妙に違うかもしれない

384 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:19:13.32 ID:x3HJsFala.net]
echo で確認す

385 名前:る方法は、その環境下でなければ
なので、別にコマンドプロンプトを起動してではダメですね
[]
[ここ壊れてます]

386 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:21:12.34 ID:r0BCUeQy0.net]
>>378
>>379
ありがとうございます、確認できました!
Visual Studio実行環境でこれらの環境変数が追加されているイメージなのですね

387 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:23:50.80 ID:x3HJsFala.net]


388 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:29:55.90 ID:sQwoI9K70.net]
VSインストールすると環境変数セットするバッチファイルが入って来たと思うが、今は違うのか?
古い知識で済まん

389 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 04:32:44.78 ID:pMWrjH7B0.net]
てすてす

390 名前:デフォルトの名無しさん [2021/08/16(月) 10:19:54.49 ID:sZNsU9Vp0.net]
すてすて



391 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 14:57:58.88 ID:Gh+OcB3lF.net]
実は VisualStudio は初心者向けじゃない

392 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:10:17.02 ID:BeGCPKkC0.net]
visual studioが覇権取ってからプログラミングが嫌になりました・・・
プログラミングが嫌というかvisual studioの設定とか使い方とかそういうのを覚えるのが・・・
LSI C+メモ帳で良かったのに・・・

393 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:17:22.96 ID:sQwoI9K70.net]
LSI C(試食版)は16ビットコンパイラでしかもSmodelしか作れないから
64ビットWindows環境で動かすのは無理じゃない?

394 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:37:48.81 ID:4H+7uDzk0.net]
……Visual Studio Community 2018なんてあったっけ?

395 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:41:26.98 ID:1MUZwyiI0.net]
vs2019 と cuda の相性が悪かったが治ったのなら起こしてくだしあ

396 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 22:55:54.30 ID:r0BCUeQy0.net]
素朴な疑問でprintfでdouble型を表示させようとしたとき%lfでなく%fにする理由なんですが、
floatを引数とするとdouble型にキャストされるので、printfではfloat型もdouble型も同じ%fと記述すればいいことになっている
と言う理解で合ってますか?

397 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 23:08:54.14 ID:GAZDNQn70.net]
相性悪いって何かあったっけ?

398 名前:はちみつ餃子 mailto:sage [2021/08/17(火) 03:49:27.19 ID:yPn/BtRt0.net]
>>390
あってる。
printf ではというか可変長引数では既定の実引数拡張のルールで float は double に拡張されるから区別しようがない。
よくわかってないやつが %lf って書いちゃうから C99 から仕様に入れることになったみたいな話だったはず。
(逆に言えばそれまでは無かった。)

でも引数に double を与えるつもりなら意味的にそれがわかるにこしたことはないので、
人間が読み書きする都合を考えるなら積極的に区別したほうがいいと思う。

399 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 05:49:50.95 ID:bbuY4XG00.net]
>>387
64で16bitモード使えないのは単なる嫌がらせ
技術的に本当はできるのに拒否してる

必要ならVM使うといい
過去バージョンは↓で入手できる
https://winworldpc.com/library/operating-systems

400 名前:ハノン mailto:sage [2021/08/17(火) 10:00:30.15 .net]
>>393
私は長年武田さんの MS-DOS Player
takeda-toshiya.my.coocan.jp
を使っています‥‥



401 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 10:22:58.26 ID:bbuY4XG00.net]
>>394
なかなかオモロイサイトだね
спасибо!

402 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 11:04:10.80 ID:1ngtDSTVK.net]
>>390
>>392
整数の基本型がintであるように、小数の基本型がdoubleだから。
そもそもdoubleっつー名前が良くないと思う。いまのdoubleをfloatにして、いまのfloatをsingle floatとかshort floatにすれば良かったのに…

403 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 11:14:12.12 ID:bbuY4XG00.net]
年代的に元々floatが標準のつもりだったんだろうな

404 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 11:56:57.33 ID:4Ah+oX6mM.net]
当たり前は時代と共に変わる

405 名前:デフォルトの名無しさん [2021/08/17(火) 16:52:28.09 ID:5M+zf85m0.net]
>>396
倍精度ってのを表したかったんだろうな。

406 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 21:48:20.20 ID:G/OIjFk20.net]
>>396
>小数の基本型がdoubleだから。

その理由は%fがdoubleだからというトートロジーでない?

407 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 22:05:20.16 ID:SEkFORwja.net]
計算自体は倍精度でやっていて、floatの場合結果を丸めてるの?

408 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 22:24:11.58 ID:oC68rP2o0.net]
そもそも
> 可変長引数では既定の実引数拡張のルールで float は double に拡張される
って言うのがよくわからん
普通にfloatはfloatのまま渡しゃいいじゃんと思うんだけどなんか理由あったのかな?

409 名前:はちみつ餃子 mailto:sage [2021/08/17(火) 22:44:19.25 ID:yPn/BtRt0.net]
引数の受け渡しにスタックを使う場合でもレジスタを使う場合でも
ワードサイズより小さい型はどうせそのワードサイズに調整して積むことになるので切り詰める意味がない。
(ワードにたくさん情報を詰め込むことも出来るといえば出来るけどかえって非効率になる。)
だから int より小さい型を int に調整するというのはハードウェア的
な都合が反映されていると思う。

昔は浮動書数点演算ユニット (FPU) は CPU の外に持っているのが普通だったんだが
その時代でも FPU のレジスタは大きめなサイズを持っていた。
double が収まるレジスタがあるなら double で受け渡すほうが都合が良かったんだろう。

※ この場合の「ワード」は2バイトという意味ではなく各アーキテクチャにおける基本サイズという意味なので注意

410 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 09:07:55.01 ID:a3KKdrJy0.net]
ん、8087由来のサイズになってるのはlong doubleだろ



411 名前:デフォルトの名無しさん mailto:sega [2021/08/18(水) 09:53:36.78 ID:AHN/ch/v0.net]
long double って表現がもう頭悪いよね・・・

412 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 14:10:11.42 ID:a3KKdrJy0.net]
%lfはどう見てもlong floatだね
%dはint用にしちゃってるから仕方なかったのかな

413 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 19:02:54.03 ID:9oCYCOnk0.net]
>>405
ダブロン って表現だとゲンが悪すぎるだろ・・

414 名前:ハノン mailto:sage [2021/08/18(水) 19:55:50.38 .net]
>>403
>その時代でも FPU のレジスタは大きめなサイズを持っていた。
80bit でしたっけ、そのうち仮数部が何ビットだったかは思い出せません

415 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 20:09:35.86 ID:Wv6HiLZZ0.net]
符号部1ビット+指数部15ビット+仮数部64ビット

416 名前:デフォルトの名無しさん [2021/08/22(日) 01:54:25.30 ID:0Cz6ueFz0.net]
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
nim-lang.github.io/Nim/manual_experimental.html


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます

417 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 11:26:19.76 ID:D+A51yiS0.net]
pythonを可読性高いという時点で眉唾だな・・・

418 名前:デフォルトの名無しさん mailto:sega [2021/08/23(月) 11:13:34.28 ID:4N/X7GO90.net]
char *b = "0123456";

printf("%x\n", 3[b]);
// 33

これって、どうしてこういう書き方 3[b] ができるんだっけか
シンタックスシュガーとかじゃなく、明確な理屈があって出来ちゃうんだよね?

419 名前:デフォルトの名無しさん [2021/08/23(月) 11:39:17.23 ID:JYwdk8yBF.net]
*(3 + b)

420 名前:デフォルトの名無しさん [2021/08/23(月) 11:42:03.51 ID:UaBHP8Yo0.net]
>>412
いやあ、それ、シンタックスシュガーでしかないと思うが。
[の左側+[]の内側で計算した結果をポインタ扱いにするってだけなので。



421 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 11:52:16.18 ID:4N/X7GO90.net]
>>413-414
ありがとうなるほどそーいう理屈なのか
素晴らしいです。 全てを理解していきます

422 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:51:00.15 ID:qUWlnfUi0.net]
標準でもそのまんまだなぁ

> A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object.
> The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).
> Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).

423 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:55:19.33 ID:OjohHfKH0.net]
余計なお世話になるが

printf("%x\n", 3["0123456"]);

これでもいいんだよな

424 名前:はちみつ餃子 mailto:sage [2021/08/24(火) 00:04:42.72 ID:MkJE9y3A0.net]
>>417
良いよ。

425 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 10:01:54.33 ID:tBKv4I6S0.net]
脱線するけど、そもそもCでこの書き方できたのか
printf("%x\n", "0123456"[3]);
なんかできないと思い込んでた。 Cはなんでもできるんだな

426 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 17:49:40.18 ID:DexxKsi10.net]
IOCCCの黎明期ならマウントとれたネタだね
今ドヤるやつはプークスクスされるだけ

427 名前:デフォルトの名無しさん [2021/08/24(火) 19:44:16.50 ID:KCG/N/Sb0.net]
stack領域で確保したポインタをfreeしたらどうなるんですか?

428 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 20:03:31.48 ID:Y1wLIEKvM.net]
>>419
> printf("%x\n", 3["0123456"]);
はともかく
> printf("%x\n", "0123456"[3]);
は実用でもそこそこ使うだろ
4bitの数値を16進数に変換する時に
"0123456789abcdef"[i]
ってやるとかは定番

429 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 20:04:24.13 ID:Y1wLIEKvM.net]
>>421
鼻から悪魔が出てくる

430 名前:デフォルトの名無しさん [2021/08/25(水) 01:30:07.26 ID:6n+Di1sM0.net]
>>423
どういうことですか?



431 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 01:52:34.44 ID:7J8MKXIfa.net]
>>421
酔ってるからかもしれないけど、質問の意味からして分からない
実装によるだろうけど、動的に確保されるオブジェクトはヒープに確保されるだろうし
黙ってれば確保したメモリへのアドレスを保持するポインタはスタックに置かれるし
実装によるけど

432 名前:デフォルトの名無しさん [2021/08/25(水) 02:58:06.66 ID:kk6d2P3X0.net]
>>422
定番って言えそうなほど使われているソースを見たことないなあ。

433 名前:デフォルトの名無しさん [2021/08/25(水) 03:01:55.29 ID:kk6d2P3X0.net]
>>421
alloca()でメモり確保した場合のことを言ってるの?だとすればfree()しちゃ

434 名前:ダメだよ。やってしまった場合にどうなるかは使っているライブラリによるんじゃないかな。そういう呼び出しを想定していないライブラリだと落ちるかも知れない。 []
[ここ壊れてます]

435 名前:はちみつ餃子 mailto:sage [2021/08/25(水) 03:30:51.31 ID:BzERENYF0.net]
>>424
未定義のこと。
C における未定義は何が起きても構わないことを意味する。

あるときネットニュース上でそれを説明するやりとりがあって、
あらゆることが起こりうるという例として鼻から悪魔が出てくる
ことも含まれるというような言い回しが使われた。
https://groups.google.com/g/comp.std.c/c/ycpVKxTZkgw/m/S2hHdTbv4d8J

それが定着して未定義のことを鼻から悪魔というのが通例になっている。

436 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 05:56:16.97 ID:oIlmdH3GM.net]
>>426
ちょっとググればすぐに出てくるぐらいには使われてる

char hex_from_nibble(unsigned char n){
return "0123456789ABCDEF"[n & 0xf];
}
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13162097918

437 名前:デフォルトの名無しさん [2021/08/25(水) 09:19:52.23 ID:U8ZXR+0VF.net]
>>421
やってみろ
ほとんどの場合は何も起こらない

438 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 09:57:31.74 ID:U3t+QZRrK.net]
>>421
スタック…と言うかmalloc(calloc/realloc)で確保したポインタ以外をfreeすると何がおこるか判らない(鼻から悪魔)。
実際の話だと、大抵の実装ではmallocは確保した領域に管理情報を埋めて返し、freeはその管理情報を見て解放処理をする。この場合、管理情報がデタラメになるのでメモリアクセス違反でプログラムが落ちる事が多い。

439 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:00:41.38 ID:VHSVWUHA0.net]
freeは何もしないことも許される、なんて言って呼び出しそのものを否定するやついたな昔

440 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 11:31:20.70 ID:hlr8Pa7o0.net]
ほとんどの場合は、無人の荒野を爆撃するだけだろうが
いつかは住民が住んでいるところを攻撃するぞ



441 名前:デフォルトの名無しさん [2021/08/25(水) 12:30:15.33 ID:6n+Di1sM0.net]
僕はc言語自体初心者だったのですが、stack領域で確保したポインタをfreeするというのは以下のコードを指すつもりで言ってました。
int a;
free(&a);
鼻から悪魔が出るというのは未定義動作になると言うのを言うんですね。また一つ勉強になりました。

442 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 12:58:42.10 ID:hlr8Pa7o0.net]
ポインタでもないし、何をしたいかが分からん
この時空を破壊したいなら、もっと考えてからにして

443 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 13:00:03.19 ID:wz3i5qam0.net]
>>422
俺は愛を信じないので、そのコードはちょっと怖いかな
範囲内という前提があるだろうけど、なんかはみでそう

444 名前:デフォルトの名無しさん [2021/08/25(水) 13:41:27.53 ID:6n+Di1sM0.net]
>>435
ポインタとアドレス同じ意味で使ってます

445 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 13:46:43.33 ID:f+OmsRJCr.net]
>>434
ちなC++触りだすとスコープ{}内で宣言したものはスコープ出たところで
勝手に始末されるちゅー理屈で実装することも増えると思う。
でかい一時配列とかスタックに置きたくもないしいちいちfreeとかdeleteのこと考えたくないから。
変な所でreturnとかしたらfree忘れちゃう。C言語だとその辺は厳格にしないといけない。

あと、ローカル変数のアドレスをあまり気安く使ってると、そのうち関数抜けて廃棄された
アドレスを参照してしまうバグをだしちゃうかも。一度位は通る道かもね。

446 名前:デフォルトの名無しさん [2021/08/25(水) 19:45:37.21 ID:s4bO6YKI0.net]
>>433
中國のロケットの落下騒ぎを思い出したわ

447 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 22:01:22.70 ID:ENQvEefU0.net]
>>435
>>434の&aはポインタだが

448 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 22:22:45.99 ID:hlr8Pa7o0.net]
>>440
では、何をfreeしたのか、説明して

449 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 22:46:23.25 ID:SkXNk2uR0.net]
ポインタはアドレスを格納する変数
&aはアドレスだが変数ではないのでポインタではない

450 名前:はちみつ餃子 mailto:sage [2021/08/25(水) 23:25:02.44 ID:/Q8zinJC0.net]
>>442
いいえ。 ポインタ型の値がポインタです。 (See C99 6.2.5)

C の用語ではメモリ (ストレージ) を占めるものがはオブジェクトで、それを型で意味付けしたものを値 (value) と言います。
実体としては同じですがレイヤによって呼び方が変わる場合があり、アドレスとポインタの違いも同様のものと考えられます。



451 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 23:28:23.41 ID:F2PvOiSs0.net]
>>442
何年か前にも見た覚えのある言説だな。元は何だろう?

452 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 01:58:36.79 ID:aNUIA15f0.net]
int *p; // ポインタ変数またはポインタ
int a;
&a; // アドレスまたはポインタ
int b = &a; // bはアドレス値の入った整数
int *c = &a; // cはポインタ

こういうこと?
アドレスとポインタは明確に区別されてるの?

453 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 02:10:26.24 ID:/WHSCxQr0.net]
 int a;
 int *b;

 b = &a;
 &a = b;

454 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 02:21:59.91 ID:aNUIA15f0.net]
>>446
なるほど?

455 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 02:37:50.30 ID:aNUIA15f0.net]
>6.5.3.2 アドレス及び間接演算子
>単項&演算子は,そのオペランドのアドレスを返す。オペランドが型“?型”をもっている場合,結果は,型“?型へのポインタ”をもつ。

だからアドレスとポインタどっちでも良いんじゃないの

456 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 07:03:21.90 ID:H9rsGF960.net]
&aはint*型のアドレス値(右辺値)で、変数ではないから代入は出来ない。
言葉の厳密な定義は知らんが、自分はポインタは型に紐付いたアドレスと理解してる。

組み込みなんかで
uint32_t a = 0x4020000;
...
*(int*)a = 1;
とか書くけどa自体はただの整数値だしね。

457 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:15:02.06 ID:GExK9GsR0.net]
>>448

int a=51; // 中山美穂の年齢
&a; // アドレス
(int*)&a; // ポインタ
*(int*)&a; // 中山美穂の年齢

458 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:25:24.33 ID:IpfDe45b0.net]
アドレスも年齢も表現の対象
ポインタとintが型の名前

459 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:26:46.39 ID:IpfDe45b0.net]
ageMipoとioDirectionがアプリケーションハンガリアン
iMipoとpDirectionがシステムハンガリアン

460 名前:デフォルトの名無しさん [2021/08/26(木) 14:51:44.03 ID:BSY6c8/C0.net]
>>441
みればわかりますよね?



461 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:05:40.12 ID:oVdr9HnU0.net]
言語仕様の文面の上ではアドレスとポインタの区別ははっきりしないので同一視してもかまわないとは思う。
少なくともポインタという用語がポインタ型の変数を指すという主張には賛成できないというだけ。

ただ、言語仕様の範囲内ではそれでいいんだけども言語仕様の範囲外というか実装上の理屈では区別している場合がある。
言語仕様上はポインタの比較は同一の配列 (または集成体オブジェクト) 内の要素を比較した場合や
ヌルポインタとの比較についてしか定義されておらず、それ以外は未定義であると明記 (C99 6.5.8 参照) されていて
関連のない場所のポインタの比較であることが静的に把握できるときは定数に置き換える最適化が適用されることもあるんで
アドレスを比較した通りの結果になるとは限らない。
https://wandbox.org/permlink/SqW5wzZM3fD912Nh
そんなわけでポインタが素朴なアドレス (実体が整数値) だと思っていると思わぬ結果を生むことも有る。

462 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:26:17.74 ID:IpfDe45b0.net]
気持ちだけは、俺も昔そう思いたかったことがあるけど
JIS X3010ではそうなっていないので、その気持ちはきっぱり捨てた

463 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:56:32.08 ID:GExK9GsR0.net]
int a; のときに &a+1 とかやると sizeof(int) 進むのね!
マジかよ知らなかった!

じゃあこの &a はほぼポインタだと思っていいのかな? いいの?

464 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 17:01:04.55 ID:IpfDe45b0.net]
「ほぼ」じゃなく明白にポインタ

465 名前:はちみつ餃子 mailto:sage [2021/08/26(木) 17:09:18.58 ID:oVdr9HnU0.net]
>>456
int a;
と宣言されているとき &a の型は int* で、これを「int へのポインタ」という。
定義上ポインタとされているものに合致する。

466 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 18:57:41.72 ID:B7a9vIltM.net]
aはint型の変数
&aは変数aをアドレス演算子&で評価した値
得られた値の型はintへのポインタ型int*

467 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 19:23:18.52 ID:2RMrl6dxr.net]
>>456
例から少し外れるけど*(&a[0])に対して*(&a[0]+1)がおかしな場所指すと嫌だしな。

468 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 19:47:54.06 ID:aNUIA15f0.net]
ポインタ型の変数→ポインタ、ポインタ変数
ポインタ型の値→ポインタ、アドレス
アドレス演算子の結果→ポインタ、アドレス

こういうことか

469 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 22:07:08.65 ID:cHqKnQ440.net]
そして配列 int a[5] から a は何者? 引数に渡すとどーなる? という深淵な所へ

470 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 07:17:43.92 ID:5AM8fV7q0.net]
>>459
&aはアドレス演算子と左辺値からなる式
式が生じる結果には値と型がある



471 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:24:46.38 ID:TRiQmtYg0.net]
> int b = &a;
ポインタ型の値を整数型の値に暗黙に変換して代入

472 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:31:13.97 ID:sfbhubJqr.net]
>>464
gccでやったら注意された。g++でやったらガチギレされた。

473 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:39:50.45 ID:02SXv6gRK.net]
>>465
g++なら
int &b = a;
でヨシ(良くない

474 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:43:34.61 ID:TRiQmtYg0.net]
ポインタを整数値として変換した際、その値が int の範囲内に収まるかどうかは環境でまちまちやでねぇ

475 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:54:11.87 ID:5AM8fV7q0.net]
ここはCスレ
C++の参照はスレ違い

476 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 10:16:24.88 ID:02SXv6gRK.net]
>>467
厳密にはintptr_tだけど、大抵intで足りるでそ?
コンパクトモデル?知りませんなぁ

>>468
すまん、茶々でした

477 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 10:21:47.24 ID:TRiQmtYg0.net]
わかってないのに短絡で int は危ないけど
LP64 やら LLP64 やら ILP64 やら
自分のがどうなってるかわかっててやるか、ポータビリティを鑑みて気を使った書き方するか

478 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 10:44:46.26 ID:5AM8fV7q0.net]
ポインタのビット列を格納しきれる整数型が必ず存在する保証って箇条どこだっけ

479 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 11:00:51.55 ID:nK81wxcE0.net]
>>469
いまや大抵の環境でintじゃ足りないだろ。大丈夫か?

480 名前:はちみつ餃子 mailto:sage [2021/08/27(金) 11:13:41.38 ID:i+fGpSJz0.net]
>>471
6.3.2.3 では「結果は何らかの整数型の値の範囲に含まれているとは限らない」とあるし、
7.18.1.4 では intptr_t は省略可能であるともあるので保証はないと解釈すべきだと思う。



481 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 11:49:10.69 ID:5AM8fV7q0.net]
>>473
なるほど
これで (int)&a はダメなんてドヤってるやつは根拠を失ったなw

482 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 12:26:48.67 ID:nK81wxcE0.net]
>>474
馬鹿なの?主要pfのintサイズも知らないのかよ

483 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 12:55:50.72 ID:5AM8fV7q0.net]
日本語でおk

484 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 14:37:29.53 ID:nK81wxcE0.net]
うわ基地外に触っちまった

485 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 15:11:03.04 ID:28SvbL190.net]
友達いて良かったじゃないか

486 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 18:08:24.28 ID:5AM8fV7q0.net]
よしてくれ
直接的な罵倒語で話す次元のやつと一緒にすんな

487 名前:デフォルトの名無しさん [2021/08/27(金) 19:45:46.03 ID:dNdDj0y10.net]
>>479
○すぞ

488 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 22:47:56.20 ID:3kbeL8sr0.net]
愛すぞ

489 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 23:16:53.36 ID:fvnuyojga.net]
推すぞ

490 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 23:51:09.87 ID:5LgeY8Yf0.net]
スッゾオラー!



491 名前:デフォルトの名無しさん [2021/08/28(土) 00:56:23.65 ID:TAUITiELM.net]
>>479
諭すぞ

492 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 01:07:55.46 ID:ArBPUbYg0.net]
宿題のことも思い出してやって

493 名前:デフォルトの名無しさん [2021/08/28(土) 02:24:48.25 ID:Kasf1Z4n0.net]
>>358
レターは文字の集合。キャラクターとしたのは文字として認識していない記号等を含めたため。

494 名前:デフォルトの名無しさん [2021/08/28(土) 14:36:23.66 ID:0ROz2KLh0.net]
>>486
なるほど

495 名前:デフォルトの名無しさん [2021/08/28(土) 19:25:44.91 ID:Kasf1Z4n0.net]
>>487
制御文字を含めたのも理由かな

496 名前:デフォルトの名無しさん [2021/08/28(土) 19:26:13.75 ID:0ROz2KLh0.net]
>>488
なるほど

497 名前:デフォルトの名無しさん [2021/08/28(土) 19:38:40.56 ID:Kasf1Z4n0.net]
文字のことをキャラクターと呼び始めたのはC言語じゃねえよ。

13年前にできたCOBOLですらキャラクターと呼んでんだぜ?

498 名前:デフォルトの名無しさん [2021/08/28(土) 19:51:11.77 ID:foB6MXRR0.net]
俺に聞けって言われてもな
なに聞いたらいいかわからん
変に言語のマニアックな知識つけるより、アルゴリズム沢山知ってた方がいいと思うから言語や開発環境についてはvalgrindとかcmakeとか基本的なことを身に付いてればそれで十分だと思ってるわ
だからすまんけど聞きたいことはない

499 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 19:58:54.24 ID:J7/U097I0.net]
>>490
> 13年前にできたCOBOL

?

500 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:03:04.96 ID:ArBPUbYg0.net]
C言語が1972年、COBOLが1959年
こういうことを言いたいのでは無いか?



501 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:08:53.74 ID:GTTRCLIA0.net]
子供の英会話聞いてるとletter aとか頻出するが、まだキャラクターは出てこないな。

502 名前:デフォルトの名無しさん [2021/08/28(土) 21:27:40.38 ID:Kasf1Z4n0.net]
キャラクターの本来の意味は文字じゃないんだぜ?
あたりまえなんだぜえ?

503 名前:デフォルトの名無しさん [2021/08/29(日) 01:18:09.40 ID:TPHdi4yb0.net]
>言いたいのでは無いか?

ここの「無い」に漢字を使うことに違和感感じるのは漏れだけ?

504 名前:デフォルトの名無しさん [2021/08/29(日) 01:49:09.89 ID:HDdtcjYC0.net]
「〇〇ではないのか。」の「ない」は形容詞。

ただし、これは形容詞を代用した言い回しなので、「無い」とはっきり形容とわかる使い方以外の場合は、日本語のおかしさが出てしまうので違和感がある。

そもそもわざわざ「ない」を「無い」と書く必要がない。戦後教育では漢字で書かなくてもわかることは仮名で書くと決めて、学校では漢字で書かないよう指導しているのに、漢字で書くやつはそれをすっかり忘れているだけだ。

505 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 01:52:08.61 ID:5p1Kcso30.net]
割とどうでもいい話だな
国語教育スレにでもうつってそこで続けてくれ

506 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 02:38:33.54 ID:7/doTy/i0.net]
> 違和感感じる

に違和感覚えるのは漏れだけ?

507 名前:デフォルトの名無しさん [2021/08/29(日) 02:48:49.23 ID:HDdtcjYC0.net]
>>499
それもネチネチ30年以上も言われたが、単に字面が醜いという話で終わった。

覚えるも感じるも同じ意味で使っている。日本語は同じ漢字が続くときれいに見えないので変えたくなる。

508 名前:デフォルトの名無しさん [2021/08/29(日) 04:28:31.20 ID:Lt7wAmk40.net]
無いと言えばこの前ドイツ語の映画で Nein って言ってる時に日本語字幕に「無い」と出ていて一致していて笑った。

509 名前:デフォルトの名無しさん [2021/08/29(日) 05:28:11.66 ID:HDdtcjYC0.net]
>>501
否定の言葉の発音がNで始まるのは人類共通

510 名前:デフォルトの名無しさん [2021/08/29(日) 05:30:35.87 ID:HDdtcjYC0.net]
人類が言葉を話す前の拒否を表す叫びが言葉になったのだろう。



511 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:16:38.59 ID:0FIWs/PL0.net]
いやだ!
やめろ!
はNじゃないけど

512 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:19:11.41 ID:z+CvjRY2a.net]
スモモモモモモモモ

513 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:43:55.40 ID:kXE2QuW0K.net]
>>501
「無いん」ならもっと良かったw

>>502
韓国語だと、YESがネーでNOがアーニョ

514 名前:デフォルトの名無しさん [2021/08/29(日) 08:46:40.86 ID:XBz6dM210.net]
離散データを連続データのように見せかけるフィルターを作りたい。
アルゴリズム名を教えてください。

515 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:51:04.40 ID:s3BI9dN30.net]
不是

Nで始まるどころか含まれてもいない

516 名前:デフォルトの名無しさん [2021/08/29(日) 09:56:38.96 ID:Qq6uUubw0.net]
_countof を使うべきですか?
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/countof-macro?view=msvc-160
もっと良い計数方法ありますか?

517 名前:デフォルトの名無しさん [2021/08/29(日) 10:01:34.24 ID:Qq6uUubw0.net]
>>502
フランス語には何故 pas があるの?

518 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:14:57.45 ID:LcGcn6bDF.net]
>>509
https://marycore.jp/prog/c-lang/countof-array-and-sentinel-value/

519 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:11:09.82 ID:bszwbM+aH.net]
>>510
https://dictionary.sanseido-publ.co.jp/column/ghf23

520 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:24:27.16 ID:Gww7yuPw0.net]
>>510
neの発音が小さくて聞き取れないから付けることになった



521 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 17:57:42.29 ID:Lt7wAmk40.net]
nulぽ

522 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 18:16:18.76 ID:jyQ+I+xW0.net]
   ( ・∀・)   | | ガッ
  と    )    | |
    Y /ノ    人
     / )    <  >__Λ∩
   _/し' //. V`Д´)/ ←>>514
  (_フ彡        /

523 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 18:44:57.73 ID:5p1Kcso30.net]
日本語だとにゃー、英語だとmew

524 名前:507 mailto:sage [2021/08/29(日) 19:19:21.76 ID:XBz6dM210.net]
投稿するスレッドを間違えてしまったかもしれません。>>507
それ以後、いろいろ調べつづけましたが、
どうやら内挿法とか補間法とか呼ばれていることが分かりました。
そのためのアルゴリズムを探してみます。
ありがとうございました。

525 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:26:53.70 ID:5p1Kcso30.net]
宿題スレやお題スレなら、反応があるかも知れん

526 名前:507 mailto:sage [2021/08/29(日) 19:40:59.03 ID:XBz6dM210.net]
離散的なデータのプロットから滑らかな曲線を得たいのですが、
ベジェ曲線を使う必要があるため、それも計算する必要があります。
ではこの辺でさようなら。

527 名前:デフォルトの名無しさん [2021/08/30(月) 14:56:32.12 ID:a7szkEqkF.net]
FFT

528 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 17:40:48.45 ID:7tjRHlOya.net]
Final Fantasy XII

529 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 22:24:16.28 ID:u8tdK0uP0.net]
与えられた離散的な点を必ず通る曲線なのか適度に近いとろこを通す曲線なのか

530 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 20:16:31.77 ID:5EZjygd6a.net]
Fire Fox TV



531 名前:507 mailto:sage [2021/09/01(水) 07:07:18.21 ID:idZ7WXfL0.net]
>>522
必ず通るようにしたいです。最小二乗法のようなものじゃないです。

532 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 09:37:56.74 ID:BXH5CjID0.net]
スプライン補間
https://github.com/okumuralab/algo-c/blob/master/src/spline.c

533 名前:507 mailto:sage [2021/09/02(木) 18:15:48.70 ID:E4GAaWam0.net]
>>525
サンキュー、サー!

534 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 14:53:10.23 ID:H4dj0oy10.net]
代入時など左辺に&をつけない理由って、元々左辺の変数はその変数のアドレスを示しているんですか?

535 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 17:29:15.71 ID:fnRem4gD0.net]
左辺にアドレス値を書いても、そのアドレスに格納してくれるわけではない

536 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 19:49:04.18 ID:UoYK8G+w0.net]
変数は(多くの場合)メモリ上に置かれる
a=bの式をコンパイラは「bのアドレスのメモリにある値をaのアドレスのメモリにコピーする」と解釈する

でもそれをソースコード上で&a=&bと書かせてもお得なことはないよね
言語上では「a, bは(抽象化された)変数」で、その変数への代入は「a=b」でいいよね

537 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 20:30:31.76 ID:IpYcp5mx0.net]
>>527
C++だと参照型が近いけど、あれはあれで窮屈ながらも、便利っちゃ便利かもな。
でもポインタ幅きかせてるCであえて拡張したい記法かといえば微妙よね。
void func(char &c) { c *= 2; }
みたいなのね。

538 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:33:45.82 ID:H4dj0oy10.net]
皆さんありがとう
scanfで変数に&を付ける理由はいろんなとこに書いてあるんだけど、
それならなんで普通の代入の時に&を付けないんだ?
って疑問に思ってました

539 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 23:06:30.86 ID:LC2TQyRsa.net]
void f(int *p)
{ *p = 1; }

….
int i;
i = 0;
printf("%d\n"); // 0
f(&i);
printf("%d\n"); // 1

540 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 00:21:46.80 ID:F+ZN0nvA0.net]
scanfに限らず、関数に変数を渡すと、その関数は、
渡された変数の値を受け取れるだけで、
変数の値の書き換えは出来ません
書き換えて欲しいときは、書き換える場所を関数に教えます

普通の代入の時は、その変数を直接操作できるので
あえてアドレス表記する必要が無いです



541 名前:デフォルトの名無しさん [2021/09/12(日) 02:58:55.75 ID:zHKafq1A0.net]
memcpy(&a, &b, sizeof(a));

なんてことを、昔々構造体の変数の代入が出来ないCのサブセットのコンパイラでやったことがあったような気がするが、もはや記憶も曖昧になるぐらいの大昔。時の経つのは早いものぢゃ。

542 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 10:12:20.10 ID:BvG4P5vd0.net]
サブセットつーか、そもそもK&R Cは構造体代入できないね

543 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 14:36:50.48 ID:Yq9DVfRn0.net]
>>531
int c;に対して&c = 100という記述はだめなのって疑問かな?
代入演算子は左辺に変数を置いて値を書き込む特別な演算子だけど、
それをその変数の型を含むアドレス値を左辺に置いてそのアドレスに
書き込むという定義とするわけだ。

定義自体がややこしいし、
アドレス全面押しにする理由がない(むしろ遮蔽したい)、
頻繁に用いる演算子ゆえタイプ数が増えたりするのは好まない、
などメリットがないのだろうね。

=と==を=にまとめてしまって、代入時は&付けるという方向は
あるかも知れませんが、コード中代入のが多いでしょうから、
代入をシンプルにしたのではと。

544 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 14:42:45.51 ID:BvG4P5vd0.net]
FORTRANの代入を真似ただけだろ

545 名前:デフォルトの名無しさん [2021/09/13(月) 01:06:14.49 ID:MTzB4xqO0.net]
>>535
あ。そうだったっけ。忘れてた。

546 名前:デフォルトの名無しさん [2021/09/13(月) 01:13:16.73 ID:MTzB4xqO0.net]
int c;
*(&c) = 1;
ていうのなら出来る。
コンパイラは何の警告も出さずにコンパイルするかも知れないが、結局 c = 1; をやっているのと同じコードが出力されると思う。

547 名前:はちみつ餃子 mailto:sage [2021/09/13(月) 01:28:42.84 ID:b2LY5t5P0.net]
代入演算子の左辺に現れることが出来るのは変更可能な左辺値 (modifiable lvalue) で、
>>539 の例はその条件を満たす。

>>527
たとえば
int c = 1;
a = 2;
というのは C では有効なコードだけれど、変数を評価すると格納されている値になるというルールを
そのまま適用すると
1 = 2;
になってしまっておかしい、左辺は「場所」でないといけないという感覚はとても良い感性なのだけれど、
左辺がアドレスということにしたとしてもアドレスはポインタ型の「値」でしかないのでそれはそれで
なんだか変なことになる。
結局は特別な規則を導入必要はあって、 C においてはそれが lvalue という概念というわけ。

548 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:34:08.89 ID:wBWjVwq/M.net]
わざとやってるのか知らんけどコードくらいまともに書けよ

549 名前:デフォルトの名無しさん [2021/09/13(月) 09:12:44.29 ID:BLplThEad.net]
>>531
C++は面倒なことになったな
#include <iostream>

using namespace std;

int main(int ac, char **av)
{
int a = 3;
int &b = a;
cout << a << b << endl;
return 0;
}

550 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 09:47:47.66 ID:B8QV0Pmm0.net]
ここはCスレ



551 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 13:35:49.31 ID:lh01OzgJa.net]
>>532
誤>printf("%d\n"); // 0

正>printf("%d\n", i); // 0

いまさらですが、第2引数が欠落していました
失礼しました

552 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 16:53:30.27 ID:XjglcLZY0.net]
副作用をポインタを経由して呼び出し元に伝播する ポインタ渡し
引数変数への代入がそのまま呼び出し元の変数に反映される 参照渡し(C言語には無い)

553 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 16:57:08.25 ID:XjglcLZY0.net]
関数の壁(呼び出し元と 呼び出された関数内の記述)を超えるときに & を使って壁を越える工夫をする
同じコード内の変数への代入ならば不要

554 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 17:04:06.19 ID:JA2CmiO7M.net]
&使わないと釣り銭をもらえない

555 名前:はちみつ餃子 mailto:sage [2021/09/13(月) 17:52:01.78 ID:b2LY5t5P0.net]
C の仕様では引数は一貫して値渡しで、その値の型がポインタ型のこともあるという理屈になってる。
(仕様の理屈はともかくポインタの活用の仕方としてポインタ渡しと呼ぶことを否定するわけではない。)

556 名前:デフォルトの名無しさん [2021/09/13(月) 17:58:15.13 ID:+BvkCNRX0.net]
C言語は昔からアドレス渡しと言っているけどな。

557 名前:デフォルトの名無しさん [2021/09/13(月) 18:00:26.00 ID:+BvkCNRX0.net]
ポインタ渡しだとポインタ変数限定みたいに捉えてしまいそうだなw

558 名前:デフォルトの名無しさん [2021/09/13(月) 20:02:35.33 ID:LTFifztG0.net]
「アドレス渡し」の方がアセンブラに近い
ただしポインタ型のサイズで加減するアドレッシング機能付き
「ポインタ渡し」はPASCAL由来やろ

あと配列のサイズも一緒に渡す機能は付いてたらよかったのになーともたまに思う

559 名前:デフォルトの名無しさん [2021/09/13(月) 21:18:13.15 ID:+BvkCNRX0.net]
OSを作るために作られたのに

560 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 01:01:51.69 ID:cEQHQvCwa.net]
ポインタには型があるから、オブジェクトの大きさも、structへのポインタなら、各メンバへのオフセットや大きさやら…



561 名前:デフォルトの名無しさん [2021/09/14(火) 06:05:05.77 ID:48wIBTET0.net]
>>553
型はあってないようなもの

562 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:07:50.62 ID:TY9EyEr50.net]
カーニハンは辛辣なPascal批判の論文書いてるね

563 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:08:21.19 ID:TY9EyEr50.net]
これ
www.lysator.liu.se/c/bwk-on-pascal.html

564 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:16:50.67 ID:0vgLnSzd0.net]
>>556
論文って開いてみたら、タイトルクソワロタ。

565 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:26:42.56 ID:TY9EyEr50.net]
よかったね

566 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 09:36:35.35 ID:Hja/bGISM.net]
卒論のテーマはこれで決まりだな

567 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 10:50:21.10 ID:5Y/jembp0.net]
アドレス私って、
b = a;
c = a;
とかやってて、a=0にすると、bもcも0になるってこと?

568 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 11:31:36.84 ID:TY9EyEr50.net]
それは参照だ
C++のな

Cでやるなら
#define b a
#define c a

569 名前:デフォルトの名無しさん [2021/09/14(火) 13:58:37.43 ID:eQ96wDaCF.net]
>>557
Matz の論文は I hate C++ だぞω

570 名前:デフォルトの名無しさん [2021/09/14(火) 15:48:56.00 ID:48wIBTET0.net]
>>556
性能重視の部分は考え方の違いだな。UNIXを作るにあたって不要な部分を取り除いた結果がC。



571 名前:デフォルトの名無しさん [2021/09/14(火) 15:51:55.83 ID:48wIBTET0.net]
>>560
メモリのアドレスを直接、渡すから、呼び出し元の領域をそういうふうに直接、触ることになる。

572 名前:ハノン mailto:sage [2021/09/14(火) 17:38:29.69 .net]
私は pascal は好きなんですけど‥‥

573 名前:デフォルトの名無しさん [2021/09/14(火) 23:42:22.10 ID:/drSXHoF0.net]
Delphiは昔使ってたな。拡張しまくったPascalというかなんというか。

574 名前:デフォルトの名無しさん [2021/09/15(水) 00:41:20.00 ID:h1CB84tY0.net]
アセンブラのようなことができた方がいいというのが出発点だからなあ

575 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 01:36:14.40 ID:/JHaU2Oz0.net]
今でこそ C は低レイヤ寄りと見做されるけど「高級言語で OS を書きたい」というモチベーションから作られている。
おそらく当時の感覚からすればむしろアセンブラ的な世界からの脱却だったんじゃないかな。
歴史的経緯はある程度は記録を辿れるけど時代を背景にした「感覚」というのは現代人からはなかなか掴みづらくてあくまでも想像だけど。

576 名前:デフォルトの名無しさん [2021/09/15(水) 05:11:14.87 ID:h1CB84tY0.net]
おおざっぱに言うとアセンブラの見た目を変更したのがC

577 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 07:08:27.66 ID:+suq2kti0.net]
アセンブラの無駄のなさと、高級言語の移植性の、両取りを狙う試みだね

578 名前:ハノン mailto:sage [2021/09/15(水) 14:05:30.69 .net]
それはどうでしょうか‥
turbo c の asm 文抜きのいきなりインラインはよく使っていましたが、そんな turbo c でもキャリーフラグを直接使えなかった気がします、そんな記憶がふつふつと

579 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 14:16:20.72 ID:+suq2kti0.net]
ローテート命令はキャリーありの9bit循環とキャリーなしの8bit循環があるから
そこまで言語では面倒見きれなかったってだけ
ステータスレジスタを陽に記述すると移植性なくなるが
そんなことしなくても当時のUNIXの95%を記述できたしな

580 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 15:25:36.81 ID:23VOu0KJM.net]
#ifdef flagresister取得可能(ならば)
専用式
#elseif
~



581 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 15:31:31.69 ID:23VOu0KJM.net]
みたいな専用式を言語仕様に含めたやり方も出来たかもしれん
当時の演算能力内でwrite once,RA かつアカデミック感目指してomit しちゃったんかな

582 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:26:01.26 ID:1Mo2XUv5M.net]
Keep the language small and simple.

583 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 17:05:05.53 ID:dV7Qc7xZM.net]
>>571
そもそも世の中にはキャリーフラグなんてないプロセッサもあるから
俺の知る限りキャリーフラグを扱える高級言語はTL/1しかない

584 名前:ハノン mailto:sage [2021/09/15(水) 17:16:31.92 .net]
>>576
そうなんですね、なんちゃって多倍長をやっていて、ここでローテート&キャリーが使えればなぁぁぁ、とつくづく

585 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 17:52:22.20 ID:/JHaU2Oz0.net]
>>576-577
TL/1 はあくまでも演算子がキャリー/ボロー付き演算の命令にそのままコンパイルされるってだけなんで、
配列アクセスなどのときに勝手にアドレス計算でフラグが設定されてしまうといった意図しない影響があって
あまり使い勝手は良くない。

あまり詳しくないけど LLVM はキャリーフラグを扱う方法があって
かつレキシカルな伝播として記述できたはずなんで、
たぶん LLVM IR でならなんとか記述できるんじゃないかな。
LLVM IR を高級といえるかどうかはたいへん微妙な話だが……。

586 名前:デフォルトの名無しさん [2021/09/17(金) 10:00:39.91 ID:oDWWsmOUa.net]
>576
https://www.zukeran.org/shin/d/2015/04/10/kumajiri-compiler/

587 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 10:32:07.44 ID:+c0nDJY5M.net]
>>578
例えばこんなを高級言語って言う?
define i32 @main(i32 %argc, i8** %argv) #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
%3 = alloca i8**, align 8
store i32 0, i32* %1
store i32 %argc, i32* %2, align 4
store i8** %argv, i8*** %3, align 8
%4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0))
ret i32 2
}

>>579
ごめん、意味分からん
単なるVTL (Very Tiny Language) の話にしか見えない

588 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 14:21:22.00 ID:g2c8KLlcM.net]
>>580
rustよりは高級に見えるな

589 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 14:42:13.05 ID:hv2MZm4l0.net]
>>580
そこから様々なターゲットの機械語を生成しうるという意味では
ハードウェアにベッタリと紐付いているわけではなくて
LLVM IR を低水準言語と呼ぶのはなんか違うなって思うけど、
だからといって日常的に人間が直接書くことを前提においてるわけでもない
という点では高級とも言いにくいかな……という意味で「微妙」と評した。

590 名前:デフォルトの名無しさん [2021/09/17(金) 16:26:05.73 ID:J/w/zJeW0.net]
シリコンバレーで働いて気付いた「技術力向上」だけに固執するエンジニアのダメさ【Sansan CTO 藤倉成太】
https://type.jp/et/feature/9402/
DeNA×メルカリ×サイバーエージェント人事担当が面接で必ずする質問とは?「技術力だけアピールしても内定は出ない」
https://type.jp/et/feature/10236/
DeNA・メルカリ・CA人事が証言! スキルはあるのに“面接で落ちる”エンジニアに足りないもの
https://type.jp/et/feature/10402/



591 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 20:48:41.30 ID:M17TGSOPM.net]
>>582
> そこから様々なターゲットの機械語を生成しうるという意味では
> ハードウェアにベッタリと紐付いているわけではなくて
Javaのバイトコードを高級言語って言うの?

592 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 20:59:27.14 ID:hv2MZm4l0.net]
>>584
JVM のバイトコードは言語ではないと思うから高級言語とは言わないけど、低水準でもないでしょ。

593 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 21:50:22.49 ID:/PAMmlQoM.net]
低水準の話はしてないから
> 高級言語とは言わない
でFAやね

594 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 22:00:48.37 ID:hv2MZm4l0.net]
そうか。

595 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 22:31:46.08 ID:C7S/bCm80.net]
C言語だってコンパイルすればバイナリ

596 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 04:33:04.80 ID:iNoegsL20.net]
倍也

597 名前:デフォルトの名無しさん [2021/09/18(土) 08:52:55.38 ID:bA/qQPAiF.net]
バイトコードをいい加減に扱い過ぎ

598 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 09:19:07.92 ID:1ehO0L4U0.net]
>>580
特定CPUのアーキテクチャに言及してないな

599 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 18:56:12.62 ID:RjbxwxKL0.net]
宣言と定義についてなんですが

int a; // 宣言
int b = 1; // 定義

宣言と定義ではどちらもメモリ(スタック)は確保されているという理解であってますか?

600 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:10:22.14 ID:bsPUoCV00.net]
はい



601 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:28:32.87 ID:I+biH5jK0.net]
はいじゃないが

602 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:42:16.97 ID:jTQBMDyZ0.net]
>>592
変数宣言のうちメモリを確保するのもが定義。
その2つは両方とも宣言であり定義でもある。

603 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:43:03.59 ID:XFa1Ksn/0.net]
コンパイラと最適化オプション次第

604 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:48:26.79 ID:RjbxwxKL0.net]
>>595
定義は宣言の下位概念ってことですか?

605 名前:ハノン mailto:sage [2021/09/18(土) 19:55:00.96 ID:/DXMasS60.net]
>>592
いいえ
定義では格納場所を確保しますが、宣言では存在のみ指示しても格納場所は確保されません、私は気が向けば宣言には extern をつけるようにしないわけではない、という感じかな
なおその例は少し変で、代入を伴えば定義というわけでも、代入がなければ宣言というわけでもない、というのが個人的感覚です、詳しい人の解説を希望します

例外は、リンカが頑張って格納場所を作ってくれる例の何とかとかいうキーワードがあったのですがおもいだせません、今日モデルナを射った後転んで頭を打ってしまった、結果、いっそう馬鹿になってしまいました‥‥

606 名前:ハノン mailto:sage [2021/09/18(土) 20:04:32.98 ID:/DXMasS60.net]
>>592
宣言か定義か、という問題は、単一モジュールでプログラムを構成している段階ではあまり気にしなくてもいいと思います
複数の c ソースを分割コンパイルし、最後に得られたオブジェクトをライブラリともあわせて結合する、という作法に進めば自然に理解できるようになりますのでご心配なさらなくともいいでしょう

私も昔は「extern は要らない子!」とか馬鹿をいっていましたが、これは撤回します、extern がどうしても必要な場面に遭遇したのです
まあそういうわけで一度にいっぺんに賢くなるのは私には難しいことのようです

607 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 20:41:39.21 ID:RjbxwxKL0.net]
>>598
たとえば

int a;
printf("%d\n", a);

なんですが、この場合のaは定義されているということですか?
代入式があるのが定義だと思ってました
宣言と定義の文脈はコードによって変わるということなんですかね

608 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 21:25:06.90 ID:JTl7f6jwM.net]
簡単に言えば宣言はその名前をコンパイラに伝えるもの
定義はその実体を確保するためのもの
>>592の例は両方共に宣言であり定義でもある
C言語では定義のみすると言うのはできないと思う
宣言のみはexternとか前方参照のためのstruct xxx;とかで使われる

609 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 21:44:48.00 ID:YluaRA/40.net]
>>596
屁理屈こねんなやボケが

610 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:06:39.93 ID:jTQBMDyZ0.net]
..>>597
「下位概念」という言葉をあてるのは不自然な気がするけど、C言語において定義は宣言のサブセットだよ。

>>600
その2行がコンパイルできる文脈に置かれているなら、 a は定義されている。
(初期化されていない自動変数になるので後続の printf での読み取りは未定義動作になるけど。)
「宣言と定義の文脈はコードによって変わる」は意味が分からないので否定も肯定もできない。
同じ int a; といった記述が宣言か定義か文脈によって変わる、ということならありえる。(構造体メンバの宣言とか。)



611 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:22:54.90 ID:RjbxwxKL0.net]
>>601
>>603
メモリが確保されているかどうか?という点で定義か宣言か判断すればいいということですね
printf()で参照している場合はaはメモリが確保されているのでaは定義されている状態
printf()で参照しない場合はaはただの宣言になると

612 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:32:01.92 ID:vqHZXwmna.net]
>>604
レスの後半はいらないよ
参照されるか否かは関係ないよ

int a;
で定義は完結してるから

613 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:36:06.58 ID:/Dm63BCIM.net]
>>604
> printf()で参照しない場合はaはただの宣言になると
違う、参照の有無に関わらず領域は確保される
最適化とか鼻から悪魔のコードだから確保を端折るとかはあるけどそれはまた別な話

614 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:53:55.61 ID:RjbxwxKL0.net]
>>605
>>606

理解しました!

int main(void) {
int a;
return 0;
}

↑のaは定義されていてメモリが確保されている状態ってことですね
また定義は宣言のサブセットだから、この状態を宣言と呼んでもいいということですね

615 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:32:59.41 ID:vqHZXwmna.net]
aは定義されている、でよいと思います
ちなみに、自分は宣言とか定義とか「言葉」は意識しないです
ただ、ここにオブジェクトが実在するのか、他のどこかにあるオブジェクトを使うのかは明確に意識しなければなりません

int main(void) {
int a;
extern int x:
return 0;
}

ここで xは、関数外のどこかで定義された int型のオブジェクを参照します、という宣言

616 名前:ハノン mailto:sage [2021/09/18(土) 23:37:35.98 ID:/DXMasS60.net]
>>607
そうですね
それに、そのコードは関数 int main(void) も宣言かつ定義していますね
関数の場合は、関数の中身が書いておれば宣言かつ定義、関数の呼び出され方だけしか書いていなければ宣言、とすぐにわかるので、キーワード extern は省かれる傾向にありますね

詳しい人に解説いただき私も感謝します

617 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:38:56.69 ID:bsPUoCV00.net]
質問
externを関数内で宣言したとき、有効範囲は次のどれになりますか?
1.宣言した関数のスコープ内で有効
2.宣言したソースの後続行で有効
3.宣言を書いたソースの全体で有効

618 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:43:44.98 ID:vqHZXwmna.net]
A.1

619 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:45:59.85 ID:vqHZXwmna.net]
通常の変数と同様に、ブロック {} で括られるかと

620 名前:はちみつ餃子 mailto:sage [2021/09/19(日) 00:58:34.79 ID:aMl1OG4b0.net]
JISX3010:2003 の 6.7 から抜粋

> 宣言は、幾つかの識別子の解釈及び属性を指定する。
> 識別子の定義 (definition) とは、宣言のうち次のものをいう。
> ・オブジェクトに対しては、そのオブジェクトの記憶域を確保する宣言
> ・関数に対しては、関数本体を含む宣言
> ・列挙定数又は型定義名に対しては、その識別子の(唯一の)宣言



621 名前:デフォルトの名無しさん [2021/09/19(日) 12:56:33.95 ID:/yxUr6Cya.net]
関数の中とか{}ブロックの中とかで
#include とか #define 出来れば良いのにと思うことはある
(いや出来ることは出来るけど)

622 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:00:14.49 ID:k97hf5Wx0.net]
>614
その辺は古い仕様の限界だから……

623 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:08:34.86 ID:dcXPbcRy0.net]
>>614
便利だよね
CSV埋め込みとか

624 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:49:36.39 ID:1EdICjsOK.net]
>>610
>>611
2だったような
1の方が合理的だが

625 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:19:30.05 ID:gqeRua+ma.net]
// foo.c
#include <stdio.h>

int f(void)
{
extern int glob:
return glob + 1;
}

int main()
{
printf("%d\n", f()); // 124(次行がないとき)
printf("%d\n", glob); // エラー
return 0:
}

// bar.c
int glob = 123;

でした
勘違いだったらごめんなさい

626 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:24:53.88 ID:gqeRua+ma.net]
int f(void)
{
__{
____extern int glob:
__}
__return glob + 1; // glob undeclared
}

627 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 18:52:30.28 ID:AMdE/BCe0.net]
extern の変数をスコープ内に書きたい場面ってあまり思いつかない。
ヘッダファイルに書くのサボりたい時くらいしかそんな書き方しないな〜

628 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:48:44.86 ID:gqeRua+ma.net]
>>620
>>608だけど、(関数スコープ内の)宣言のうまい例を思いつきませんでした
自分でもこのような記述はしたことがないです

>>614
ブロック内でも、#includeや#defineは使えるには使えるのでは
使ったことはないけど
ただし、#defineは同じスコープ内で #undefで閉じておかべきだけど
リーダブルコードという本で、define〜undefの例を見たような

629 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:52:36.17 ID:tWZRSjBtM.net]
>>620
俺はそのスコープでしか使わないなら普通にスコープ内に書くけど?

630 名前:621 mailto:sage [2021/09/19(日) 20:02:10.63 ID:gqeRua+ma.net]
>>614
「できるにはできるけど」と、ちゃんと書いてありますね
大変失礼しました、ごめんなさい!!



631 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:34:55.88 ID:qdWHvjUr0.net]
ひょっとして、#define も関数内で記述すると
そのスコープ内で有効になるのかな?

632 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:40:54.81 ID:AMdE/BCe0.net]
>>624
流石にそれはない。

633 名前:621 mailto:sage [2021/09/19(日) 20:42:46.70 ID:gqeRua+ma.net]
#includeとか #defineとか、プリプロセッサが処理する時点では、スコープとか、C言語の文法すら関知しないかも
トークンの
識別くらいで

634 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 21:23:46.86 ID:AMdE/BCe0.net]
こんな #define 見たくないけど・・・

---------------------------------------
void func() {
 #define A 100
}
int main() {
 int i = A;
}
---------------------------------------

gcc -E prepro.c
---------------------------------------
# 1 "prepro.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 384 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "prepro.c" 2
void func() {

}
int main() {
 int i = 100;
}
---------------------------------------

635 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 10:14:32.45 ID:rmuhdvcF0.net]
Cにnamespaceが無いのが逝けない娘

636 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 15:37:40.46 ID:ql5RJosy0.net]
いらねぇだろネームスペースなんか

637 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 16:28:35.49 ID:WSYscKBB0.net]
namespaceが欲しいのにC++を使わないのが逝けない娘

太古の昔、Cにクラスが無いのが逝けない娘だと思った人とは行動力が違いすぎるな

638 名前:デフォルトの名無しさん [2021/09/20(月) 17:39:30.67 ID:WNFThOB/0.net]
CはCのままで良い。他の言語で実現出来ているんだし。その機能を使いたいならそちらの言語を使えば良い。
それでは何かが足りないというのなら新言語作れば良い。
自分では作る技術力がなくても仕様を考えてネットで公開しておけばやがて暇と技術力のある誰かが作ってくれるだろう。

639 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 18:06:11.00 ID:xT0MCUkn0.net]
>622
型を間違えてもエラーにならないから全くお勧めしない

640 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:39:36.63 ID:QS4OJe2QM.net]
>>632
はあ?
何言ってんの?
頭大丈夫?



641 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:50:34.34 ID:vvw4JppL0.net]
ミスする可能性が上がるから各コードでexternせずに必要ならヘッダに書いてもらえってことじゃね?

そもそもexternなんてextern "C"以外滅多に使わないけどな

642 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:57:31.48 ID:LO5PkHvF0.net]
>>633
前スレより

975 デフォルトの名無しさん (ワッチョイ b363-19dE) sage 2021/06/21(月) 23:06:35.04 ID:jHz8GYW10
// b.c
int b[] = {123, 456};

// a.c
#include <stdio.h>

int a[] = {123, 456};
int main()
{
  extern int *b;
  printf("val b\n");
  printf("%d\n", *(b + 1));

// printf("val a\n");
// printf("%d\n", *(a + 1));

 return 0;
}

こういう分割ソースをコンパイル、リンクして実行すると、何も表示無しで終了する
デバッガー使って実行してみると、SEGVになってる

643 名前:ハノン mailto:sage [2021/09/20(月) 20:10:17.55 ID:+hQanlE40.net]
>>634
>ミスする可能性が上がるから各コードでexternせずに必要ならヘッダに書いてもらえってことじゃね?
そうそう、extern による宣言と定義とが食い違うとエラーがでますから、そのためのヘッダの分離ということですね

>そもそもexternなんてextern "C"以外滅多に使わないけどな
関数の宣言は extern 省略可能ですし、ライブラリ側で共用のメモリを確保することは滅多にないです私は

644 名前:621 mailto:sage [2021/09/20(月) 23:40:17.11 ID:y5y6BCAna.net]
>>635
これは関数のスコープに書かなくても(ファイルスコープでも)同じじゃない?

645 名前:621 mailto:sage [2021/09/21(火) 00:23:33.65 ID:7n0ZYlgRa.net]
>>635
これってリンク時にエラーにする方法はないのかね….
あればとっくにやってるんだろうけど…

646 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 00:26:56.39 ID:aEoN/PBD0.net]
>>637
同じですね

そもそもexternを明示的に書く必要がある状況って、
あるソースで定義されているグローバル変数を他のソースに公開して使えるようにするために、
ヘッダにextern int a;のように書いておいて、他のソースにはそれを#includeさせる
(すると他のソースでは余計な領域が確保されない)
のパターンが基本だと思っています

だからそもそもブロックスコープでexternするのってなんで? 覗き魔? って思ってしまう

647 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 03:22:03.74 ID:rkkhSUpi0.net]
ブロックスコープ内でexternはK&R C時代の名残で今は完全に無意味

648 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 03:23:48.34 ID:rkkhSUpi0.net]
関数原型でのexternは単項プラスみたいなもん
staticじゃないよと強調する反対語

649 名前:ハノン mailto:sage [2021/09/21(火) 03:36:19.96 ID:9i80hc760.net]
>>639
>ヘッダにextern int a;のように書いておいて、他のソースにはそれを#includeさせる
「他のソース」でないソースも、そのヘッダを #include しておけばダチェックにもなるし

650 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 19:14:32.01 ID:8eqDWQ5I0.net]
>>639
ヘッダに実体がある糞コードで
でも直すなって言われて仕方なくexternすることはあった



651 名前:621 mailto:sage [2021/09/21(火) 22:41:16.78 ID:rS8f3YVDa.net]
// b.c
char a[] = { 0, 1 };

// a.c
int main()
{
__extern int *a;
__printf("%d\n", a[1]):
__return 0;
}

不勉強でした
上のコードは警告もなしにコンパイルが通りますね
実行すると segmentation fault ですが

リンク時はデータ型はチェックされず、名前だけで参照を解決してるのですかね……

古い仕様で、今さら変更はできないんでしょうね、チェックができたとしても

652 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 22:46:25.12 ID:rkkhSUpi0.net]
型システムを持たずラベルの綴りのみを手がかりに参照解決するリンカを操るツールの1つだからねCは
リンカにあれもこれもと機能を持たせるのはメインフレームのファイルシステムにあれもこれも持たせようとしたVSAMの再来だ
インフラ的なものにアプリの都合を無闇に押しつけるべきではないことを歴史から学ぶべきだぞ

653 名前:はちみつ餃子 mailto:sage [2021/09/21(火) 23:19:06.05 ID:tYtQqya30.net]
C には「プロトタイプ (関数原型) を持たない関数宣言」があって、
関数の型が曖昧なまま関数が存在することだけを宣言できる。

プロトタイプ (プロトタイプ宣言) がある場合にはその関数を呼出すにあたって実引数と仮引数の間では代入と同じ規則
で (可能な場合には) 暗黙の型変換が適用されるが、プロトタイプがない場合には
既定の実引数拡張 (可変長引数に実引数を渡すときと同じ規則) が適用されて実引数と仮引数の辻褄が
あってないときは未定義という扱いになる。

更には C89 は暗黙の関数宣言という規則があって (C99 では廃止されている)
関数を呼出そうとした時点で関数が宣言されていない場合には実引数の型から一定の規則に基づいて
関数の型を推測し、関数が宣言されたかのように振る舞うことになっている。
なので関数宣言が存在しなくても二度以上の関数呼出しの型に矛盾があれば検出はされる。
もちろん関数定義の実体と辻褄があってなかったらそれは未定義だけど。

このあたりのクソみたいな規則は「C++ では採用しなかった仕様」として D&E でちょっと触れられてる。

654 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 23:25:07.21 ID:rkkhSUpi0.net]
> 実引数の型から一定の規則に基づいて

655 名前:関数の型を推測し

func(1);

int func();

func("string");

int func();

こうなるだけで推測なんて気の利いたことはしないよ
[]
[ここ壊れてます]

656 名前:621 mailto:sage [2021/09/21(火) 23:27:49.11 ID:rS8f3YVDa.net]
プロトタイプ宣言は C++からの逆輸入だからな….
その昔の Cったら

657 名前:はちみつ餃子 mailto:sage [2021/09/21(火) 23:34:12.47 ID:tYtQqya30.net]
>>647
あ、ほんまやな。
仕様上のルールは「extern int func(); が書かれていたものとみなす」というだけで、
具体的なチェックをどこまでするかは処理系次第 (たぶんあまり真面目にやってなかったと思うけど) だな。

658 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 05:28:22.60 ID:iWoXuoBc0.net]
>>648
> プロトタイプ宣言は C++からの逆輸入

そうなの?

659 名前:デフォルトの名無しさん [2021/09/22(水) 14:25:23.40 ID:Te29kBsr0.net]
どうだったっけなあ?

660 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 14:32:16.52 ID:1hd+XsHu0.net]
The C programming language (いわゆる K&R 第一版) の
APPENDIX A 8.3 Declarators を見る限りでは
引数リストが空の形式しかないように見える。
関数であるということは宣言できるが型チェックはガバガバっぽい。

D&E の 2.6 静的タイプチェック の項では

> C with Classes のシンタクスとルールはその後 ANSI C の規格にも採用されたが
> C with Classes の最初の実装の時点ですでに完全な形をしていた。

という一文があるので C の型チェックは C++ (の前身である C with Classes)
からの影響ということで間違いないと思う。



661 名前:デフォルトの名無しさん [2021/09/22(水) 14:42:52.46 ID:KzVGjGnLF.net]
初耳だわ
はちみつは何歳?

662 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 15:34:35.81 ID:p7uTNZa70.net]
47歳くらいだと思う

663 名前:ハノン mailto:sage [2021/09/22(水) 17:51:09.10 ID:z5uxQYPx0.net]
>>644
そのコード、仮に a.c で
extern int *a;
ではなくて
extern char *a;
であってもセグフォが出ると思います、試してませんけど‥‥

なにか二重に勘違いしてませんか?それとも私が二重に勘違いしているのか?

664 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 18:02:31.76 ID:1hd+XsHu0.net]
>>655
配列として定義したものをポインタとして宣言するのは間違いだな。

665 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 18:04:06.47 ID:1hd+XsHu0.net]
FAQ に書いてあったわ。
www.c-faq.com/aryptr/aryptr1.html

666 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 18:35:41.60 ID:Il91zgnyM.net]
47歳
研究部門に所属
趣味は手芸

667 名前:621 mailto:sage [2021/09/22(水) 19:31:52.27 ID:u8cZI69ma.net]
>>655
ありがとうございます

はい、char と char でもダメですね
データ型がことなれば、リンケージできないのではと思い実験してみました

定義側でメモリに配置されているのは値で、extern宣言で参照する側が期待するのはポインタが配置されていることなのでうまくいきませんね(違うかな)

668 名前:621 mailto:sage [2021/09/22(水) 19:34:04.23 ID:u8cZI69ma.net]
>>656
こちらで先に指摘がありましたね

669 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 08:15:49.41 ID:0q4HMCJB0.net]
>>638
変数に対しても型情報付加したマングリングするぐらいかねぇ?

670 名前:ハノン mailto:sage [2021/09/23(木) 10:00:32.79 ID:HaJtCNmP0.net]
>>661
アセンブラがリンクできなくなるからヤダ



671 名前:ハノン mailto:sage [2021/09/23(木) 10:02:57.46 ID:HaJtCNmP0.net]
>>657
thx a lot !
日本語訳は太古の昔から有名どころ、ただし C89 の話だったかも www.kouno.jp/home/c_faq/c6.html#0

672 名前:ハノン mailto:sage [2021/09/23(木) 13:38:03.01 ID:HaJtCNmP0.net]
>>658
ほとんどプロの人‥‥完璧なアマは私くらいですか

673 名前:はちみつ餃子 mailto:sage [2021/09/23(木) 16:56:05.29 ID:pKS1sRJG0.net]
COFF フォーマットを見てるんだが、
関数が返す値の型を格納するところは有っても引数の型

674 名前:ノついては無いみたいだ。
http://delorie.com/djgpp/doc/coff/symtab.html
ヘッダファイルで型情報をやりとりする前提なんだな。

ELF だとたぶん詳細な型も入れられそうな雰囲気があるんだけど複雑でようわからん……。
[]
[ここ壊れてます]

675 名前:デフォルトの名無しさん [2021/09/24(金) 19:26:12.39 ID:bEXGgTP60.net]
もしかしてc言語って新たにブロック文つくったら構造体の二重定義って可能になるんですか?
試しに
{
struct a{};
{
struct a{};
}
}
ってcompiler explorerで打ち込んだらcompile通りました。
こんなの初耳です。
ちなみに同じブロック文で二重定義したらcompile errorが起こりました。

676 名前:ハノン mailto:sage [2021/09/24(金) 20:31:56.55 ID:B0dAhYuN0.net]
>>659
今回の例でもわかるように、無節操にバンバン extern 宣言を複数の C ソースファイルのあちこちに混入させるのは非常にマズイので、
普通はサブモジュールの extern 宣言だけを別のファイルにまとめておいて、そのサブモジュールを使用するソースで #include するのが標準的です
この extern 宣言だけをまとめたファイルを特にヘッダファイルと呼びます
https://ideone.com/rdbae2
実体を定義したサブモジュールもヘッダを #include するようにしておけば、ヘッダの誤りも検出することができます

なにかこういう基本文法を終えた後に位置するべき基本的な作法集をまとめたアドバンス教科書、みたいなものはないものでしょうか?

677 名前:621 mailto:sage [2021/09/24(金) 20:48:31.47 ID:PKobCCv1a.net]
>>667
ありがとうございます
>>659 == >>621 です

621にもあるとおり、僕もこのような extern宣言を使用したことがありません
他に変数の宣言の例が思いつきませんでした…

678 名前:ハノン mailto:sage [2021/09/24(金) 20:54:31.27 ID:B0dAhYuN0.net]
>>666
使い道はわからないけれどもできるようですね‥‥無名構造体・異ネスト同一識別子で試してみました
https://ideone.com/eXiadC

679 名前:デフォルトの名無しさん [2021/09/24(金) 22:23:44.15 ID:bEXGgTP60.net]
>>669
レスありがとうございます
確認してみましたが
この例でなされてるのはdeclarator中の構文要素であるidentifierの例であって、>>666でなされているようなstructトークンとleft-braceトークンの間にあるidentifierを同じのを二度使っている例にはなっていないとおもいます。
僕は後者の仕様は、同じ変数名が複数ソース上にあるとき現在の位置から見て最も内側のブロックで宣言されたものの方で解決するという当たり前の規則だと認識してます
僕にとって謎だと感じるのは前者の仕様です。cの規格のどこからきているのか気になります

680 名前:デフォルトの名無しさん [2021/09/24(金) 22:25:13.81 ID:bEXGgTP60.net]
>>670
すみません。
このレスの前者は後者に、後者は前者に読み替えてください
間違えました



681 名前:ハノン mailto:sage [2021/09/25(土) 06:49:29.05 ID:YrZFQiAF0.net]
>>670
https://ideone.com/ORzF28

もう、結論はお出しになっているかと‥‥考えます
規格の話は苦手なのでごめんなさい

682 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 11:02:06.77 ID:dAtBdpVF0.net]
>>670
> 同じ変数名が複数ソース上にあるとき現在の位置から見て最も内側のブロックで宣言されたものの方で解決するという当たり前の規則だと認識してます

その「当たり前」の規則は変数名に限ったものじゃくて構造体タグ名についても同じ規則が適用される。
www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf
6.2.1 Scopes of identifiers
> A label name is the only kind of identifier that has function scope. ...
>
> Every other identifier has scope determined by the placement of its declaration (in a declarator or
> type specifier). ...
> ...
> ... the scope of one entity (the inner scope) will end strictly before the scope of the other
> entity (the outer scope). Within the inner scope, the identifier designates the entity declared in the
> inner scope; the entity declared in the outer scope is hidden (and not visible) within the inner scope.

ただし変数名とタグ名とでは名前空間 (name space) が異なる。

683 名前:デフォルトの名無しさん [2021/09/25(土) 11:05:50.70 ID:lBxoEpbFF.net]
{
int a;
{
int a;
}
}
とやってることは同じ

684 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 16:07:19.71 ID:Uwq7lnPV0.net]
>>666
二重定義じゃなくて、入れ子構造の中での定義にすぎないからでは?
イメージとしては、コンパイラとしては、外側の構造体は
struct XX_a {}
内側の構造体は
struct X_a_a{}
みたいな感じで管理してコード展開してるだけ。

685 名前:デフォルトの名無しさん [2021/09/25(土) 16:37:10.46 ID:g8iabg1P0.net]
>>673
出典出してくださってありがとうございます
declarator内かtype specifier内かどっちかで現れたかにも関わらず識別子には同じような規則が適用されるのですね
この知見を趣味のコンパイラづくりに役立てたいと思います
ありがとうございました

686 名前:デフォルトの名無しさん [2021/10/04(月) 14:36:02.21 ID:ly3pkK+7F.net]
int a = -4 % 3; // -1
int b = -3 % 3; // 0
int c = -2 % 3; // -2
int d = -1 % 3; // -1
int e = (-4) % 3; // -1
int f = (-3) % 3; // 0
int g = (-2) % 3; // -2
int h = (-1) % 3; // -1

これは仕様ですか?環境依存ですか?

687 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 14:53:49.95 ID:DbNnxaRn0.net]
C90は実装による
C99は被除数と同じ符号 ((ISO/IEC 9899:1999) の 6.5.5 見ろ)ってwiki に書いてあったけど

6節の (a/b) * b + a % b === a と
整数化に際しての丸めの方向から結果的にそう解釈すればいいってことなのかな

688 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 19:35:08.68 ID:7g8s0ol20.net]
まあ環境依存だと割と困ってたので
C99でIntelの実装にあわせただけなんですけどね

689 名前:はちみつ餃子 mailto:sage [2021/10/07(木) 15:44:53.27 ID:UkaMQ5gY0.net]
>>677-678
C89 で符号が確定して欲しいときには div 関数があるよ。
これの符号は C89 のときから C99 以降の / や % の挙動と同じ。

690 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:07:27.42 ID:4loHRlApd.net]
配列から数個おきに取得するとき、なにかアルゴリズムとかライブラリ関数みたいなものってありませんか?
↓みたいなコードです。nが大きく、物凄い時間掛かっていて...

for(i=0; i<n; i++) a[i] = b[i*3];



691 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:16:28.78 ID:bbG44xQB0.net]
boostとvalarrayによる方法がみつかった
https://stackoverflow.com/questions/8404822/create-a-subvector-from-regularly-spaced-elements-of-another-vector
https://en.cppreference.com/w/cpp/numeric/valarray/slice

692 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:22:19.41 ID:xFkpIt2+0.net]
>nが大きく、物凄い時間掛かっていて..

オンメモリーで扱えていなさそう

693 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 20:33:05.08 ID:1lOq7tfe0.net]
a書とb読で互いにページ追い出されてスラッシングみたいになってんのかねえ

694 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 20:59:19.20 ID:UHyGo8Qe0.net]
それ、3個おきという意味?

695 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 21:57:57.62 ID:TH86hbHp0.net]
皆様ありがとうございます、Cだとなかなか難しそうですね...
データは数百MBくらいの画像で、mallocで確保した領域にあります。

RGBRGBRGB・・・からRだけを取り出す、みたいな処理で、
頻出しそうだし何かうまい方法あるんじゃないかと思ったんですが。

696 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:46:23.98 ID:5Y743A290.net]
>>686
ちょっと試してみた
a[] 100MB, b[] 300MB の配列確保して、
配列bを適当に初期化したあと
a[i] = b[i*3]; を実行してみた
それしかしていないが処理は1秒程度だった

64bit環境でメモリ16GB、i7 6700k skylake 4GHz
手持ちのコンパイラは Microsoft(R) 32-bit C/C++
Optimizing Compiler Version 16.00.40219.01 for 80x86

参考になるかな

697 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:54:53.24 ID:MLaNN2iaa.net]
8ビット無駄になるけど、RGBを 32ビットの整数として、>> と & では?

698 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:55:52.69 ID:MLaNN2iaa.net]
バイト境界より速いかも

699 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 01:22:15.55 ID:l1MPihFP0.net]
単純な方法でもいうほど遅くなるわけない
最速を目指すならSIMDでやれ

700 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 02:10:45.46 ID:5Y743A290.net]
>>686 の説明文で触れてない重たい処理があるのかもしれん



701 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 12:24:48.28 ID:89OLuObV0.net]
ループ内で他の事をすると格段に遅くなったので(コンパイラの最適化の関係でしょうか?)
他の処理はすべて外に出して、書いた処理だけにしてる状況です。

ちょっとした実験に使いたいコードで、装置からの出力がだいたいGByte/sくらいなので、それに追い付く処理速度が理想なんですが...
並列化勉強しないと無理ですかね...

>>687
テストまでありがとうございます、こちらでもそれくらいのオーダーでした。
環境のせいではなさそうで安心しました。

702 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 20:54:31.47 ID:B1aurOR80.net]
他の事したらキャッシュの効率落ちるわな
GByte/sってSATA3の速度超えてる
リアルタイムに加工するのはまだまだ無理なんじゃ

703 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 07:22:07.33 ID:IjEclFwpd.net]
FPGAの出番だな

704 名前:デフォルトの名無しさん [2021/10/14(木) 08:48:28.90 ID:RLbfxynZM.net]
サイズが全然違って参考にならないかもしれないけど、以前テスト用の音声データのサンプリングレート落とす時に似たような事やった時は、a[i] b[j]でi++,j+=3みたいにやった方が早かった記憶。

705 名前:デフォルトの名無しさん [2021/10/14(木) 16:42:28.33 ID:1iGiane/0.net]
>>692
コード見てないからなんとも言えないけど、本当にそのループだけで1秒ってのは時間かかりすぎじゃないかな。
このコードでgcc 最適化オプションなしでも0.3秒、-O2なら0.000002秒。
5年くらい前のCore i7 3.3GHz メモリ16GB

勘違いしてないか心配だけどコード。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
int count = 100*1024*1024;

unsigned char *a = (unsigned char*)malloc(count * sizeof(unsigned char));
unsigned char *b = (unsigned char*)malloc(3 * count * sizeof(unsigned char));

clock_t t = clock();
for(int i = 0;i<count;i++){
a[i] = b[i*3];
}
t = clock() - t;
printf("%f\n",(double)t/CLOCKS_PER_SEC);
return 0;
}

706 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 17:04:51.16 ID:LTwSvEh70.net]
>>687 だが、正確に測定したわけではない

>物凄い時間掛かっていて...

こういう質問だったので、そんなにかからないよという程度の返事
ものすごい時間が掛かると言う処理の内容が分からないとこれ以上は・・・

707 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 18:27:12.03 ID:ciTZIm8Y6.net]
それは最適化で消えただけだ

708 名前:デフォルトの名無しさん [2021/10/14(木) 18:45:28.00 ID:1iGiane/0.net]
>>698
ですよねw -O2

709 名前:ナ0.18秒。 []
[ここ壊れてます]

710 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:22:12.25 ID:B0s+ugv/0.net]
もしやコードとかアルゴリズムの話じゃなくて、ミリ秒単位を長いと感じるかどうかってことなのか



711 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 20:39:33.49 ID:60mfbtKJM.net]
Gbps出したいんだから当然そうでしょ

712 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 22:30:42.31 ID:oXMWcY6Na.net]
>>698
すでに書かれてたか

713 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 00:03:27.81 ID:XHojpqKh0.net]
>>699
volatileつけてM1macで-O0で0.25秒、-O2で0.05秒位だな。普通に間に合いそう。

714 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 01:46:57.39 ID:vumwfiEZa.net]
まったく自信がないのにチャチャ入れるようで申し訳ないのだけど、volatile を書く位置によっても結果がことなるかなと

おそらく a の * の左側に記述したのだと思うけど、動的に確保したメモリに対して有効なのかな…

誰か詳しい人いませんか?

715 名前:はちみつ餃子 mailto:sage [2021/10/15(金) 02:01:35.27 ID:2ebxtk1m0.net]
・ volatile で修飾された変数 (メモリ領域) は初期系にとって未知の方法で更新されうるというプログラマから処理系に対するヒント
・ (未知の方法で更新されていても) 言語仕様で定めるところの抽象計算機の動作に厳密に従わなければならない

という規則なので volatile の修飾先が変数 a であってもポインタ a が指す先であってもこの場合は結果的に最適化は抑制されると思う。

716 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 02:05:14.85 ID:vumwfiEZa.net]
ありがとうございます
おっしゃる通りのような気がします

717 名前:デフォルトの名無しさん [2021/10/15(金) 07:55:14.31 ID:Svg6ZUXsM.net]
>>686
画像だけならopenCVにsplitというのがあってrgb に分割された配列を返してくれるんだけど、後のレスから察するにどんどん流し込まれて来るみたいだからそのまま使えるかわからないです。
そのsplitではインデックスの計算にOpenCLを使っていますが、もちろん他の処理にも使えるから、ソース読んでみて損は無いと思います。

718 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 08:19:09.19 ID:WeKxZ2Hf0.net]
工夫するにしてもマルチスレッドで分割するぐらいしか思い浮かばん
領域を n分割し nスレッドパラに走らせて複製

719 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:12:03.80 ID:+uEUiKf90.net]
>>705-706
volatile の修飾先によってどこの最適化が抑制されるかが異なるので結果も異なるだろう。

720 名前:デフォルトの名無しさん [2021/10/15(金) 09:44:49.60 ID:FX8yed990.net]
すみません、マジの初心者で申し訳ないんですけど、
今サンプルコードを写したりしながら勉強しているんですが、
毎回#includeとかint main(void)とかって書かなくて済む方法
ってありますか?
visual studio 2019を使ってます。
良ければ誰か教えてください。



721 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:58:43.65 ID:5/Pqp5xeM.net]
今後数千行、数万行のプログラムを書いていくことになるんで、int mainを自動入力させたいなんて気持ちはそのうち自動的に消えるので安心してください

722 名前:デフォルトの名無しさん [2021/10/15(金) 10:13:57.88 ID:Sjupi756F.net]
>>710
https://ideone.com
https://codepad.org

723 名前:デフォルトの名無しさん [2021/10/15(金) 10:23:34.05 ID:FX8yed990.net]
>>712

ありがとうございます!
元々それらを使っていたのですが、今使っているサンプルコードが書かれている本が
コマンドプロンプトで実行することを想定して作られているのか、
よく途中でscanfを使って入力の読み取りをするのですが、オンライン上だとそれができないのです。
visual studio 2019で、テンプレを自分で作っておいてそれを
読み込むような技があれば教えてほしいです。

724 名前:デフォルトの名無しさん [2021/10/15(金) 10:53:31.08 ID:FX8yed990.net]
自力で調べて解決できました。
ありがとうございました。

725 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:55:13.67 ID:/xIATXuH0.net]
どういたしまして。 お役に立ててなによりです。

726 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 13:51:30.67 ID:0CjYy/Ai0.net]
C言語初学者です
for文を使って1からnまでの総和を求め、
さらに答えを例えばn==3なら
1+2+3=6と表示したいのですが、この表示の仕方がわかりません
ご教授お願い致します

727 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 14:26:17.75 ID:W6fuAKpz0.net]
int i.n,x;
n=3;
x=0;
for(i=1;i<=n;i++){
x+=i;
printf("%d",i);
if(i!=n)printf("+");
}
printf("=%d¥r¥n",x);

728 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 14:38:37.10 ID:0CjYy/Ai0.net]
>>717
できました
ありがとうございます!

729 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 16:54:36.35 ID:r+1DV466M.net]
>>717
最終行の ¥r って要るの?

730 名前:はちみつ餃子 mailto:sage [2021/10/16(土) 17:51:52.16 ID:E+4r+lYs0.net]
>>719
基本的には不要。
 ・ 改行を表すものは (C の規格の範囲内では) 文字であるかのように扱う
 ・ テキストモードでの入出力ではホスト環境の都合に合わせて変換してよい
ということになっていて、改行を2バイトの符号で扱うホスト環境では \n という一文字を
その2バイトに変換するのは入出力関数の仕事。

ただし、標準出力をバイナリモードで開き直している場合だとか、
改行を1バイトの符号で表すホスト環境で2バイトの符号で表す環境のために出力したい
といった事情で改行を \r\n と書くことが無いとは言い切れない。



731 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:25:40.97 ID:0CjYy/Ai0.net]
質問です
入力された文字列と文字数を表示するプログラムで
Enterキーのみが入力されるまでループして入力要求をするようにしたいのですが
1〜4文字の入力はループするのですが5文字入力するとループが終わってしまいます
どうなおせばいいでしょうか?
よろしくお願いします
/*************************************/
#include <stdio.h>
#include <string.h>
int main(void){
char str[] = "Hello";
fgets(str,sizeof(str),stdin);
while (str[0] !='\n'){
if (str[0] != '\n'){
printf("文字列%s\n",str);
printf("文字数%d\n",strlen(str));
fgets(str,sizeof(str),stdin);
}else{
break;
}
}
}
/*************************************/

732 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:28:04.06 ID:j08Y/8ma0.net]
よく出来たクイズですね

733 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:33:18.38 ID:N8k1BZc20.net]
AOJかなんかですか

734 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:39:04.82 ID:j08Y/8ma0.net]
>>721
>1〜4文字の入力はループするのですが5文字入力するとループが終わってしまいます

設問として、何文字までの入力を受け付けるようにし、
それを越える文字数入力された場合はどうすると指示されてます?

735 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:43:54.01 ID:0CjYy/Ai0.net]
>>724
言葉足らずですいません
5文字までの入力で6文字以上の入力は考慮しないとなっています
>>723
大学の課題です

736 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:50:23.50 ID:j08Y/8ma0.net]
>>725
5文字までの入力を保証するには、配列サイズがたりません
入力最後のエンターキーまで含めるなら、7文字は必要じゃ無いかな?

737 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:59:47.56 ID:g8LyFw1O0.net]
・str配列を大きくする
・fgetsした結果のstrに改行文字が含まれてない場合は次の改行文字までstdinを読み飛ばす


738 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:00:22.34 ID:0CjYy/Ai0.net]
>>726
配列の箱増やしたらループするようになりました
ありがとうございます
あと1つ問題が残っていて文字列表示のあとに改行が無駄に1つ入ってしまいます
どうにかできないでしょうか?
現状
abcde
です
したい表示
abcdeです

739 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:00:54.46 ID:iHqDmbcU0.net]
>char str[] = "Hello";
とにかくここが気持ち悪い・・・

740 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:02:15.17 ID:j08Y/8ma0.net]
>>728
入力の最後に改行がある前提で表示を行うか、
文字列最後に改行がある場合は切り詰めるか、
どちらかで処理すると良いです



741 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:02:51.64 ID:hXa8blxW0.net]
>>729
それは別に普通では?

742 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:08:52.93 ID:j08Y/8ma0.net]
>>728
切り詰め方はこんな感じで

 if (str[strlen(str) - 1] == '\n')
  str[strlen(str) - 1] = 0;

↑全角空白は適当に置き換えて

743 名前:デフォルトの名無しさん [2021/10/16(土) 23:13:30.42 ID:D7GMWgGE0.net]
Hello!って!付ければいいよ。元気が足りない。
さらにこれfgetsの動作の理解を問う良問なんだから、無駄な改行なんぞ気にする余裕があるならfretsのドキュメント読んだ方がいいぞ。

744 名前:デフォルトの名無しさん [2021/10/16(土) 23:14:42.85 ID:D7GMWgGE0.net]
>>733
偉そうに言ってスペルミスですね。fgets です

745 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:26:16.40 ID:0CjYy/Ai0.net]
>>732
ご親切にありがとうございます!
>>730頂いてから調べててまたわからないことが増えたーって思っていたところでした笑
上の問題は無事解決しました
ありがとうございます

>>729
スマートな初期化方法があれば教えて欲しいです

746 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:27:52.08 ID:0CjYy/Ai0.net]
>>733
正しく書き直せた場合の実行結果に改行が入ってなかったので気になりました汗

747 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 00:24:13.17 ID:IGrhvydt0.net]
>スマートな初期化方法があれば教えて欲しいです
バッファサイズをちゃんと決めておくぐらいか?
ギリギリのサイズじゃなく余裕をもって(最大文字数+1(終端NULL)かつ32bitOSなら4バイト、64bitOSなら8バイト単位とか)。
定義後すぐにfgetsに渡すなら初期化も要らないと思うけど、念のためにやるなら
char str[8]="";

char str[8]={0};
かな。

748 名前:デフォルトの名無しさん [2021/10/17(日) 06:25:57.65 ID:atjZW8su0.net]
>>731
そうやって初期化した str[] の内容を後で書き換えるのは普通ではないと思う。
可能だが気を付けてないとバグの元になりそうだしね。

似たようなのに char *p = "hoge"; があるが、これはコンパイラによっては文字列をリードオンリーになるようにコード作って *p = 'A'; なんて後でやるとOSがプログラム停止させたりする。
しかしCの文法としては間違いではないのでコンパイルエラーにならない。

749 名前:ハノン mailto:sage [2021/10/17(日) 07:57:57.94 ID:iZHfLY3SH.net]
>>721
>char str[] = "Hello";

>>738
> str[] の内容を後で書き換えるのは普通ではないと思う。

私は「配列であるかぎり」それを後から書き換えるのは、初期化方法に関係なく文脈・表現として違和感なしと感じます

750 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 08:24:02.20 ID:steRrM330.net]
大文字→小文字への変換等の文字列長変わらない題材は
str[] で初期化しそうだわ



751 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:22:20.52 ID:YXxqNhTYM.net]
初期化のときだけ [] をキッチリポインタと区別するc の仕様がちょっと気持ち悪い
って感じかな

752 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:57:04.28 ID:8CkFjl5X0.net]
[] は記憶域の確保
ポインタは記憶域の操作

753 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:29:22.77 ID:SjUVJOBmd.net]
externや二次元配列でも区別しとるじゃろうが
元々違うものを区別されたからちゅうてガタガタぬかすなや
同じと思いたがるのが間違っとるんじや

754 名前:デフォルトの名無しさん [2021/10/18(月) 16:00:11.31 ID:r9t2S6+pF.net]
char **hoge;
char *hage[];
好き嫌いが判れるな

755 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 16:05:46.60 ID:3P96aY7G0.net]
ウンコとカレーは別のものです

756 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:51:04.60 ID:g0y5TC1t0.net]
そもそも初期化の*と演算子の*だって違うものだからな……

757 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:04:38.45 ID:o7eKMY2r0.net]
関数の引数のary[]はポインタだって言ったじゃないですか

758 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:18:11.14 ID:SjUVJOBmd.net]
ついでに頓珍漢

759 名前:デフォルトの名無しさん [2021/10/19(火) 07:28:30.98 ID:KQylMF0MM.net]
>>738
終端文字忘れてるからじゃないの?

760 名前:デフォルトの名無しさん [2021/10/19(火) 08:18:32.37 ID:KQylMF0MM.net]
>>749
char *pか、勘違いすみません。



761 名前:デフォルトの名無しさん [2021/10/20(水) 09:23:25.20 ID:OEiI06HQa.net]
すごい勘違いレス

762 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:53:19.81 ID:X+tmlWS+d.net]
if ((ss == 0) || (ss == 5) || (ss == 10) || (ss == 15) || (ss ==20) || (ss == 25) || (ss == 30) || (ss == 35) || (ss == 40) || (ss == 45) || (ss == 50) || (ss == 55)) {
hogehoge();
}
だいぶん無駄な書き方だと思いました
一桁の値が0が5の時に実行したいです
アドバイスお願いします

763 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:59:09.50 ID:2b7An4Iy0.net]
ss%5==0

764 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 19:00:41.26 ID:X+tmlWS+d.net]
>>752
int ss;
int sss = ss / 10;
if ((sss == 0) || (sss == 5)) {
hogehoge();
}

自己レス
こうですかね

765 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 19:01:44.45 ID:X+tmlWS+d.net]
>>753
どうもありがとうございました

766 名前:デフォルトの名無しさん [2021/10/20(水) 19:41:14.72 ID:+2OzLQ7p0.net]
>>754
節子それ余りやない。ssss=ss-sss*10とかやらんと。

組み込みマイコンだと/,%なしで頑張る縛りプレーもあるで。自分がよくやるのは対応する値域を限定して、
掛け算と >> による割り算で計算する。それより難しいの頭がついてこん。

767 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 20:06:00.50 ID:X+tmlWS+d.net]
>>756
どうもありがとうございます

>>754って書いたけど
>>753が端的だったのでこれが楽ちんだと思って754は見直してませんでした
Arduinoで時計作りたくて触ってるところです

768 名前:デフォルトの名無しさん [2021/10/20(水) 20:19:57.63 ID:+2OzLQ7p0.net]
>>757
ArduinoってUnoあたりは弱いマイコンなのにadafruitのサンプルとか浮動小数点演算してたり感覚おかしくなる。
1秒ごとの処理なら、1秒ごとにカウンタ増やして5になったら何かするって処理でもいいと思う。
使ってるマイコンが除算回路持ってるかは調べといたほうがいい。32bitマイコンでも割り算は省略されたり。
まぁ動きゃいいので効率や速度も捨てるのも、それが能動的な選択なら構わないとは思う。

ちなArduinoのスケッチは、古めのC++だったりするので、たまCで見慣れん文法が出て来る。

769 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:57:16.85 ID:F1Ma0oSBM.net]
if(++ss &5 && ss+=11) {....}
minutes=(ss &5)+ss/16*5;

770 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:59:08.14 ID:F1Ma0oSBM.net]
minutes=(ss & 7)+ss/16*5;



771 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:51:19.29 ID:xwM6FSoTd.net]
>>759
難しそうで理解できないです><

>>758
mmが2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57の時に実行したい

int mm;
if (mm = 2) || (mm = 7) || (mm = 12) 略 {
hoge();
}

こう言った場合はカウンター使うんでしょうか?

772 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:54:54.89 ID:xwM6FSoTd.net]
>>761
mmが上の条件でなおかつmmがpmmとは異なりssが0のときに動かしたいです

773 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:57:33.61 ID:xwM6FSoTd.net]
>>753 これを応用して、mmから2を引いて5で割り切れたときですかね

774 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:05:16.53 ID:1X6Ns9Hp0.net]
witch (mm) {
case 2: case 7: case 12: case 17:
case 22: case 27: case 32: case 37:
case 42: case 47: case 52: case 57:
  hoge(); break;
default: break;
}

775 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:12:34.58 ID:1X6Ns9Hp0.net]
頭のsが落ちてた><

776 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:57:50.32 ID:xwM6FSoTd.net]
>>764
switchの存在忘れてました
ありがとうございます
やってみます

777 名前:デフォルトの名無しさん [2021/10/22(金) 17:17:41.96 ID:ZQZyZs9H0.net]
if( (mm>1) &&
(mm<58 ) &&
!( (mm-2)%5) ) {.....}
かな?

778 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 17:38:23.94 ID:gkJZOHn00.net]
((mm-2) % 5) == 0
!((mm-2) % 5)
(mm % 5) == 2

ふむ。 なやましい

779 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 18:24:39.18 ID:xwM6FSoTd.net]
>>768
ありがとうございます
3つ目ですかねー

780 名前:デフォルトの名無しさん [2021/10/24(日) 23:50:25.11 ID:P21IrDZK0.net]
今から数年前はc言語マスターっていうコテハンがいたような覚えがあるんだけど今は見る影もなくなっちゃったな
今でも覗いているのかな
いなくなったらいなくなったで寂しいもんだ



781 名前:デフォルトの名無しさん [2021/10/24(日) 23:54:50.86 ID:P21IrDZK0.net]
あと片山博文って奴もいたがあいつはtwitterで元気にやってるね
すっかりtwitterのit畑に馴染んでいる

782 名前:デフォルトの名無しさん [2021/10/25(月) 10:50:24.50 ID:vmRZrQEpF.net]
ここは人減り杉たな

783 名前:無し mailto:無し [2021/10/25(月) 22:34:33.20 ID:tqAHcDS70.net]
#include<stdio.h>

void main(void){

puts("Hello world.");
}

Cの基礎。

784 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 22:51:17.12 ID:dRHq7DJG0.net]
>>773
mian の返却値を void にすんなよ。

785 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 23:12:03.34 ID:0vce0GaV0.net]
どこでも出口

exit(EXIT_SUCCESS);

786 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 01:39:39.55 ID:M1juxUvT0.net]
人が減ってる?
それじゃ俺も参加するか
よっこらC(セックス)

787 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 01:46:13.55 ID:l3iKjiOk0.net]
「初めてのC」ってタイトル見たとき、ちょっとドキドキしたw

788 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 02:22:35.07 ID:LRGmoAXR0.net]
みぁ〜ん

789 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 05:48:52.32 ID:M1juxUvT0.net]
みぁ〜ん

790 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 06:52:29.03 ID:ch+2e+/f0.net]
>>774
異常な執念で噛みつくやついるよな
void mainに親でも殺されたのかって感じ



791 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 11:35:56.09 ID:l3iKjiOk0.net]
トイレ使ったら水を流すだろ

792 名前:デフォルトの名無しさん [2021/10/26(火) 11:41:12.20 ID:4NkYNYny0.net]
ふんばっても何も出なかったからそのまま出てきたわ。

793 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:15:10.74 ID:rbEPHvg70.net]
なぜC言語は「言語」までつけて呼ぶのでしょうか
PASCAL言語とかFORTRAN言語とかPython言語とかいう言い方は聞いたことがないので気になりました
一文字で語呂が良くないから?

794 名前:デフォルトの名無しさん [2021/10/26(火) 17:16:53.12 ID:iznG3/8mr.net]
音節が一つだけだからでしょ
goと一緒

795 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:19:02.10 ID:rbEPHvg70.net]
>>784
仮に「F」なんていう言語があったとしたら、それには「言語」は付けないのが自然なんですかね

796 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:24:23.61 ID:FOkaXEb/d.net]
俺は日常Cと言ってる

797 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:30:07.02 ID:TdYowdfsM.net]
OとP以外存在しとるが
https://sites.google.com/site/sappariwiki/a2z-languages

798 名前:デフォルトの名無しさん [2021/10/26(火) 17:43:08.10 ID:iznG3/8mr.net]
>>785
fって一音節でしょ?
馬鹿なの?

799 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:50:47.85 ID:JgL6RS+zM.net]
またまたご冗談を

800 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:07:04.47 ID:rbEPHvg70.net]
>>788
馬鹿なんでしょうね



801 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:10:28.34 ID:LRGmoAXR0.net]
アルファベット一文字なら言語ってつける
Goだけなんか例外的なだけで

802 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:13:16.33 ID:rbEPHvg70.net]
>>791
これって日本特有なんですかね

803 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:19:10.90 ID:l/KP9TR6M.net]
普通に短すぎる識別子の弊害だろ
言語付けとけば>>777のレスは無かった

804 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 19:33:22.81 ID:M1juxUvT0.net]
日本語ではC言語で検索しやすくなるが外国はどうしてんだ?
C lang とかで検索してるのかな?

805 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 19:47:06.75 ID:FOkaXEb/d.net]
英語圏でもC languageとは言うね

806 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 21:52:27.56 ID:ucHGO5Lk0.net]
アセンブリ言語って自分的には違和感ないけど業界的にはどうなの?

807 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 21:56:53.26 ID:ch+2e+/f0.net]
普通だね
アセンブラ言語でもどっちでも
しょせんカタカナだし
ドヤるとバカっぽいから放置

808 名前:デフォルトの名無しさん [2021/10/30(土) 00:17:48.25 ID:0q4JizrL0.net]
もう英字一文字の言語は飽和状態だからこれからは平仮名一文字とか漢字一文字の言語名にした方が良いな。

809 名前:デフォルトの名無しさん [2021/10/30(土) 00:23:08.83 ID:0q4JizrL0.net]
ʗ言語

810 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 08:25:14.25 ID:HlbDM8n/0.net]
ツー言語 (゚∀゚)



811 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 11:53:47.66 ID:A30JUN42d.net]
>>784
日本語(外来語含む)の音韻は音節ではなくモーラ(=拍。俳句の数え方)で数えるべきで、
C(しい)もGo(ごお)も2モーラ
>>785>>788
F(えふ)も同じく2モーラ

まあ、別に2モーラ以下なら「言語」を付けるという規則性もなさそうだけどね
Java(じゃば)やLua(るあ)も2モーラだし

812 名前:デフォルトの名無しさん [2021/10/30(土) 17:29:52.20 ID:0q4JizrL0.net]
私意言語

813 名前:デフォルトの名無しさん [2021/10/30(土) 18:01:56.38 ID:zJlZfWf60.net]
>>801
普通英語で検索するよね?
c languageとかgolangとか

814 名前:デフォルトの名無しさん [2021/10/30(土) 18:03:58.48 ID:zJlZfWf60.net]
luaって調べたら月の画像が出てきてめちゃくちゃ怖いぞ

815 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 19:36:45.48 ID:d9y/i02Wr.net]
月が怖いってサテライトキャノンでも撃たれたのか?

816 名前:デフォルトの名無しさん [2021/10/30(土) 19:51:07.93 ID:lpthGY+1a.net]
月を怖がる人ってたまにいるけど
前世とか今世で悪いことでもしたんかね

817 名前:デフォルトの名無しさん [2021/10/30(土) 20:22:41.40 ID:zJlZfWf60.net]
天体の画像が怖い

818 名前:ハノン mailto:sage [2021/10/30(土) 20:27:03.94 ID:nIglmucmH.net]
>>806
欧米では、月の光は人を基地外にする、とかいうそうですよ
確か狼男も満月だったっけ、いや、それは送り狼だったっけ?

819 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 20:59:50.65 ID:f9Pytl6VM.net]
お仕置きでもされたのかな

820 名前:デフォルトの名無しさん [2021/10/30(土) 21:01:00.69 ID:zJlZfWf60.net]
天体恐怖症なんやワイ
木星とか海王星とか怖い



821 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 22:33:29.21 ID:d9y/i02Wr.net]
地球は恐くないん?

822 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 23:11:54.45 ID:w/6Ssgd00.net]
裏側にいる事に気がつくと、落ちてしまうそうだ

823 名前:デフォルトの名無しさん [2021/10/30(土) 23:41:41.51 ID:zJlZfWf60.net]
>>811
地球も太陽も怖いです
あと小惑星も怖い
あと月の裏側もマジでこわい

824 名前:デフォルトの名無しさん [2021/10/30(土) 23:42:05.22 ID:zJlZfWf60.net]
火星の衛星とかも怖いです
歪な形してるやつ

825 名前:デフォルトの名無しさん [2021/10/30(土) 23:43:09.25 ID:zJlZfWf60.net]
冥王星の最新画像見たけどめちゃくちゃ怖くて直視できなかった

826 名前:デフォルトの名無しさん mailto:sage [2021/10/31(日) 09:06:05.96 ID:eEOPPlKd0.net]
アロコスなんかカワイイ形してんじゃん

827 名前:デフォルトの名無しさん [2021/10/31(日) 11:07:20.50 ID:dKAtRzTxa.net]
乙py
乙py

828 名前:デフォルトの名無しさん [2021/10/31(日) 11:30:55.69 ID:dKAtRzTxa.net]
>>814
https://www.youtube.com/watch?v=bEwWCXxaVR4

829 名前:デフォルトの名無しさん [2021/10/31(日) 11:33:04.24 ID:xmsO/hLH0.net]
>>818
グロ

830 名前:デフォルトの名無しさん mailto:sage [2021/10/31(日) 11:46:46.80 ID:TjuXDVeD0.net]
NHK-BSプレミアム『グレートネイチャー』の宣伝臭が鼻につくくらいで
扱っている題材は台湾の自然、どこがグロなんだ?



831 名前:デフォルトの名無しさん [2021/10/31(日) 14:17:04.25 ID:xmsO/hLH0.net]
>>820
地球の中心コアへの旅っていう関連動画がグロい

832 名前:デフォルトの名無しさん [2021/11/01(月) 0 ]
[ここ壊れてます]

833 名前:3:55:44.21 ID:6HuVbq6K0.net mailto: 饅頭怖い []
[ここ壊れてます]

834 名前:デフォルトの名無しさん [2021/11/01(月) 11:25:10.37 ID:/Zy4WfCe0.net]
lu分解をc言語でやりたく、次のようなコード(1部分になります)を書いたのですが、y0の値が0.8になるはずなのに全く違うものとなってしまいます。原因が全くわからないのですが、どこを改良すればよいのでしょうか。

for(int n = 1; n <= M+1; n++){
t = n*dt;

for(int i = 0; i <= N; i++){
x[i] = 0.0;
}

/* Ax = uを解く */
/* Ly = u */
y[0] = u[0]/l[0][0];
for (int i = 1; i <= N; i++){
y[i] = (u[i] - l[1][i]*y[i-1])/l[0][i];
}

/* Ux = y */
x[N] = y[N];
for (int i = N-1; i >= 0; i--){
x[i] = y[i] - m[i]*y[i+1];
}

/* 更新 */
for(int i = 0; i <= N; i++){
u[i] = x[i];
}
}

835 名前:デフォルトの名無しさん [2021/11/01(月) 12:00:24.14 ID:z/x9VzKbF.net]
int → double または float

836 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 13:05:24.25 ID:qmVDupeY0.net]
x, y, l, m, u の宣言で添え字のとりえる範囲分はちゃんと確保してる?

(lu分解として正しいかどうかはおいといて)ループのコードから
x 0..N まで → 最低限 double x[N+1];
y 0..N まで → 最低限 double y[N+1];
u 0..N まで → 最低限 double m[N+1];
m 0..N-1 まで → 最低限 double m[N];
l [0][0]..[1][N] まで → 最低限 double l[2][N+1];

837 名前:デフォルトの名無しさん [2021/11/01(月) 15:07:15.16 ID:/Zy4WfCe0.net]
最初に宣言して確保してるので、大丈夫だと思うんですが、、
いちおうx,y,l,m,uをそれぞれ出力してみたのですが、yだけ間違えた値になってしまいます。
ループの順番とかがおかしいんですかね?

838 名前:デフォルトの名無しさん [2021/11/01(月) 19:03:15.19 ID:6HuVbq6K0.net]
全ての変数の宣言を書け

839 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 20:58:39.67 ID:6+jC3RjR0.net]
最小限再現できるコードを書いてもらわんと指摘することはできんねぇ
(そして最小限再現にシェイプアップする過程でやらかしを見つける)

840 名前:デフォルトの名無しさん [2021/11/02(火) 07:44:51.26 ID:I7k+rE/i0.net]
>lu分解
java版?なら見つかった。
ttps://qiita.com/edo_m18/items/1d67532bed4a083cddb3



841 名前:デフォルトの名無しさん [2021/11/02(火) 10:38:39.23 ID:px0qcy1yF.net]
>>821
どこがプログロマー?
https://www.youtube.com/watch?v=SsB8VfxgZwQ

842 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 06:47:18.51 ID:biZn6gZT0.net]
小学生の頃から知ってたことばかりでウルトラつまんねえ番組だ

843 名前:デフォルトの名無しさん [2021/11/07(日) 10:08:30.22 ID:gNBrcBZD0.net]
サイコパスゲイ病人菊永裕太郎

844 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 14:05:50.44 ID:QzkUvy+x0.net]
>>823
https://www.youtube.com/watch?v=Wdy1Y-fbAII
https://www.youtube.com/watch?v=KYPiqtitEl8

845 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:10:26.04 ID:EXpCOp4b0.net]
int main() {
return 0;
}

いきなりこれの意味がわかりません。解説によるとゼロを返して正常終了する。
とかなんとかなんですが、どういう意味でしょうか。
オンライン上にゼロの意味の解説が見つかりません。

846 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:43:45.28 ID:Q3rklS0i0.net]
大抵の解説では「OSに返す値」となってる。

プログラムが正常終了したら 0。
異常終了や目的の処理が出来なかったときには0以外を返すのが慣例。

Linuxならシェルで echo $?
Windowsならコマンドプロンプト/バッチファイルで echo %ERRORLEVEL%
で確認できる・・・らしい。

0以外を受け取ったからとOSが何か特別な処理をするわけではない。

847 名前:デフォルトの名無しさん [2021/11/13(土) 19:53:04.62 ID:NDPTYcvp0.net]
>>834
エラーで終了するときは0以外で帰しておくと
数年後の未来の自分を助けることができるぞ!

848 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 20:53:19.24 ID:pG0a2gxf0.net]
この段階では
0をかえす
そして
正常終了する
ぐらいの認識でいいんじゃないの?

別にどんな整数を返しても正常終了するわけだし

849 名前:はちみつ餃子 mailto:sage [2021/11/13(土) 20:56:10.46 ID:FTD0k+Bx0.net]
>>834-835
厳密にいえば、言語仕様上では

・ 0 又は EXIT_SUCCESS の場合は成功終了であることを処理系定義の方法で返す
・ EXIT_FAILURE の場合は失敗終了であることを処理系定義の方法で返す
・ それら意外の場合には返される状態は処理系定義とする

という規則になっている。
どのように解釈されるかは言語仕様の側でははっきりとは決めずにホスト環境 (普通は OS のこと) や処理系の都合次第なので、
言語よりは OS の資料にあたるほうがわかりやすいかもしれない。
言語仕様として確実に保証してるのは少なくとも成功したのか失敗したのかだけは返せる (受け取るかどうかは知らんけど) ってだけだね。

POSIX (Unix 系 OS) では exit status と呼んでるけど、
Windows では error level とか exit code と言ってる。

850 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:33:17.66 ID:uR+eQ86NH.net]
単独で使う場合は関係ないけど
シェルとかバッチファイルから呼び出す場合にエラーや望まない結果だったら処理を中断とかしたい場合に
ちゃんと値を返しておくと便利になる



851 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:42:47.32 ID:J/2HuwPl0.net]
パイプ使うときはどう利用すればいい?

852 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:51:27.93 ID:TY5ABTi00.net]
棒を挟むんだよ

853 名前:ハノン mailto:sage [2021/11/13(土) 22:53:39.30 ID:DyUYxUU00.net]
>>839
呼び出したプログラムが返してくる値を使うプログラムとしては make がありますね…

854 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 09:01:01.66 ID:TENET21t0.net]
>>834
補足として、CのAPIにも失敗時に0を割り当てる場合と、成功時に0を割り当てる場合がある。
エラーの要因なんかを意識したい体系では後者も普通に使われるが、同じコード内で前者と
混在せざえるをえない事もある。マクロなんかを使った記述を意識しないとハマるぞw

855 名前:ハノン mailto:sage [2021/11/14(日) 09:49:57.54 ID:5CSGBVhH0.net]
>>840
fork して dup2 を使います

856 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:25:42.20 ID:EUNDgDvQ0.net]
>>843
・E_OKで成功、それ以外でエラー
・0以上で成功、負でエラー
・常に成功
・void
・なんかのポインタで成功、NULLでエラー

無理やり分類したらこんな感じ?

857 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:59:30.15 ID:E00roTgyF.net]
>>834-835
個人的には
int main()
で引数無い状況ならOSのことは想定してないんだろうから
void main()
で良いだろって思う
組み込みとか

858 名前:ハノン mailto:sage [2021/11/14(日) 14:07:31.05 ID:5CSGBVhH0.net]
>>846
リンクされるスタートアップが返り値の存在を前提にしているというのに、main() ごときが返り値の有無を指定するなんて傲慢じゃないですかぁぁぁぁ!

859 名前:はちみつ餃子 mailto:sage [2021/11/14(日) 15:32:15.51 ID:A4GQ1/1N0.net]
main の型を変則的にするくらいなら main をエントリーポイントにしない
(エントリーポイントの関数を別の名前にする) ほうが好ましいと個人的には思う。
言語仕様の外 (処理系定義) で定義された方法を使おうとしていることがわかりやすいので。

860 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 08:57:20.76 ID:ELwWgVHxd.net]
>>846
俺もそう思う



861 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 08:59:15.64 ID:ELwWgVHxd.net]
実行開始点は◯◯関数とドキュメントのどこに書こうか悩まずに済むならそうしたい

862 名前:834 mailto:sage [2021/11/15(月) 18:18:16.98 ID:oeHKaDHh0.net]
ただの慣例なんですね、ご回答ありがとうございました。

863 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:21:59.60 ID:BFf+frEV0.net]
C言語初心者です。sleepを使って一文字ずつ
2秒ごとに表示したいのですが
Windowsの端末だとうまくいくのですが、
Ubuntuだと8秒後にまとめてHelloと一度に
表示されてしまいます。ubuntuでも
windowsのように一文字ずつ表示させたいのですが
できないのでしょうか?コンパイラはGCCです。

#include <stdio.h>
#include <unistd.h>

int main (){

printf("H");
sleep(2);
printf("e");
sleep(2);
printf("l");
sleep(2);
printf("l");
sleep(2);
printf("o\n");

return 0;
}

864 名前:ハノン mailto:sage [2021/11/15(月) 19:27:49.92 ID:a976/UsH0.net]
>>852
printf('A'); fflush(stdout); はいかが?

865 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:28:12.24 ID:Xr7xQZWT0.net]
printfとsleepの間に↓
fflush(stdout);

866 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:45:10.08 ID:BFf+frEV0.net]
>>853
>>854

ありがとうございます。うまくいきました。
fflushの使い方調べてみます。

867 名前:はちみつ餃子 mailto:sage [2021/11/15(月) 23:18:43.35 ID:LEZCO+bp0.net]
>>852
どちらの挙動も言語仕様的にはアリ。
ストリームが対話型装置を参照していると判定できて、かつその場合に限り完全バッファリングすることになっていて、
逆に言えば対話型装置 (この場合はコンソール) に繋がっているときはラインバッファリングかもしれないし、
バッファリング無しかもしれない。

フラッシュを明示的に指示するのでもよいが、 setvbuf 関数でバッファリングをしないように設定することもできる。

868 名前:はちみつ餃子 mailto:sage [2021/11/15(月) 23:20:10.09 ID:LEZCO+bp0.net]
>>856
書き間違えた。

対話型装置を参照していると判定

対話型装置を参照していないと判定

869 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:52:40.37 ID:9q/xF8xE0.net]
低レベルの出力関数使ってバッファリングを回避してみる、とか

870 名前:デフォルトの名無しさん [2021/11/16(火) 21:41:05.99 ID:vUDwceGd0.net]
lintの無い事い今更気付いたのだが、代替何?



871 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 23:22:15.69 ID:hcv5mNbC0.net]
>>859
clion

872 名前:デフォルトの名無しさん [2021/11/17(水) 02:29:57.06 ID:+JwFzM8Ra.net]
>>851
int main(){
int a=0;
return a;
}

void main(){
int a=0;
}
をそれぞれ asm 付きでコンパイルして比較してみ
判ったら次は a=0; を inline にしてみ

873 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 16:44:53.52 ID:802yK0wSK.net]
>>859
splint

874 名前:はちみつ餃子 mailto:sage [2021/11/17(水) 17:37:06.80 ID:R6z6I7690.net]
>>859
コンパイラが細かくチェックするようになったから lint の出番がなくなった。

gcc や clang なら -fsyntax-only オプションを付けると文法のチェックまでで段階を止める。
必要な警告オプションを付けた上でこれを使えば古い時代の lint より厳しいくらいだと思う。
(ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。)

875 名前:ハノン mailto:sage [2021/11/17(水) 19:11:13.17 ID:Kdlo9yNJ0.net]
>>863
>(ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。)
私は -W -Wall で妥協します

876 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 20:49:44.01 ID:U3uLHNTwd.net]
最近のコンパイラはミスタイプすると
「contが見つかりません、もしかしてcountのことですか?」みたいなことまで言ってくるもんなあ
グーグルかよ

877 名前:ハノン mailto:sage [2021/11/18(木) 00:26:37.80 ID:MiW85JEr0.net]
>>865
そこは読まない…

878 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 00:32:41.46 ID:HOoxCKRv0.net]
入門サイトで勉強しててこんな感じのコードがエラーになって
{
int a = 100;
printf("数値:%d アドレス:%x", a, &a);
}
gccのエラーをコピペで検索すると、&aはポインタだから、アドレス:%pだと回答がヒット。
コンパイラやバージョンによって挙動が違うのでしょうか?

879 名前:はちみつ餃子 mailto:sage [2021/11/18(木) 00:55:33.69 ID:ku1GvVZm0.net]
>>867
言語仕様で未規定や処理系定義としている場合があって、
そういうのは処理系や実行環境の都合に合わせて決めていいことになってる。
そして「未定義」とされている場合は何が起こってもいいことになってるので、
暴走するかもしれないし、 OS が止めてくれるかもしれないし、しれっと意味不明の結果を出力するかもしれない。
たぶんそれは未定義に該当すると思う。

C の可変長引数は型チェックをゆるゆるにすることで実現されていて、
処理系の内実をわかってる人は言語仕様上の保証がない (けど実態としては問題がない) コードを書くのは普通にある。
パソコンで一般的に使われている呼び出し規約 (関数を呼出す機械語レベルの挙動の規則) だと
ポインタと (レジスタの幅以下の大きさの) 整数は同じ方法で渡すので問題にならないんだけど、
言語仕様では保証がない。

可変長引数の型チェックはゆるゆるなんだけど printf は頻出するからコンパイラが特別扱いで
少しチェックを厳しくしているのでエラーになることもあったりする。

まあ基本的には保証されてないのでやらないほうがいいよ。

880 名前:867 mailto:sage [2021/11/18(木) 01:52:34.49 ID:HOoxCKRv0.net]
>>868
詳しい説明ありがとうございます。
実際にターミナルに出力されたのはerrorではなくwarningで、試したらそのままでも実行できていました。
用心しながら学習続けていこうと思います。



881 名前:はちみつ餃子 mailto:sage [2021/11/18(木) 02:23:30.05 ID:ku1GvVZm0.net]
逆に完全に言語仕様に沿っていても警告になる場合もあるし、
(基本的には警告が出ないようなコードのほうが綺麗ではあるが)
言語仕様的に OK なのか NG なのか、
とりあえず自分の実行環境で OK なのか NG なのかを正確に把握するのはかなり分かり難いと思う。

882 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 02:53:45.75 ID:SHW/gJRC0.net]
>>867
まず、エラーと警告の違いを
次に、エラーとill-formedの違いを
憶えよう

883 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:38:56.92 ID:7kNuqccRd.net]
0から100までの整数のうち、17の倍数となる数の合計を求め、かつ途中の加算処理を出力するプログラムをつくったのですが、うまくいきません。

884 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:39:42.31 ID:7kNuqccRd.net]
うまくいかないのは過程を出力する処理の過程なのですが、どうしたらよいですか。

コードは以下です。

#include <stdio.h>

int main()
{
int i,sum=0;

for(i=17; i<=100; i=i+17) {
sum=sum+i;
printf("途中計算→%d\n", sum);
}
printf("合計=%d\n",sum);

return 0;
}

885 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:49:25.32 ID:SHW/gJRC0.net]
ダッサいループ書いてないで公式立てたら?

886 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:10:34.71 ID:R1PabgqQ0.net]
>>873
「17の倍数」とは「17で割った余りが0」のこと
Cで割った余りを計算する演算子は「%」

887 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:14:20.02 ID:SHW/gJRC0.net]
17から開始で17ずつ増やしてるだろ
0は17の倍数じゃないそうだが

888 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:32:07.83 ID:RYwZiL190.net]
>>873
何がどううまく行かないの?あってそうに見えるけど

889 名前:デフォルトの名無しさん [2021/11/18(木) 14:40:44.78 ID:/He/baLSF.net]
>>869
昔のソース(コンパイラ)は %x で通るのが多い
今から勉強するなら %p の方が良いし新しい教科書使った方が良い

890 名前:デフォルトの名無しさん [2021/11/18(木) 14:45:21.17 ID:/He/baLSF.net]
>>873
printf("途中計算→%d, %d, %d\n", i / 17, i, sum);



891 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 14:45:34.58 ID:/He/baLSF.net]
>>823
https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/PartialPivLU.h
https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/FullPivLU.h

892 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 18:35:31.06 ID:CfNf7HSld.net]
>>867
伝統的にポインタはintと同じメモリサイズなので昔はそう書いてた

そうなんだよな最近のコンパイラはprintfのフォーマットと引数をチェックしてるんだよな
もう慣れたが最初不思議な気がした
組み込みだと自分でprintf関数作ったり(標準だと使わない機能が多くて重すぎるから)するけどそんな時はどうなるのだろうとか

893 名前:デフォルトの名無しさん [2021/11/19(金) 00:07:30.77 ID:tkL53aTR0.net]
>>872
( ´_ゝ`)フーン

894 名前:デフォルトの名無しさん [2021/11/19(金) 00:11:12.00 ID:tkL53aTR0.net]
>>873
それでいいのでは?

895 名前:はちみつ餃子 mailto:sage [2021/11/19(金) 00:18:54.40 ID:bln5kEpJ0.net]
64 ビット環境では LP64 や LLP64 (int とポインタの大きさが違う) が標準的になってしまったから
古いコードをそのまま持ってきたら通らないってことは割とよくあるよね。

896 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 00:37:21.78 ID:tkL53aTR0.net]
long と int (及び char *)を全て32bitとして扱っていて、辛うじてコンパイルは通るが決してまともに動かない
プログラムがあったので、しょうがないから gcc の -m32 と32bit用ライブラリで何とかした。何せ量が膨大で、
人力で直してたら多分何人か死んでたと思う。

897 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 05:44:49.46 ID:6rl9yCzd0.net]
俺が出向いた、とあるクライアントでは人海戦術してた

898 名前:デフォルトの名無しさん [2021/11/19(金) 10:15:17.36 ID:eyeX0xyMF.net]
long が int に追い越されたのかと思った

899 名前:ハノン mailto:sage [2021/11/20(土) 20:09:18.64 ID:NniTuIFb0.net]
>>884-886
far near 修飾があたりまえな世界から来た私にとっては、なんで今更なことしているの?と疑問におもっていました

900 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 20:11:58.21 ID:LAgO+4EW0.net]
そういえばhageモデルなんてあったな



901 名前:ハノン mailto:sage [2021/11/20(土) 21:32:53.52 ID:NniTuIFb0.net]
>>889
hage モデル、もとい huge モデルにはバグがある、とのもっぱらの噂でしたが実際どうだったんでしょうか…

902 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 22:42:01.83 ID:PPXRLNML0.net]
ていうか、8086のHugeみたいなものはバグ作り込んでしまいそうで怖いよな。ポインタ絡みで。
違う値が同じアドレスになる事あるし。

903 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 22:45:40.83 ID:LAgO+4EW0.net]
当時300kを越える配列を処理したくて使いました
使うというか、複数のセグメントに分割して割り当て、
自前で配列インデックスを計算してアクセスしただけですが

904 名前:はちみつ餃子 mailto:sage [2021/11/21(日) 00:46:36.95 ID:mkw0m2hl0.net]
違う場所が同じ値になるような場合があっても言語仕様が保証している範囲ではちゃんと仕様通りだったりするんだよな。
というより保証が可能な範囲をうまいこと言語仕様にまとめたって感じなんだと思う。

905 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 08:41:13.51 ID:uokK0Aao0.net]
>>888
Windowsが64bit主流になっていく頃にも一騒動あったよ

906 名前:ハノン mailto:sage [2021/11/21(日) 12:42:55.44 ID:ODZrEgDk0.net]
>>891
さらに年寄りの繰言を続けますが、

>違う値が同じアドレスになる事あるし。

というのは far ポインタでも同じです、far と hage じゃなかった huge の違いは、オフセットの繰り上がりがセグメントに反映されるかされないか
私は余計なことはしてほしくないので、繰り上がりがない far を愛用していました、huge はいまいち信用できませんでした

907 名前:ハノン mailto:sage [2021/11/21(日) 12:44:00.07 ID:ODZrEgDk0.net]
>>894
それ、今のことなのでは?>>884-886

908 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 02:11:41.33 ID:AqcF5lvQ0.net]
構造体のパディングの値って未規定ですか?

909 名前:ハノン mailto:sage [2021/12/01(水) 02:24:50.55 ID:VU8XmWVx0.net]
>>897
パディングの状況に依存するコードを書くのはよろしくない、というのが一般論だったかと
ファイル入出力で問題になりますが、私はもう、ちまちま fwrite() fread() で「1 byte ずつ」やるしかない、とまで諦めています
環境がバッファリングしてくれますし

910 名前:はちみつ餃子 mailto:sage [2021/12/01(水) 02:53:05.18 ID:Y6HO3vrm0.net]
未規定であるしパディングの大きさに依存するようなコードは避けるのが行儀のよいコードであるのは間違いないけど、
対象にしている処理系での挙動がはっきりしていて移植の可能性もない (または移植のコストをかける覚悟がある)
のなら依存するコードを書くことはそれなりにあると思う。

マクロで切り分けて configure (とか cmake とかのメタビルドツール) で各アーキテクチャの都合に対処することは可能だし。

良くはない。 良くはないがそういう良くないことも出来るのが C ってもんなわけで。



911 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 11:58:37.67 ID:Jc7L6V7f0.net]
昔、構造体の扱いで失敗した事がある
あるサイトで構造体を引数にして削除処理を行う関数を提供されたが、
実際に使おうとすると引数エラーを返されてしまい途方に暮れた
構造体メンバーには仕様書通りに必要な値をセットしている

しばらくして原因が分かった
関数側は引数が正しくセットされているかを、
処理対象の領域に格納されている同一の構造体と比較しチェックしていた
その比較に memcmp を使っていた
呼び出すこちら側は、構造体を自動変数として領域確保していた

912 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 19:41:43.68 ID:Dt37aX+70.net]
構造体の比較をmemcmpでやるの本当にバッドプラクティスだと思うわ
横着せずに比較関数作れと

913 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 20:37:38.80 ID:sYF3bwwtM.net]
横着したくなるというか識別子増やすの躊躇させる言語仕様が招く面倒ね
メンバメソッド系はオブ臭く棲み分けに反し今更入れる必要ないと思うけど
一層にぶち撒かず妥当なルールでツール類で拾いやすいサポートネームスペース括りみたいなのがあれば

void bossy(struct *a);
bool bossy.supporter(struct const*a);

914 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 03:58:26.91 ID:boATToTk0.net]
素直にC++使っとけ

915 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 15:46:31.22 ID:nsbZ2n490.net]
若者のc言語離れ

916 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 15:56:03.63 ID:NxRkNBX1d.net]
バブルの頃に努力?修練?ぎやはははだっせー
と言ってたのが結局、日本の致命傷になっちまったな
それを今まだ言ってる堀江みたいなぶっ飛んだキチガイもいるし
どーすんだこれ

917 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 16:51:51.31 ID:BMPRSKoA0.net]
>>905
何の話?
日本は米国植民地なので戦後から終わってますよ…

918 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 18:59:50.96 ID:boATToTk0.net]
植民地支配がどんなに恐ろしいことか知らないようだな
朝鮮半島に先進国並みのインフラを作ったり
狭い島国に世界最大のメガロポリスができるのと
フィリピンのバナナ農家が受けている仕打ちの違いわかる?

919 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:37:18.40 ID:+Bf3UEhm0.net]
君はここに来なくて良いから、その代わりに
半島に行って自慢して感謝されてこいよ

920 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:51:25.65 ID:boATToTk0.net]
わかるかなぁ、わかんねぇだろうなぁ



921 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:23:20.96 ID:bRKtguKwM.net]
c++のネームスペースさんはadl とかテンプレート混じりでsfiane とか
使うつもりがなくても簡単に誤爆する罠のせいで妥当な実装ではないね

922 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:28:04.80 ID:BMPRSKoA0.net]
>>909
アングロサクソンのやることはえぐいですね…
でも半島の話はやめたほうがいいですよ、むしろ台湾の話をしたほうがいい(親中派だったら無理かもね)

923 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:44:47.29 ID:boATToTk0.net]
>>910
うわー 整然と整列された弾薬を蹴飛ばして地雷原と言っちゃう手合いか

924 名前:mikuRTX mailto:sage [2021/12/03(金) 20:20:27.18 ID:JS/BWVJ20.net BE:871585708-2BP(0)]
https://img.5ch.net/ico/2-1.gif
c言語でGUIの作り方教えて

925 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 21:09:10.77 ID:qejwogbL0.net]
>>913
www.kumei.ne.jp/c_lang/index_sdk.html

926 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:17:35.13 ID:4DnkKvZO0.net]
>>914
WIndowsAPIはC言語で使うのが正解でC++では使わないっというのを別スレで見たんですが、そうなの?

927 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:43:36.48 ID:qIm8KpH10.net]
C++でも使う事は出来るが、普通はクラスライブラリを使う
最初はMFCだったかな
>>914のサンプルを試したあと、
C++とクラスライブラリ使って同じ事をやってみると良いカモ

928 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:01:33.51 ID:4DnkKvZO0.net]
サンクス

929 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:32:09.23 ID:d5QmhWSv0.net]
>>915
補足すると自前でC++を使ってやる方法も win16 初期には見られたが、
https://www.aamazon.co.jp/dp/4774100544/
結局みんな MFC ばかり使うようになりました、もうひとつのメーカー製の OWL ですら滅びたようです
MFC の使い方の本は私は持っていない…

930 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:34:51.25 ID:d5QmhWSv0.net]
>>913
wisdom.sakura.ne.jp/system/winapi/win32/index.html



931 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:37:46.81 ID:eEY2XAtO0.net]
使い方って言うほどの高度の内容ではないかも
ドキュメント的にはMSのサイトが本家だし詳しいかも
確かサンプルも載せてたはず

https://docs.microsoft.com/ja-jp/cpp/mfc/documents-views-and-the-framework?view=msvc-170

この辺から入っていくのかな?無事生還を祈る

932 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:39:25.21 ID:eEY2XAtO0.net]
https://docs.microsoft.com/ja-jp/cpp/mfc/mfc-desktop-applications?view=msvc-170

済まん、こっちが入り口か

933 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 01:16:03.60 ID:eEY2XAtO0.net]
C++の、さらなる深みに入りたいなら、こちらのスレの方が良いかも知れない

Microsoft Foundation Classライブラリ専用スレ
https://mevius.5ch.net/test/read.cgi/tech/1474384848/

Visual Studio 2022
https://mevius.5ch.net/test/read.cgi/tech/1634166667/

C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/

934 名前:デフォルトの名無しさん [2021/12/04(土) 03:50:46.66 ID:2dOPVhNC0.net]
>>913
https://xjman.dsl.gr.jp/X11R6/X11/

935 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:52:50.38 ID:2dOPVhNC0.net]
>>913
https://developer.android.com/ndk?hl=ja

936 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:57:24.10 ID:2dOPVhNC0.net]
>>913
https://dixq.net/forum/viewtopic.php?t=10480

937 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:06:08.86 ID:2dOPVhNC0.net]
>>913
https://teratail.com/questions/43672

938 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 05:37:11.06 ID:FSuqUkr60.net]
MFCはWin32 GDIの極薄すけすけのラッパーだ
俺なんかMFCから憶えてそこから多くを知った

939 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 10:14:46.95 ID:h5ysN7XFa.net]
WinUIとかもいいけど、MFCに代わるちゃんとしたCなGUIライブラリを用意して欲しかったわ

940 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 11:19:54.80 ID:7g1ihlkq0.net]
winuiはイケてないの?



941 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:24:30.40 ID:d5QmhWSv0.net]
>>927
では win16 時代の本
https://www.amazon.co.jp/gp/product/4774100501/
でも何かしら得るものがあるってことですね、最近ちょっと元気が出てきたから買おうかな、やすいし

942 名前:mikuRTX mailto:sage [2021/12/05(日) 00:01:56.83 ID:AUNWU2UB0.net BE:871585708-2BP(0)]
https://img.5ch.net/ico/2-1.gif
913です。
みんなありがとう!!

943 名前:デフォルトの名無しさん [2021/12/05(日) 02:12:34.65 ID:NlN9zBro0.net]
>>930
本が100円でも送料が300円以上だったりするので、古本は要注意。
メルカリで送料込みで安いやつ探した方が良いかも知れない。
(但し、300円以下はあまりない。理由は自分で出品してみると分かる)

944 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 04:30:24.51 ID:VQoGm9OLd.net]
47氏こと金子氏はMFCでWinnyを作ったんだな

945 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 15:55:33.73 ID:HAXCanWR0.net]
>>933
winny2 は BCC/OWL だったと聞いた気がします

946 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:50:16.47 ID:VQoGm9OLd.net]
RIP

947 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 18:32:01.15 ID:HAXCanWR0.net]
>>932
ありがとうございます!

948 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 05:13:43.34 ID:WxNsBn2X0.net]
>>934
金子氏の書籍より、VC++ から C++Builder に GUI の変更を目的に変えた、との記述を見つけました
Borland C++ Builder 4.0, および 5.0 であれば OWL5.0 をサポートしていますが、VCL の可能性のほうが高いですね

949 名前:デフォルトの名無しさん mailto:sega [2021/12/08(水) 16:27:00.62 ID:iGfgkXA80.net]
Windows上で編集してLinux上でコンパイルしたいんだけど
そういうのに適したIDEでお前らが使ってるおすすめを教えて

950 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:39:45.04 ID:RLv6UJuP0.net]
>>938
vscode



951 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:59:09.17 ID:GPDURn2W0.net]
Ruby on Rails では、WSL2, Linux, Docker, VSCode(Remote Container, Remote WSL)など、
本物のLinux(CUI)で開発できる。
MSYS2/MinGW みたいなWindows でコンパイルした、日本語でバグるものを使う必要もない

Dockerを使わずに、日本人が作った、バージョンマネージャーのanyenv で、
rbenv, nodenv, pyenv など、多言語を統一的に扱う事もできる

組み込み用mruby の本には、Virtualbox, Vagrant を使う。
WSLはサポートしないと書いてあるけど、WSLでも使えるかも?

Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11

宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応

人工衛星イザナギ・イザナミで、使っている

952 名前:デフォルトの名無しさん [2021/12/08(水) 20:28:27.76 ID:pzF9gjPk0.net]
>>940
キヤノンが打ち上げた光学衛星が夜間撮影に成功したそうです。
夜間撮影が出来るとなると、もはや立派なスパイ衛星。
何を撮影しましょう。

953 名前:デフォルトの名無しさん [2021/12/09(木) 11:14:02.01 ID:89810ylo0.net]
実用的なところで夜間に移動する北のミサイル発射トラック追尾。

個人的希望でgoogleカーの追尾。

954 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 13:22:59.56 ID:avfziXHId.net]
頭頂部が日に日に薄くなっていくような気がするから
その辺のチェックを毎日やってほしい

955 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 13:26:11.16 ID:NPIqJHRg0.net]
>Linux上でコンパイルしたい

Linuxのシェル上でコンパイルしたいという意味?
それともGCCを使いたいという意味?

956 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 02:07:06.32 ID:Uh57IFJZ0.net]
そう言えば以前 Windows で動く IDE で Linux で動くプログラムの編集をしてそのまま
リモートで Linux 側でコンパイルして更にリモートでデバッグまでできれば良いなと
思ったが、どうやらそれができるものはなさそうなので諦めて Linux 上で IDE を動かした。

まあでもクロス開発というか、リモートデバッグというか、そういうのが出来ると便利だよな。

957 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:42:22.14 ID:bMtT4XMq0.net]
>>944
Linuxにインストールしてあるgccでコンパイルしたい
ビルドボタン押したらssh経由でmakeできたら素敵だが

使ってるgccのバージョンがちょっとどころじゃなく古いので
できればMinGW gccとかじゃなくて現物のgcc使いたい感じ

958 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 11:35:51.37 ID:vRQI3bYg0.net]
上でも書いたけど vs code ではダメなの?
ターゲットが WSL、コンテナ、ssh 接続関係なく
Win 環境から編集、コンパイル、デバッグ一通りなんでもできるよ。

959 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 14:06:37.92 ID:bMtT4XMq0.net]
そこまでおっしゃるのなら、試してさしあげてもよろしくってよ?

960 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 15:29:28.42 ID:IPFkCC9z0.net]
歯ね



961 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:11:12.39 ID:7gXx5u630.net]
羽?

962 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:59:12.87 ID:wbbsNkrV0.net]
教えて差し上げて

963 名前:デフォルトの名無しさん [2021/12/11(土) 03:38:45.47 ID:LF8J+dNV0.net]
>>945 を昨日書いたが、さっきこんなの見つけた。有料だけどな。

JetBrains、リモート開発機能と軽量IDE「Fleet」を発表
https://japan.zdnet.com/article/35180131/

964 名前:940 mailto:sage [2021/12/11(土) 13:26:00.16 ID:iDGs+tOs0.net]
漏れは、Ruby on Rails, WSL2, Ubuntu 18.04 で、
Web Socket など、Railsで使う各モジュールがネイティブコンパイルされるけど、

build-essential とか入れておけば、
Rails のインストール時に、勝手にコンパイルされる

build-essential には、
gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています

パッケージ: build-essential
https://packages.ubuntu.com/ja/bionic/build-essential

43.0 MB のアーカイブを取得して、165 MB のディスク容量が使われます

965 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 22:36:35.78 ID:KvUnFidtd.net]
VS2022に昔のプログラム持ってったら
isspace()とかに80h以上の文字入れると例外になるけど
いいのかこれ
テーブルで処理してて80h以上は負だからテーブル外になるって理由はわかるんだけどさあ
昔のはなんとかうまくやってた気がするんだけど

966 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 01:29:13.77 ID:xqkchTt80.net]
>>954 それ char で負の値を渡してるんじゃね?

967 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 01:30:08.80 ID:xqkchTt80.net]
>>954 この話ね https://www.jpcert.or.jp/sc-rules/c-str37-c.html

968 名前:ハノン mailto:sage [2021/12/12(日) 06:11:48.38 ID:i1KpRZU20.net]
>>954
int isspace(int c)
ですよ、ちゃんと int の正の数で渡してます?char をまんま渡してたらまずいっすよ

>>956
「unsigned char にキャストして、暗黙の型変換(プロモーション)に頼る」ってかなりアクロバットに見えますね

969 名前:はちみつ餃子 mailto:sage [2021/12/12(日) 11:16:13.91 ID:553p9mhC0.net]
char が符号付か符号無しかは処理系定義で、
符号無しであるような処理系では char が int に拡張されたときに負数になることはない。
(考慮する必要はない。)

C にはそういう処理系定義とか未規定とか未定義がもりだくさんなので
ある処理系の定義では未定義を踏まずに済むプログラムでも
別の処理系では (処理系定義のコンボで結果的に) 未定義に引っかかることはよくある。

C のプログラムで完全に処理系定義や未規定を避けるというのは困難な話だし、
(可能なら環境依存を避けるように意識するのは良い作法ではあるけど)
違う環境に持ってきたらその程度の修正は必要なものだと思って諦めるしかしょうがない。

970 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 11:27:28.68 ID:0XY4m15b0.net]
未規定を避ける必要はない
未規定のブレ幅以内に収まるように書いてあるプログラムは適格
そうでないプログラムは不適格で未定義の動作となるだけだ



971 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:20:11.74 ID:lpH8MLUG0.net]
未規定と、明示的な未定義は違うのか?

972 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:33:46.14 ID:0XY4m15b0.net]
違う。

たとえば
int f1(), f2();
int a = f1() - f2();
のようなことをしているとき、
f1とf2の評価順序は未規定
f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ

973 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:44:58.99 ID:Qvw+czy00.net]
未規定って処理系毎に好きに実装して良いんでしたっけ?

974 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:55:44.75 ID:YDRHEr6M0.net]
処理系が好きに実装してよいし, ひとつの処理系の中で一貫している必要も, ドキュメントに明記する必要もない

975 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:58:06.91 ID:Qvw+czy00.net]
未定義動作だと、最悪SEGVでも良いようなオイ

976 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:59:00.60 ID:YDRHEr6M0.net]
SEGVはマシな方なんですが

977 名前:はちみつ餃子 mailto:sage [2021/12/12(日) 18:09:59.00 ID:553p9mhC0.net]
>>962
未規定な動作を含むプログラムは正しい。
あり得る動作の内のどれかにはなる。

未定義はどんな保証もない。
未定義の挙動を含むプログラムはプログラム全体がどんな動作をするかわからん。
全然関係ないと思う箇所でわけわからん動作になることもあるし、
未定義を踏んでる箇所より前に問題が表れることもないとはいえない。

>>963
処理系定義は「未規定の動作のうち,各処理系が選択した動作を文書化するもの。」ということになっている。
つまり処理系定義は未規定の一種という扱い。

978 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 18:12:53.56 ID:aAJ0FK40M.net]
>>962
処理系どころか同じソースでもコンパイル毎に変えることすら許される

979 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 19:00:18.24 ID:xqkchTt80.net]
>>961
> f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ
これは嘘じゃね?

980 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 23:13:30.38 ID:VXD697/Q0.net]
>>968
いやあってる
演算子の結合規則・優先順位は、あくまでも複数の演算子があったときにどの演算子を先に処理するか、に過ぎない
オペランドを二つ持つ演算子一つに限れば、どっちのオペランドを先に評価するかは処理系依存だったと思う
これは関数の引数についても同じ



981 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 23:20:10.63 ID:xqkchTt80.net]
>>969
だれも結合優先度の話はしてないと思う。

> f1とf2の評価順序は未規定
これについては未規定で異論は無いんだよ。
> f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ
でも、こっちは嘘じゃね?という話。そんな規定文面確認できない。

982 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 00:34:13.21 ID:0Z9P9uJp0.net]
C17Draftのpp.65 6.5 1では?

> If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.
> If there are multiple allowable orderings of the subexpressions of an expression, the behavior is undefined if such an unsequenced side effect occurs in any of the orderings.

983 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 01:22:45.02 ID:aR9zk0xx0.net]
>>971
複数の関数呼び出し先にある評価同士、あるいは呼び出し元と呼び出し先にある評価同士は
indeterminately sequenced となり、 unsequenced にはならない。
6.5.2.2 Function calls p10
> ... Every evaluation in the calling function (including other function calls)
> that is not otherwise specifically sequenced before or after the execution of the body of the called
> function is indeterminately sequenced with respect to the execution of the called function. 96)
...
> 96) In other words, function executions do not “interleave” with each other.

>961 の f1, f2 は関数なので、 f1() - f2() の結果が未規定だからといって未定義動作にはならない。

984 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 02:53:30.01 ID:0Z9P9uJp0.net]
>>972
OK, 関数呼び出しを噛ませたことで評価順序が未規定ではなく不定(一方が他方の後(先)であることは保証される)になるので, 呼出先関数で副作用があっても(結果は未規定だが)未定義動作ではない, と
確かによくある a = i++ + ++i; みたいな例が適切だったか

985 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 03:50:46.86 ID:aR9zk0xx0.net]
>>973
あともう1点念のため。
その例 a = i++ + ++i は未定義動作になる例として適切なんだけど、未定義動作になる理由は >971 の規定であって、
>961 の「評価順序によりaに入る値が変動する場合」というような理由じゃない。
例えば a = (i = 0) + (i = 0) は、どっちの i = 0 を先に評価しても a に入る値は 0 で変動しないけど、未定義動作となる。

986 名前:デフォルトの名無しさん [2021/12/14(火) 17:26:28.72 ID:LP8Fmqr90.net]
自作ライブラリのヘッダと標準関数のヘッダの読み込み順って
なにか決まりごとはあるの?

#include "jisaku.h"
#include <stdio.h>
ってやってたらキモイって言われたんだけど、これなんかおかしいか?

インクルードガード利いてるし順番なんてどうでもいいだろ っていうか
だったら自作のヘッダが先に来るべきだろ って思うんだけど

987 名前:はちみつ餃子 mailto:sage [2021/12/14(火) 18:00:24.76 ID:+JRF3Q+g0.net]
>>975
たとえば assert.h を #include する前にマクロ NDEBUG が定義されていると assert が無効になるといったように
動作の切り替えをするマクロというものが存在する。
標準ではそういうマクロは下線で始まる名前になってることが多いから自分のコードの中の名前がたまたま衝突するということは
そうそうないんだけど、各処理系やライブラリに固有の切り替え用マクロが雑な短い名前だったら意図せず影響を与えるかもしれない。

単なる習慣としてもプロジェクト内のヘッダは後に書くのが定着しているね。

988 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:01:10.76 ID:la3dHmwP0.net]
ユーザー先だと、標準的な関数やdefineが定義済みになって不具合が出るかもしれないし
一般的な方から読み込んだほうがいいのでは?

989 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:42:48.59 ID:nW+wkdEb0.net]
なんか本の著者は自作モジュールを先にインクルードするって言ってたな
理由はそのほうがコンパイルエラーが早くなるかららしい

990 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:01:07.43 ID:LP8Fmqr90.net]
>>976-978
なるほど

若い時分なら「そんなの間違ってる! 俺が世界を正す!」って言ってたかもなぁ
とりあえず自分ヘッダは後ろで読むようにするわ



991 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:56:33.18 ID:J7XSbp4E0.net]
コンパイルエラーが無くなってもバグは残るからなあ

992 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 21:37:05.35 ID:Il/nsfIC0.net]
>>977
標準ヘッダを後に書くと
衝突したとき標準ヘッダ側がエラーとして表示されるからな

993 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:16:45.94 ID:yrIaaVQv0.net]
>>979
決断に水を差すことになるかもしれないけど、↓のベストアンサーでは自作ヘッダが先だよ。
https://stackoverflow.com/questions/2762568/c-c-include-header-file-order

994 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:26:46.15 ID:Eg2Dauqu0.net]
くだらねえ
単に依存関係ってだけのことだろ
一概にどっちが先であるべきだなんて押しつけは糞食らえだ

995 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 23:19:28.66 ID:J7XSbp4E0.net]
以前のサイトだと
標準ライブラリ
業務共通ライブラリ
個別ライブラリ
の順にインクルードしなさいと決められてた

996 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 00:55:34.24 ID:Nn1Wh5vx0.net]
まぁ、これも他のスタイルと同じで、どっちがいいというよりは単純なルールで統一されていることが重要なものと思ってる。

997 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 05:27:05.50 ID:XqRMbcSJ0.net]
押しつけはやる気と引き換えだ
そのコストに見合う理があるべき

998 名前:はちみつ餃子 mailto:sage [2021/12/16(木) 11:05:28.00 ID:78Qrz9F+0.net]
ヘッダのインクルードは全て .c の側でやる (ヘッダ内でインクルードしない) という流儀もある。
既にほとんど滅びた流儀だろうし、現代的ではないと断っておくがこの考え方を取るのであれば
インクルードの順序は重要になる。

// foo.h
struct foo{};

// bar.h
// ここで foo.h や stdint.h をインクルードしない
void bar(foo, uint32_t);

// bar.c
#include <stdint.h>
#include "foo.h"
#include "bar.h"
void bar(foo x, uint32_t y) { printf("bar\n"); }

// main.c
#include <stdio.h>
#include <stdint.h>
#include "foo.h"
#include "bar.h"
int main(void) { struct foo x; bar(x); }

メインの側で適切な順序にしないといけないから抽象不足だが、
インクルードガードしてても読み込んでプリプロセスの手順を通すという処理は発生してしまうので
それすらも最低限であるのが好ましいなどの思惑があるのだと思う。
(いまどきのコンパイラではインクルードガードのパターンを検出して
二度目にはファイルを読むことすらしないものもあるらしい。)
まあリソースをケチるのが正義だった昔の話やね。

999 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 21:34:42.48 ID:U4IWqRR10.net]
test

1000 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:14:59.61 ID:Xd/JFvMa0.net]
レジスタから「値を読みだす」というのは「値をコピーする」と同義ですか?



1001 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:09:46.99 ID:ZnDQBfvC0.net]
なんか違和感ある言い方だな
「読む」とはCPUへの入力、「書き込む」がCPUからの出力で
たとえばメモリリードはメモリからの出力、メモリライトはメモリへの入力を意味する

「コピー」はそれで合ってる
「ムーブ」になる場合は必ずそう断るから

1002 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:42:34.84 ID:TL6ByUiE0.net]
>>990
たとえば

int a = 1;
int b = a + 2;

この「a + 2」の「a」の部分はメモリリードしてるということですよね
このとき計算のためにCPUに値を入力(コピー)しているという理解で合ってますか?

1003 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:43:27.34 ID:+etymfSa0.net]
レジスタからの読み出しは読み出しという操作自体に副作用がある(レジスタに対する読み出しを検知してデバイスが何かを行う)場合があるので, 必ずしも同義とは言えない

1004 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:58:42.33 ID:ZnDQBfvC0.net]
>>991
合ってる

1005 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 06:05:01.87 ID:TL6ByUiE0.net]
>>992
>>993
ありがとうございました

1006 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 06:43:15.91 ID:M4a7QlIa0.net]
>>991
>CPUに値を入力

レジスタはCPUなのかメモリなのか
int a = 1;
int b = a + 2;

これがアセンブラだと
mov ax,1
add ax,2
mov ptr[b], ax
メモリに書き込んでるのは3行目しかないが

1007 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 01:01:40.65 ID:s/Gdf1X50.net]
>>995
アセンブラよくわからないんですが

mov ax, 1 // axレジスタに1をコピー
add ax, 2 // axレジスタの値に2を加算
mov ptr[b], ax // axレジスタの値をptr[b]にコピー

でしょうか
ptr[b]っていうのはなんですか?

1008 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 01:29:37.77 ID:M0D5aTvU0.net]
最適化で変数aがレジスタに充てられてるんだな
最適化を抑制すれば
mov ax,1
mov ptr[a], ax
mov ax, ptr[a]
add ax,2
mov ptr[b], ax
とかになるんじゃね

1009 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:51:05.24 ID:9FGZD56t0.net]
#include <stdio.h>

1010 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:51:41.94 ID:9FGZD56t0.net]
int main(void)
{
 printf("good-bye 157\n");



1011 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:52:11.17 ID:9FGZD56t0.net]
}
/*このすれは終了しました*/

1012 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 180日 0時間 29分 20秒

1013 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<280KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef