トップページ⇒tech
1001コメント269KB

C言語なら、俺に聞け! lt;50gt;

■ このスレッドは過去ログ倉庫に格納されています
0001鼻から悪魔でますたNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しろ。
むしろ質問する前にWEBで検索するのが常識だ。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。

コンパイラを探しているなら >>2 を見よ。

上記を逸した場合の結果は激しく未定義とする。

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
00021NGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
00031NGNG
前スレ

C言語なら私に聞いてYO! 49
http://pc2.2ch.net/test/read.cgi/tech/1042646178/

祝49回 C言語ならあっしに聞け
http://pc2.2ch.net/test/read.cgi/tech/1042640474/
00041NGNG
【過去ログ】
48 http://pc3.2ch.net/tech/kako/1041/10411/1041127646.html
47 http://pc3.2ch.net/tech/kako/1040/10400/1040048202.html
46 http://pc3.2ch.net/tech/kako/1039/10393/1039328710.html
45 http://pc3.2ch.net/tech/kako/1038/10384/1038405432.html
44 http://pc3.2ch.net/tech/kako/1037/10377/1037796472.html
43 http://pc3.2ch.net/tech/kako/1037/10372/1037281411.html
43 http://pc3.2ch.net/tech/kako/1037/10371/1037134356.html
42 http://pc3.2ch.net/tech/kako/1037/10371/1037101156.html
41 http://pc3.2ch.net/tech/kako/1036/10368/1036876790.html
40 http://pc3.2ch.net/tech/kako/1036/10366/1036673739.html
39 http://pc3.2ch.net/tech/kako/1036/10364/1036409391.html
38 http://pc3.2ch.net/tech/kako/1035/10357/1035729526.html
37 http://pc3.2ch.net/tech/kako/1035/10356/1035623265.html
36 http://pc3.2ch.net/tech/kako/1035/10352/1035211039.html
35 http://pc3.2ch.net/tech/kako/1034/10343/1034337064.html
34 http://pc3.2ch.net/tech/kako/1033/10332/1033240509.html
33 http://pc3.2ch.net/tech/kako/1032/10326/1032606064.html
32 http://pc3.2ch.net/tech/kako/1031/10319/1031905402.html
31 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
30 http://pc3.2ch.net/tech/kako/1030/10307/1030786546.html
29 http://pc3.2ch.net/tech/kako/1029/10296/1029605182.html
28 http://pc3.2ch.net/tech/kako/1028/10284/1028495798.html
27 http://pc3.2ch.net/tech/kako/1027/10271/1027160374.html
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
00051NGNG
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html
00061NGNG
あら、
いつの間に、タイトルに< >使えなくなってたの
鬱
0007デフォルトの名無しさんNGNG
    ┏━━━ / |━━━━━┓
    ┗┳┳━ |_| ━━━┳┳┛
      ┃┃ /  ヽ     ┃┃
    ┏┻┻ |======| ━━┻┻┓
    ┗┳┳ ヽ__ _ ノ ━━┳┳┛
      ┃┃ (/)     ┃┃
      ┃┃ (/)     ┃┃
    凸┃┃ (/)     ┃┃凸
    Ш┃┃ (/)     ┃┃Ш
    .|| ┃┃ (/)     ┃┃.||
  ∧_∧   (/) ∧_∧  ∧ ∧
  ( ・∀・)  (/)(´∀` )  (゚Д゚ ) Part50スレが他に立ちませんように
  (つ  つミ (/)(⊃⊂ ) ⊂  ⊃
  |_|_|_�I(/)_|_|_|__|  |
  /////ノ,,,,,,ヽ ////||  |〜
////////////  |∪∪
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
|        奉  納        |
0008デフォルトの名無しさんNGNG
おとといK&Rを買いますた
引き続きがむばります
0009デフォルトの名無しさんNGNG
>>1-5
乙カレー。

>>7
だよねー。
0010デフォルトの名無しさんNGNG
>>8
ちゃんと正誤表は確かめたか?
0011デフォルトの名無しさんNGNG
>>10
今日確かめます
0012デフォルトの名無しさんNGNG
ネット上にある正誤表をね
0013デフォルトの名無しさんNGNG
ようやくまともなスレ立てになったか…
>>1乙
0014デフォルトの名無しさんNGNG
皆さんはソースプログラム中にデバッグ用の文を組み込んだりしてますか?
また、どんな方法を利用しているのでしょうか?
0015デフォルトの名無しさんNGNG
/* コノアタリガアヤシイ ダレカデバッグシロ */
0016デフォルトの名無しさんNGNG
極上のウイルスくれ!
0017デフォルトの名無しさんNGNG
誰だよ、スレタイに < > 使った香具師は・・・
0018デフォルトの名無しさんNGNG
誰って、そりゃ>>1だろう
0019デフォルトの名無しさんNGNG
先月デザインパターン改訂版を買いますた
引き続きがむばります
0020デフォルトの名無しさんNGNG
むしろ>>1以外に<>をスレタイに使うことが出来る奴がいたら、それは神です。
0021デフォルトの名無しさんNGNG
ひろゆきとか。
0022デフォルトの名無しさんNGNG
で、>>1 は誰?
0023デフォルトの名無しさんNGNG
こないだ駅の階段で派手に転んだ人
0024デフォルトの名無しさんNGNG
生き別れの兄です。
0025デフォルトの名無しさんNGNG
今まで小さい練習用のプログラムを書いてたんですが、ちょっと大き目のものを
書くようになって気付いたことが。

一つのモジュール内で、やたらと深い&多数のループを回すプログラムを作るとき、
皆さんはループ用の変数をどう確保してるのか、ということです。
今のところint i, j, k, m, l ........てな感じでやってるんですが、なんか無駄が多いような・・・・・
それともこれが最善のやり方なんでしょうか。
0026デフォルトの名無しさんNGNG
for (int i = 0;
 for (int j = 0;
  for (int m = 0;
   for (int l = 0;
0027デフォルトの名無しさんNGNG
>>25
どの辺が無駄なのか説明してくれないか?
0028デフォルトの名無しさんNGNG
こないだ書いたプログラムでほとんどの関数に int i,j,k が必要だったんで
グローバル変数で、i j k定義したよ。

//良い子は絶対真似しないこと。
0029デフォルトの名無しさんNGNG
>やたらと深い&多数のループを回すプログラムを作るとき

できの悪いの自慢してどうする
0030デフォルトの名無しさんNGNG
>>25
ちゃんと変数名考えて定義しろよ。
それぞれのループごとに意味あるんだろ?
0031デフォルトの名無しさんNGNG
struct { int i:8; int j:8; int k:8; int l:8; } x;
for (x.i=0; …
 for (x.j=0; …
  for (x.k=0; …
   for (x.l=0; …
0032デフォルトの名無しさんNGNG
なぜビットフィールドなんか使う・・・
0033デフォルトの名無しさんNGNG
31は貧乏
0034デフォルトの名無しさんNGNG
私の書くプログラムで、(特に)意味のないループ制御変数はicにしている。
iだとインクリメンタルサーチが面倒だと言うのが一番の理由。
で、二重ループは大抵意味があるのでその意味を反映させる。
例えば、ix, iy など。
一つの関数で三重以上のループになることは余りないかな?
その場合も二重ループと同様。
ちなみに、>>31のような書き方をすると処理速度はがた落ちになる罠。
0035デフォルトの名無しさんNGNG
>>28
何のメリットがあるんだ ?
0036デフォルトの名無しさんNGNG
>>35
スタックポインタ相対アドレッシングのないCPUでは、自動変数より
グローバル変数の方が処理速度もメモリ効率も上がるだろうね。
0037デフォルトの名無しさんNGNG
>>36
そこまで考えてないと思われ。単なる手抜きかと。
多くのプロセッサでは、自動変数でループカウンタとして使うなら
レジスタに割り当てられる事が多いし。
グローバル変数は、コンパイラの最適化を阻害するケースが多い。
0038デフォルトの名無しさんNGNG
名スレの予感

        ∧∧  ミ _ ドスッ
        (   ,,)┌─┴┴─┐
       /   つ.  終  了 │
     〜′ /´ └─┬┬─┘
      ∪ ∪      ││ _ε3
               ゛゛'゛'゛
003938NGNG
誤爆
0040デフォルトの名無しさんNGNG
C++のDLLからクラスを動的にインポートすることは出来ないのでしょうか?
Loadlibraryでロードしても関数を呼び出す方法しか見当たらないのですが
ヘッダもライブラリも無いので何とか動的にリンクしたいのですが
004140NGNG
えーっとそれから
環境はVC++でwin32です
0042デフォルトの名無しさんNGNG
>>40-41
果てしなくスレ違い
004340NGNG
失礼しました
0044デフォルトの名無しさんNGNG
>>26
それは C++ だ!

>>28
int i;

void foo(int *array, int size) {
 for(i = 0; i < size; ++i) {
  printf("(%d\n", i);
  bar(array[i], size);
  printf("%d)\n", array[i]);
 }
}
void bar(int elem, int size) {
 for(i = size; i >= 2; --i) {
  printf(" %d: %d\n", i, elem * i);
 }
}

で、どうするよ。

>>29
行列とか扱ってるとどうしても深くなってしまうこともある。
>>25
でも、そういうのでなければ関数に分けたりして
ループを浅くするのがよい。
0045デフォルトの名無しさんNGNG
>>44
>>>26
>それは C++ だ!
C99だとできたりする。
0046デフォルトの名無しさんNGNG
C99うぜーーーーーーーーー!!!!!!!!!!

配列の大きさの指定には変数は使え
ないとかsnprintfは標準関数じゃないとかいうと厨房扱いされるんだぜ。
まじうぜーーー!!


こんな時代遅れな言語は新たに規格を策定しなくてもよかったと思うんだけど。
0047デフォルトの名無しさんNGNG
変なところで改行しちまった
0048デフォルトの名無しさんNGNG
>>44==46?
C99が必要無いと思うのは勝手だけど
自分のミスを規格のせいにしてはアカンよ
004946NGNG
>>48
違いますが。
0050デフォルトの名無しさんNGNG
>>48
「〜は使えない」→「C99ならデキルヨ!アナタシラナイノ?ぎゃは」
とかいう会話がまじうぜーーーのではないでしょうか?
005144NGNG
>>46
いやまあ、現状C99を実装してる処理系ってほとんどないだろうし、
移植性を考えたらC99の機能はまだ使うべきではないだろう。
いまだに
void afo(mona)
 int mona;
{
 /* */
}
式の関数を定義する場合もあるわけで。

ただ、Cの機能じゃないと言い切っちゃうのは、さすがに嘘だと思ったんでな(w
005248NGNG
>>50-51
いや、俺もC99の環境は持ってないし
多分、実装された環境を手に入れる事は暫く無いだろうなと思うし
たま〜に、ウザイと思う事はあるよ
でも、Cの規格にC99があるんだから、しょうがないじゃん
教える時や、間違えを指摘する時に
釣りでも無いのに、C99の規格の事を忘れてはアカンと思うのよ
まぁ、別に争う気は無いので、ここら辺で
0053デフォルトの名無しさんNGNG
でも、いかに C89 とかが obsolete だとしても、それと C99 とはあくまで
区別するのが今の風潮じゃないか?
0054デフォルトの名無しさんNGNG
カーニハンとリッチーはC99対応のプログラミング言語C第3版を出すつもりはないの?
0055本当の44NGNG
>>51
あなた、>>45 じゃないですか?

えーと、C99 でできるのは知ってましたが、
>>53 のようなスタンスで書いちゃいました。

C99 なんていらんわ! とかいうつもりはないです。
というか、むしろ普及してくれた方が嬉しいです。
でも、実際の現在の普及率を考えると、
「あー、そういうことできるんだ」と思って試した人が
「できねーじゃんかYO!」となるのは必至なので
別物扱いしておいた方が妥当なんでは、と。
0056デフォルトの名無しさんNGNG
質問スレではあげ足取りの定番になってる感もあるしなー
0057デフォルトの名無しさんNGNG
>>55-56
本当はC99スレを立てるのが良いと思うけど
ただでさえC関連スレは乱立してるから
反発の方が多そうなので現状維持で仕方ないかと…
0058デフォルトの名無しさんNGNG
>>57
もー立ってたりして。寂れてるけど。
http://pc2.2ch.net/test/read.cgi/tech/1044351696/l50
0059デフォルトの名無しさんNGNG
「『ビル・ゲイツ』と『ビル・ジョイ』ってどっちが強いの?」
0060デフォルトの名無しさんNGNG
struct a{
char A1;
char A2[3];
int A3;
}A;

struct b{
char B1;
char B2[3];
int B3;
}B;
上記のように複数個の構造体があったとして
同じファイルにバイナリでライトしたいのですが
いかようにすればよろしいのでしょうか?
引数の記述方法がよくわからずコマっております。
御教授お願い致します。
0061デフォルトの名無しさんNGNG
メモリの内容なら"wb"付きfopenでオープンした
ストリームにfwriteで書き込める。
0062デフォルトの名無しさんNGNG
C99が型チェックに厳しいなら使ってみたい気もする
006360NGNG
>>61サソ
アリガ�d
質問のしかたが悪かったでし、、、
構造体を丸ごとドカンと
書きこみたいのっす。
スイマソン
再度の御教授を〜
0064デフォルトの名無しさんNGNG
windowsXPでCやるのはどうやったらいいんでしょう?
コンパイラは、gccっていうのをどうやって入手するか分かりません。
borlandのなんとか55っていうのはできたけど、.exeになったけど、
ひらくと、有効なwin32アプリケーションではないって言われて実行できません。
0065デフォルトの名無しさんNGNG
struct {
 char c;
 int i;
} a;

int main()
{
 fwrite(&a, sizeof(a), stdout);
 return 0;
}
0066デフォルトの名無しさんNGNG
C99って使っている人多いですかね?
0067デフォルトの名無しさんNGNG
http://www.agemasukudasai.com/bloom/
0068デフォルトの名無しさんNGNG
>>64
ボーランドのなんとか55で
何をやったらそうなった?
0069デフォルトの名無しさんNGNG
Borland C++ Compiler 5.5
0070デフォルトの名無しさんNGNG
>>68
すみません。できました。意味も無くobjふぁいるにilink32施してました。
でもなんでobjとか出てくるんですか?
0071デフォルトの名無しさんNGNG
分割コンパイル
0072デフォルトの名無しさんNGNG
関数に渡す引数の型の種類によってその型を使用する処理を
行う関数を作りたいんですが、そんなことできますか?
0073デフォルトの名無しさんNGNG
template <typename T>
void func(T& t)
{
//...
}

void func(wchar_t* pt)
{
//...
}
0074デフォルトの名無しさんNGNG
>>72
C++で関数の多重定義を使え。
もしくはvoid *で渡しておき、パラメータで切り替える。

void func(void *p, int i)
{
double d;

switch (i) {
case 1:
d = *(double *)p;
break;
]
}
0075デフォルトの名無しさんNGNG
>>73
スレ違い
0076デフォルトの名無しさんNGNG
おーなるほど。
これ以外のうまい方法はないんでしょうか?
あとC++はできないんで、Cでお願いします・・
0077デフォルトの名無しさんNGNG
ばーか!気合で何とかしろ
0078デフォルトの名無しさんNGNG
>>76
ないから関数名に型名を付加しろ。
C++の関数のオーバーロードも内部では同じようなことをしている。
0079デフォルトの名無しさんNGNG
>>76よ
>>74に答えがあるぞ。
0080デフォルトの名無しさんNGNG
>>79
> これ以外のうまい方法はないんでしょうか?
0081デフォルトの名無しさんNGNG
>>76
別にC++の全ての機能を使わなければならないというわけじゃないでしょ。
C++の機能はオーバーロードだけ使って、あとはCの機能だけで書けばいいでしょ。

それとも、C++コンパイラがないとか??
0082デフォルトの名無しさんNGNG
typedef enum { TYPE_CHAR., TYPE_INT, TYPE_LONG ... } VTYPE;

void func(VTYPE vt, ...)
{
 va_list arg;
 va_start(arg, vt);

 switch (vt)
 {
 case TYPE_CHAR.:
  ...
 }

 va_end(arg);
}
008376NGNG
ありがとうございます。
色々試してみます
0084デフォルトの名無しさんNGNG
悪いことはいわないから妙なことせずに
関数名の違う関数を用意しる。

#define で展開してもいいが。
0085デフォルトの名無しさんNGNG
int swap0(int *pa0,int *pb0){

int t;

t=*pa0;
*pa0=*pb0;
*pb0=t;

}

すいません、これって何をしているのですか?
0086デフォルトの名無しさんNGNG
>>85
swap()の名前そのままの通りの事をしている。
*pa0と*pb0が指すintの値を交換している。
0087デフォルトの名無しさんNGNG
>>85
関数の方は void にすべきだと思う。
0088デフォルトの名無しさんNGNG
>>87
関数の値は〜
の間違い(;´Д`)
008985NGNG
>>86,87
ありがとうございました!
0090デフォルトの名無しさんNGNG
http://www.cyberconnect2.jp/hack/frame.htmlあらしてみろよ
0091デフォルトの名無しさんNGNG
普通unionを使うものだと思ってたが。

