C言語なら俺に聞け 156

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 9bb7-/QqT)
垢版 |
2020/09/28(月) 14:41:30.00ID:QxfbhGyV0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

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

※前スレ
C言語なら俺に聞け 155
https://mevius.5ch.net/test/read.cgi/tech/1589120427/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/01/07(木) 20:19:01.01ID:jTCzKEfy0
>>475
ほしかったがなかったのだ
2021/01/07(木) 21:26:54.87ID:gAnZzjje0
>>476
C にはデストラクタがないから、C の範囲で実現するのは困難ですね
alloca() の実装は、ライブラリだけでは処理できずにコンパイラ側の支援が必要だと思いますので、標準ライブラリには入りにくいでしょうね
2021/01/07(木) 21:43:59.65ID:jTCzKEfy0
>>477
longjmp は対象外とし
完全自動は諦めてスコープの外に回収関数を置く紳士協定で手打ちに
2021/01/08(金) 00:02:52.02ID:RWydUoCr0
>>472
フラグメントで確保出来ない事があったわけだけど
2021/01/08(金) 00:51:10.08ID:aEO+ezsE0
使ってるアロケータの実装が何なのか, とどう使っているか示さないと何の意味もない
K&R mallocに毛が生えた程度のmalloc (Tronとか)ならものすごい勢いで断片化するし

glibc mallocとかのbest fitアロケータを使う分には断片化はかなり起こりにくい

あとメモリリークじゃないことは間違いないんだよね?
2021/01/08(金) 05:16:18.16ID:gKD5AY0L0
>>479
>>388を再度問う
2021/01/08(金) 08:53:26.45ID:/42fFLGad
C言語スレなのに組み込みやったことないヤツばっかりってのが不思議

>>480
アロケータの実装次第で断片化がおこる
と自分で書いてるわけだ
それが答え

どんな優れたアルゴリズムでも
断片化はおこるんだけど
完全に未来が予測出来る神アルゴリズムでも
2021/01/08(金) 09:11:57.78ID:yPaAOWPid
Go/C/C++以外に直接システムコールしてる言語ってありますか?
2021/01/08(金) 09:18:29.89ID:/42fFLGad
アセンブラ
2021/01/08(金) 09:37:02.14ID:MUX0m4u5M
c/c++もアセンブラ使わないとシステムコール呼べないけどな
2021/01/08(金) 12:03:05.57ID:lqJPJl/10
CALL 5 が使える言語は全部大丈夫
2021/01/08(金) 12:52:43.97ID:0DW9z0rLM
>>486
call 5って何のこと?
2021/01/08(金) 14:24:17.01ID:PuoTeu6a0
>>477
VLA があれば alloca は要らん。
上限が見積もれないときはいずれにしても使うべきではないが……。
2021/01/08(金) 14:34:20.89ID:NkKDsd1u0
CALL 5ってシステムコール一般の事を指してるのかな?

CALL 5はCP/Mから引き継いだMS-DOSのファンクションコールか
ふつうMS-DOSはINT 21Hって内部割り込みつかってたけどCALL 5もできたそうな
2021/01/08(金) 15:15:28.39ID:/42fFLGad
直接システムコール
の定義によってはどの言語でも出来るし
定義によってはどの言語でも出来ない

質問者は定義を明確に
2021/01/08(金) 19:43:55.15ID:cUApPko30
>>488
でも VLA は C++ では非推奨でしょう?
というか C であっても VLA の格納位置がスタックなら、それこそ悪意を持つクラッカに格好の餌をやっているとしか思えません‥

C99 or later では「VLA の確保場所をスタック禁止でヒープとする」という縛りはあるのでしょうか?
2021/01/08(金) 21:47:27.82ID:cUApPko30
>>491,448,477
いろいろ調べたところ、私が間違っていることがわかりました、つまり alloca() はスタックに配列を確保する実装とのことだそうです
つまり alloca() は setjmp/longjmp と同じ「C で記述できない」関数ということになりますね‥‥
2021/01/08(金) 22:26:35.55ID:gKD5AY0L0
だからこそ標準に組み入れられているんだよ
非標準でどうしろと言うのか考えろ
2021/01/09(土) 13:37:23.88ID:lvRTpcj70
アセンブラで作ったサブルーチンをそうとは知らずに呼べるのはCの良いところ
2021/01/09(土) 14:13:13.77ID:wanRtpand
それだけならC++でも
2021/01/09(土) 16:16:23.92ID:fHVxD+CU0
知らずに呼べるって、それアセンブラ側でC呼び出し規約で書いてあげたからじゃね。
2021/01/09(土) 16:42:31.78ID:lvRTpcj70
ABIちゅーもんがあってだな
2021/01/09(土) 17:00:45.39ID:fHVxD+CU0
だからそう言ってる。Pascal規約で書けばPascalから呼べたり。
2021/01/09(土) 17:08:25.76ID:L3ZBilIB0
フルアセンブラなら
パラメーターの渡し方は自由

独自のスタック構造だろうが
レジスタだろうが
臨機応変に出来る

今時フルアセンブラなんて事は非常に稀で
C/C++の呼び出し規約に従うのが普通
というだけ
2021/01/09(土) 17:10:33.54ID:L3ZBilIB0
今でも超小規模マイコンだと関数コールの構造をとらないフルアセンブラコードを使う事がある
2021/01/09(土) 17:52:11.58ID:lvRTpcj70
__declspec(naked)とか__attribute__((naked))とか
2021/01/09(土) 18:48:02.08ID:fHVxD+CU0
それexternで宣言できないから、アセンブラで書いたルーチンを呼ぶためのものじゃなくて
従来アセンブラを使わないと書けなかったルーチンをCのインラインアセンブラで書くためのものじゃね?
503デフォルトの名無しさん (ワッチョイ 7f40-Cbw0)
垢版 |
2021/01/09(土) 19:47:19.13ID:gjIQ6YZR0
純粋なC言語プロジェクトとして作るより
C++プロジェクトとして作ってCコードを書いた方が
利用可能なライブラリが増えるしほぼ上位互換、という考えは合ってる?
2021/01/09(土) 19:51:04.00ID:Z+DmrKyh0
>>503
それ多分C++コードだと思う
2021/01/09(土) 20:16:57.05ID:kPw1IBO30
>>494
それができない言語の方が珍しいと思うけど?
2021/01/09(土) 20:17:11.62ID:OS8QkCVT0
C++のベターC的な使い方であってpureなCとうまく連結できるかというと…
2021/01/09(土) 20:18:36.46ID:kPw1IBO30
>>503
合ってる、いわゆるベターCって奴
2021/01/09(土) 21:18:21.63ID:lvRTpcj70
DLLなんかどこの馬の骨言語/コンパイラ/アセンブラで作られたかもわからんものを当たり前に使えるだろ
2021/01/09(土) 22:58:21.36ID:L3ZBilIB0
それはDLLで呼べるように作ってあるからであって
2021/01/09(土) 23:00:18.51ID:L3ZBilIB0
別にCの特徴でもない
2021/01/09(土) 23:45:25.11ID:kPw1IBO30
大抵の言語はDLLを呼び出す側になれるけど、呼ばれる側になれる言語はそんなにない
2021/01/09(土) 23:52:15.63ID:lvRTpcj70
普通にCでDLL書くぞ
513デフォルトの名無しさん (ワッチョイ ff8c-Ip2P)
垢版 |
2021/01/10(日) 16:59:27.49ID:97ZwT7Zl0
言語はOSに依存している。
2021/01/10(日) 17:02:58.26ID:N5z3vzVP0
OSのない非常にチープな環境でも動くのがCの特徴
例えばRAM 16バイト、ROM 256命令みたいな糞CPUでも動く

