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


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

C言語なら俺に聞け 159



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

C17
www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

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

C2x ドラフト
www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.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言語なら俺に聞け 158
https://mevius.5ch.net/test/read.cgi/tech/1640401906/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

892 名前:デフォルトの名無しさん mailto:sage [2022/12/14(水) 20:45:14.60 ID:QXbvEgmH0.net]
>>874
<ccmath>?

893 名前:はちみつ餃子 mailto:sage [2022/12/15(木) 14:40:26.12 ID:xFKc8Du50.net]
>>877
_Generic で素直に分岐すれば問題なくかけるよ。
tgmath.h が規格に入ったとき (C99) は規格の範囲内でやる方法は無かったので
処理系の拡張を使ったり新たな拡張を作ったりしてなんとかなったのだがやっぱりそれは
あかんやろと思ったのか C11 で _Generic を入れることになった。

ただ、処理系は C99 に厳密なモードを持つことがあるからそのモードで動かしたときに
ヘッダ内の _Generic についていちいち警告なりエラーなりが出るのもよろしくないし、
#ifdef で分けるのも二度手間だし、
旧来通りの実装で残すのはそれなりに合理的なんだと思う。

ありがたいことに普通に使う分には標準ヘッダの実体を気にする必要はないのだから忘れておくのが幸せだろう。

894 名前:デフォルトの名無しさん [2022/12/21(水) 10:08:23.47 ID:537DsEmx0.net]
// エラーを報告するための関数
// printfと同じ引数を取る
void error(char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
exit(1);
}
これってprintfをerrorに変えただけって認識でok

895 名前:デフォルトの名無しさん [2022/12/21(水) 10:08:47.18 ID:537DsEmx0.net]
すまん誤爆した

896 名前:デフォルトの名無しさん [2022/12/21(水) 10:11:35.91 ID:537DsEmx0.net]
これってprintfをerrorに変えただけって認識でok?
error("引数の個数が正しくありません");と
fprintf(stderr, "引数の個数が正しくありません\n");
の違いを誰か教えてくれ

897 名前:はちみつ餃子 mailto:sage [2022/12/21(水) 10:21:03.43 ID:6CmfCawf0.net]
>>881-883
その認識でいいけどそれに加えて最後に exit で終わっているから
復旧不可能なエラーを報告するための関数なんだろ。

898 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 10:21:33.71 ID:LOXcnIHB0.net]
呼び出したら、死ぬ?

899 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 10:31:04.10 ID:Fs8T+fBed.net]
そのerrorならexit以外そうじゃね
perror(msg)はもう少し賢くて
fprintf(stderror, "%s: %s\n", msg, strerror(errno))
相当(by k&r2e)

900 名前:デフォルトの名無しさん [2022/12/21(水) 10:34:02.36 ID:537DsEmx0.net]
>>884
こんな時間にありがとう、助かる。
fprintf(stderr, "引数の個数が正しくありません\n");と同じってことやな
これにexitを加えて関数にしたのがerrorってことやね
わざわざerror関数にする必要性がわからんかったから助かったわ



901 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 10:37:12.34 ID:LOXcnIHB0.net]
私なら、error()を呼び出した側でexit()呼ぶなあ

902 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 10:39:53.43 ID:Fs8T+fBed.net]
ステータス選べるしな
わざわざexitに渡すステータス引数を拵えるくらいならexit読んだ方が早い

903 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 10:51:42.39 ID:Fs8T+fBed.net]
>>881
あ、地味にfprintf(stderr, "\n")でフラッシュしてるのに気付いた
あるいはfmtへの\n付け忘れ防止配慮か
基本stderrはこまめにフラッシュされるものと思ってるけど、fflushや"\n"で念を入れても損は無いな

904 名前:はちみつ餃子 mailto:sage [2022/12/21(水) 11:33:17.33 ID:6CmfCawf0.net]
言語仕様では exit で終了とか main の終端に到達した場合に全てのオープンされているファイルはクローズする
(そのときに全ての出力ストリームをフラッシュする) というのは保証してる。

