C言語なら、俺に聞け! lt;50gt;
■ このスレッドは過去ログ倉庫に格納されています
0001鼻から悪魔でますた
NGNGむしろ質問する前に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/
0234デフォルトの名無しさん
NGNG用意してたの?
0235デフォルトの名無しさん
NGNGでもコンパイル作業くらいはわかっただろ?
もしかしてプログラミングなのに実習がなかったのか?^^;
0236231
NGNGリロードのタイミングがよかっただけかも(w
0237186
NGNG担当の先生が答えを教えてくれないんですよ…、
自分で勉強しろ、こんぐらい雑魚でもわかる筈だろ…って。
でも私はプログラミングの経験が足りないから、シンプルなところでつまづいて
しまって…、簡単なんだけど、なかなか気づかない、一言で言えば私の勉強不足なんです。
0238デフォルトの名無しさん
NGNG勉強に関しては自分で勉強するてのは原則ではあるんだが…
質問しにいって答えなかったとかならちと問題ありかも
0239186
NGNG先生と乖離している部分があって…先生は簡単なことだから説明を省略してしまったようです。
#defineなんて簡単なことだし。すばらしい先生なんですけど。
でも、確かに簡単なことなんだけどバカのボクにはわからなくって。
家に帰ってコンパイルしてみたらエラーでるし、今日試験だし・・・・
正直パニクッたからこのスレにきました。
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG>>237 私
>>239 ボク
0243デフォルトの名無しさん
NGNG観察するなよw
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG何で extern "C" が必要かを知らないクチかな?
オーバーロード、名前空間という C++ の機能を考えれば
分かると思うよん。
VC++ なら次のコードをビルドしてみれ。
void foo() { }
void foo(int) { }
namespace hoge { void foo(); }
extern "C" void foo(int, int) { }
void main() { foo(); foo(0); hoge::foo(); foo(0, 0); }
多分こんなリンクエラーが出ると思う。
Test.obj : error LNK2019: 未解決の外部シンボル _foo が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl hoge::foo(void)" (?foo@hoge@@YAXXZ) が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl foo(int)" (?foo@@YAXH@Z) が関数 _main で参照されました。
Test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl foo(void)" (?foo@@YAXXZ) が関数 _main で参照されました。
オブジェクトファイルとかの中では実際には
extern "C" foo → _foo
hoge::foo() → ?foo@hoge@@YAXXZ
foo() → ?foo@@YAXXZ
foo(int) → ?foo@@YAXH@Z
とか名前が変わってるわけ。(変わり方はコンパイラ依存)
extern "C" のある時(Cを使った時)とそうじゃないときじゃ
全然名前の変わり方が違うっしょ?
C++ だと引数の型や名前空間の情報も名前に含めるの。
これが同じ名前の関数を複数定義できる仕組みでもあるわけだけど。
extern "C" を使わないで何とかするんじゃなくて、
extern "C" を使って何とかする方向で考えるべきだと思われ。
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGおおむねわかったぜジョニー
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG勿論、解った上で聞いてるんだが…。
そうですか、無理ですか。
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGこれ以上に簡潔な書き方ってありますでしょうか??暇な人いたら見てやってください。
#include <stdio.h>
int uclid(int,int);
void main()
{
int a,b;
while (1){
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
if (a <= 0 || b <= 0) break;
if (a >= b) printf("%d\n",uclid(a,b));
else printf("%d\n",uclid(b,a));
}
}
int uclid(int a,int b)
{
int n;
while (a%b != 0){n=a; a=b; b=n%b;}
return (b);
}
0253デフォルトの名無しさん
NGNGとかやって使えばいいじゃん。
? とか @ が識別子に使えないならコンパイラを改造してさ。
0254デフォルトの名無しさん
NGNGvoid main()と宣言してうまくいかないわけがないと思う。なぜなら main()から戻る代わりに、exit()を呼んでいるから。だいたい今使っ ているO/Sはプログラムのexit値/戻り値を無視する。
A:
main()から戻ってくるかどうかは関係ないし、そのステータスを見る かどうかも関係ない。問題はmain()の宣言がおかしいと、呼び出し側 (実行時のスタートアップのコード)がmain()を正しく呼び出すことす らできないかもしれないことにある。
君が使っているO/Sは終了時のステータスを無視して、void main()で もうまく動くかもしれない。しかし、このやりかたは移植性が低いし、 正しくもない。ボク女(;´Д`)ハァハァ
0255デフォルトの名無しさん
NGNGただ呼ぶだけじゃだめだな。
コンパイラがthisをどう渡すかとか、vtblの扱い方とか知らないと。
0256デフォルトの名無しさん
NGNGボク娘は確かに萌えるが、何故に?
0257デフォルトの名無しさん
NGNGたとえmainからでもちゃんとreturnしたいね。
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNG構造化の基本を無視してる
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNGが、面倒な時は使う。
0265デフォルトの名無しさん
NGNG面倒じゃないときはどうしている?
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG使ったことないよ。
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNGまさかvoid mainだから?
0271デフォルトの名無しさん
NGNG一度は使ってみたいけど
機会がない
0272デフォルトの名無しさん
NGNGvoid usage()
{
fprintf(stderr, "cmd: [-H | -L ] [-Aoutd] [file...]\n");
exit(1);
}
などは典型的な例だが見たことないか?
mallocに失敗した場合にできることが殆どないプログラムの
場合は、単にエラーを吐いて死ぬようなmallocラッパーを使うことも
多いだろう。
0273デフォルトの名無しさん
NGNGなるほど、
でも、やっぱり使わないなぁ…
所詮は好みの問題か。
他にはcoolな使い方無いかな?
0274デフォルトの名無しさん
NGNGuclid()の仕様が……
大小判断くらい関数内でしてもいいんでないかい?
それと、私ならscanf()は使わない。
どうでもいいけど、
while (1)
と
return (b);
がもにょる。
0275デフォルトの名無しさん
NGNGint main(int argc, char **argv)
{
/* 処理 */
if (/* 条件 */) {
usage(argv[0]);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
0276デフォルトの名無しさん
NGNGmainにいないときは?
0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNGreturn usage(/*argv[0]もあるかな*/);
かな。
argv[0]はウィンドズだと変になるからねぇ。
0279デフォルトの名無しさん
NGNGCOMをまなびなはれ
0280デフォルトの名無しさん
NGNGmain() 以外のいろんな箇所から、使用法を表示して直ちに終了という処理が
必要になるなら、プログラム設計をやり直した方がいい。
0281デフォルトの名無しさん
NGNGint uclid(int a,int b){
int n;
while(a%b){n=a; a=b; b=n%b;}
return b;
}
void main(){
int a,b;
while (1){
printf("a="); scanf("%d",&a);
printf("b="); scanf("%d",&b);
if (a <= 0 || b <= 0) break;
printf("%d\n",uclid( a<b?b:a, a<b?a:b));
}}
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG予め多く確保しておいた方がいいのか?
0284デフォルトの名無しさん
NGNG関数の定義の仕方は解るのですが、同じような感じにやったらいいのでしょうか?
初心者な質問ですみません…
0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNG測定すればいい。それが「十分に早い」かどうかは、そのプログラムに対する
性能要求・環境・mallocの実装の質etc...に依存するので、一般的な回答は
有り得ない。
それでも敢えて云うならば、平均的なC++プログラムではそれこそ山のように
new/deleteが暗黙に使用される(自分で呼んだつもりはなくとも、stringや
vectorのような一般的な道具を使うたびに当然暗黙には使用される訳だ)
ことを考えれば、いわゆるHosted environmentにおいてCを使っている分には、
mallocの性能なんぞ気にする必要はなかろう。
0287デフォルトの名無しさん
NGNG五個の配列を合計して割って平均値を出したいのですがこのソースでできますか?今コンパイル環境がないのでよろしくお願いします
int test[5]={100,90,80,70,60}
int count,avg;
avg = 0;
for(count=0; count<=4; count++){
avg=avg+test[count];}
printf(゙%d\n゙,avg/5);
0288デフォルトの名無しさん
NGNG出来ない。
0289デフォルトの名無しさん
NGNG1行目の;が(ry
avg(ry)sum(ry
ダブルコーテーションが(ry
mai(ry
0290デフォルトの名無しさん
NGNG○の部分にはなにをいれればいいです?
検索のキーワードのヒントだけでもいいです。
#include<stdio.h>
int main()
{
unsigned int i;
for(i = 'A'; i <= 'Z'; i++)
{
printf("%X, %○\n",i, i);
}
return 0;
}
0291デフォルトの名無しさん
NGNGカコイイ!
0292デフォルトの名無しさん
NGNGつまり、テスト中に携帯からカンニング中ということですか?
0293デフォルトの名無しさん
NGNGマック使いカコイイ!
それかX68kか?
0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNGfor(i='A'; i<='Z'; i++)
{
printf("%04xH, %c%c\n", i, i>>1, i&0xff);
}
マックだよね?
0298デフォルトの名無しさん
NGNGひっくり返すってのは1バイト目と2バイト目をひっくり返すってこと?
0299デフォルトの名無しさん
NGNG少なくとも俺が知っている範疇のC言語ではシングルクオートによる
文字リテラルではchar型しか扱えないんだから、その中に
ワイド文字がブチこんである時点でよく分からない。
本当はL'A'
と書いてあったのか?
だとすると、エンディアン変換を適当に行って1バイトずつ出力しても
思ったとおりの結果にはならない可能性が高いよ。ワイド文字の
エンコーディング方式は規格上は何も定義されていないが、
多くの処理系はそれをUCS2/UCF16/UTF32などでエンコードするからね。
0300デフォルトの名無しさん
NGNGすまんUTF16の間違いね。もちろん。
0301デフォルトの名無しさん
NGNG少なくともSunOSでは扱える。
Versionが4の頃と5になってからではバイト順が変わってしまった気がするけど。
0302デフォルトの名無しさん
NGNGint main(){
unsigned int i, z, w;
i=*(unsigned int *)"A\0\0";
w=(i&0xff)<<8;
i=(i>>8)|w;
z=*(unsigned int *)"Z\0\0";
w=(z&0xff)<<8;
z=(z>>8)|w;
for(; i<=z; i++)
{
printf("%02x%02xH, %c%c\n", i>>8, i&0xff, i>>8, i&0xff);
}
}
携帯だから確認できん、だれか試して。
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNGforの時にヤバイのよ。
0305デフォルトの名無しさん
NGNGi += 256;
でいいと思ったり。
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGお、できた。
ありがとう。
0308デフォルトの名無しさん
NGNGメヂャーな国で使うとこってあるの?
スペーンとかフランスとか、、、
0309デフォルトの名無しさん
NGNGなったよね?
0310デフォルトの名無しさん
NGNG北欧各国で使うんでない?
0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNGガッ
0317デフォルトの名無しさん
NGNGint hage[3000];
という配列の hage[1901]からhage[2030]までを値を代入して初期化したいのですが、
hage[]={ 1,2,3,4,5,6,7,8,9 ・・・・・};
みたいなふうにして、1901から値を代入することってできますか。
方法があれば教えてください。
今は、別配列にいったん入れてからコピーしています。
0318デフォルトの名無しさん
NGNG>>317
入れる値がばらばら(規則性がない)なら一つずつ入れるかあなたの言うようにmemcpyなどで別配列からコピーするしかない。
0319デフォルトの名無しさん
NGNG年を入れるつもりなのだな。
それなら、int hage[130]で宣言して、i+1901で参照すればいいのでは?
0320317
NGNG入れる値は規則性は、厳密に言えば無くはないんですが、複雑で別プログラムで計算したものを
代入しています。
やっぱり方法はないんですか。
配列は最終的には、3000全部使う予定なので>>319さんの方法ではだめなんです。
int hage[1900]=[1,2,3,4,5,6,・・・];
みたいに書くことができれば理想なんですが。
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNGそのうちに習得できます
0323デフォルトの名無しさん
NGNG大体1週間くらいあれば十分かな。
0324デフォルトの名無しさん
NGNGこの週末だけで習得可能
0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNGコンパイラが耐えられるのであれば、何らかのプログラムで
初期化する式(コード)を生成して、それをソースにするという手はある。
PerlとかRubyとかawkとかいったスクリプト言語系ならお手軽だろう。
0327デフォルトの名無しさん
NGNG宿題スレに行け
0328デフォルトの名無しさん
NGNGint a[3000];
struct{
int b[1900];
int c[2100]={1,2,3,3,5,6};
};
};
ってのは無理なのですか?
0329デフォルトの名無しさん
NGNG名前の無い構造体って作れたっけ?
0330デフォルトの名無しさん
NGNG問題はそこでなく、配列を途中から初期化することで、、
0331デフォルトの名無しさん
NGNG・書式が間違っている。
・1900+2100は4000だろう。計算はできるだけ自分でするな。
・こうすりゃできるけどやっぱり面倒だぞ。
#define SEC1LEN 1900
#define SEC2LEN 1100
union {
struct {
int sec1[SEC1LEN];
int sec2[SEC2LEN];
} sec;
int all[SEC1LEN + SEC2LEN];
} data = {{{0,}, {1, 2, 3, 4, 5,}}};
■ このスレッドは過去ログ倉庫に格納されています