リッチな環境ならCなんか使わん
2021/01/10(日) 17:07:41.53ID:rshCbxDT0
>>514
> 例えばRAM 16バイト、ROM 256命令みたいな糞CPUでも動く
具体例plz.
2021/01/10(日) 17:12:34.41ID:N5z3vzVP0
PIC10F200
2021/01/10(日) 17:29:30.48ID:rshCbxDT0
>>516
ありがと、一応コンパイラもあるのね
2021/01/11(月) 04:19:33.81ID:aEPvAJq60
そんくらいならCよりアセンブラの方が楽そうだけど
2021/01/11(月) 09:26:06.49ID:yw8V+8is0
この規模でもアセンブラの方が楽って事はない
当然性能やリソースに問題がないならCの方が楽

楽をしたいなんて考える人が選ぶCPUではないけど
2021/01/11(月) 09:57:05.78ID:MiJ5pxpq0
PIC は CPU なのか?
と思ってデータシートを見たら RISC CPU って書いてあったわ。
2021/01/11(月) 10:16:28.83ID:RSMcM3e30
>>518
まあさすがにROM 256だとCで書くのはあまり現実的じゃないわな
2021/01/11(月) 10:28:09.66ID:dLrb5ZQk0
>>519
コンパイラが相当なじゃじゃ馬だと
調教する(というか、こっちがされるw)のに
結構な手間暇かかったりするんだよ
2021/01/11(月) 12:12:48.66ID:yw8V+8is0
>>522
PIC(というか8bit全般)は
命令やアーキテクチャがじゃじゃ馬
Cのじゃじゃ馬とは比べ物にならん

開発環境構築はCもアセンブラもかわらん
2021/01/11(月) 12:23:14.39ID:dLrb5ZQk0
Cのじゃじゃ馬を調教するにも結局アセンブラを理解する必要があるからな
アセンブラのじゃじゃ馬だけで済むならそっちの方が楽だろ
2021/01/11(月) 12:30:40.51ID:4UZaL5drd
アセンブラを理解する必要なんて無いよ
2021/01/11(月) 12:34:47.00ID:dLrb5ZQk0
あるよ
Cに対するよくある誤解で、
アセンブラから逃げるためのものではなく
アセンブラもわかる人が手抜きするためのものだ

そもそもアセンブラで書かれていたUnicsを書き直すために作られたツールだしな
2021/01/11(月) 12:37:16.69ID:4UZaL5drd
>>526
いつの時代の人?
2021/01/11(月) 12:37:56.75ID:4UZaL5drd
楽かどうか
から話が変わってるし
2021/01/11(月) 12:54:40.32ID:RSMcM3e30
256程度に収まるコードならアセンブラでもそんなに苦労しないと思うよ
2021/01/11(月) 13:03:17.58ID:4UZaL5drd
でもアセンブラの方が楽
って事はない
2021/01/11(月) 13:04:29.37ID:yw8V+8is0
そもそも楽をしたいならこんな糞CPUをわざわざ選ばない
2021/01/11(月) 13:31:51.18ID:COmzXB920
Cコンパイラの吐き出す最適化済みのコードを人力でできればよいのだが なかなか ね
2021/01/11(月) 14:40:26.73ID:dLrb5ZQk0
CはISO/IEC規格で「こうでなければならない」という決まりがあるが
アセンブラにそんなものはない
初めて触るCPUは多かれ少なかれ、それまでに蓄積した偏見に逆らうところがあり
あんまり迂闊にじゃじゃ馬呼ばわりすると他の人や未来の自分にアホにされる

たとえばPICならPICが向かない用途にPICを使おうとしたり
その逆をやらかすやつは気をつけたほうがいい
2021/01/11(月) 14:55:18.12ID:yw8V+8is0
要するにCのが楽
2021/01/11(月) 18:03:00.86ID:T9p+a0He0
>>500
関数コール構造ってスタックか?
2021/01/11(月) 19:17:14.19ID:3OtB0f6U0
組み込みだとデバッグしやすいようにサブルーチンの引数はグローバル領域に置くとか
リターンアドレスも同じようにグローバルに置くとかあったな。
2021/01/11(月) 19:22:32.27ID:exQc5JPEM
呼出規約
https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84
2021/01/11(月) 21:38:48.25ID:dLrb5ZQk0
> デバッグしやすいようにサブルーチンの引数はグローバル領域に置く

