■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
Cスタンダードライブラリー使うな
1 名前: なんで? 投稿日: 2001/05/21(月) 18:40
といわれた、なんで?


2 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 18:57
そいつが使いこなせないから。


3 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 19:03
その実装ではライブラリが腐ってるから


4 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 19:13
自分で発明した車輪しか信用できないから


5 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 19:26
WindowsCE アプリケーションを開発するためのコンパイラは
stdio.h が使えないって本当っすか?


6 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 19:28
組み込み(制御系)じゃないの?


7 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 19:39
>>1
あなたの使ってる言語はC++だから。


8 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 19:42
ROM化環境なんだろうなぁ〜


9 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 21:19
C++だからにもう一票。
だけど、じゃあ何を使えばいいの?


10 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 21:33
>>9
STL


11 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 21:34
>>8
普通の組み込みコンパイラには、
標準関数のリエントラント・スレッドセーフ対応一覧表がついてきます。


12 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 21:34
やっぱり組み込み向けライブラリが別にあるからじゃないかな。


13 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 21:44
この仕事、辞めさせていただきます。


14 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 21:52
>>11
リエントラント・スレッドセーフと
ROM化は
関係無いような


15 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 21:57
>10
STLにはこれらの替わりになるものがあるの?
assert.h
ctype.h
errno.h
float.h
iso646.h
limits.h
locale.h
math.h
setjmp.h
signal.h
stdarg.h
stddef.h
stdio.h
stdlib.h
string.h
time.h
wchar.h
wctype.h


16 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 22:06
>>14
そうだね。
リエントラント・スレーブセーフって、要は関数が多重に呼べる仕組みだろ?

だいいち、組み込み機に標準出力デバイスがあるとおもう?


17 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 22:16
おっと、>>16の後半は>>11にレスしているだなぁ。


18 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 22:26
>>15
全部なんとかなるんじゃないか?


19 名前: てんさいぷろぐらむぁ(偽) 投稿日: 2001/05/21(月) 22:28
>>5

WindowsCEについて(かなりてきとーなので間違いあるかも)

Cランタイム(C標準関数)
: 削減(一部はあり、代用関数使用の事)

STL
: 標準でわなし(地力で入れなされ)

例外(try catch throw)
: 使用不可(多分)

・・・・・・をい!!