エラーが起きている状況でどこまで信用できるかよくわからんから念押ししても損はないだろうけど。

905 名前:デフォルトの名無しさん [2022/12/21(水) 15:19:19.23 ID:537DsEmx0.net]
codepad.org/noY0x7K2
これの70行目と79行目の*ってただただ関数でポインタを扱うよってだけ?
なんか関数ポインタと似ててどうなんやって思った
int (*func1)(char*, int);

906 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 15:23:54.32 ID:WXW0EqS+d.net]
なんか質問者はexit呼ばないんだったら関数化しないでええやろって思ってそうで怖いな
設計方針次第でもあるが心配になるな

907 名前:デフォルトの名無しさん [2022/12/21(水) 15:35:25.72 ID:537DsEmx0.net]
>>893
今学習段階だからかなりの無知なんや、すまん

908 名前:デフォルトの名無しさん [2022/12/21(水) 15:51:20.06 ID:537DsEmx0.net]
あと上のURLのプログラムのcallocではメモリ解放してないけど大丈夫なのか?

909 名前:はちみつ餃子 mailto:sage [2022/12/21(水) 15:56:02.50 ID:6CmfCawf0.net]
>>892
返却値の型が Token* であるという意味。
でも文法的には * は宣言子に含まれていて Token の側じゃなく関数名がある側のグループなんよ。
だから右側に寄せて書く習慣になってる。
C の宣言の文法が無茶苦茶なのはイマサラな話なので……。

可変長引数の扱いも低レイヤの事情が見え隠れするような古の設計なので
歴史的事情を知らんとわけわからんのもしょうがないとは思う。

910 名前:デフォルトの名無しさん (ワッチョイ 7e02-evpg) mailto:sage [2022/12/21(水) 16:08:16.37 ID:5pWmYDMC0.net]
一貫性が大事って意味ならそう思う、特にdiagnosticなエラー(最後まで残る)は

俺は手入力で適当なエラーメッセージ書くのは極力控えてる、例えば数学関数書いてるなら
errno = EDOM;
perror(__func__);
→my_func: Argument to the math function out of domain.
的な
手続き的なルーチン(main)なら__FILE__/__LINE__とかで

用意されてるシンボル定数で意味論が合うなら活用すべき

EDOMなんかは好きに使っていいけど、システム、IO関連のエラーは意味が直感的でなかったり、規約に厳密に従わないとerrno見るcallerが騙されたりでバグの素なので、ちゃんとマニュアル参照のこと



911 名前:デフォルトの名無しさん (ワッチョイ 2a04-e5AJ) [2022/12/21(水) 16:09:52.42 ID:537DsEmx0.net]
>>896
こりゃかなわん。
基礎から出直してくる

912 名前:デフォルトの名無しさん (ワッチョイ 7e02-evpg) mailto:sage [2022/12/21(水) 16:10:45.37 ID:5pWmYDMC0.net]
ああ、当たり前だけどerrnoを上書きする前に気付いてないフラグ立ってないかif(!errno)チェックは忘れずに
割と立ってる事がある()

913 名前:デフォルトの名無しさん (スップ Sd8a-UQjj) mailto:sage [2022/12/21(水) 16:16:43.94 ID:WXW0EqS+d.net]
>>895
勿論使い終わったら解放する必要があるので解放関数を用意してあげよう

914 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 17:55:00.19 ID:j8NGwdcp0.net]
>>895
exit() したら解放されるからいいんじゃん

って言う層が一定数いる

915 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 18:13:15.89 ID:3kYobt3Gd.net]
今、息してるのか?

916 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 18:21:41.76 ID:LOXcnIHB0.net]
一日一回再起動すれば大丈夫

917 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 21:42:34.64 ID:MxQdxJ6G0.net]
再起動なんてちまちましたことやってられるかい
電源ぶっこ抜いて入れ直すんだよ、それか蹴れば直る

