[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 18:47 / Filesize : 239 KB / Number-of Response : 921
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C統合・質問スレッド



1 名前:デフォルトの名無しさん mailto:sage [03/11/09 15:37]
いろんなスレが乱立していますが、統合的なスレッドがないので立てました。
質問もOK

関連スレ
C#って死滅する理由がないよね! Part4
pc2.2ch.net/test/read.cgi/tech/1042464104/
C#最強伝説
pc2.2ch.net/test/read.cgi/tech/1061208152/
C#とJava、どっちをおぼえればいいの?
pc2.2ch.net/test/read.cgi/tech/1006715468/
C#Builder Professional 質問箱
pc2.2ch.net/test/read.cgi/tech/1062433418/

関連リンク
dir.yahoo.co.jp/Computers_and_Internet/Software/Programming_Tools/Programming_Languages/C_Sharp/


116 名前:デフォルトの名無しさん mailto:sage [04/05/08 16:39]
質問です。
キーボードの入力をscanfとかじゃなくて押された瞬間処理をする関数ってないですか?
HSPのstick見たいな奴・・・

117 名前:デフォルトの名無しさん mailto:sage [04/05/08 16:43]
>>116
<conio.h>があれば、その中のgetche

118 名前:デフォルトの名無しさん mailto:sage [04/05/08 23:28]
>117
具体的な使い方がワカリマセン
(´・ω・`)ヘルプで命令が見つからない・・・

119 名前:デフォルトの名無しさん mailto:sage [04/05/09 04:56]
        ∧_∧∩   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ´∀`)/  < 先生!やっぱ無限ループですね!
  __ / /   /     \________
  \ ⊂ノ ̄ ̄ ̄ ̄ ̄\
  ||\           \   
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄||
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||

120 名前:デフォルトの名無しさん mailto:sage [04/05/09 07:38]
>>116
それは、windowsアプリにしたほうが楽。

121 名前:116 mailto:sage [04/05/09 15:03]
キーボードが打たれたときだけ反応して
打たれてなかったらそのままプログラムを進める。
打たれたキーによって処理をさせる。(Iが押されたら〜とか)

そのやり方がワカリマセン
getcheだと打たれるまでとまるので・・・
教えてクレクレ厨でスマソ 吊ってきまつΛ||Λ

122 名前:デフォルトの名無しさん mailto:sage [04/05/10 17:08]
# include <conio.h>
int c;
if(kbhit()) /* キーが押下されている */
    c = getch();
else
    /* 何か別のことをする */;

123 名前:116 mailto:sage [04/05/10 19:33]
if(kbhit())のkbhitは何なんでしょうか・・・?
あとiが押されたらiが押されたと分かるようにするにはどうしたら・・・?(´・ω・`)

124 名前:デフォルトの名無しさん mailto:sage [04/05/10 20:26]
>>123
kbhitはキーボードのキーが押されているかを判定する関数。
iが押されたらgetch()から'i'が返る。
if(kbhit() && getch() == 'i') /* 今iが押されている */



125 名前:116 mailto:sage [04/05/10 21:33]
>124
おお とてもわかりやすいです。
アリがd。ニューソクで47氏逮捕祭りか・・・

126 名前:116 mailto:sage [04/05/11 23:21]
また迷惑かけに来ました。

if(kbhit()&&getch()=='a'){printf("a");}else if(kbhit()&&getch()=='b'){printf("b");}

上のようにするとキーボードの処理が遅くなります。どうしたら?

127 名前:デフォルトの名無しさん mailto:sage [04/05/12 00:50]
kbhitとgetchを複数回使わなければ良いのでは?

128 名前:116 [04/05/12 19:49]
>127
それ以外のやり方しらないんで・・・

129 名前:デフォルトの名無しさん mailto:sage [04/05/12 20:34]
// なにをしたいのか知らないが、これで参考になるだろ。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define END_CODE '\n'
const char *EndCodeName = "Enter";

int dispatch(int event){
  switch(event){
  case END_CODE:
    printf("プログラムを終了します。");
    exit(0);
  default:
    printf("[0x%02x] が押された。\n", event); 
  }
  return 0;
}

main(){
  int prev,cur;
  printf(" ********************\nキーコード表示。\n[%s]で終了します。\n********************\n", EndCodeName); 
  for(;;){
    if(!kbhit()) continue;
    if(prev != (cur = getch())){
      dispatch(cur);
      prev = cur;
    }
  }
}

130 名前:116 mailto:sage [04/05/12 20:53]
>129

ありがとうございます。
とても参考になりました。

131 名前:デフォルトの名無しさん mailto:sage [04/05/12 21:14]
C言語で、JPEG画像ファイルを表示させようとした場合、どんなコントロールがありますか?
VBだったら、ピクチャーボックスなるものがあるけど、Cで扱えるコントロールにはどんなのがありますか。
当然ウィンドウ上で表示させるということです。

132 名前:デフォルトの名無しさん [04/05/12 21:41]
すいません、初歩的な質問なのですが

char型の変数って何バイトまで値を格納できますか?

ファイルから読んだ値を格納したいのですが、どの程度の大きさまで可能なのか分かりません

133 名前:デフォルトの名無しさん mailto:sage [04/05/12 21:50]
char自身は1バイト。

配列ならば・・・・・・自分で試してみろ。
char 2ch[10000000] // About 10M byte
とか。エラーが出たら駄目ー。出なかったらOK−


134 名前:デフォルトの名無しさん mailto:sage [04/05/12 22:46]
エラトステネスの篩を作ろうと思ったんですが、
配列の個数を1000000000000(1兆)個にしようとすると
うまくコンパイルできません。
配列の数をメモリの許す限り使いたい場合はどうしたらよいのですか?
とりあえず、配列の数が1兆個あれば問題ないんです。



135 名前:デフォルトの名無しさん [04/05/12 22:53]
>>134
1TByte以上のメモリを積んでください。
1.0005TByteくらいのメモリであれば問題無いと思います。

136 名前:134 mailto:sage [04/05/12 23:07]
>>135
そんなの無理です。
計算してみたら私の言っていることが
いかに無理難題だったかがわかりました。
配列の数をなるべく多くするにはどうしたらいいのですか?
メモリの許す限り配列を並べる方法はありますか?

137 名前:デフォルトの名無しさん [04/05/13 00:40]
mallocとかでは駄目なのかい?

138 名前:デフォルトの名無しさん mailto:sage [04/05/13 02:00]
size_tが32bitだと無理

139 名前:デフォルトの名無しさん mailto:sage [04/05/13 13:23]
>>136
Windows2000(XP)だったら2GBが限界だよ。64bitのOSに乗り換えて1TB以上の
ディスクアレイを組んでやるしかない。

140 名前:デフォルトの名無しさん mailto:sage [04/05/13 13:41]
「配列の個数」ではなく「配列のサイズ」だろ
配列のサイズの上限は言語処理系のマニュアルに書いてあるはず
#メモリ上に乗らないデータを扱うというのは大昔からあるテーマだな

141 名前:136 mailto:sage [04/05/13 18:40]
[10000][10000]で一億をやってみたいと思います。
[10000]だったら
9592個の素数を入れれましたので

142 名前:デフォルトの名無しさん mailto:sage [04/05/13 19:33]
配列じゃなくてリストを使ってみたらどうだろう?
動的にメモリを確保していくので可能な限り最大の値まで求められるし、
非素数と判明したノードはすぐに開放 or 再利用できるから、無駄も少ないだろ。

「エラトステネスのふるい」では無いかもしれないが。

143 名前:デフォルトの名無しさん [04/05/13 20:20]
あぁ、そんなことしなくてもいいじゃん。
動的に確保して、配列満杯になったら、全てファイルに書き出し。
んでまたそれ以上の数字について調べる。

これだったら、[10000]くらいでいいじゃん。
ただし処理が多少遅くなる可能性もあるけど。

これだったら、パソコンが扱える最大の数字まで、計算できるじゃん。

144 名前:デフォルトの名無しさん mailto:sage [04/05/15 00:39]
ファイルをセーブして、そのファイルに変数を保存しておく方法(int型など)は無いですか?
講座などを見てもchar型くらいしかのってないので。
char型から整数を取り出すしかないですかね?



145 名前:デフォルトの名無しさん mailto:sage [04/05/15 00:48]
fread&fwrite

146 名前:デフォルトの名無しさん mailto:sage [04/05/15 01:25]
fscanf&fprintfでもいい。

147 名前:144 mailto:sage [04/05/15 02:00]
う〜ん fprintfとfscanfを使っても保存できるんですが
保存した変数の取り出し方がワカリマセン。ちゃんと保存できているのかも怪しいです。


148 名前:デフォルトの名無しさん mailto:sage [04/05/15 02:14]
データ形式は自分で責任持ってください。

149 名前:デフォルトの名無しさん mailto:sage [04/05/16 16:22]

ポインタへのポインタはどうやるんですか?

150 名前:デフォルトの名無しさん mailto:sage [04/05/17 02:27]
>>149
ポインタへのポインタをつくります。

151 名前:デフォルトの名無しさん mailto:sage [04/05/19 16:18]
do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=63
にはってある二つのソースは

sosuu[]=2;の配列の中の数字が違うのですが、
sosuu[0]を最初の配列として使用すると
最後に素数を表示するときになって
2番目の素数は1311096です。
と表示されてしまいます。
なぜなんでしょうか?

152 名前:151 [04/05/19 18:29]
すいません、どなたもいらっしゃらないようなので
あげますね

153 名前:デフォルトの名無しさん mailto:sage [04/05/19 18:53]
>>152
sosuu[1]に何も値を代入してないから。
> sosuu[n+1] = sosuukouho;

> m += 1;
の間に
printf("n = %d, m = %d, sosuu[%d] = %d\n", n, m, n+1, sosuu[n+1]);
を入れて確認してみ

154 名前:151 mailto:sage [04/05/19 19:13]
>>153さんわかりました。

if((sosuukouho % sosuu[n] != 0) && (n == m)) の部分の

(n==m)ここが原因だったんですね

(n==m-1)としたら直りました。

ここが影響したので
printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m]); を

printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m-1]);

になおして無事意図したとおりに動くようになりました。
ありがとうございました。





155 名前:デフォルトの名無しさん [04/05/20 21:33]
なーんでこのすれは閑古鳥がないてんだよう

156 名前:デフォルトの名無しさん mailto:sage [04/05/20 21:43]
>>155
それは、このスレの存在自体が「間違い」だから。
正しくはスレタイをミスっただけなんだが、そのミスが致命的なミスだったわけで・・・。

157 名前:155 mailto:sage [04/05/20 21:52]
んじゃ、お気に入りから削除しますね

158 名前:149 mailto:sage [04/05/21 19:48]
二次元配列のポインタの宣言しかたがわかりません

char a[2][2],*ptr,*ptr2

ここから自分なりに考えてもコンパイルエラーになります。


159 名前:デフォルトの名無しさん mailto:sage [04/05/21 20:21]
>>158
char (*pa22c)[2][2]; /* 2次元配列へのポインタ */
char *a22pc[2][2]; /* ポインタの2次元配列 */

160 名前:デフォルトの名無しさん mailto:sage [04/05/22 17:11]
>>159

dクス

161 名前:160 mailto:sage [04/05/25 22:10]
またまたポインタの質問です

*(pointa + (指定一次元添字 * 二次元要素数) + 指定二次元添字) 某C講座から

上の指定一次元添字と二次元要素数というのはどういう意味なんでしょうか?
指定一次元添字が指定する一次元の配列番号なんですか?

日本語おかしいです。スミマセン

162 名前:デフォルトの名無しさん mailto:sage [04/05/25 23:18]
type array[N][M];
type *p = array;
array[4][12] = *(p + 4 * N + 12);


163 名前:デフォルトの名無しさん mailto:sage [04/05/25 23:19]
>>161

pointa[N * M]; /* pointa[N][M]; みたいに使う */
/* ... */
  a = pointa[i * M + j]; /* a = pointa[i][j]の代わり */

なので、
i : 指定一次元添字
j : 指定二次元添字
M : 二次元要素数
と思われます。

164 名前:160 mailto:sage [04/05/25 23:30]
M+jとするのはなぜなんでしょうか?



165 名前:デフォルトの名無しさん mailto:sage [04/05/26 22:58]
>>164
M + jじゃなくて
(i * M)そこに + j している感じで

166 名前:160 [04/05/27 20:14]
#include <stdio.h>
#include <conio.h>

int main()
{
int *ptr;
int a[2][2],b;

*ptr = a;

a[1][2]=5;

b=*ptr[1*2+1];

printf("%d",b);
getch();
}

167 名前:160 mailto:sage [04/05/27 20:15]
アァ・・・
まちがえて送信してしまった・・・
166のソースがコンパイルできません

int ( *)[2]型はint型に変換できない
無効な間接参照

の二つです。

168 名前:デフォルトの名無しさん mailto:sage [04/05/28 11:26]
*p: int型
a: int(*)[2]型
b: int型
*p[1*2+1]: int*型

169 名前:デフォルトの名無しさん mailto:sage [04/05/28 20:10]
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから、*を適用できない。
無効な間接参照とはこのことだろう。

170 名前:デフォルトの名無しさん mailto:sage [04/05/28 20:11]
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから*を適用できない。
無効な間接参照とはこのことだろう。

171 名前:160 mailto:sage [04/05/28 20:35]
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?




172 名前:160 mailto:sage [04/05/28 20:36]
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?




173 名前:160 mailto:sage [04/05/28 20:39]
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?

174 名前:デフォルトの名無しさん mailto:sage [04/05/28 21:13]
>>166 のソースを正しくとこうなるんだよね
(便宜上aは初期化させてくれ)
#include <stdio.h>
#include <conio.h>
int main()
{
int (*ptr)[2], a[2][2] = {{0, 1}, {2, 3}},b;

ptr = a;

a[1][2]=5;

b=ptr[1][1];

printf("%d",b);
getch();
}





175 名前:160 mailto:sage [04/05/28 23:52]
なんか3回も書き込んである・・・orz

>>174
おお ありがとうございます。

(*ptr)[2]は*ptrの変数配列ですか?

ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?

176 名前:デフォルトの名無しさん mailto:sage [04/05/29 16:03]
>>175
最適化でどっちも同じになるだろ

177 名前:デフォルトの名無しさん mailto:sage [04/05/29 19:54]
>>175
>(*ptr)[2]は*ptrの変数配列ですか?
>>159参照。
ptrはint[2]へのポインタ。

>ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?
この二つは全く意味が違う。
後者はptr[3]と同じで、型はintの配列。

178 名前:177 mailto:sage [04/05/29 20:42]
>>160が理解していないと思われることを補足しておく。
必要がなかったらスルーしてくれ。

まず、二次元配列は、配列の配列である。つまり、
int arr[2][3];
という宣言があるとき、arr[0]やarr[1]はintの配列で、要素数は3である。
ここで、配列はその先頭要素へのポインタに変換されることを思い出して欲しい。
だから、arrはarr[0]へのポインタに変換される。arr[0]はintの配列だから、
変換された後のarrはintの配列へのポインタ、つまり型はint (*)[3]である。
int (*)[3]型の変数pを宣言するにはint (*p)[3];と書く。これが、>>174
ptr = a;
が正しくコンパイルされる理由だ。

次に、配列の要素を指しているポインタに整数nを足すと、
はじめに指していた要素のn個先の要素を指すポインタができる。
これは、その配列が、配列への配列(二次元配列)であっても同じことである。
だから、>>174の例で*(ptr+(1*2)+1)と書くと、ptrの三番目の要素が得られる。
実際にはptrには二つの要素しかないから、この結果は意味を成さない。

最後に、配列はメモリ上で、各要素が隙間なく並べられる。たとえば、
int arr[2][3];
と宣言した場合、arr[0]とarr[1]が隙間なく並べられる。
このとき、arr[0]やarr[1]も配列だから、これらの各要素も隙間なく並べられる。結果的に、
arr[0][0] arr[0][1] arr[0][2] arr[1][0] arr[1][1] arr[1][2]
と並ぶことになる。
この並びを一次元配列とみなしてアクセスするのが、>>161の方法である。
このとき、一次元配列の各要素はintであることに注意してくれ。
これを実現するには、添え字を一次元配列用に計算してarr[0][0]へのポインタに足せば良い。
arrはarr[0]へのポインタであってarr[0][0]へのポインタではないから、そのままでは使えない。
そこで、素直に&arr[0][0]と書くか、(int *)arrと強引にキャストする。

179 名前:177 mailto:sage [04/05/29 20:52]
#include <stdio.h>
#include <conio.h>
int main()
{
int *p, a[2][2] = {{0, 1}, {2, 3}},b;

p = &a[0][0]; /* p = (int *)a;と書いても同じ */

a[1][1] = 5; /* a[1][2]は配列の外 */

b = *(p + (1*2+1)); /* b = p[1*2+1]; と書いても同じ */

printf("%d",b);
getch();
}

>>160がやりたかったのはこれかな?

180 名前:160 mailto:sage [04/05/29 21:43]
>177-179
おお 分かりやすい説明ありがとうございます。
p=&arr[0][0]の方法は2次元以上の配列だと楽ですね。



181 名前:デフォルトの名無しさん [04/06/09 15:05]
調べても分からなかったんで教えてください。

イーサネット接続するときに connect()を使うわけですが
これのタイムアウト値を設定したいときどうすればよいのでしょうか。
settimeoutとか見かけたけど使い方が分かりませんでした。


182 名前:デフォルトの名無しさん [04/06/29 16:56]
連立方程式を解くプログラムを教えて下さい〜!

ax+by+c=0
dx+ey+f=0

のときx,yをとくような奴です。

C言語でおながいいいい

183 名前:デフォルトの名無しさん mailto:sage [04/06/29 17:07]
>>182 代数・幾何学の勉強しなさい。逆行列を作れば簡単に解ける。
理系の大学生なら授業でやると思われ。


184 名前:デフォルトの名無しさん mailto:sage [04/07/04 01:11]
初めまして。色々と試しているのですが、プログラムが作れません。
よろしければ、教えてください。
「チーム研究発表会の評価を集計するプログラムを作る。3人以内の学生メンバーで構成される4
チームが発表会に参加する。評価は調査内容、提案内容、発表資料、発表方法の4つのポイントで
行われ、各々のチームに対して合計点数が付けられる。」
1.評価に必要なデータを全て含むようなチームを表す構造体を作成し、typedefで名前を付けよ。
  変数名はできる限り理解しやすいものを考え、各チームのメンバーのフルネームと学籍番号も
  分かるようにすること。また、各チームにはチーム番号をつけよ。

という物なのですが、ここまで指定されていたら作れるのが当たりまえなのかもしれませんが、初心者
なものでほぼ手につきません。よろしければ、ヒント的なものでもかまわないので教えてください。



185 名前:デフォルトの名無しさん mailto:sage [04/07/04 10:03]
>>184

ヒント
こちらで聞いたほうがいいでしょう。

ぼるじょあがC/C++の宿題を片づけますYO! 25代目
pc5.2ch.net/test/read.cgi/tech/1087929711/l50

書き込む前に
pc5.2ch.net/test/read.cgi/tech/1087929711/1
を読むことをお忘れなく。

186 名前:184 mailto:sage [04/07/04 19:32]
>>185
ありがとうございます。そちらの方で聞いてみます。

187 名前:デフォルトの名無しさん mailto:sage [04/07/09 16:53]
質問です.
循環リストの長所と短所と、どのようなアプリケーションに
循環リストは向いているかを教えてください。

188 名前:デフォルトの名無しさん [04/10/09 22:28:31]
すみません。

C言語 dos で
msecの時間を表示したいのですが、
どのようにすればよいでしょうか?

よろしくお願いします。

189 名前:デフォルトの名無しさん [04/10/09 23:07:53]
>>1
> いろんなスレが乱立していますが、
お前が言うことではないな。


190 名前:デフォルトの名無しさん mailto:sage [04/10/15 19:31:51]
C/C++ でフリーのライブラリとかでperl相当の正規表現処理
とかテキスト処理とかしてくれるようなものって存在しませんか?
あるいはperlのスクリプトをそのまま使えるような・・・
フリーで無ければ有料でも構いませんが。


191 名前:190 mailto:age [04/10/15 19:32:10]
age忘れました

192 名前:デフォルトの名無しさん mailto:sage [04/10/15 19:59:47]
>>190
C++ならboostでも使っとけ

193 名前:190 mailto:sage [04/10/15 20:34:31]
紹介thx.

194 名前:デフォルトの名無しさん [04/11/09 21:13:39]
LSI C-86 超簡単セットアップの  
Setlsic.batを実行したんですが
LSI C-86試食版をF:\LSIC86にセットアップします。
と表示されてドライブを指定できません。
何ででしょうか?



195 名前:デフォルトの名無しさん mailto:sage [04/11/09 21:23:34]
>>194
そのSetlsic.batとやらを直接書き換えてみたらどうだ?

196 名前:デフォルトの名無しさん [04/11/11 15:25:53]
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?

197 名前:デフォルトの名無しさん [04/11/11 18:02:27]
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?

198 名前:デフォルトの名無しさん mailto:sage [04/11/11 18:05:37]
C++の方のオプションで出来たような希ガス

199 名前:デフォルトの名無しさん mailto:sage [04/11/11 18:11:01]
>>196
今まともに使えるのはないっぽい。

200 名前:196 mailto:sage [04/11/11 18:38:21]
>>198
gccのman見たけど見つからなかった。
どのコンパイラで使えるかご存知でしたら教えていただけませんか?

>>199
一部機能が使えない(関数のオーバーロードとか)くらいなら問題ないんですが、
プリプロセスの結果が怪しい、ってことでしょうか?

201 名前:デフォルトの名無しさん mailto:sage [04/11/11 19:44:30]
>>197
>普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?

普通、そういうのは「パーサー」と呼ばず「トランスレータ」と呼ぶ。
後は自分で調べれ。


202 名前:デフォルトの名無しさん mailto:sage [04/11/11 20:00:30]
gccの環境ってどこでDLすればいいんでしょうか?
ググッたけれど見つからないので(´・ω・`)

203 名前:デフォルトの名無しさん mailto:sage [04/11/11 20:07:28]
>>202
Windows?Linux?


204 名前:202 mailto:sage [04/11/11 20:18:24]
Windowsです。
そろそろLinuxに移行しようと思ってるのでLinuxも教えていただければ幸いです。



205 名前:デフォルトの名無しさん mailto:sage [04/11/11 20:23:10]
>>204
WindowsならCygwinをインストールするときにgccを指定できるし、
MinGWというフリー環境もある。
Linuxだと大抵のディストリビューションに付属しているので特に問題はないと思う。
debianなどのディストリビューションでは初めから入っているわけではないが、
apt-getなどのツールで一発でインストールできる場合がほとんどなので、
Linuxの場合は開発環境に悩まされる事はほとんどないと思うよ。

206 名前:デフォルトの名無しさん mailto:sage [04/11/11 20:25:56]
>>205
即レスありがとうございます。
Cygwinを入れたときに指定していなかったらしいのでMinGWを使ってみます。

207 名前:デフォルトの名無しさん mailto:sage [04/11/11 20:29:32]
>>206
もう一度Cygwinのセットアッププログラムを実行して、gccを指定すれば
そのままインストールできるけれど。
再インストールではなく追加インストールになる。

208 名前:デフォルトの名無しさん mailto:sage [04/11/11 20:44:11]
>>207
MinWinでどれをDLしてよいかわからなかったのでCygwinのほうでやってみます。
とりあえずパッケージ選択時に全部選択しました。疲れたorz

209 名前:デフォルトの名無しさん mailto:sage [04/11/11 20:54:30]
Cygwinはデフォルトでgcc3.3.3だから、3.4入れたければ設定替えないとね

210 名前:196 mailto:sage [04/11/11 21:25:17]
>>201
ありがとうございまつ。

探したけどもう全然ないんですね(´・ω・`)

211 名前:デフォルトの名無しさん mailto:sage [04/11/11 22:41:57]
>>210
Objective-Cならトランスレーターがあるが・・・

212 名前:デフォルトの名無しさん mailto:sage [04/11/11 23:02:50]
プログラマさんからみて、unixのソースコードってどうなんでしょう?
インターフェース関係ぐらいしか読んでないのでわかりませんが、
やっぱりプロはすごい。

213 名前:デフォルトの名無しさん [04/11/12 21:39:10]
#include <stdio.h>

main ()
{
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

if(res == 1)
ans = 'A';
else
ans = 'B';

printf("%cコースを選択しました。\n",res);

return 0;
}


って本に書いてたんでコンパイルしようとしたら
ansに代入した値は使われていない。
と表示されてコンパイルできません。
なんででしょうか?

214 名前:デフォルトの名無しさん mailto:sage [04/11/12 21:47:16]
printf("%cコースを選択しました。\n",res);
 ↓
printf("%cコースを選択しました。\n",ans);



215 名前:213 mailto:sage [04/11/12 22:25:31]
>>214
ありがとうございます。
できました。
これで先に進めます。

216 名前:215 [04/11/12 22:31:43]
すいません。
次のsampleもできません。
内容は
#include <stdio.h>

main ()
[
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

ans = (res==1) ? 'A' : 'B';

printf("%cコースを選択しました。\n",ans);

return 0;
}

というのものですがどこが変なんでしょうか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<239KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef