祝49回 C言語ならあっしに聞け

このエントリーをはてなブックマークに追加
936デフォルトの名無しさん:03/02/10 23:40
>>934
本人のやる気と才能しだい。
中学卒業程度の数学の知識の持ち主が、高校2年生レベルの数学がわかるようになるって程度。
>>934
おれは会社に入って1年間くらい休みなし、
毎日残業10時間とかいう状況で無理やりCを覚えた(w
デスマーチっつうか人手がたりなかったんよ…。
おかげで1ヶ月前に書いた自分のコードが幼稚に見えて仕方がないという
状態が1年も続いた。つい直しちゃったりしてな(w
一年後にはオブジェクト指向の真似事をやってみたり、
MS-DOSでタイマ割り込み使ったプリエンプティブっぽいスレッドライブラリ
作ってアプリの性能上げたりとかやってたぞ。

じじいの昔話さ(w
938デフォルトの名無しさん:03/02/10 23:56
>>937
質問の答えにまったくなっていないどころか、ただの自慢ときたもんだ。
能力もたかがしれてるな。
> 状態が1年も続いた。つい直しちゃったりしてな(w

命が惜しかったらぐっとこらえとけ。
940デフォルトの名無しさん:03/02/11 00:08
すみません
次のソースで、func()を使って、a=bになるようにしたいのですが
func()をどのように書けばいいのか分かりません
教えて下さい!

void func(int *t,int w){
//ここが分からない
}

void main(){
int a=0,b=1;
func(&a,b);
}
void func(int *t,int w){
*t=w;
}

ポインタと、ポインタによる関数間での値の受け渡しを復習しておけ。
void func(int* t, int* w) { *w = *t; }
int main() { int a = 0, b = 1; func(&a, &b); }
あ‘ーまじがったー
*t
=
w;;
グローバル変数な
946940:03/02/11 00:24
皆さん、有難うございます!
>>910
それなら、7行スレにあったよ。
> w;;

(・∀・)イイ!!
949デフォルトの名無しさん:03/02/11 01:15
ログ出力関連で質問。
ログ吐ける関数用意したんで適当に埋め込んでくれ、って頼まれたんだが、関数名が判るようにしてね!って言われたんです。

メッセージに関数名コピペするっての芸が無いなぁ、と思いつつ。
なんかうまい方法ありませんか?
>>949
標準ではうまい方法は無い。
せいぜい __FILE__ マクロと __LINE__ マクロを使うぐらいだ。
コンパイラによっては __FUNCTION_ マクロを用意しているものもある。
951949:03/02/11 01:46
>950
ども。そうですか。VC++6ですが __FUNCTION_ は無さそうでしたので、これは手作業でいきます。
ところでマクロってのも苦手なんですが、展開を2度行わせるような方法が判りません。
例えば PutLog(LPCSTR lpmsg) が用意されてて
#define PUTLOG() PutLog(__FILE__)
ってのはダメで、どうしても埋め込み箇所でPUTLOG(__FILE__)
って書かなきゃいけませんかね?

まぁ仕事なんで時間費やしても構わないんですけど、余興って事でお願いします。
>>951
マクロは基本的にそれが書かれた時点で展開されるから、あなたの思っている
ような使い方はできない。

どうしても自動化と言うなら、__FUNCTION__ を展開するプログラムを自分で
書いて、プリプロセッサとして起動する。
・・・そんなツールどっかに落ちてないかな?
g++ だと普通にできるけどねえ。。
954デフォルトの名無しさん:03/02/11 03:07
>>933
ありがとうございます。
何時間か探してみたんですが、system()コマンドで"appli.exe 2> stderr.txt"のように叩いてstderrをファイルへリダイレクトしてそれを読み込む、という方法で無理矢理解決しました。
なまえつきぱいぷは?
int i = 'A';
char c = 'A';
/* あのぅ、'A'ってint型ですか? char型ですか?  */
>>956
Cではintです。
問題は、'ab'もintなのはいいけどエンディアンに拠って
0x6162だったり0x6261だったりすることだね。
959デフォルトの名無しさん:03/02/11 08:21
殆どのアプリはVBで作られていると思うのですが
Cでつくられたアプリってどんなものがあるの?
趣味で作るアプリならVBで充分だと思うのですが?

int func( size )
 int size;
{
 static char buf[size];
 return 0;
}

↑C99では、こんなことが出来るって本当なの!?
なんかキモイよ…
>>959
>殆どのアプリはVBで作られていると思うのですが
VC++はVC++で作られています。
>>959
誰にそんな嘘教えられたのですか?
>>960
C99では配列のサイズに変数が使えるようになったらしいが、
これはどうなんだろな。
別にこんなのmallocすりゃ済むのにな。
何の為の仕様変更なんだろな。
965デフォルトの名無しさん:03/02/11 09:19
>>963
アプリはVBで作られていないの?
ゲーはC++だと思いますが。
966デフォルトの名無しさん:03/02/11 09:20
>>964
mallocしないで済むための仕様変更に決まってるだろ。
ていうか、誰か960にツっこんでくれよ。
配列のサイズに変数使ったとしても
それはスタック変数になるの?
もしそうだとしたら
「定数 + sp」
で参照出来なくならない?
どうやってるの? ヒープ?
>>968
定数+spというのがよくわからないのですが
今試してみたらespからサイズ分引いて
スタックに確保しているように思いますよ。
ただサイズ分ちょうどではなくて変な計算してるようですけど。
>>965
アプリもVC++やDelphi多くない?まあ、殆どVBって事は無い。
>>960
C99 のこと言ってんのに引数宣言が K&R かよ...。(これで満足 ? >>967)

それはさておき、自動変数の動的配列は10年ぐらい前から GCC は拡張機能としてサポートしていたよ。

>>964
free() を忘れて、メモリーリークしまくる奴の救済と、プログラムの終了時に free() するかしないかで戦争になるのを避けるため。

>>968
> それはスタック変数になるの?

スタック変数 ? スタックに割り当てられるのかと言うことか ?
当然実装依存だよ。(スタックのないマシンもあるからね。)

> 「定数 + sp」

[変数 + SP] で参照すりゃいい。
もちろん実装依存だが、固定領域を先に確保して、可変部を後に確保すれば、固定領域は従来通り [定数 + SP] で参照できる。

なお、普通の C でも処理系によっては、同様の効果のある alloca() をサポートしているものもある。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/alloca.3.html
>>971
ごめん、960は、
「static」の部分…
>>972
ありゃ...、見落としてました。
http://www.zdnet.co.jp/news/0105/15/e_vb.html
統計の取り方にもよると思うが、プログラマーのうち約半数はVisualBasicということらしい。
実はmallocに置き換えてスコープ抜けたらfreeとか。
>>975
gccはalloca()で確保していたと思った。

>>974
私はプログラマだけどVisualBasicじゃないよ。
たまには使うけど。
>>974
> プログラマーのうち約半数はVisualBasicということらしい。

約半数は、VB を使う ≠ 約半数は VB しか使わない

一つの言語しか使わないプログラマってあんまりいないから、これをもって「プログラマーのうち約半数はVisualBasicということ」と主張するのは「私プログラマに向いてません」と言ってるようなもんだぞ。
新スレ

C言語なら、俺に聞け! <50>
http://pc2.2ch.net/test/read.cgi/tech/1044938752/
>>959
Windowsでしか動かないVB製アプリがほとんどを占めているなんて考えられない。
まあ、俺も最初はVBから始めたからなあ・・
なんせボタンをポチポチ貼りつける感覚でプログラムが出来るんだもん。
でも、次第に不満な点が出てきてあまり使わなくなった。
>>979
JavaとANSI C完全準拠+Qtでどこまで戦えますか?
Javaって段階で終わってる。
>>976
確かVC++でもローカル変数がデカい時は似たようなもんだったよ。
スタックフレーム作るときにページ境界飛び越すとGPFな可能性あるから。
9*系だとスタック溢れることあったから怖かったね。
2000*2000以上の再帰の為にスタックを50MB位にしたりしてたよ。
今はもう意味ないけどね…
>>976
内蔵のalloca()に置き換わって(古いgccだと確か__builtin_alloca()だったかなんだったか)
最終的にただのスタック操作としてアセンブリコードが出力されると思う。