918 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 11:43:33.39 ID:kpFE4WK60.net]
アプリ(強制)終了後に使ったファイル削除→このファイルは使用中です。


OSで保証されてないならアプリ側でやるしか無いじゃん。

919 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 13:27:28.75 ID:LbsYIb+eM.net]
誰かがこのPCを使っている

920 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 13:35:11.18 ID:KHPfY9lXd.net]
LANなら充分にあり得ることだな



921 名前:デフォルトの名無しさん (ワッチョイ 9710-Hnc0) mailto:sage [2022/12/22(木) 19:42:13.17 ID:/Ar1RYH70.net]
プロセス終了に関しちゃ今時のOSでハンドル握りっぱなしにはならんでしょ

922 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 20:28:13.17 ID:Q5govio9d.net]
/* 文字列を逆順にして返す関数 */
#include <stdio.h>
#include <string.h>
void reverse(char *ss);
int main(void)
{
  char tt[]= "programing game"; 

reverse(tt);
printf("tt=%s\n",tt);
return 0;
}
void reverse(char *ss)
{
int wk,pos1=0,pos2;
pos2=strlen(ss)-1;
while (pos1<pos2) {
wk=*(ss+pos1)
*(ss+pos1)=*(ss+pos2);
*(ss+pos2)=wk;
++pos1;
--pos2;
}

}
このプログラム、gccだとコンパイル出来ますが、clangだと以下のエラーになります。なぜでしょうか?
~/CCR/UserFiles/sample26.c:22:3: error:
invalid operands to binary
expression ('int' and 'char *')
*(ss+pos1)=*(ss+pos2);
^~~~~~~~~~
1 error generated

923 名前:はちみつ餃子 mailto:sage [2022/12/22(木) 20:40:06.89 ID:KT1tc7ko0.net]
>>909
wk=*(ss+pos1) の後にセミコロンが抜けてる。

924 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 20:43:53.45 ID:Q5govio9d.net]
ありがとうございます。コピペミスでした。

925 名前:はちみつ餃子 mailto:sage [2022/12/22(木) 21:11:31.21 ID:KT1tc7ko0.net]
事例としては面白いよ。
セミコロンが抜けても一応は式の形式として成立するから
型が合わないというところがエラーとして報告されちゃうんだな。

926 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 22:10:59.69 ID:dL3lthyL0.net]
昔のコンパイラならエラーなしで通してだろうな

927 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 22:43:34.75 ID:K5vPIqXq0.net]
ナウいヤングな文字列の掛け算はサポート外なんだわ
strcatで頑張れ

928 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 23:40:21.52 ID:bege0WAi0.net]
昔のコンパイラだと=*が乗算代入だったんだけどな

929 名前:デフォルトの名無しさん mailto:sage [2022/12/23(金) 08:27:13.83 ID:msM3WKDD0.net]
exit on free 論争か・・・ そういう論争があったというのは知っているが
どっちに帰着したのか知らない

930 名前:デフォルトの名無しさん mailto:sage [2022/12/23(金) 08:52:05.54 ID:FPNxo7old.net]
RAIIでexitするやついたら匙投げる



931 名前:デフォルトの名無しさん mailto:sage [2022/12/24(土) 17:52:35.28 ID:aYmW2hx40.net]
プロセス終了を検知してOSで良きに測って欲しいよね

932 名前:デフォルトの名無しさん mailto:sage [2022/12/24(土) 20:25:27.94 ID:xbH5VpiM0.net]
>>917
膨大なリストなんかはいちいち解放しないで exit( ) でヒープごと解放する方が効率的なんて言う奴までいたんだよ...

933 名前:デフォルトの名無しさん mailto:sage [2022/12/24(土) 21:34:16.33 ID:aYmW2hx40.net]
いっそプログラム開始時に、
ドーンとでっかくメモリ確保して
自前でチマチマ割り当てて、
終了時にドーンと解放で良い気もする

934 名前:はちみつ餃子 mailto:sage [2022/12/25(日) 00:15:12.94 ID:8blj/qJt0.net]
そういう戦略をとっている有名なプログラムもある。
確保したメモリが結局はプログラムの最後までほとんど使用されっぱなしだということがわかっているなら
ちまちま管理

935 名前:しなくても終了と同時に全部が回収されることをあてにしても総合的なメモリ使用量は変わらない
(むしろ free のコスト分だけ節約できる) という考えをすることはあって、
リンカの LLD や Mold がそういう戦略をとっていたはず。

http サーバの h2o はセッション単位でドカンとメモリの確保と解放をしてる。

つってもプログラム全体のメモリについて見通しが立てられるということと
実行環境の事情を把握してるからそういう戦略を取れるのであって、
普通は小さなモジュールに分割するし、モジュール単位でメモリ管理に矛盾がないように設計するので
結果的にチマチマした確保と解放になる。

そこそこの規模になるとプログラムを分割せずに把握するのは大変なので凡人は小さな単位で
確保と解放をするように設計するのはしょうがないよ。
[]
[ここ壊れてます]

936 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 07:20:21.70 ID:vLPFsJBC0.net]
>>921
> 結果的にチマチマした確保と解放になる。
解放が必要なものまで>>920みたいなことしちゃダメだろ
リンカーのシンボル表みたいなのは処理中は追加オンリーで処理終了後に解放することになるから一気に解放が有効なわけで

937 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 08:37:13.23 ID:AjsJE3fQ0.net]
つまりメモリプールでしょ。昔からある戦略だ

938 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 08:49:15.44 ID:gsvPl1RZ0.net]
DOS時代の拡張子COMアプリは起動時に空いてるコンベンショナルメモリ全部(PC98ならVRAMの前まで)COMアプリに割り当てられるんだっけ。

939 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 08:59:08.85 ID:CcfMXDnS0.net]
やればできるよ
EXEとの違いはリロケーションテーブルがないってだけ
コード次第で出来んことは無いィィィ

940 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 09:03:42.49 ID:vLPFsJBC0.net]
>>923
考え方は近いがもっと特化した手法
なのでシンボル表みたいなものにしか適用できない



941 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 10:31:57.80 ID:NJW41kMTa.net]
空いてるコンベンショナルメモリ全部というと大きなメモリが割り当てられるように聞こえるけどコンベンショナルメモリは640キロバイトしかないからな
逆に小細工しないと拡張メモリ(exeで使える大きなメモリ)が使えないと言った方が正しい

942 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 11:06:28.12 ID:CcfMXDnS0.net]
リアルモードの「拡張メモリ」ならCOMでもEXEでも同じことだぞ
プロテクトモード用の「EXE」はまた別物だ
バイモーダルEXEなんてのもあったね

943 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 13:44:18.05 ID:pgi9BcgIM.net]
ラージモデルのexe、拡張子をcomに書き換えても動くのは秘密です。

944 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 15:44:19.19 ID:mgz0dfZnM.net]
exeとcomってファイル先頭のエントリーアドレスの解釈が違ってなかったっけ?
拡張子だけ変更しても暴走したような気がする

945 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 16:11:57.52 ID:zQEQkIp7H.net]
>>924
自力でシステムコール(あるいは farmalloc()) と far ポインタを扱うんだったら出来る

946 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 16:49:45.05 ID:FlWfyDt20.net]
OSは、EXEかCOMかの判定をファイル先頭2バイトで行うので
拡張子は同名実行ファイルの優先度以外には影響ありません

947 名前:デフォルトの名無しさん [2022/12/25(日) 18:17:37.99 ID:4l2e8mxL0.net]
何のOSの話なんだよ?

948 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 22:36:13.77 ID:R9zYhJab0.net]
>>933
MS-DOS

