C言語なら俺に聞け(入門編)Part 63
■ このスレッドは過去ログ倉庫に格納されています
★前スレ
C言語なら俺に聞け(入門編)Part 62
http://pc12.2ch.net/test/read.cgi/tech/1269517734/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1267775473/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0153デフォルトの名無しさん
2010/04/15(木) 17:55:43メモリの0番地をリードしようとするから
0154デフォルトの名無しさん
2010/04/15(木) 17:55:47やりたいのはCです。
0155デフォルトの名無しさん
2010/04/15(木) 17:58:170156デフォルトの名無しさん
2010/04/15(木) 17:59:15Visual C++ 2008 Express Edition
0157デフォルトの名無しさん
2010/04/15(木) 18:00:330158デフォルトの名無しさん
2010/04/15(木) 18:01:09初学者にはちょっと敷居が高いんじゃないか?
0159デフォルトの名無しさん
2010/04/15(木) 18:02:57慣れればVC++で良いけど。エディタはサクラエディタに慣れると他のが使いにくくなった
0160デフォルトの名無しさん
2010/04/15(木) 18:04:44NULLポインタを渡したら(null)みたいに表示されるものと勘違いしていました. 馬鹿でした
0161デフォルトの名無しさん
2010/04/15(木) 18:05:110162デフォルトの名無しさん
2010/04/15(木) 18:38:08まだ英語版しかない
0163デフォルトの名無しさん
2010/04/15(木) 20:02:52GPIO.F5 = ~GPIO.F5;の「= ~」ってどうゆう意味ですか?
よろしくお願いします
0164デフォルトの名無しさん
2010/04/15(木) 20:08:410165デフォルトの名無しさん
2010/04/15(木) 20:09:17~は論理否定の演算子なので、~GPIO.F5はF5ビットを反転した値になる。
それをGPIO.F5へ代入している。
つまり、F5ビットが今の状態から反転するってこと。
0166デフォルトの名無しさん
2010/04/15(木) 20:11:20有難うございました
0167デフォルトの名無しさん
2010/04/15(木) 20:55:49論理否定と言ったら「!」のことを指す
「~」はビット反転とかビット否定とか1の補数とか
0168デフォルトの名無しさん
2010/04/15(木) 21:04:300169デフォルトの名無しさん
2010/04/15(木) 21:38:480170デフォルトの名無しさん
2010/04/15(木) 21:46:090172デフォルトの名無しさん
2010/04/15(木) 22:04:540173デフォルトの名無しさん
2010/04/15(木) 22:07:530174デフォルトの名無しさん
2010/04/15(木) 22:19:040175デフォルトの名無しさん
2010/04/15(木) 22:19:340176デフォルトの名無しさん
2010/04/15(木) 22:21:230177デフォルトの名無しさん
2010/04/15(木) 22:28:460178デフォルトの名無しさん
2010/04/15(木) 22:34:390179デフォルトの名無しさん
2010/04/16(金) 00:13:520180デフォルトの名無しさん
2010/04/16(金) 00:16:000181デフォルトの名無しさん
2010/04/16(金) 00:18:540182デフォルトの名無しさん
2010/04/16(金) 00:37:46int func1();
int func2();
int main(){
cat(func, 1)(); // -> func1();
cat(func, 2)(); // -> func2();
return 0;
}
0183デフォルトの名無しさん
2010/04/16(金) 08:07:21「それ以外」というのは main() がint を返さない場合のことですよね。
すなわち main() の型が実装によっていろいろかわることも許容しているではないでしょうか?
0184デフォルトの名無しさん
2010/04/16(金) 08:12:22main 関数の型を構成する要素(>>73,92参照)のうち、まず戻り値の型は int であるとし、
それ以外の要素について(つまり引数リストの型などについて)は実装依存であるということ。
0185デフォルトの名無しさん
2010/04/16(金) 12:31:24そうなんだ。
どうもありがとうございます。
では #defineの#は何ですか?
0186デフォルトの名無しさん
2010/04/16(金) 13:02:280187デフォルトの名無しさん
2010/04/16(金) 18:50:00#defineの#はディレクティブといふ。
C言語のソースファイルのコードはそのままコンパイラに食わせる訳じゃなくて、
プリプロセスという課程を経てプリプロセッサが吐き出したコードをコンパイラに食わせている。
プリプロセッサに命令を与える(認識させる)文字がディレクティブ(#)。
注意しなきゃいけないのは、マクロ中の#と先頭に付いている#は全く別であるということだ。
ディレクティブとしての#は先頭に付いている。
例えば一番簡単な例が
#include"xxxx.h"
#includeはプリプロセッサにxxxx.hっていうヘッダファイルを読み込んで、
それそのものをコピペする
もし君がgccを使用しているならgcc -Eでコンパイルしてみるといい。
プリプロセス済みのソースコードが画面に吐き出されるハズだ。
命令には以下のようなものがある。
#include,#define,#if(#ifdef)+#else+#endif
#ifの条件判定には式を、#ifdefの場合は予め定義の何かを使う場合が多い。
後他に#pragmaってのがあるがこれは俺は使ったことが無いので分からない。
0188デフォルトの名無しさん
2010/04/16(金) 18:56:09文字リテラル化する奴だな
#define foo(arg) #arg
foo(hogehoge) → "hogehoge"
0189デフォルトの名無しさん
2010/04/16(金) 19:01:34コード、コンパイラ、プリプロセッサ、ヘンダファイルってなんですか?
ディレクティブってエクスプローラーで見た時のフォルダのことですよね、それはわかります。
でもC言語との関係がわかりません。
gccでなくpcを使ってます、osはもちろんwindowsです。ですから試せません。
すみませんがよろしくお願いします。
0190デフォルトの名無しさん
2010/04/16(金) 19:03:21ありがとうございます。
0191デフォルトの名無しさん
2010/04/16(金) 19:35:28,.――――-、
ヽ / ̄ ̄ ̄`ヽ、 勇者トンファーパーマン惨状
| | (・)。(・)|
| |@_,.--、_,> 俺が着たからにはもう色々と駄目だ
ヽヽ___ノ
/:::::::::::::::::l /77
/::::::::::i:i:::::::i,../ / |
l:::/::::::::i:i:::、:::/ / |
l;;ノ:::::::::::::::l l;.,.,.! |
/::::::::::::::::l/ / 冂
/:::::::;へ:::::::l~ |ヌ|
/:::::/´ ヽ:::l .|ヌ|
.〔:::::l l:::l 凵
ヽ;;;> \;;>
0192デフォルトの名無しさん
2010/04/16(金) 20:06:080193デフォルトの名無しさん
2010/04/16(金) 20:29:35int main(void)
{
long i=0;
for (i=1;i>=0xFFFFFFFFFFFFFFF;i++){}
return 0;
}
(8) : error C2143: 構文エラー : ';' が '型' の前にありません。
(9) : error C2065: 'i' : 定義されていない識別子です。
(9) : error C2065: 'i' : 定義されていない識別子です。
(9) : error C2065: 'i' : 定義されていない識別子です。
どこがおかしいのか分かりません
たすけてくだしあ
0194193
2010/04/16(金) 20:33:11(8)は4行目です
0195デフォルトの名無しさん
2010/04/16(金) 20:55:01普通に動いたよ。
long int じゃないとだめとかかな?
0196デフォルトの名無しさん
2010/04/16(金) 20:59:20うちのGCCはWARNINGは出るがコンパイル自体は通ってる。
環境に何か問題あるんじゃまいか。
他にエラーとか、警告とか出てないのか?
0197デフォルトの名無しさん
2010/04/16(金) 21:17:41うちのコンパイラでもエラーはでないな。
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
06.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:06.exe
06.obj
0198デフォルトの名無しさん
2010/04/16(金) 21:19:18otherwise を「引数リストの型などについて」の意味と解釈した理由を教えていただけませんか?
0199デフォルトの名無しさん
2010/04/16(金) 21:27:17{
/* 行番号から、ここに何かあると予想 */
long i=0;
0200デフォルトの名無しさん
2010/04/16(金) 21:43:23(5) : error C2143: 構文エラー : ';' が '型' の前にありません。
(6) : error C2065: 'i' : 定義されていない識別子です。
(6) : error C2065: 'i' : 定義されていない識別子です。
(6) : error C2065: 'i' : 定義されていない識別子です。
こうならできたけどなぁ
0201デフォルトの名無しさん
2010/04/16(金) 21:48:36ほう、ディレクティブっていうのか。
10年C使ってて初めて知ったぜ
0202デフォルトの名無しさん
2010/04/16(金) 21:55:43何で最初に
(4) : error C3872: '0x3000': この文字を識別子で使用することはできません
これを書かなかったんだ……
何処かに全角文字使ってる。
多分long i=0;の辺り
0203デフォルトの名無しさん
2010/04/16(金) 22:03:404-7行目あたりに、他のコード(そこだけなら動く)があるんじゃないか?
で、今度は、それを消した時に、全角文字が残って、
違うエラーがでたんじゃないのか?
0204デフォルトの名無しさん
2010/04/16(金) 22:06:28まぎらわしくてすまん。
同じメッセージを出したくて、つい。
0205デフォルトの名無しさん
2010/04/16(金) 22:18:35全角文字がある可能性もあるし、人間には見えない文字が紛れ込んでいる可能性だってある。
或いはコンパイラが賢すぎてfor内の条件が1度も満たされない事に気付いてexeを生成するのを拒否してるのかもしれん。
0206デフォルトの名無しさん
2010/04/16(金) 22:22:09同じメッセージを出したいなら、こんな感じ。
#include <stdio.h>
int main(void)
{
char buf[] = "Hello, world!";
printf( "%s\n", buf );
long j=0;
for (i=1;i>=0xFFFFFFFFFFFFFFF;i++){}
return 0;
}
0207193
2010/04/16(金) 22:22:49再起動したら直りました
0208デフォルトの名無しさん
2010/04/16(金) 22:25:02long j=0; // ×
long i=0; // ○
0209デフォルトの名無しさん
2010/04/16(金) 22:29:16ああ、その手があったかw
0210デフォルトの名無しさん
2010/04/16(金) 22:30:27んなアホな…
0211デフォルトの名無しさん
2010/04/17(土) 13:17:06> 後他に#pragmaってのがあるがこれは俺は使ったことが無いので分からない。
これは何ですか?
0212デフォルトの名無しさん
2010/04/17(土) 13:19:250213デフォルトの名無しさん
2010/04/17(土) 23:47:08とりあえずここまで作ったのですが…
#include <stdio.h>
int main(void) {
int x[9][2] = {
{ 10000, 0 },{ 5000, 0 },{ 1000, 0 },{ 500, 0 },{ 50, 0 },{ 10, 0 },{ 5, 0 },{ 1, 0 }
} ;
int n,k ;
printf("6桁の数字を入力してください \n");
scanf("%d",&n);
printf("%d円は \n",n);
for( k=0 ; k<9 ; k++ ){
x[k][1] = n/x[k][0] ;
n = n%x[k][0] ;
}
for( k=0 ; k<3 ; k++ ){
printf("%d円札は%d枚 \n", x[k][0],x[k][1] );
}
for( k=3 ; k<9 ; k++ ){
printf("%d円玉は%d枚 \n", x[k][0],x[k][1] );
}
return 0;
}
0214デフォルトの名無しさん
2010/04/17(土) 23:50:540215デフォルトの名無しさん
2010/04/17(土) 23:57:42っ {100, 0},
0216デフォルトの名無しさん
2010/04/18(日) 00:02:44つ k<8
0217デフォルトの名無しさん
2010/04/18(日) 00:07:22その結果0で割ってるためにエラー。
0218デフォルトの名無しさん
2010/04/18(日) 00:12:54なんか中途半端なかんじなんだよね
0219デフォルトの名無しさん
2010/04/18(日) 00:14:15unsigned long num;
unsigned char a, b, c, d, e, f, g, h, i;
num = strtoul(argv[1], NULL, 0);
a = num / 10000;
num %= 10000;
b = num / 5000;
num %= 5000;
c = num / 2000;
num %= 2000;
d = num / 1000;
num %= 1000;
e = num / 500;
num %= 500;
f = num / 100;
num %= 100;
g = num / 50;
num %= 50;
h = num / 10;
num %= 10;
i = num / 5;
num %= 5;
fprintf(stdout, "%2u%2u%2u%2u%2u%2u%2u%2u%2u%2u", a, b, c, d, e, f, g, h, i, num);
return EXIT_SUCCESS;
}
0220デフォルトの名無しさん
2010/04/18(日) 00:14:24侮れんものがあるぞ?
0221デフォルトの名無しさん
2010/04/18(日) 00:14:38無理して使わなくてもいいのにw
0222デフォルトの名無しさん
2010/04/18(日) 00:14:490223デフォルトの名無しさん
2010/04/18(日) 00:16:290224デフォルトの名無しさん
2010/04/18(日) 00:19:580225デフォルトの名無しさん
2010/04/18(日) 00:20:31MASMなんかの繰り返し展開マクロ同等の機能がプリプロセッサに欲しいことがある
gcc はプリプロセッサ段で可変引数使えるんだっけ?
0226デフォルトの名無しさん
2010/04/18(日) 00:27:280227デフォルトの名無しさん
2010/04/18(日) 00:29:09CRC32 を C からアセンブリ言語に直しても 20% くらいしか速度は改善されなかった記憶が。
昨今のハードの進展を考えるとアセンブリのソースは保守性が悪すぎる。
マジレス失礼。
0228デフォルトの名無しさん
2010/04/18(日) 00:29:36それはCコンパイラに限ったこと?
他のコンパイラでも同じ事がいえるのなら特段Cのアドバンテージではないね
0229デフォルトの名無しさん
2010/04/18(日) 00:30:07確かに C で書く必然性はないわけで、お好きなように。
0230213
2010/04/18(日) 00:30:46まさか100円を忘れていたとは…
もっと注意して確認したいと思います
0231デフォルトの名無しさん
2010/04/18(日) 00:32:47べっべつにあんたの為なんかじゃないんだからねっ
0232デフォルトの名無しさん
2010/04/18(日) 00:42:23Cに限ったことじゃないが、Cは歴史が長いだけに最適化もすさまじい。
0233デフォルトの名無しさん
2010/04/18(日) 00:46:44一番すごいの?
それならちょっと嬉しい
0234デフォルトの名無しさん
2010/04/18(日) 00:58:010235デフォルトの名無しさん
2010/04/18(日) 01:30:000236デフォルトの名無しさん
2010/04/18(日) 01:39:28一番ってこたあないかもしれないけど、
現実をみて考えると相当なものがあるだろう。
C言語では微妙に不便を強いられる分、
ちゃんと見返りもあるんだねぇ
0237デフォルトの名無しさん
2010/04/18(日) 07:56:41ソートなどはC++に敵わない罠
0238デフォルトの名無しさん
2010/04/18(日) 07:59:270239デフォルトの名無しさん
2010/04/18(日) 11:04:46あの変態文法で涙出そうになったけど。
ただC言語でもコンパイラ拡張でinlineを受け付けるものも
あるらしいから、それなら何とか・・・。
0240デフォルトの名無しさん
2010/04/18(日) 13:20:010241デフォルトの名無しさん
2010/04/18(日) 13:26:10qsortがインライン化されていないこともあるが、基本的なデータ構造を扱う関数群がないとか欠陥が多すぎ。
俺queueとか、my_listとかどんだけ無駄に再生産されてるんだよ。
Cのコミュニティーは本当に無能しかいない。
0242デフォルトの名無しさん
2010/04/18(日) 13:41:47ないとコレクション関係はつかえねーな。
0243デフォルトの名無しさん
2010/04/18(日) 13:56:20まあ、普通は void* でなんとかするんだろうけど
0244デフォルトの名無しさん
2010/04/18(日) 15:40:04void * で書くのは間接呼び出しが発生して効率が落ちる。
0245デフォルトの名無しさん
2010/04/18(日) 18:08:460246デフォルトの名無しさん
2010/04/18(日) 18:23:10笑ってしまった
0247デフォルトの名無しさん
2010/04/18(日) 19:50:180248デフォルトの名無しさん
2010/04/18(日) 22:36:22> Cの仕様の範囲内でqsortの比較の最適化を期待するにはinlineしかないだろ
inlineはCの仕様じゃないって知らないのかお前はwwwwww
0249デフォルトの名無しさん
2010/04/18(日) 22:50:15これはなんですか?釣りでもなく本当にわかりません・・・。
0250デフォルトの名無しさん
2010/04/18(日) 23:05:09「C99 inline」でググるんだ。
0251デフォルトの名無しさん
2010/04/18(日) 23:08:24inlineってC++からの輸入じゃね?
0252デフォルトの名無しさん
2010/04/18(日) 23:11:41インライン関数。
インライン関数とは、凄く簡単に説明すると
void func(void){
printf("test\n");
}
int main(int argc,char** argv){
func();
return 0;
}
↑のようなフザケタコードをコンパイラが
スマートに書き換える機能で、↑の糞コードのような場合
int main(int argc,char** argv){
printf("test\n");
return 0;
}
みたいな感じに書き直してくれる。
■ このスレッドは過去ログ倉庫に格納されています