COBOLer乙
2021/01/11(月) 22:18:26.34ID:3OtB0f6U0
COBOLみたいな高級言語の話じゃねーよw
540デフォルトの名無しさん (ワッチョイ ff05-AFO5)
垢版 |
2021/01/12(火) 15:17:22.63ID:XXwzvzv60
標準ヘッダファイルの関数の実際の処理コードってどこに書いてあるんですか?
ぼく「rand関数ってどんな処理すんの?」
無能教科書「stlib.hに書いてあるだよ^^」
ぼく「ほーんstlib.hはWindowsだとここのフォルダに置いてあるのか」カチカチ
ぼく「Visual Studioで開く」
ぼく「ってプロトタイプ宣言やんけ!本体の場所は?」
って感じで困惑してるんですががが?
2021/01/12(火) 15:20:38.53ID:aoRXfngS0
特にコレといった決まりはないので ランタイムライブラリのソースがあればラッキー程度
542デフォルトの名無しさん (ワッチョイ ff05-AFO5)
垢版 |
2021/01/12(火) 15:21:37.16ID:XXwzvzv60
ていせい
X stlib
O stdlib
2021/01/12(火) 15:24:49.50ID:aoRXfngS0
<Program Files>/Microsoft Platform SDK/src/crt
にあればラッキー
544デフォルトの名無しさん (ワッチョイ ff05-AFO5)
垢版 |
2021/01/12(火) 15:45:13.34ID:XXwzvzv60
>>543
たぶん自分の環境だと
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\
VC\Tools\MSVC\14.28.29333\crt\src
って奴なのだろう。
stdlib.cはなかったですね・・・
2021/01/12(火) 15:49:14.18ID:aoRXfngS0
>>544
関数で小分けになってたりで rand.c があったりなかったり
546デフォルトの名無しさん (ワッチョイ ff05-AFO5)
垢版 |
2021/01/12(火) 16:02:39.24ID:XXwzvzv60
ないですね・・・(絶望)
一端諦めたほうがよさそうかな・・・
aoRXfngS0さんは付き合ってくれてホントありがとう!感謝!
2021/01/12(火) 16:35:19.21ID:aoRXfngS0
どういう風に実現してるの? ならば ソースあたるしかないけど
どんな処理(機能)なの? ならば ヘルプなり man ページなり 色々あたれる
2021/01/12(火) 17:24:10.27ID:3icaK3oM0
ヘルプは嘘書いてたりな
いままでヘルプのいう通りある関数のフラグ書いてきたのに、ソースみたら全部無視されてたって経験が
2021/01/12(火) 18:07:45.16ID:GYcPzbFp0
クソMicrosoftの使うからだ。
2021/01/12(火) 20:21:16.28ID:ZB1xpZCm0
c/Program Files (x86)/Windows Kits/10/Source/10.0.10240.0/ucrt/stdlib/rand.cpp
c/Program Files (x86)/Windows Kits/10/Source/10.0.16299.0/ucrt/stdlib/rand.cpp
c/Program Files (x86)/Windows Kits/10/Source/10.0.17134.0/ucrt/stdlib/rand.cpp
c/Program Files (x86)/Windows Kits/10/Source/10.0.17763.0/ucrt/stdlib/rand.cpp
551イリヤは俺の嫁 (ワッチョイ ff05-v9ch)
垢版 |
2021/01/12(火) 23:06:47.42ID:XXwzvzv60
ありがとう!
早速試してみますね
2021/01/13(水) 01:30:22.66ID:uZRkh4HP0
Visual Studio は、プリコンパイル済みヘッダーだろ。
pch.h (旧 stdafx.h)