949 名前:デフォルトの名無しさん (US 0Hd7-ij7E) mailto:sage [2022/12/25(日) 23:53:11.65 ID:3pvnVlsWH.net]
>>925
LSI-C試食版のコード64KB の制限はなんとかなりませんかね?

950 名前:デフォルトの名無しさん (ワッチョイ b363-dxp0) mailto:sage [2022/12/26(月) 00:03:12.26 ID:eX0Ff8H70.net]
試食版のコードで生成する実行プログラムを、動かす環境もってるの?



951 名前:デフォルトの名無しさん (US 0Hd7-ij7E) mailto:sage [2022/12/26(月) 01:36:38.31 ID:xk9EZjkPH.net]
>>936
t

952 名前:akeda-toshiya.my.coocan.jp/msdos/index.html []
[ここ壊れてます]

953 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 10:26:13.14 ID:eX0Ff8H70.net]
W32が動く環境があるなら、そこでネイティブに使えるコンパイラにした方が良くないかな?
試食版って事はそれを業務で使うわけではないんでしょ?

954 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 11:02:09.22 ID:+xP92Jxa0.net]
8086 の SBC とか使って趣味でなんか作ってるんじゃね
俺も会社でだけど 80186 ボードのために Visual C++ 1.52c をずっと持ってた

955 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 11:47:25.06 ID:Gtnl1i7F0.net]
C使用でも何も考えずにVC++無料版入れてるわ。
バージョンアップの度にプロジェクト作成項目に悩む・・・。

956 名前:デフォルトの名無しさん [2022/12/26(月) 11:49:12.88 ID:rbZigseYd.net]
関数のポインタの配列を返す関数の宣言を教えてくさい

957 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 12:21:30.32 ID:sWfTrmtka.net]
残念だなのび太
C言語は配列を返せないんだ

958 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 12:24:01.49 ID:XQluw9Ded.net]
>>935
試食って書いてあるの見えない?
そういう類いには意図的に制限かけてあるんだよ
有料の正規バージョンを買ってねって意味

PS3のlinux封じとは訳が違う
怒る人のいないやり方なので
脱獄は誰も手伝ってくれないよ

959 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 12:48:43.97 ID:gpJgKl24M.net]
森公一郎さん、亡くなっているんだよな

960 名前:デフォルトの名無しさん [2022/12/26(月) 12:49:38.27 ID:6bMfB0bxa.net]
>>942
返す関数は定義出来るだろ
確保した領域の生存が関数内のみかそうじゃないかで結果は変わるが

>>941
思ってるものを描いてみ?



961 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 12:54:26.08 ID:VH0Lg5Zw0.net]
まあ関数イテレータ的には使えるのか

int getNoTest1(int x, int y, int z){return x*100+y*10+z;}
int getNoTest2(int x, int y, int z){return x*200-y*20-z;}
int getNoTest3(int x, int y, int z){return x*1000-y*100+z;}
typedef int(*FuncType)(int, int, int);

FuncType *getFuncAddrArray(void){
 static FuncType fa[3];
 fa[0] = getNoTest1;
 fa[1] = getNoTest2;
 fa[2] = getNoTest3;
 return fa;
}

int main(int argc, char *argv[]){
 FuncType *funcAddr = getFuncAddrArray();
 for (int i = 0; i < 3; ++i){
  printf("%d\n", funcAddr[i](rand(), rand(), rand()));
 }
 return 0;
}

962 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:36:06.25 ID:tmqxSKGS0.net]
>>945
できねーよ
配列が第一級オブジェクトじゃない珍しい言語

963 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:49:38.00 ID:URVWGre6d.net]
void(*func(void)[2])(void);
できるとしたら、こうなるが

964 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:05:11.56 ID:0DsOmzGV0.net]
固定長配列を戻すなら struct を経由したくなるわ

965 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:05:36.17 ID:F5Lcb5Ke0.net]
const char *f() {return "関数のポインタの配列";}