20 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 22:32
>>19
それじゃ売れないはずだ(笑
つーか例外無いってどういう事?


21 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 22:34
>>10
STLはCから継承したライブラリと一緒に使うものであって、置き換えるものではないよ。
それでもSTLで置き換えられると言い張るなら、exit関数の代わりをSTLでやってみてよ。

>>14
組み込み用途では、マルチタスクを使用する頻度が極端に高いので、リエントラント性に
注意を必要に迫られることが多い。マルチタスクでなくても、割り込み処理を書くだけで
リエントラント性は考慮しないといけない。

そもそも組み込みのようなフリースタンディング環境では、標準ライブラリはstddef.h,
stdarg.h, limits.h, およびfloat.hしかサポートされない。(Amendment1ではiso646.h
もだけど、Amendment1をサポートする処理系自体あまりない)
それ以外はすべて処理系の独自拡張なので、百パーセント信用しても期待してもいけない。


22 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 22:43
>>15
stdio.hとか使うなって事でしょ。
exit()とかは可。


23 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 23:03
exit()はstdlib.hだっけ?C標準ライブラリってstdio.hだけのことじゃ
ないと思われ。


24 名前: 22 投稿日: 2001/05/21(月) 23:20
>>23
いや、だから出来るだけ標準ライブラリ使うなって話。
C++でもstdlib.hは使わないと仕方ないから可。
stdio.hは代わりにiostream.h使えって話。


25 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 23:34
なんだ、じゃあcstdioはいいのか。


26 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 23:40
結局何が目的なの?
無理してiostream使ってパフォーマンスを落としてまで
標準ライブラリを使わないことに何か利点があるの?


27 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 23:42
>>26
C++でCのようなプログラム書くな!

ってやつの延長じゃない?
よくそういう奴いるし。


28 名前: てんさいぷろぐらむぁ(偽) 投稿日: 2001/05/21(月) 23:49
>>20
つーか例外無いってどういう事?

いやぁ本格的にやってるわけじゃないんで(スイマセン)

Microsoft eMbedded Visual C++ 3.0でちょっと遊んだ感じでは
try catch throwを書いただけでエラーになるんですよ。

ちなみにeMbedded Visual C++ 3.0の環境は
基本的にVCと全く同じ構成なんですが・・・
VCの「C++例外を有効にする」設定チェックボックスと同じ場所には
設定チェックボックスがなぜか存在しないんです(?)

/GXオプションをつけても不信なエラーが出るし・・・
(つーかまぢで使え無いのだろうか・・・・?)

CEはを積む環境は色んな環境やら厳しい環境やらがあると思うので
事情があるのかもしれませんです。

この辺はどなたか詳しいじじょーをご存知の方教えてくださいな。
ってスレの趣旨とちがうですねぇ・・・ゴメンナサイ


29 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 23:50
>>24
iostream.hっていつの時代のヘッダ使ってるの?それともEC++?


30 名前: 24 投稿日: 2001/05/21(月) 23:54
>>29
え?今の時代iostream.hなんて使わないのですか?
僕思いっきり使ってるのですが……。
普通、何を使うものなのでしょう?


31 名前: 29 投稿日: 2001/05/21(月) 23:58
iostream


32 名前: デフォルトの名無しさん 投稿日: 2001/05/21(月) 23:58
<iostream>
std::cout


33 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 00:01
リエントラント・スレッドセーフが組み込みに大事なのはわかったけど、
それは組み込みに限定した話でもないじゃん。
Windowsのプログラミングにだってこれらは大事。
だから、組み込みの特殊性の例としてあげるには不適切のような。


34 名前: 30 投稿日: 2001/05/22(火) 00:02
>>31-32
.hがいらないって話ですか?


35 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 00:03
Embedded C++では例外は使えないね。
http://www.caravan.net/ec2plus_j/language_spec.html


36 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 00:20
青少年対象の計算プログラムのコンテストで、「組み込み関数を
使うな」という規定を見たことがある。sin関数なんかは自分で
作りなさい、という趣旨のようだ。


37 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 00:21
なんかくだらねえスレだな


38 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 00:33
んー 眠たくなるスレだ


39 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 00:40
>>36
sin関数を自作しろって?
そんなこと考えたこともなかった。
私は作れません。(ワラ


40 名前: てんさいぷろぐらむぁ(偽) 投稿日: 2001/05/22(火) 00:40
>>35

えーと
とりあえずnamespace、テンプレート、多重継承(ATLあたりで使ってた)
とかは普通に使ってたような気がするので
eMbedded Visual C++ 3.0はEmbedded C++とは直接関係ないみたいですね。
(eMbedded Visual C++ 3.0で遊んだの結構前なんで詳しくは忘却の彼方)

でもEmbedded C++で削られてるって事は
組み込み系では例外使えなくても不思議ではないって事ですね。
情報さんくすです。

これで安心して寝れます。
でわ
 ニャフ-ン    オヤスミ-
  ___Λ Λ____
 |__(,,⌒ー⌒)/)゙__|


41 名前: てんさいぷろぐらむぁ(偽) 投稿日: 2001/05/22(火) 00:44
つーか
今まで組み込み系でC++ってナシだったので
(そんなに深く組み込みの仕事はやった事無いんですが)
Embedded C++っての知りませんでした。
また一つかしこくくなりましたとさ。
でわおやすみなさい(微妙にスレと関係ない話ですいませんでした)


42 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 10:08
>>39

double sin(double a)
{
    return cos(a + (PI/2));
}


43 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 13:59
ところで、>>1 はどこいった。
収拾をつけてほしいぞ。


44 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 15:30
>>42
それは冗談にしても、実際sin,cos,tanは自作させられたことあるよ
(ライブラリ使用禁止のため)
誤差が出まくるのは承知の上。誤差を最小にするために
計算順序を工夫したりしていろいろ苦労したなぁ・・・


45 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 19:48
>>44
自分で書くなよ、どっかからソース持ってこいよ…


46 名前: 21 投稿日: 2001/05/22(火) 20:00
>>33
Windowsとかのホスト環境の処理系の場合は、どんなプラットフォームで動作するかが
予め分かっているので、排他制御をライブラリに組み込んでしまってスレッドセーフに
できる。
ところが組み込み処理系の場合、どんなプラットフォームで動作させるかはユーザが決
めるので、排他制御の機構もユーザ任せになる。つまり、呼び出し側が自分の責任で矛
盾がないように制御しないといけないから、リエントラント性に関する情報が不可欠に
なるというわけ。


47 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 20:08
sinて意味ワカリマセン。ラジアンももっと解りません。
イッテヨシデスカ?


48 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 20:35
>>47
逝くなら高校に


49 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 22:16
>>44
なぜ、ライブラリ使用禁止なのかが、やはりどうしてもわからない。
>>1といい、なぜそんな状況になるの?
ないから使用できないのではなくて、あるのに使用禁止とは。

そうか!そうやって仕事を捏造して、請求額を上げるのが目的かも。
契約内容次第ではそれも可能だもんね。


50 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 22:27
昔の話になるけど、ライブラリがライセンス制になってて、
リンクして配布するには別契約になってるって処理系みたことあるよ。
そういう環境ではライブラリを自作しないわけにはいかない。


51 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 22:29
>>42
数Iからやり直せ。


52 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 22:31
>>49
>なぜ、ライブラリ使用禁止なのかが、やはりどうしてもわからない。
・パフォーマンスが悪すぎる。
・とにかくプロジェクトでそう言う方針になった。
・SEがライブラリの使い方を知らない
・そもそもライブラリが無い(藁

人生長く生きると色々なことがあるものだよ(藁


53 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 22:43
>>52
追加
・ライブラリがバグってる。


54 名前: 49 投稿日: 2001/05/22(火) 22:55
>>52
自作してもライブラリよりパフォーマンスを上げるのはそんなに簡単じゃない
でしょ。sin関数とかは表引きにでもするのかな。中間値はテイラー展開で求
めれば、マクローリン展開より収束が早いし、精度も期待できるもんね。
ないのは仕方ないとして、2番目と3番目の理由は理解不能。

>>53
ライブラリ関数全部がバグってるの?自作してもバグる可能性が十分あるから、
特定の関数を使用禁止にするんじゃなくて、ライブラリを使用禁止にするのは
おかしいなあ。


55 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 23:09
プロジェクトの方針がそうなってしまったら、
上司がロクでもない情報に踊らされているとわかってても、
その通りに作業しなきゃいけないのが下っ端というものです。


56 名前: デフォルトの名無しさん 投稿日: 2001/05/22(火) 23:27
>>49
ライブラリの関数で使いたいものって何がある?
組み込みではほとんど意味のない関数なんだよ。
俺はどうしてもsprintfが使いたかったんだけど、リンクすると
30Kも増えるから泣く泣くあきらめて自作したよ。
#128KのROMだった。

あとsin関数なんて普通使わないと思う。組み込みはZ80とか68とか
が現役だからコプロがなくちゃ数学関数は洋ナシ。


57 名前: 36 投稿日: 2001/05/22(火) 23:55
パフォーマンス云々じゃなくて、アルゴリズムの勉強の一環として
関数を自作させよう、ということでしょ。
ちなみに、そのコンテストの課題は、「オイラーのγ定数を
できるだけ長い桁数、かつ高速に計算するプログラムをCで作れ」
というものだった。コンテストの募集要項に、代表的な
γの公式がいくつか掲載されていて、「これを参考にしろ」
とあった。(別にその公式を使えというわけではなかったようだが)


58 名前: デフォルトの名無しさん 投稿日: 2001/05/23(水) 09:39
>>56
そんな化石ひっぱりだされても困りますわ。


59 名前: デフォルトの名無しさん 投稿日: 2001/05/23(水) 09:51
昔、そう言うことがあったなぁ。
開発しているモノが DS!=SSとかだったから、
それを前提にされていた標準のライブラリは使用禁止だった。
ちなみに、OS/2 V1.1ぐらいの話しです。


60 名前: sage 投稿日: 2001/05/23(水) 12:43
sin 自作したなぁ。
整数演算しか使えなかったから…
今の時代なら、作る必要ないと思われ。


61 名前: デフォルトの名無しさん 投稿日: 2001/05/23(水) 14:49
そーいや、rubyは標準のclass/methodの中で
stdio.h相当の関数を使わないことにしてる/したい
と言ってませんでしたか?


62 名前: 21 投稿日: 2001/05/23(水) 21:35
>>56
だから組み込み処理系の標準ライブラリには関数はひとつもないんだってば。
独自拡張の関数は、ある意味でサービスみたいなもんだから、文句を言っても始まらない。
それにsprintfとかはもっとも大きな関数じゃないか。
それから、128Kとか30Kとかいうのはビットだろ。ちゃんと書かないとみんなきっと誤解
してるよ。

>>58
無知丸出し。


63 名前: デフォルトの名無しさん 投稿日: 2001/05/23(水) 22:06
>>62
いわゆる標準ライブラリの関数で使いたいものあるか?
と言う話だったんだけど。
俺が使ってたのやつはほとんどの関数があったけど、結局何も使わなかった
#組み込み理系の標準ライブラリなんて規格があるなんて知らなかったよ

ビットじゃないよバイトだよ。sprintfがかくも巨大なのは浮動小数点
処理をするためにそれ系の関数を片っ端からリンクするからだ。
単に実装がへたれだっただけかもしれないけど。


64 名前: 62 投稿日: 2001/05/23(水) 22:14
>>63
どうでもいいけど、いわゆる標準ライブラリは、stddef.h, stdarg.h,
limits.h, float.hだけだよ。
これらは使いたいかどうかではなくて、移植性と可読性のためにあると
考えた方がいい。

それから、128KバイトもROMがあるなら贅沢いったらだめ。
128KビットROM+256ビットRAMの環境でCでプログラムしたことあるけど、
あれは本当に参った。関数を呼び出すのに引数をスタックに積むだけで
ひやひやものだったもんな。


65 名前: デフォルトの名無しさん 投稿日: 2001/05/23(水) 22:40
>それから、128KバイトもROMがあるなら贅沢いったらだめ。
100Kくらいはデータでプログラムには使えないんだよー

>128KビットROM+256ビットRAMの環境でCでプログラムしたことあるけど、
まじで?256ビットRAMでC?
256ビットっていったら68のレジスタ以下だよ?


66 名前: 64 投稿日: 2001/05/23(水) 22:52
>>65
ごめん、256バイトだった。


67 名前: デフォルトの名無しさん 投稿日: 2001/05/24(木) 00:55
って言うかゲート数がたりませ〜ん


68 名前: デフォルトの名無しさん 投稿日: 2001/05/24(木) 01:07
事務系ではsprintfやstrtokを使えないと困ります。
(conio.hだけでなんとかなるという人はどうやってるの?)


69 名前: デフォルトの名無しさん 投稿日: 2001/05/24(木) 01:18
f/s/printfぐらい自作しろ


70 名前: デフォルトの名無しさん 投稿日: 2001/05/24(木) 03:23
そだね。使わない書式とか削りたいなら自作がいいよ。>69


71 名前: 継承(課長)クラスのオーバーライド 投稿日: 2001/05/25(金) 14:56
>>55
そういうときには、あなたからロクでもない情報を
上書きするまともな情報を上司に流し込んで、
上司を正しくコントロールしましょう。
あるいはそう仕向けましょう。


72 名前: ななし 投稿日: 2001/05/28(月) 02:05
昔(10年前)、VAX−Cの標準関数はメモリリークするので使うなとDEC社員に言われた。


73 名前: デフォルトの名無しさん 投稿日: 2001/05/28(月) 22:29
Cスタンダードライブラリーのかわりに、
http://cr.yp.to/software.html
のLibrary documentationにあるの使えってというのもありかも・・


74 名前: デフォルトの名無しさん 投稿日: 2001/05/29(火) 22:27
age


75 名前: デフォルトの名無しさん 投稿日: 2001/05/29(火) 23:55
>69,70
10人プログラマがいたら、10個のprintfもどきがリンクされる
の?(実際、標準ライブラリを禁じられたプロジェクトで似たような
ことがありました)
標準ライブラリがメモリとマシンパワーを食うのはみんな知って
いるけど、使うなというのは現実を無視した理想論に過ぎないの
では?
(客先から押し付けられる標準ライブラリもどきもかなりウザイし)


76 名前: デフォルトの名無しさん 投稿日: 2001/05/30(水) 19:49
デバッグにはsprintfが重宝しますねえ