typedef struct {
 enum {INT, FLOAT} type;
 union {
  int i;
  float f;
 } v;
} giko_t;

void sii(giko_t g) {
 switch (g.type) {
 case INT:
   :

0092デフォルトの名無しさんNGNG
>>88
それを言うなら「関数の型は」ではないかと。
#っていうか、関数の値って何さ。void型には値はないっしょや。
0093デフォルトの名無しさんNGNG
>>92
そうとも言う。




スマンそれが正解。どっから方が出てきたのか自分でも不思議だったんだが
型と変換しようとしてミスったんだな…。
0094デフォルトの名無しさんNGNG
void * 型ってどういうときに使うのかよくわかってないのですが、
>>74みたいに使うのが普通の使い方なのでしょうか?
0095デフォルトの名無しさんNGNG
>>94
あくまでおれの考えだが、>>74みたいなコードはよくないと思う。
Cにはきっちりとunionという機能があるわけだから。
キャストで解決するのは最小限にすべきだとおれは考える。

んで、void *ってのは型はわからんがとにかくポインタを渡したいときに使う。
具体的にはmallocなんかいい例だ。mallocは言われたとおりの大きさのメモリを
確保してその先頭のポインタを返す関数だが、そのメモリの領域が何の型であるか
というのは事前に(malloc作成時に)は決められない。こういうときにvoid *を使う。
0096デフォルトの名無しさんNGNG
ほかにはmem系関数がよい例だね。
str系関数と違って渡すポインタがchar *とは限らないから、void *にしておかないと
コンパイル時に警告が出てしまう。
0097デフォルトの名無しさんNGNG
>>95
>>74そのままではないが、不特定の型を取り扱う場合
unionだとdoubleに合わせることになって困ることも多い。
なので、>>74は(そう言う場合には)妥当解だと思う。

それにしても、
void と void * は別の語にするべきだったんじゃないかと思うんだけどね。
009895NGNG
>>97
うん、もちろん特別な場合というのももちろんあってそうする必然性があれば、
>>74のように書くのも一向に構わないと思ってる。ああいう風にしか書けない
場合もあったりするしね。

>void と void * は別の語にするべきだったんじゃないかと思うんだけどね。
staticもそうだな。可視性と記憶クラスの指定には別の語を割り当てるべきだった。
0099デフォルトの名無しさんNGNG
voidはともかく、staticは変えるべきだったよな・・・
書く場所によって全然効果が違うじゃないか。
片方はinternにすべきだったと思う。
0100デフォルトの名無しさんNGNG
void=型がない void *=指す型がない

だからいいんじゃない?
0101デフォルトの名無しさんNGNG
すんごいショボイ話ですが
stdio
atdlib
malloc
extern
strcomp
これらをなんて読んでますか?俺は↓のように読んでますが・・・
stdio.h → ストゥディオエイチ
stdlib.h → スタドリブエイチ
malloc → マロック
extern → イクスターン
strcomp → ストルコンプ
間違ってると恥ずかしいのであまり他の人には言えません。
■ このスレッドは過去ログ倉庫に格納されています