966 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:32:34.93 ID:eX0Ff8H70.net]
一休さんは、やめよう

967 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:34:43.38 ID:0DsOmzGV0.net]
https://ideone.com/DiokCM
strust ひっぺがして 戻り値が配列となる宣言だとおこられた
FUNC_PTR_T getFuncs(void)[3];

968 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 18:26:36.88 ID:+xP92Jxa0.net]
>>949
てか struct で包めば配列も返せるよね

969 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 18:41:08.47 ID:sEpxtj4KM.net]
関数へのポインタの配列の構造体?

970 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:19:48.06 ID:8jh3A4jF0.net]
>>944
近藤嘉雪 パーサ担当
森 公一郎 コードジェネレーター担当

近藤さんの本は20年くらい前本屋でよく見かけたな



971 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 01:28:35.56 ID:1kPfWYrSM.net]
配列も値型だったら一貫性が有っただろうな
でも、配列を丸ごとコピーするなんて普通しないから、利便性を優先したんだろう
それによって、ポインタと配列は似てるけど違いもあるみたいな、初学者泣かせな仕様が生まれてしまった

972 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 03:19:13.84 ID:lusjSahA0.net]
ベースアドレスが配列の初めの要素を指すCスタイルの配列には一貫性があるだろ、だから0-based indexを採用する蓋然性があるわけで

何らかのbookkeeping、サイズ、ストライドやランク情報等のメタデータをスカラで一緒に渡す明示的なもの、あるいはstructで包む、メンバに.flagを設けるのはdope arrayの再発明

一方、dope arrayをネイティブ採用する為には
ベースアドレス+0は配列要素ではなく、メタデータを指さねばならない
だから初めの配列要素はベースアドレス+1(いわゆる1-based index)であるべき、という蓋然性がある

最も邪悪な配列の設計はメタデータを持つにも関わらずC慣習にすり寄って来て0ベース採用のやつな、設計に何の一貫性も無い

アドレス計算はCスタイルの方がスッキリして好き、個人的にはだけど

973 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 03:42:16.62 ID:lusjSahA0.net]
array[0]がarrayの始めの要素を指す、という伝統を尊重しつつ整合的にメタデータを持たせる拡張をしたいなら、arrptr-1に持たせるって手もあるね

974 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 05:21:18.30 ID:nX/ozHbV0.net]
文字列はchar型の配列だし
文字列のコピーなんか、あらゆる言語で基本中の基本だ

975 名前:デフォルトの名無しさん (ワッチョイ 9d10-dxp0) mailto:sage [2022/12/27(火) 08:19:53.31 ID:yfz0bOFn0.net]
処理コスト軽減の為に配列自体ではなく配列の先頭ポインタでやり取りしましょう。

976 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:14:55.49 ID:FjfQte1M0.net]
配列が固定長なのは仕方がないと言うか、当然かなと思うが
文字列は、編集がもっと自在に出来た方がありがたかったな

977 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:19:00.19 ID:8jh3A4jF0.net]
>>960
同じことだぞ
式の中では配列はポインタそのものだ

978 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:32:56.50 ID:pT1qhH4d0.net]
sizeof演算子「いや俺区別してるし」

979 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:34:00.98 ID:2fUOYjFgd.net]
&演算子: いい加減なこと言ってもらっちゃ困るな

980 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:36:45.19 ID:2fUOYjFgd.net]
昔、こんなバカいたよ
printf("%d", sizeof "abc");
見ろ、文字列はポインタだ(キリッ



981 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:49:59.77 ID:8jh3A4jF0.net]
式の中の配列と書いたのが読めないバカが多すぎる

982 名前:デフォルトの名無しさん (アウアウウー Sa2f-aXTt) mailto:sage [2022/12/27(火) 12:20:51.00 ID:3AXDXHupa.net]
式がどういう意味かわかった上で他人をバカ扱いしてる?

