C言語なら私に聞け(33)
■ このスレッドは過去ログ倉庫に格納されています
0001ジョブ子
NGNGでもC言語の腕には自身があるので何でも聞いてね。
PS
関連擦れは面倒なのでほかの人に任せます。ウフッ
0153デフォルトの名無しさん
NGNGいまとなってはなんでそんな事考えたのかも思い出せないけど。
メモリの節約しようって発想はなかったけど、使い勝手から結局va_list使った。パスカル文字列風に先頭はデータ数入れて。でも、va_listで自動キャストされる規則をわすれたりして型を間違えると誤動作する。
0154名無しさん@Emacs
NGNGアプリケーションを作りたいのですが、参考になりそうなソースコード
がありましたら教えて下さい。
今は cbzone のソースを読んでいます。
0155デフォルトの名無しさん
NGNGこっちで聞け。
http://pc3.2ch.net/test/read.cgi/tech/1014404990/l50
>>151
その程度の書き込みしかできないなら、止めとけ。ヴァカみたいだぞ。
(みたいじゃねーのかもな。ププ)
0156nobodyさん
NGNG0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG売ってるティッシュ買うのと街頭で配ってるティッシュ使うのって、どっちがいい?
0160デフォルトの名無しさん
NGNGどっちでも良いってことですか?
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGケツの拭きごこちってどう言う意味?
作業のしやすさ?
0163デフォルトの名無しさん
NGNG配ってるティッシュ使ってみて不満があるなら売ってるの買えや
0164デフォルトの名無しさん
NGNGわかりました。
ありがとうございました。
0165デフォルトの名無しさん
NGNG僕は意味を聞いているのですが!
ケツの拭きごこちとプログラムを作るのと何の関係があるの?
あおりはやめてください。
0166デフォルトの名無しさん
NGNG騙りやめれ
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNGいけないと聞きました。Cのソースを.cppでコンパイルしたらどんな
不都合があるのですか。「倉薫」の入門本にもそんなくだりがあったが
理由がわかりません。
0169デフォルトの名無しさん
NGNGケ ツ 拭 い て み り ゃ あ わ か る だ ろ う が !
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNG明らかだろ。オマエがそうやって人に聞いてるの見てると、
もう(。A。)(.Λ.)(:>)(゚∀゚)(<:)(.Λ.)(。A。)って感じだな。
0172デフォルトの名無しさん
NGNGここのPascalとC++の統合開発環境はけっこうよかったです。報告まで
0173デフォルトの名無しさん
NGNGいっている意味がわかりません。Hello,World程度の簡単なソースを
拡張子.cにしようが.cppにしようがコンパイル結果に関係ないと思うのですが。
0174デフォルトの名無しさん
NGNG> BCCでCのソースをコンパイルするとき拡張子を必ず.cにしないと
> いけないと聞きました。Cのソースを.cppでコンパイルしたらどんな
> 不都合があるのですか。「倉薫」の入門本にもそんなくだりがあったが
> 理由がわかりません。
C と C++ で一部非互換のところがあるからだよ。BCC は、使ったこと無いからわからんけど、VC++ では xxx.c なら sizeof 'a' == 4 となるが、xxx.cpp なら sizeof 'a' == 1 となる。
0175デフォルトの名無しさん
NGNG全然違う・・・
0176デフォルトの名無しさん
NGNG0177168,172,173
NGNGエラーはでないけど、実行時エラーがでる場合があるということですか?
0178デフォルトの名無しさん
NGNG>>173は未だにトランスレータ式のC++コンパイラ使ってるんだよ。
なのに次からBCC使わなきゃなんなくなって、不安でしょうがないんだよ。
0179裕美子 ◆lIp1b.Ek
NGNG参考までに、使用コンパイラは 試食版とBCCです。
0180デフォルトの名無しさん
NGNGあんただれ
0182デフォルトの名無しさん
NGNGC++ではエラー出ます。
0183デフォルトの名無しさん
NGNGここの女の子だよ>>180
0184デフォルトの名無しさん
NGNGchar* c = static_cast<char*>(malloc(128));
にするとCでコンパイルできなくなる罠
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG/:::|:::::::|:::::::::::::/::::::/::::::::::::::/:::::::/`\_
/ ̄\::::::|:::::/:::......-―――--..........__/:::::::::::::::\
┌ー ̄::::::::::::ヽ::|:::..-^ ̄ ^ ヽ、:::::::::\
ヽ::::::::::::::::::::::::::::/ \::::::::ヽ
ヽ:::::::::::::::::::::::/ :::: \:::::ヽ
ヽ::::::::::::::::::/ :::::::: \::::|_
):::::::::::::::| ::::*::::: ヽ:|::::ヽ
/::::::::::::::::| ::;;;;: l::::::::ヽ
/::::::::::::::::::| ノ::ii:ヽ:: l::::::::::|
|::::::::::::::::::::| /::::;リ:::l:::: |::::::::::::|
|:::::::::::::::::::::l ...l::::;リ:::/:: /:::::::::::::|
.|::::::::::::::::::::::l . /:ア/::: /:::::::::::::::i
l:::::::::::::::::::::::::l ./::`^::::: /:::::::::::::::::/
ヽ::::::::::::::::::::::::l /:::::::::: /:::::::::::::::::::/
/:::::::::::::::::::::::l /::::::::::::: /::::::::::::::::::::::/
/::::::::::::::::::::::::i __-ー--=;;;:::::::::::::: ....::::/:::::::::::::::::::::::/
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGリリアたん・・・ハァハァ
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG> charはなんと読むの?
もうこの話題はいいよ、「キャー」でも「シャー」でも何でもいいよ。
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNGぷっ、
シャーだって
ぷぷぷぷぷぷぷ
くっくっくっ
0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG友人の飼っていた犬が「ちゃる」だったので、
charも「ちゃる」になりますた。
0196nobodyさん
NGNGキャラクターの略だからな。
キャルかなぁ。
0197デフォルトの名無しさん
NGNGcharも「ちゃー」になりますた。
0199デフォルトの名無しさん
NGNG#define VAL_ 0
0200デフォルトの名無しさん
NGNG020116
NGNG糞どもがーーーーっ!!
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG#define FLG_AGE 1
void a( char b );
a( FLG_aGE );
どうすればいいんでしょうか?
キャスト?
0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG間違い
#define FLG_aGE '\1'
0210206
NGNG0211デフォルトの名無しさん
NGNG> 放置 ?
はぁ ? >>208-209 を見てんのか ?
0212デフォルトの名無しさん
NGNGa( (char)FLG_AGE );
0213デフォルトの名無しさん
NGNG#define FLG_AGE ((char)1)
あと、C FAQに
文字リテラル('\1'とか)は実はint型な罠
ってのがあったような気がするのだが、どうか。(C++ではcharだという話も)
0214デフォルトの名無しさん
NGNG間違い
#define FLG_aGE ((char)1)
0215212
NGNGいや>>206の聞いてる人が既にミスしてるからw
>>#define FLG_AGE 1
>>void a( char b );
>>a( FLG_aGE );
↑ここねw
0217デフォルトの名無しさん
NGNGvoid a(char b);をvoid a(int b);にする。char型の引数ってあまりみないな。
0218デフォルトの名無しさん
NGNGcharにしても別にメモリの節約にはならないし(w
0219デフォルトの名無しさん
NGNGプ
0220デフォルトの名無しさん
NGNG元の値とまったく同じになるんだけど、何故?環境はVC++6.0SP5
0221220
NGNGもうわけ分かりません。
0222必要なくね?
NGNG8bitの unsigned char 型のデータを
32bit右シフトしてるの?
0223デフォルトの名無しさん
NGNG隣との、xorを取るようなことを繰り返して、
シフトをしているのであれば戻るのかもね。
0224223
NGNG0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNGそれでも詰まったらコードを晒す。
0231220
NGNGこんな感じの文を書いてる。
unsigned char *p;
unsigned long a;
:
a |= *p >> (32 - s); // 0 <= s <= 32
s=1〜32のときは期待通り動くのが、s=0のときだけ0にならず驚いた。
>>223
こんな夜中にレスつけてくれただけでも有難う。
いろいろ検索してるうちにこの症状について書いてあるページを見つけた。
どうやらこれは処理系依存らしいが、ANSI Cでもそう定められてるのだろうか。
ttp://www.biwa.ne.jp/~chu0296/laboratory/cpp.html
0232デフォルトの名無しさん
NGNG>>231
それは処理系依存ではなく未定義です
0233デフォルトの名無しさん
NGNGこれ試してみたら多分、まずunsigned charをシフトするときでも
32bitレジスタに値を入れてそれをシフトする命令を出してるらしい。
で、それをシフトするとき何ビットシフトするかを入れるレジスタ
の値が31以上だったとき下位5bitだけ使うっぽい。
だから33bitシフトとすると1bitシフトする。
0234デフォルトの名無しさん
NGNGx86形の話だけど、コンパイラはシフトをアセンブラレベルの
シフト命令(shr/sar)に展開するのね。
で、8086の頃は、シフト命令は1ビットだけシフトする命令か、
CLレジスタに数値を入れてシフトさせるしかなかったのね。
で、ハードウェア的には、本当に繰り返しで処理してたのね。
80186(かな?)以降は、直接nビットシフトする命令が出来たんだけど、
これもハードウェア的には(マイクロコードで)繰り返し処理してたのね。
で、386になってから、多ビットシフトのハードウェアが導入されて、
ようやくシフトが"軽い"命令になったわけ。
で、たしか、386からだと思うけど、clレジスタに32以上の数値を指定しても、
下位ビットだけがマスクされて、実際には31ビット以下のシフトしか
行われないようになったわけ。
だから、16bitコンパイラを使って、32bit以上のシフト命令を使ったプログラムを作ると、
むかーしのCPUと今のCPUで結果が異なるわけ。
この結果を、CPU種別の判別なんかに使ってたりしたんだな。
コンパイラは、CPUの判別なんかしない(実行環境は別だし、以降に生まれたCPUにも対応できない)から、
効率重視のC言語において結果が異なる(未定義になる)のは
ある意味仕方がないとも言えるんだろうね。
0235nobodyさん
NGNG私、初発言の初心者ですが、>>234さんの説明は目から鱗でした。
なるほど、機種依存ってのはここに根本原因があったのですね。
ありがとうございました。久しぶりに濃い文章だっだなぁ。
0236220
NGNG235氏と同じく目から鱗でした。
アセンブリ言語の知識はZ80〜8086時代で止まってるからなぁ。
まさに、内部でシフト演算をn回ループしてるものだと思ってたよ。
0237デフォルトの名無しさん
NGNGfor(i=0;i<10;i+=0.1){
printf("%1.1f ",i);
}
表示するとなぜか最後に10.0が入るのはどうしてなんですか。
0238デフォルトの名無しさん
NGNGって、昨日見たのはJavaスレだったか。
0239デフォルトの名無しさん
NGNG判定されてしまうって言うのが一般的な回答なのでは?
for(int i=0;i<100;i+=1){ //i++で充分
printf("%1.1f ",i/10.0);
}
こういうふうにしなさいと言うのもあると思う。
違ってたらご免。
0240デフォルトの名無しさん
NGNG2^5(2進5bit)で割った余りか。なるほど。
0241デフォルトの名無しさん
NGNG10.0?なんかソースのコピペミスってないか?
最後だけじゃなく、途中経過も書いてみな。
0242デフォルトの名無しさん
NGNGウチだと10.0も出た。たぶん
0.1が0.09999..とかで、
10.0も9.99999...なんだと思われ
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG> 10.0?なんかソースのコピペミスってないか?
既に、>>239 で答えでてるよ。初心者が良く陥りやすい罠のひとつ。
0.1 って言うのが本当の 0.1 じゃないから10回めのループの判定の時に i が 10.0... にならなくて、9.9... とかなっているため、もう一回余分に回るだけ。解決策は、>>239 のようにやるのが普通。
ちなみに、最後に i が 10.0... になって無いのに表示が 10.0 となるのは、出力時に四捨五入しているから。
0245デフォルトの名無しさん
NGNG2進表現内での循環小数になる。=>まぁこれが誤差などの原因かな
0246デフォルトの名無しさん
NGNGfor(i=0;i<10;i+=0.1){
printf("%.20f ",i);
}
http://www.google.com/search?q=%95%82%93%AE%8F%AC%90%94+%8C%EB%8D%B7&ie=Shift_JIS&hl=ja&lr=lang_ja
0247デフォルトの名無しさん
NGNGvoid main()
{
printf( "%f\n", 1 );
}
表示するとなぜかアプリケーションがクラッシュするのですがどうしてなんですか。
0248デフォルトの名無しさん
NGNG15.3:
解けなくてイライラしていた問題が実は、
printf("%d", n);
で起きていることがわかった。ANSIの関数プロトタイプは上のような 引数の型
の不一致から守ってくれると思っていたのだが。
A:
関数が可変数個の引数を取るとき、プロトタイプは可変数個の引数の 数やその
データ型についての情報を与えない(そもそも出来ない)。よっ て通常の保護の
仕組みは、可変数個の引数リストの可変長の部分には あてはまらない。コンパ
イラは暗黙の変換も(通常の)データ型の不 一致も警告もできない。
質問5.2, 11.3, 12.9, 15.2も参照のこと。
0249デフォルトの名無しさん
NGNGmain()の型がvoidだからです。
標準Cではmain()の型はintと決まっています。
0250デフォルトの名無しさん
NGNGネタにマジレスするが
そんなOS依存環境依存なことをどうどうと正論ぶるのはやめにしませんか?
0251247
NGNGレスありがとうございます。
しかし、浮動少数点が正しく表示されないのならば
まだ分かるのですが、なぜクラッシュするのでしょうか?
>>249
int main() にしてもダメでした。
0252デフォルトの名無しさん
NGNGsizeof( double )!=sizeof( int )だからでないの?
■ このスレッドは過去ログ倉庫に格納されています