もうビルド済み
2021/01/13(水) 06:12:29.66ID:CAw2lvTg0
afxって文言を削りたかったのねw
554デフォルトの名無しさん (ワッチョイ ff05-AFO5)
垢版 |
2021/01/13(水) 11:46:14.48ID:vx4ASjNc0
大体知りたいことが分かりました!
皆さんありがとうございます!
555デフォルトの名無しさん (ワッチョイ 5f7c-/ZZX)
垢版 |
2021/01/14(木) 18:11:57.43ID:ZgCcmsal0
ヘルプとかマニュアルの嘘は多い
最初から疑うべき
特に日本語のやつ
2021/01/15(金) 07:50:56.36ID:FigS/mOA0
昔デジタルマニュアル内のサンプルソース確認してくれってわたされたやつが、
I -> 1 みたいなやつや、全角文字使われてたとか
入力ミスのサンプル集かと思った。
2021/01/17(日) 08:50:40.04ID:j2J8OKt50
いかにもな機械翻訳で、英訳しながら読まないと意味わかんないのとかね
2021/01/17(日) 10:23:01.71ID:j2J8OKt50
JIS X3010, JIS X3014どちらももうじき20年遅れ
559デフォルトの名無しさん (アウアウウー Sa05-NtCy)
垢版 |
2021/01/19(火) 09:32:50.28ID:eNVxWvb9a
>>514
メモリ16Gの超リッチなLinux環境で使ってすいません。
2021/01/19(火) 12:02:21.59ID:Uy0+fZqKd
16Gで超リッチとは何と安上りなんだ
2021/01/20(水) 03:33:05.19ID:h5t/8l7N0
16GBのPCを個人所有してたら超リッチ
って話じゃないぞ
2021/01/20(水) 08:00:15.22ID:6vEnElCe0
で、どういう話なの?
2021/01/20(水) 11:53:21.26ID:2wFV5REW0
C で書かれたコードを実行するにはリッチって話っしょ
2021/01/20(水) 17:49:36.27ID:6B9ftBiM0
void *p=malloc(1024*1024*1024*16);
2021/01/20(水) 17:55:29.77ID:HhPa7Y4p0
>>564
int型が32bitの環境ならその整数の乗算部分でオーバーフローが起きて16GBにならないんでないかな
2021/01/20(水) 20:34:38.74ID:6vEnElCe0
>>563
意味わからん
LinuxはC言語で書いたプログラム専用じゃないし4.8PiBのメモリーを持つ富岳でもLinuxは動くし
2021/01/20(水) 20:48:15.35ID:h5t/8l7N0
おまえバカだろ
RAM 16バイトの底辺CPUに比べて超リッチな環境だって話
2021/01/20(水) 22:02:18.04ID:6vEnElCe0
バカはお前w
それは単に比べる相手がおかしいだけだろ
569デフォルトの名無しさん (ワッチョイ e101-RjaL)
垢版 |
2021/01/21(木) 00:28:31.26ID:MGeCCcUA0
GUIが無いんだろ、最強じゃんw
2021/01/21(木) 06:10:52.98ID:gXoiSngNH
C「を」書いたのはリッチー
2021/01/21(木) 07:07:18.10ID:zKx4b76A0
A「おれ財布に16円しかない」
B「おれ今16万円も入ってるよ超リッチ」

>>566「16万円で超リッチとは何て安上がりなんだ」
>>566「ビル・ゲイツの財布には16億円入ってる」

A「???」
B「???」
A「誰?」
B「何で突然ビル・ゲイツ?」
A「いや、おれの財布に16円しか入ってないって話を...」

>>566「それは単に比べる相手がおかしいだけだろ」

A,B「???」
2021/01/21(木) 07:12:03.65ID:rjSQv0Wq0
>>571
それどう見ても「個人所有してたら超リッチ」って話だろ…
>>561は一体何を言いたかったんだ?
2021/01/21(木) 07:31:52.93ID:zKx4b76A0
開発ターゲットの話
2021/01/21(木) 08:08:33.69ID:rjSQv0Wq0
>>573
だからターゲットもチープな組込みからスパコンまであるだろ
限定なしに超リッチとか言われても井の中の蛙が語ってるとしか思えん
2021/01/21(木) 08:12:32.96ID:zKx4b76A0
>>574
>>571
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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