983 名前:デフォルトの名無しさん (ワッチョイ 9769-jXNG) mailto:sage [2022/12/27(火) 12:21:02.33 ID:o7XCQITF0.net]
965なんかもあくまで式だよ

int a[100];
int *b;
(sizeof a) + (sizeof b); ←これも式であり、式の中に配列もポインタも居る

a++ 非合法
b++ 合法
これも式

984 名前:デフォルトの名無しさん (US 0Hd7-ij7E) mailto:sage [2022/12/27(火) 17:43:59.96 ID:x3eVxeWPH.net]
あの~
誰か excel マクロで動く cc を作ってくれませんか?
うちの会社、cygwin 禁止なんです、cygwin インストーラですら実行できないんです、すごく弱っています
コンパイラが手元にないと私は無力……

985 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 18:03:44.42 ID:/tVTIbQ7a.net]
VBA使えよ
安心しろお前は自分で思ってるほどCが得意じゃないから

986 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 18:19:46.78 ID:uvaA1liZd.net]
visual studioの稟議を上げられない社畜?

987 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 18:22:29.22 ID:FjfQte1M0.net]
C#のコンパイラなら、何もせずともWinのどっかにはいっているような気がした

988 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 19:41:50.61 ID:tBCD9SD30.net]
>>971
仕事に関係のない VS なんて認可されませんよ、べつにソフトウェアの人じゃないんだから

>>970
コンパイラが手元にないと、どうもやる気がでなくって…

989 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 19:42:45.86 ID:tBCD9SD30.net]
>>972
cs.exe なんて大っ嫌い

990 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 20:26:44.18 ID:pT1qhH4d0.net]
>仕事に関係のない VS なんて認可されませんよ

>誰か excel マクロで動く cc を作ってくれませんか?
仮に誰か作ってもインストール認可されないんじゃないの?
そういう環境だと読み取ったけど



991 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 20:30:03.68 ID:NnGcg72Bd.net]
>>973
勤務中にくだらねえことやってんじゃねえって上司に怒られるの?

992 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 20:31:33.55 ID:usWDFVvc0.net]
まあ仕事に関係ないって自分で言っちゃってるからなぁ

993 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 20:39:00.00 ID:FjfQte1M0.net]
じゃあ、無敵のシェルスクリプトだだだ・・・

994 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:26:37.16 ID:tBCD9SD30.net]
>>975
>仮に誰か作ってもインストール認可されないんじゃないの?
>そういう環境だと読み取ったけど
マクロはインストールするものじゃないから自由に使えるんですよ、インストール権限の必要なソフトはインストールできないってだけでして

>>976
そうはいっても、単一ディレクトリの全ファイルに対して、ファイル名の冒頭に連番を振るプログラムを 3 時間ほどでチョロっと書いて、業務に生かしているんですけどね
いちいち手作業でファイル名を変えるとかやってらんないでしょ?自分のために自分で書く分くらいは許容してほしいよね

995 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:29:39.01 ID:tBCD9SD30.net]
あと、巨大な csv ファイルを結合するプログラムも便利に使っていたんですけどね、大概の機械はデータを csv で吐いてくれますますからねえ

996 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:31:04.10 ID:usWDFVvc0.net]
>>979
屁理屈なら上司に言って怒られてこい
なぜまともなソフトがインストール不可なのにお前の作ったソフトなら大丈夫と思うんだ

997 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:35:10.73 ID:usWDFVvc0.net]
ファイル名の頭に連番打つとかPowerShellでもバッチでもVBAでもできるしそもそも打つ必要があるかどうかさえ怪しい

お前のやってることが本当にみんなにとっていいことなら業務効率化のためにコンパイラの申請を通すのは何も難しくない
拒否られてるところで気づけよマジで
職場に不和の種をまくんじゃねえ

998 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:35:56.95 ID:FjfQte1M0.net]
こう言うわがままは却下されて当然ではないか

999 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:43:18.14 ID:tBCD9SD30.net]
>>976
操作記録をいちいち記録されて、裏でこっそり査定に響く仕組みですよ、たぶん
ああ、こんなところでここまで書いちまったらもう私の給料は来年は半額になっちまいますねえ、当の昔に諦めてるけど

1000 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:58:37.89 ID:VvvSD8wK0.net]
>>982
power-shell はたぶん入っていないと思いますよ、あったら使うに決まってますもん
VBA はいちいち excel を起動してマクロを走らせて、ああ、もうめんどくさくって死にそう
実行ファイルワンクリックで、ピシッと全ファイルを改名したいだけですよ、そうすればさくさく錯綜するメールスレッドを管理できますからね
バッチファイルで改名?できるというのなら見せてくださいな?

>>981
業務効率改善のため自分のために自分で作り自分が使うだけのソフトと、多数の人が使う商用の売り物のソフトとを一緒にしないでくれる?



1001 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 23:03:13.50 ID:VvvSD8wK0.net]
>>983
そりゃ、業務そっちのけで得体の知れないプログラムを書いてばかり(星新一の短編にそんなのがありましたね…)だったら叱られますけど、ぱっぱと3時間で書いて後はノーメンテ、それで半年実用になっているんだから遊んでいるわけじゃないんですけど

1002 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 23:06:57.48 ID:VvvSD8wK0.net]
>>982
>業務効率化のためにコンパイラの申請を通すのは何も難しくない

難しいんですよ…
あらかじめ効用をきちんと提示しなければならないなんてめんどくさくってやってらんない、
作りたいソフトが具体的に念頭にあるわけではなく、将来的に使いたい可能性が発生する可能性があります、で稟議を通るわけがないでしょう?

1003 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 23:25:57.12 ID:FjfQte1M0.net]
マ板で相談してみたら?
ここは大分場違いになってきてる

1004 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 23:34:33.01 ID:nX/ozHbV0.net]
ブログにでも書けばいいのでは

1005 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 00:05:29.63 ID:JeA8YDJe0.net]
>>988
(職業)マじゃないただの一般人なので、マ板はたぶん板違い

>>989
ブログみたいな上等な場所に書くことではなく、便所のチラ裏で愚痴るに相応しい話題だと私は思いますけどね

まあ、もうやめます

1006 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 01:06:31.58 ID:PyoNDBFu0.net]
別に職業プログラマでなくても良いんだよ

プログラム(ロジック)についての悩みならここで良いが
プルグラムを書こうとする人の悩みは、マ板の方が相応しい

1007 名前:デフォルトの名無しさん (テテンテンテン MM97-t1KK) mailto:sage [2022/12/28(水) 03:37:42.61 ID:+f6n+5TtM.net]
> バッチファイルで改名?
これが出来なきゃ何のためにバッチファイルが存在してんだよw
バッチやシェルスクリプトは、ファイルのコピーやリネームとか、ファイル関連の処理が簡単に出来る事が最大のメリットだ
兎に角グクれば山ほど出てくる

1008 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 05:55:41.03 ID:VGHawTJO0.net]
C

1009 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 05:56:03.28 ID:VGHawTJO0.net]


1010 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 05:56:54.31 ID:VGHawTJO0.net]




1011 名前:デフォルトの名無しさん [2022/12/28(水) 05:57:50.13 ID:DPVYYyHtM.net]
C

1012 名前:デフォルトの名無しさん [2022/12/28(水) 05:58:53.46 ID:DPVYYyHtM.net]


1013 名前:デフォルトの名無しさん [2022/12/28(水) 05:59:41.77 ID:DPVYYyHtM.net]


1014 名前:デフォルトの名無しさん [2022/12/28(水) 06:00:17.27 ID:DPVYYyHtM.net]


1015 名前:デフォルトの名無しさん [2022/12/28(水) 06:00:51.24 ID:DPVYYyHtM.net]


1016 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 145日 6時間 28分 24秒

1017 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<263KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef