1 :
デフォルトの名無しさん :
2009/09/16(水) 23:09:42 BE:331348875-DIA(320721)
Hello worldから教えてください先生 マジレスきぼん
#include <stdio.h> int main(){ puts("Hello, World!"); return 0; } これで完璧じゃない?
int main(void)推奨
>4 お前は俺か 心の中で思っていた
#include <stdio.h> main(){return puts(&"Hello, World!"[0]);}
# #include <stdio.h> int f(char *p){ return *p && (f(p+1),putchar(*p)); } int main(){ return f("!dlroW ,olleH"); }
#include <stdio.h> int f(char *p){ return *p && (f(p+1),putchar(*p)); } int main(){ return f("\n!dlroW ,olleH"); }
#error HelloWorld
@echo Hello, World.
13 :
デフォルトの名無しさん :2009/09/17(木) 19:46:14
他のレスの趣旨がわかっていない間抜けが一人いるな。
いつもそういう自己紹介してるのかい?
あんたみたいな人が相手のときはそうかもね。
燃料が少なすぎでし
>>8 はなるほどって思える。
>>9 と
>>10 はなんじゃこりゃwwわけわかんねwwwうぇっうぇっwwwてなる。
わかれよw
>return *p && (f(p+1),putchar(*p)); これって常に左から判定されると決まってるの? putchar('A') && putchar('B'); これが BA と出力される可能性って無いの?
決まってる 無い 詳しくは副作用完了点でぐぐる
#include <stdio.h> int main(void) { char aisatu[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, '\0'}; fputs(aisatu, stdout); return 0; }
たまに>19みたいな馬鹿が沸くよな。 ちょっと調べてからレスすればいいのにね。
#include <stdio.h> int f(const char *s) { return *s && putchar(*s) && f(s+1); } int main(void) { return f(&0["Hellow, world!\n"]); } /* orz */
w
#include <stdio.h> static char const hello[] = "Hello world!\n"; int main() { for (unsigned ic = 0; ic < sizeof(hello) - 1; ++ic) putchar(ic[hello]); return 0; }
#include <stdio.h> int f(const char *s) { return (void)(*s && f(s-1)), putchar(*s); } #define hello "\000Hello, world!\n" int main(void) { return f(&(sizeof(hello)/sizeof(0[hello])-2)[hello]); } #undef hello /* orz */
#include <stdio.h> int main(void) { char key[] = "0B2A422D2A232A232A42B24A63A3A2A4A32A22A2322A4A41"; char *p = key; int i, c, b = 1; while(*p) { c = 0; for(i = 0; i < 8; i++) { if(*p == '0') { if(!*++p) break; b = !b; } c <<= 1; c += b; if((*p)-- == 'A') *p = '0'; if(*p >= 'A') b = !b; } if(c) putchar(c); } putchar('\n'); return 0; }
char s1[4] = { 0, '0', '0', 0 }; char *p = "\000"; これって同じ内容になるの?
>>28 同じ内容が何を意味しているのか分からないけど、
おそらく君の考えている通り同じです。
まあ型が違うとか後者は変更不可能だとかちょっとした差はあるけどもね。
前スレ埋まってからここ使えよ
>>29 "\000"
は { 000, '\0' } にならないか?
"\xabcdefghi"
こういうのはどうなるわけ?
どこで区切るの?
char *p = "\0""00"; こうすれば良いんじゃね?
35 :
デフォルトの名無しさん :2009/09/18(金) 01:06:54
char s[]="abcde"; if (s[2] = 'c'){}; ifのとこで不正な代入とかコンパイルエラー出るんだけど 意味わからん
>>35 比較したいんじゃねーのか?
っていうコンパイラの気遣い
環境と警告レベル書いてみ
とぅんとぅるぴん
どうせエラーじゃないオチだろ
サンクス ==って書かないといけなかったんだな
いけないわけじゃない。
んで、結局これは strlen("\012345678") いくつになるのよ?
7
mallocは"エムアロック"と読むのであって断じて"マロック"は許されない。 mallocを"マロック"って読むというのならじゃあcallocのことは"キャロック"と読むのかと。 mallocのことは”マロック"と読んでおいてcallocのことは"シーアロック"と読むような そんな統一感のない人き方は軽蔑されるべきだ。同様にcharを"キャラ"と読むならintは"インテ"と読まないなら市ね!!
45 :
デフォルトの名無しさん :2009/09/18(金) 02:15:55
callocはカロックだろ。 もちろん、mallocはマロックだ。
キャラとイントでサーセン
イントと読む人はcharをなんと発音すれば?キャル?
チャー
どいつもこいつもバカばっか
そうだな そしてお前がその筆頭
52 :
デフォルトの名無しさん :2009/09/18(金) 07:14:51
キャラ配列に直接代入するのとメモコピー使うのとってどっちが速いん
メモコピー
>>52 一概に言えない。そもそも気にするほど差が出ないかもしれない。
>>42 八進文字定数は一バイトを表す最長一致なので、一般的には3桁取得する。
従って、"\012""345678"と解釈されるので>43の言うとおり7になると考えられる。
つまり、>47は試してみもしない間抜け。
>>32 16進文字定数の場合はより貪欲な最長一致が行なわれるので、"\xabcdef""ghi"となる。
"\000" は "\0" と同じだよ。
>>54 の言っているとおりだけど。
だから、
const char *p = "\000";
std::cout << (int)p[0] << std::endl;
std::cout << (int)p[1] << std::endl;
std::cout << (int)p[2] << std::endl;
std::cout << (int)p[3] << std::endl;
p[2], p[3] を参照しても鼻から悪魔。
56 :
デフォルトの名無しさん :2009/09/18(金) 11:53:11
文字列から指定の1文字まで読み出す方法教えて
>>56 sscanf("abcxdef", "[^x]", & target)
CスレでC++の文法使っちゃう
>>55 のようなバカは一刻も早く死んで欲しい
>>59 それはスレの外でやったのを引用してもってきただけ。
引用だろうがスレ違いなのに、なに開き直ってんの?
62 :
33 :2009/09/18(金) 13:44:13
あ? もしかして元はと言えば俺が原因かw すまんな、最近はどうも息をするようにC++のコードを書いてしまう。 しっかし、俺が適当に書いたコードで喧嘩するなんて、 お前ら相当の暇人だな。
charをキャラと読む人は intをインテ macをマッキ と読んでいる。
呼んでない
gettimeofdayっていつカウンタが一周して0に戻りますか
計算すれば分かるんでない?
136年という計算結果になったが合ってる?
69 :
デフォルトの名無しさん :2009/09/18(金) 22:40:07
time_t による。
32bitならそうなんでない? 2100年ちょっとぐらいまでは大丈夫ってことかな
DOS画面出さずに実行することって出来ないの?
>>71 WinMainでWindow作らなけりゃいいんじゃない
73 :
デフォルトの名無しさん :2009/09/19(土) 11:05:28
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
75 :
デフォルトの名無しさん :2009/09/19(土) 16:58:00
char *p; p=strstr(s1,s2); p+5; strstrの戻り値アドレスに+5したいのにコンパイルエラーになる 「コードは効果を持たない」だとか
さんくす
78 :
デフォルトの名無しさん :2009/09/19(土) 17:36:59
全部丸ごと質問してしまおう char s[64]; p=strstr(s1,s2); p+=4; while(*p++!='1'){ memcpy(p2,p,1); p2++;} strstrで見つけた文字から5バイトずらしたとこから 文字「1」までを変数sに移したいんだけどうまくいかない
理がない 識別子sはなんだ s1, s2, pはなんだ pがNULLでないことは保証できるのか p2の型はなんだ s1に'1'があることは保証できるのか 何がやりたいんだ
p2ってなんだよ。
char s,s1,s2,*p,*p2
>>70 yearは1900年からの起算だから2036年であぼーんする
83 :
デフォルトの名無しさん :2009/09/19(土) 18:08:04
そもそも、timeを経過秒数で表そうなんて 誰が考えたんだよ。
if (char *first = strstr(s1, s2)) { first += 4; if (char *last = strchr(first, '1')) { ++last; memcpy(p2, first, last-first); p2[last-first] = '\0'; } }
>>79 まぁ某スレのシモネタクソコテ大学生じゃああるまいし
そこまで理に重んじなくてもいいんじゃないか??
>>85 アドレス値って減算とかできるのか
色々勉強になったありがとう
last と first が同じ配列の一部か最後の要素のひとつ後である場合のみね。
void *p = -1; とかできるんだなきもい え?できない?
ポインタは基本的に正の値のみ
まあポインタ値を整数型に変換したとき (なんらかの整数型に変換できることは規格で定められている) それを符号付きで扱うか符合なしで扱うかは自由だけどな。 また、符号付き整数として扱った場合に 負の値を持つ数値になるかどうかは、処理系やOS次第。 例えばDOSの頃の16bitアドレスがマイナスになるのなんてざらだった。 ていうか、スタック上のアドレスはほぼ全てマイナスの処理系があったり。 今でも、Win32のINVALID_HANDLE_VALUEやPOSIXのMAP_FAILEDのように 「無効なポインタ値」として、NULLの他に特定のマイナス値をキャストして使う場合もある。 (「特定のありえない値」がマイナスとは限らないが)
書き方変えればいいのか? void *p = ((void*) 1) - ((void*) 2);
ポインタ + 数値 や ポインタ - 数値 はポインタ型だけど、 ポインタ - ポインタ はポインタ型ではなくて数値型(ptrdiff_t)になるよ。
void*って計算できたっけ?
void* に対する演算は許されないよ。
whileの、条件文の中で、a=bとか代入出来無いの? おそらく不正な代入とエラーが出る。
エラーはでない よくできたコンパイラであれば警告される
解決方法は無いの?
while ( (a = b) )
100 :
デフォルトの名無しさん :2009/09/19(土) 22:14:33
バイナリファイルをそのまま、アドレスの20000hとかにリンクしたいのだけど、やりかたを教えてください。
まず、リンクする、とはどういう意味か 日本人にもわかるように説明してください
>>100 出直してきてください。
なんか他の言語の経験者ですか?
自分の脳内だけで補完するのはご遠慮いただきたい。
103 :
デフォルトの名無しさん :2009/09/19(土) 22:34:47
説明不足ですいません。 バイナリーファイルをc言語形式のデータに変換後、コンパイルしてリンク すると時間がかかるので、バイナリファイルを直接、20000hにリンカで配置 できないかと思いまして質問してみました。
>>99 それでも駄目だった
コンパイラ変えるしかないか
そのコンパイラは標準に準拠していない コンパイラ名とそのバージョンを教えてくれ、避けるようにするから
while ( (a = b) != 0 )
>>96 警告をエラーにするオプションつけてるんじゃないの?
なんだかよく分からないけどコンパイラはBorland C++ Compiler5.5 あとウィンドウズ用のgccってMinGWってやつでいいの?
VC++が無難
いくらBCCでも()で括れば警告消えるはずだが。
while (a = b, a) でも良い。若干意味は変わるけど。
>>109 確かにそうですね。。。
ありがとうございました。
>>82 あれあれ、なんかしらんが1970年と勘違いしてた
訂正ありがとう
すいません
ビルドはうまく行くんですけども入力が通らないんです
http://uproda.2ch-library.com/lib170895.c.shtml 試験の成績(ABCDF)を入力してください
入力を終了するには、EOF文字を入力してくださ
A
成績を表す文字が正しくありません
もう一度入力してください
成績を表す文字が正しくありません
もう一度入力してください
^Z
成績の集計結果
Aの数→0
Bの数→0
Cの数→0
Dの数→0
Fの数→0
続行するには何かキーを押してください . . .
このようになってしまいます
すいません自己解決しました
>>117 すいませんでした
入力が受け付けられなかった理由は
12行目の while( ( grade = getchar() != EOF)) { が原因で、
while( ( grade = getchar() ) != EOF) { と書くはずのところを間違えてしまったからでした
>>103 使ってるリンカによる。
GNUリンカではリンカスクリプト書けば大抵のことはできたけど。
>>103 gcc なら objcopy を使えばいい。
Windowsアプリなら、リソースにするのが常道。
cygwin環境で数値計算を行っています。 0除算の箇所を見つけたいので、signalやsigactionで SIGFPEを捕捉したいと考えているんですが、うまくいきません。 #include<signal.h> struct sigaction act; void sigaction_sigfpe(int signum, siginfo_t *info, void *foo) { printf("si_addr=%p\n",info->si_addr); } int main() { double a, b, c, d; siginfo_t info; act.sa_sigaction = sigaction_sigfpe; act.sa_flags = SA_SIGINFO; sigaction(SIGFPE, &act, NULL); a = 100.0; b = 10.0; c = 1.0; d = 0.0; for(i = 0; i < 10; i++){ a = c / d; printf("a=%lf,b=%lf,c=%lf,d=%lf\n", a, b, c, d); } raise(SIGFPE); return 0; } sigactionの使い方がおかしいのか、シグナルの考え方を根本的に間違えているのか、 どなたかご教示ください。
>>122 標準的な環境(IEEE754)では、浮動小数点演算のゼロ除算は
Inf(無限大)になって、CPUトラップは上がらない。
よってシグナルも送られない。
CPUやOSが対応していれば、この挙動を変えることが出来る
かもしれないが、cygwinに詳しくないので分からない
124 :
123 :2009/09/20(日) 09:02:50
削除の指示をしてないのに確保した領域が開放されたら困るだろw
>>125 アプリケーションレベルですか。OS レベルですか?
それによって正否がかわりますね。
>>128 MS-DOS の時代から、 malloc() したら最後、たとえ free() しても exit するまで他のプロセスからは使えないようですね。
ま、環境にもよりますが。
131 :
質問 :2009/09/20(日) 17:30:49
C言語でウイルスは作れますか? できればバックドア型がいいです。
そんなのでいいならApacheを無断でインスコして起動させておけばいいです
まだここは夏休みか
C言語で3Dの女の子は作れますか? できれば胸は大きい方がいいです。
モデリングソフトと3Dエンジンと物理エンジン作れば。
136 :
122 :2009/09/20(日) 22:29:34
>>123 教えていただいたコードを埋め込むとシグナルがあがりました。
ただ、参照先が英語な上に、アセンブラも入っているため、まだ自分には理解できそうにないです。
やろうとしていることは、ガリガリとprintfでも埋め込んでいけば事足りるので、シグナルは断念します。
説明と参考サイトまで探していただいて、ありがとうございました。
>>135 教えていただいた通りにやったらできました。ありがとうございました。
天才あらわる
139 :
デフォルトの名無しさん :2009/09/20(日) 23:10:24
やっぱり画面から出てこないお(´;ω;`)
擬似的なものでいいのならGeForce 3D Visionあたりを試してみればいいんじゃないだろうか
コンテナとか使いたいんだが、C++には行きたくない。 そんな俺を導いてくれる神はいないか?
人工知能も組まないと、ただのダッチワイフじゃないか
>>141 CSTL というものもあるし
自作してもいいんじゃないかな
少数点第二位で変数を切り捨てたいのですが簡単な方法を教えて下さい. float p = {123.456789}; printf("少数点第二位切り捨て後%f",p);
>>144 p の値によっては悲惨なことになるけど
#include <stdio.h>
#include <math.h>
int main(void){
float p = 123.456789, q;
q=floor(p*100)/100;
printf("小数点第二位切り捨て後%.2f",q);
return 0;
}
もう一つ #include <stdio.h> #include <math.h> int main(void){ float p = 123.456789, q; q=p-fmodf(p, 0.01); printf("小数点第二位切り捨て後%.2f",q); return 0; }
148 :
デフォルトの名無しさん :2009/09/21(月) 09:39:15
sizeof(void*)とサイズが同じであることが保証された整数型って何かありますか?
149 :
デフォルトの名無しさん :2009/09/21(月) 10:07:17
>>148 #include <inttypes.h>
intptr_t
uintptr_t
150 :
デフォルトの名無しさん :2009/09/21(月) 10:16:49
int型の5をcharの5(x35)にするには?
>>150 int n = 5;
char c = '0' + n;
もしキャラ配列の3バイト以降が指定した文字列と一致したら〜 ってしたいときmemcpyで3つずらしたところから探すのとstrstrで検索するの どっちのほうが早いの?
>>152 環境による。速度や効率については実際に試すのが吉。
>>152 1行目はmemcmp(キャラ配列の3バイト, 指定した文字列, strlen(指定した文字列))と読めるのだけど、
なんでmemcpy()が出てきたりstrstr()が出てきたりするのか判らん。
一行目のその読みが違ってる可能性もあるわけだ。
strstrは分かるでしょう memcpyは3バイト以降をバッファにコピーして、それとあとでstrcmpなりmemcmpするんでしょう。もしくはtypo
strstr()で3バイト分の検査がどの程度の時間かかるのか見積もりがわからないけど 気にしたら負けレベル
#include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { printf("test"); return 0; } bcc コンパイルエラーになるんだけど サンプル引用したものなのに
>>158 #include <stdio.h>
を追加したら
環境によってはそれでコンパイルできるからなあ
コマンドまたはファイル名が違います.
-W
パラメータ’hInst’は一度も使用されてないだとか WinMainの引数全部に同じエラーが出る あと外部シンボル’_main’が未解決 だって
-Werrが付いてるんだ。殊勝な心がけだね
>>164 上のはエラーじゃなくてウォーニンだろ。
下のはコンパイルエラーじゃなくてリンクエラーだ。
それでどうやって解決するの?
-Wって何のかわからん これだけじゃ検索ヒットしない
>>169 コンパイラのマニュアルをどうぞ
っても-Wだけだとまた困りそうだけど
bcc32 [リターン]
まったくもう、なぜ
>>1 に目を通さないかね?
>C言語の*入門者*向け解説スレッドです。
>初心者、初級者の方は他の質問スレのほうが良いかもしれません。
ああやっとできた
回答者サンクス
>>172 スマソ
>リターン
-WだとWを検索対象から外す意味だぞ
-w
くだらない質問なんですが, Sleep(0.9)って可能でしょうか?
sleep(0.9)だったらコンパイラがエラーか警告吐くとおもうけど Sleep(0.9)だとわからないなぁ
その Sleep ってのが Win32API のことなら、引数は整数型だから、 その表記は単に Sleep(0); と見なされるだけだろ。 で、 Sleep(0) ってのは何も問題ないよ。 割り当てられた残り CPU 時間を打ち切ってシステムに制御を返すはず。
Sleep を時間待ちに使おうとしてるなら止めたほうがいいよ。 精度は低いし、そもそも設定するのは休止する最低限の時間であって 戻ってくる時間を指定できるわけじゃない。
じゃぁどうすればいい?
DWORD t = GetTickCount(); while (GetTickCount() - t < 1000);
183 :
177 :2009/09/21(月) 23:47:18
やはり0となるのですね.すっきりしました,ありがとうございます.
何か問題でも?
具体的に
sleep(n)でn秒以上止まることは保障されてるけれど
n+1秒以内に復帰するとかって保障されてる?
必要だったら
>>182 もしょうがないと思うが
>>182 にしたって、他のタスクが忙しくて実行が止まってるかもしれないんで保証されないのは同じだし。
作業用PCのHDD逝ったあああああああああああ
1発のwaitを正確に行うのは難しいが、 複数回の平均なら容易く制御できる。 t = GetTickCount(); while(1) { 何らかの処理; t += 900; Sleep(t - GetTickCount()); }
まず1ミリ秒のsleep()が平均(もしくは最悪)の待ち時間 hを計算しておく xミリ秒停止するなら,x-hミリ秒(もしくはx-2hミリ秒)程度のsleep()を入れて,そこから先はビジーループ ってのをやったけど,実時間性を保障するシステムより耐性のあるシステムを作ったほうが安全 ※といっても hは保障できる値ではないのでリアルタイム処理なんかはあきらめるしかない
情報オリンピックの問題なんですが、 退勤時間 − 出勤時間で勤務時間を求めるプログラムです 一応出来たのですが、変数使いすぎだし、効率悪いような気がしてなりません。。。 もっと簡単に纏めれるやり方ってありますか? #include<stdio.h> int main(){ int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r; while(a =! 000){ scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f); scanf("%d %d %d %d %d %d",&g,&h,&i,&j,&k,&l); scanf("%d %d %d %d %d %d",&m,&n,&o,&p,&q,&r); if(f - c < 0){ f = f + 60; e--; } if(e - b < 0){ e = e + 60; d--; } if(l - i < 0){ l = l + 60; k--; } if(k - h < 0){ k = k + 60; j--; }}
if(r - o < 0){ r = r + 60; q--; } if(q - n < 0){ q = q + 60; p--; } printf("%d %d %d\n",d - a,e - b,f - c); printf("%d %d %d\n",j - g,k - h,l - i); printf("%d %d %d\n",p - m,q - n,r - o); } }
>>194 データ構造と処理構造見直せ
おもにtime_tでdifftimeしたり
文章をコピーする関数で void copy(char *to,const char *from) { while(*to++ = *from++) ; } だと「不正な代入」と警告が出てしまう プログラム自体は動くがこの書き方だとまずい?
別に問題ないけど、気になるんだったら while((*to++ = *from++)) とすると警告出さなくなるかもしれない。
199 :
197 :2009/09/22(火) 06:47:06
>>198 の通りにやっても警告が出てしまう・・・
本に書いてある通りの書き方だから多分大丈夫だと思うし深く考えなくていいかな
つ memcpy
なんでマニアックな書き方すんだ _?
マニアックでも何でもねーよ K&R本にも「このような書き方はマスターすべきである」と書いてあるし
memcpyつかったほうが速いし、その本みたことないが 不必要な場面でも使えとは書いてないだろ。
なんでmemcpyが出てくるんだ? 速いからったってstrcpyと比較しなきゃフェアじゃないだろ
>>199 なら while((*to++ = *from++) != 0)
ってすればいい。
>>203 もしかして、「K&R」の名前も知らないの?
ここはC言語のスレだよね?
K&R至上主義の方がちょくちょく現れるが、今の時代に合わせて変えていくことも大事だよ。 この記法についてはidiomとして十分浸透しているものだから別にあれこれ言うつもりはないし、 すんなり読めるようになっておくべきだとも思う。 けれど、K&Rが絶対であるという考えは(そのように言ってはいないのかもしれないが) やめておいた方がいいよ。 K&RのHello Worldは今ではタブーなコードであるし。
Ken TompsonとDennis Ritchieはこの世界じゃ神様だもんな 知らないモグリが回答なんてするはずないよね
俺としてはRMSも入れてあげたい、っていうか、釣りだよね
210 :
209 :2009/09/22(火) 07:55:40
Knuth先生とRMSにするか。
別にK&Rを読めとか崇拝しろとか言っているわけじゃない。 もちろん、盲信すべきでもない。 が、K&Rの名前も知らない つまり、まともに知識を得ようとすれば必ず知っているはずの名前を知らない という事実が問題。 他の言語でも大抵最初に扱われる、「Hello worldの由来」としても。 この点は、K&Rの知名度よりはだいぶ劣るが C FAQについても言える。 何かについて詳しく知ろうと調べていけば、普通はこの存在を知ることになるし Cでまともなコードを書こうとしている人なら、存在自体は知っていなければおかしい。 そして、鵜呑みにする必要は無いが、どんなことが書いてあるか等は目を通しておくべき。
■質問です。 ↓のような txt ファイルを読み込んで hoge = {67, 12, -23, 34, -45}; という配列を作りたいのですが、どのようにすれば良いでしょうか? *** txt ファイル******** 67 12 -23 34 -45 ********************* 今のところ、とりあえず fgetc で取得した文字(数字や符号)を 文字型配列に入れてみたのですが、 整数への戻し方がわからない状況です。 ◆例:-23 の場合 文字型配列 buf を作って buf = {-, 2, 3} と格納したが、 これを整数の -23 へ戻す方法がわからない……。 buf = {1, 2} ならば、10 * buf[0] + buf[1] で 12 が取得できるのだが……。 以上、よろしくお願いします。
>>210 Knuth先生はC言語に直接関わってないだろ。
RMSもフリーのコンパイラ作ったっていう関わり方だし、
Cに関してはKernighan/Ritchieは別格。
ケントンプソン出てきた時点でこの業界の偉人でK&Rを組み立てる流れになったんじゃなかったのかよ
>>212 コード読むのも勉強になればと思って書いてみた。
寝起きだからバグってたらごめん。
真面目に処理するときは自前コードじゃなくてscanf()で整数変数にぶちこむかatoi()等を使う。
int myatoi(char *str)
{
int retv = 0;
int sign = 1;
while (*str) {
if (*str == '-') {
sign = -1;
} else if ((*str >= '0') && (*str <= '9')) {
retv = retv * 10 + *str - '0';
} else {
// break; //error
}
str++;
}
return sign * retv;
}
>>208 はsageじゃなくてbokeなんだ。すまない。
216 :
209 :2009/09/22(火) 08:27:28
すまない。ほんとうにすまなかった。 ラリーウォールじゃLだしなんかインパクトに欠けるし(失礼)とかそっちで精一杯だったorz
>>212 定石的なやり方は
fgetsで一行文の文字列読み込んで、それをsscanfで変換。
>>216 K&R論争なんてやりたくないしとりあえずボケちゃえと思ったんだ。
乗っかってくれた209さんには感謝してるよー
>>215 ,217
こんな早朝からありがとうございました!
↓のコードで成功しました。※スペースは、掲示板の都合上、全角スペースを用いています。
>>217 の方がよりコードを簡略化できたので、
>>217 の方法を使わせていただきました。
#include <stdio.h>
#define LINEMAX 15
#define WORDMAX 6
int main(void) {
char txtbuf[LINEMAX];
FILE *fp = fopen("in.txt", "r");
int idx = 0;
int wordbuf[WORDMAX];
while( fgets(txtbuf, sizeof txtbuf, fp) != NULL) {
sscanf(txtbuf, "%d ",&wordbuf[idx]);
printf("%d", wordbuf[idx]);
idx ++ ;
}
fclose(fp);
return 0;
}
220 :
219 :2009/09/22(火) 09:26:14
あれ。ちょっとまだバグがあるので、これから修正します
サイズを求める手間を足しても、memcpyの方が198のやり方より速いの?
2009にもなってまだこんなネタで盛り上がれるなんて よほどやることがないんだな
223 :
219 :2009/09/22(火) 10:44:58
入力 txt ファイルの -23 と -45 の情報が取得できていないバグを取りました。 #include <stdio.h> #define TXTMAX 300 int main(void) { char txtbuf[TXTMAX]; FILE *fp = fopen("in.txt", "r"); int idx = 0; int wordbuf[TXTMAX]; int toshisu = fgets(txtbuf, sizeof txtbuf, fp); printf("都市数は %s \n", toshisu); while( fgets(txtbuf, sizeof txtbuf, fp) != NULL) { sscanf(txtbuf, "%d %d", &wordbuf[idx], &wordbuf[idx + 1]); printf("txtbuf の情報を表示します。\n"); printf("%s", txtbuf); printf("txtbuf の情報終わり。\n"); printf("wordbuf[%d] = %d \n", idx, wordbuf[idx]); printf("wordbuf[%d] = %d \n", idx + 1, wordbuf[idx + 1]); printf("\n"); idx = idx + 2 ; } fclose(fp); return 0; }
*** txt ファイル******** 67 12 -23 34 -45 ********************* ■実行結果 都市数は 67 txtbuf の情報を表示します。 12 -23 txtbuf の情報終わり。 wordbuf[0] = 12 wordbuf[1] = -23 txtbuf の情報を表示します。 34 -45 txtbuf の情報終わり。 wordbuf[2] = 34 wordbuf[3] = -45
char *m = (char*)malloc (sizeof(char)*256); m[258] = '1'; free(m); 明らかに確保してない領域に書き込んでいるのですが 実行してもエラーが出ません、なぜでしょうか?
エラーを出力することが規定されていないから
そういう言語だから。 OSが保護していない領域は書き換えられまくり。
なんだよ都市数ってwなんかの宿題か?
>>228 そうですね。課題は巡回セールスマン問題で、
ありがたいことにネットにプログラムはあったんですが、
細かい仕様は当然違うので、その調整をしてました。
プログラミングなんて1年以上前に3ヶ月程やっただけなので、
本当に気が重かったのですが、このスレのおかげで何とか提出できそうです
K&R(第2版)を読めば
>>225 みたいなのがどうして一見正常に機能するのか
その理由もある程度推測できるようになる(mallocの実装例が載っているので)。
mallocでユーザがヒープ領域管理できるのなかったっけ
232 :
デフォルトの名無しさん :2009/09/22(火) 16:47:22
#include <stdio.h> int main(void){ float i,j; i = 1/3; printf("%f\n",i); j = i*3; printf("%f\n",j); return 0; } のプログラムを実行してみたんですけど、i,jの値ともにゼロになってしまうんですけど これはどういうことなんですかね?
>>232 > i = 1/3;
i = 1.0/3;
1/3は整数で完結してるから0になる 1.f/3 1.0/3 にしろ
235 :
デフォルトの名無しさん :2009/09/22(火) 16:51:17
すみません!! わかりました。ありがとうございます。
>>207 >K&RのHello Worldは今ではタブーなコードであるし。
フレーム抜きで詳説希望
どうせ「第二版」というものを開いた事も無いような奴が寝言言ってるだけだろ
タブーなんていう曖昧な表現をするあたり、何か問題があるにしても 個人的な思い込みに反してるだけだろうしな
return がないとかそういう話かね。
main(argc,argv) int argc; char **argv { printf(""Hello world!); }
笑っちゃうね、もう少し勉強してからきてね
適当にコーディングしながら考える。
>>240 ああそれはうざい。
というかprintf(""Hello world!);は革新的すぎるぜ
>>243 その問題なら、いきなりコーディングできるのでは?
古い本だとmain( )やvoid main( )で表記してるのがあるけど、 まだ統一された規格が無かった頃のコードなの?
>>247 簡単ですかねー・・・?
まだ経験が浅いので、作ってみたらgdgdになってました(´・ω・`)
組み込みの世界は無限ループするからvoid main()が一般的ってほんと?
251 :
247 :2009/09/23(水) 00:49:23
>>249 自分ならまず、ゲーム部分のシミュレータ作って(返り値が個数)、
入力データ N 個の一箇所を別の色に変えたデータを作る部分を
作って、全体制御と一番小さい数値を返す部分を作って、
終わり
>>248 void main() は明らかに間違い。
exit() で終わるなら別に void でも問題でないけどね
よくエラーを返すときはreturn -1,return -2など -を使うことが多いと思うのですが,これはなぜでしょうか? retrun1やreturn2はみない気がしています.
気のせいじゃない?return 1 とか 2 とかもあるよ 関数によっては、 0以上の正数が正常値で、負数がマイナス値 という事情があるかもしれない。ファイルディスクリプタとか
>>253 ん?呼び出し規約で問題がでませんか?スタートアップ側でintが返るのを仮定しているのに void な関数をリンクしちゃっていいのですかね。
たしか仕様じゃできるかぎりint mainにしろ、でも void mainで始まる事を禁止してはいなかったような 蛇足だが main は int main の省略形
>>250 組み込みではそもそもmain関数が無いこともある。
慣習的に、mainにあたる関数をmainって名付けることが多いけど。
動けばいい、それだけだ
お前はそれでいい
>>260 ほう、動くのですかね、void main() で。
動く環境もある
アプリケーションエントリのスタブ関数(mainの呼び出しもと)はANSI以外のCだとてんでばらばら
main()と戻り値の方を省略するのはなんの問題もないの? 非推奨だったりしないのかな、という点で。
警告が出力されるままになるのが気がかりなんだけど、規格上はそれで問題ないということ?
VCなどでソリューションリビルドって,どういった時にする物なのでしょうか?
>>268 原因不明だけどプログラムが正常に動作しなくなったって時にやると、うまく動くようになることもある。
大抵は依存関係の解決に問題があるんだけどね。
何らかの理由でオブジェクトファイルよりもソースファイルの方が日付が古く、内容が新しくなった場合とか?
リリース用のビルドを作る時に何となくやる
printfとかでDOS画面に表示された文字を全部消すことはできませんか?
DOS画面は無理だな。疑似DOS画面を用意すればいいだろう。
system("cls");
DOS画面ということは Windows 環境での話かね? system("cls"); じゃだめかい
276 :
272 :2009/09/23(水) 09:07:52
スマンカッタ clsで初期化された
273だった
>>265 main()以外の関数でも省略してもエラーにならないしな。
戻り値がvoid以外でも。
void main()の弊害は馬鹿が絡んできて貴重な時間を浪費させられること。これに尽きる。 なので書いてはいけない。
自分はメタな立場から発言してるから、バカとは違うと思ってるバカも絡んできてしまうしな。
>>278 デフォでintに決め打ちされてしまうだけですね。
>>281 いや、
double func()
{
return 0.0;
}
↑こういう関数でreturnを削除しても、
double func()
{
}
↑エラーにならないってこと。
>>282 iso標準のC言語の仕様としては、
double func(){}
この返却値を使わない限りは大丈夫なの?(問題無く動作する?)
それともこれをコンパイルした時点で未定義の動作になる?
> If the } that terminates a function is reached, > and the value of the function call is used by the caller, > the behavior is undefined. 使わなければ大丈夫っぽい感じ
285 :
283 :2009/09/23(水) 15:02:05
>>284 確かに。
and the value of the function call is used by the caller,
の部分ね。
ありがとうございます。
C言語の中級者向けに書かれた本を探しているんですが、 皆さんがお勧めする本があったら教えてください、お願いします! あと問題数もこなしたいので、柴田望洋さんの 「解きながら学ぶC言語」も買おうと思ってるんですが、この本は良本ですか?
入門者・初心者・中級者・上級者・変態
にランクを分けるにしても、人によってその敷居が違うから
>>286 の実力がよく分からない。
とりあえず関数ポインタは知ってる?使える?
>>286 C言語を学習している目的がわからないと、勧めようがない。
make, assert, データ抽象化とかそこらへん説明してる中堅の良書ってなかなかないんだよな。 どちらかというと入門書レベルだけどPractical C Programmingとか。 時代遅れだったらごめん。
変態にオヌヌメの教えてくれ Numetrical recipesとかでつか
※住職は目が汚く濁っています。
292 :
デフォルトの名無しさん :2009/09/23(水) 18:57:20
>>290 題名も忘れてしまったが、C言語のマクロを使いまくる本があったな。
あれは変態におすすめだったと思う。
>>292 すまん
お詫びになるかは分からんけど・・・
いろんな本読んだりしていろんなコードを読むことも大事です。
296 :
デフォルトの名無しさん :2009/09/23(水) 19:43:22
何も作れませんがC言語の入門書は読みました。 まだ理解できていないところも少しありますが、次のステップに進むべきでしょうか?
やめてしまえ お前ごときのかわりならいくらでもいる
>>287 関数ポインタは・・・知りません(´・ω・`)
ポインタなら知ってます。。。が、書けといわれたら無理。
実力はどのように表現したら良いですか?
とりあえずC言語を始めて18日ですw
簡単なソート系なら何も見ずにコード書ける
>>286 とりあえず、人に答えてもらったら
たとえ気にくわなかろうが
一応の返事をするという最低限のマナーは守ろうか。
代わりがあまりいなくなるレベルって一体どのくらいからですか?
>>288 情報オリンピックに出たいからです。
2008年の予選問題の、問1、2までなら自力で制限時間内に解けたんですが、
問3が解けませんでした。
>>300 C言語以外のこともよく知っているレベル
>>299 すいません、用事があったので席をはずしてました
それと今からもちょっと用事があります・・・。
>>302 試しで作ってみただけです
何でもいいからたくさんプログラムを書いていくべき 基本が解ったら後は習うより慣れ まだ知らないこともたくさんあるだろうけど 必要に迫られて調べていけば覚える
>>303 それはC言語を応用してWinAPIのようなものも使えるようになるってことですか?
それとも設計とかのことですか?
ポインタが分からないなら まずは単方向リストだ
>>306 ですがなるほど、自分は大きな勘違いしてたみたいですねw
確かにまずはアルゴリズムの勉強していかないとまずい。
本に書いてあるコードを実行してみたり改造したり、
自分でいろいろ実験がてらに作ってみたりして勉強してみます。
ありがとうございました。
>>308 自分もこの本でアルゴリズムの勉強したから大きいことはいえないけど、
もう「最新」っていえるような本じゃないよね。「定番」に書き換えるべき^^
グローバル変数のほうが初期化に時間かかる気がするんだけど気のせい?
気のせい
>>313 パフォーマンスがいい可能性があると思う。 C++用に作られた物より。
>>311 一般的にはグローバル変数の方がアクセスは遅くなるだろうけど
初期化の話ならアクセス1回だけなので、ほとんど変わらない
>>300 C言語に的を絞るなら、高性能なコンパイラが書けるレベル。
>>316 天才じゃねーか
C言語では低性能なコンパイラを作るのですら相当きついだろ。
>>317 情報系の学科出てれば、実習でコンパイラくらいは作るわけで。
C言語ほどの規模じゃないにしても。
319 :
317 :2009/09/24(木) 00:57:36
>>318 なんちゃってインタプリタなら作ったことあるぜ。
だからといって C言語のコンパイラは作れる気がしない
というかC言語の仕様を完全に理解していないとつくれねーし。
320 :
318 :2009/09/24(木) 01:22:14
>>319 C言語の構文解析用のyacc/lexコードはネットに転がってたような
(ほかのコンパイラのソースについてたのかも)
そういうの参考にしつつ、ちまちまやって一年くらいで最適化無しなのは作れた。
バグはたくさんあっただろうけど。
完成しなくても一度やってみると細かい部分の仕様を再確認することになるから それなりに詳しくはなれる
void test(char *src) { *src = '\0'; } int main() { test("test"); } これメモリエラー出ちゃう どうすれば・・・・・
>>322 "test"が書き込み不可なメモリに確保されているんだろう。
int main()
{
char str[] = "test";
test(str);
}
とすれば、strは書き込み可能な配列なので問題なく動くはず。
横レス失礼します 今Cについてできるだけ熟練したいと思っています。 (今のレベルとしては「独習c」を終えたレベルです。) そこで、オープンソースのものを読んで先輩方の書かれたコードを参考にしたいと考えました。 コードリーディング初心者が読みやすい"短い"コードが欲しいのですが、よい入手方法はありますか? google codeなどを見つけましたが、コードの行数で絞る方法が分かりません。 環境はGNU/Linux Debianを想定しています。 //興味のあるプログラムはあるんです。zshとかglibcその物とか。ただ、相手が巨大過ぎるので.. よろしくお願いします。
326 :
325 :2009/09/24(木) 11:44:29
なんか俺の書き込み頭悪そうだな。 要するに俺が言いたいのは 「APIや外部ライブラリの勉強をすることになるだろうが、 どうせならその前にC++を十分に学んでおいた方が 絶対便利だと思うよ」 ってことです。
熟練したいなら標準ライブラリの仕様読みこむのが先
>>325 早速のレスありがとうございます。APIと言うものがなんであるかは既に知っています。
C++に以降すべきですか...確かに興味はあります。僕自身の興味として最終的にlinux(+unix)について
深く理解したいと言うものがあり、Cも当然理解できないとまずいだろうと思っています。
(これに反する理由があれば、当然c++に以降しますが)
ただ、今C++について学んだところで、また初心者本を買ってそれを一冊使いきるだけになってしまうのではないかと心配しています。
とりあえず、cをそれなりに使えるようになってからチャレンジしたいと思っています。
//そのためにコードを読まないといけないんじゃないか、と思っているわけです。
どうもありがとうございます。
>>327 > 327 名前:デフォルトの名無しさん [sage]: 2009/09/24(木) 11:45:53
> 熟練したいなら標準ライブラリの仕様読みこむのが先
今からglibcについて勉強する、ということでいいのでしょうか?
C言語より、C++を使いこなすのは困難とは限らない。 生産性ではかれば、C++の優しいはず。
331 :
325 :2009/09/24(木) 12:08:03
>>328 とりあえず外部ライブラリはC++クラスの形で提供されていたりして
C++の知識がないと使える枠が狭くなっちゃうじゃない。
ところで他は何の言語の知識がある?
332 :
324 :2009/09/24(木) 12:19:26
レスありがとうございます。 > とりあえず外部ライブラリはC++クラスの形で提供されていたりして > C++の知識がないと使える枠が狭くなっちゃうじゃない。 それは知りませんでした。C++を学んでおくといい理由の一つですね。参考になります。 > ところで他は何の言語の知識がある? よく知っている順から上げると、perl,emacs lisp,python,rubyです。 ..どれもさわりの部分だけで、{モジュール、ライブラリ}と呼ばれるものを検索して、利用したりと言ったことはやっていません。 ずぶの素人です。 //もしかしたら自分に足りないのはライブラリを利用する方法を知らないことかもしれません。 //javaは大嫌いです。今のところ学ぶ気はありません。
>>328 linuxについて深く理解したいのなら、OSそのものの教科書があるから
そっちを勉強した方がいいとおもうよ。
とりあえず定番のタネンバウム先生の教科書で勉強するとか。
(MINIXのソースは手頃な大きさだし、Cの勉強にもいいとおもう)
>>333 レスありがとうございます
あの有名なminixを学ぶ、ですか。いいかもしれませんね。
//発狂して新しいOSを作るとか言い出さないか自分が心配ですw
>linuxについて深く理解したいのなら、OSそのものの教科書があるから
>そっちを勉強した方がいいとおもうよ。
OSと言う大きな括り方ではなく、Linuxに含まれる数多くのツールのコードを読んで勉強したいと思っています
//ボトムアップ、と言っては間違っているでしょうか?ローカルなところからやってみたいです。
ありがとうございます。
335 :
デフォルトの名無しさん :2009/09/24(木) 12:34:44
すぐLinux嫁とか言う奴はほんとに読んでんのかよw
337 :
デフォルトの名無しさん :2009/09/24(木) 12:44:47
Pascalをこれから学ぼうと思うのですが、win環境でおすすめの開発環境はありませんか?
Delphiがいいんじゃないかい?
340 :
デフォルトの名無しさん :2009/09/25(金) 01:00:54
>>336 自レスなんだよ。マッチポンプだからな。
どこどこ嫁の方がリファレンスのない自慰レスよりマシ
今更だけどLuaってすごいね cでここまで出来るのかという感じで
>>330 CやC++はともかく日本語が困難なようですね
Luaはこういうのあったらいいなが実現している言語
Windowsで右上の×を押して終了したときの処理はどうやったらいいんですか?
>>344 WinAPIスレかC/C++スレへでもどうぞ。
free()が成功した場合でも対象のポインタにはNULLが入らないの? まだ解放していないか、あるいは解放に成功したかはどうやってチェックすればいい?
>>346 それは不可能。
そのため、君のコーディング規約として
freeする度に直後にNULLを代入するようにするとかそうすべき。
#define freeandnull(p) {free(p); p=0;}
>>346 free() が成功したかどうかは free() 自身が知っているのみだが
もし失敗しました、と言われてもプログラマにできることなどない。
>>348 一般論として、マクロ内に "{}" は入れない方がいい。
if (〜)
freeandnull(hoge1);
else
freeandnull(hoge2);
なんて書かれると、「; で if は終わってるのに else ってなんじゃい!」
という趣旨のエラーが表示される。
だからdo{ }while(0)で括れと何度言ったらわかるんだ
do{free(p); p=0;}while(0) ですねわかる
それじゃ for() の中にカンマで区切ってならべられないじゃないかー!
だからもうC++に移行すればいいんだよ。
(free(p),p=NULL)
インライン関数にしたら
Oh...
>>355 Cには参照型がないのでこんな無様なことになる。
void freeAndNull(void ** pptr) {free(* pptr); * pptr = NULL;}
しかも、使うにはfreeAndNull(& ptr)などとしないといけない。
マクロとインライン関数を組み合わせればいいじゃん。 #define Free(p) freeAndNull(&p)
Free(a[1]);
えっ? &a[1] は &(a[1]) って解釈されるよね?
>360 もちろんそうだよ >358 当然だが #define Free(p) freeAndNull(&(p)) の方がいい Free(p_foo+i) ついでに言うとfreeAndNull()でNULLかどうかのチェックいれといた方がいい そういえば、C言語@便利な(笑)マクロスレ落ちたな
free()にはNULLを渡してもいいことになってるんだから無駄なチェックじゃないの
free()とNULL代入のコストをどうみるかということね、チェックしなくてもいいか もっと重要な事にT *からvoid **に変換できるかどうかについて思い出した 確かガチ規格準拠スレかどっかのサイトであった気がするが T *からvoid *への変換とその逆は可能で T *のポインタからvoid **はできない、一段階しか無理でconstが外せない云々かんぬんだったと思う
>364 何故そう思うのか (free(p),p=NULL)は()が最後の完了点で評価値はpとなる 順に追っていくと free(p)がvoid、p=NULLがp(ここでは便宜的にpの型をTとしておく、ただしTはポインタ指定子のついた複合型) カンマ演算子は一番右の完了点の評価値であるので()の評価値はpとなる よって、T q = (free(p),p=NULL);とかできる、キモいな ちなみに(void)exprで評価値を捨てることもできる lintで*printf()の戻り値を捨てるときや使わない引数に警告が出ないようにすることがある、もっとキモいな
typedef struct { int h; int o; int g; int e; }HOGE; //16バイト HOGE hoge[32]; //A HOGE *hoge[32]; //B HOGE **hoge; //C 構造体のメモリの消費量について質問です。 A、B、Cについて書いてみたのですが、あっているでしょうか。 Aは、mallocをせず構造体を使えるが、 使うindex量にかかわらず16 * 32バイト消費する。 Bは、使うindex毎にmallocする必要がある。 メモリ消費量は、4 * 32 + 16 * 使用index数。 使用index数が少なければ、Aより消費量を抑えられる。 また、途中で使用index数が変わっても、 そのつどmalloc、freeし直せる。 Cは、まず使用index数 * (HOGE *)でmallocし、 さらに、index数分、HOGEでmallocする。 メモリ使用量は、4 + 4 * 使用index数 + 16 * 使用index数。 Bより、不使用index数 * 4バイト、消費量を抑えられる。 途中で使用index数を変える時に、前の内容を保存、free、 (HOGE *)でmalloc、HOGEでmallocと手順を踏む必要がある?
>>366 (ポインタが4バイトという仮定の下で)計算は合っているけど、
要素数が実行時に決定または変化するという場合はHOGE*にするぞ普通。
368 :
366 :2009/09/25(金) 22:39:24
>>367 ありがとうございます。
通常は、そのHOGE*にHOGE×使用要素数分mallocだと思うんですけど、
好きなタイミングで要素数を増やしたい場合、
一度freeしてから、新しい要素数分でmallocし直す必要がありそうなので
Bのやり方をあげてみました。
リストを使えばそれでも実装できるみたいなのですが、
なかなか感じがつかめません。
>>368 Cはhogeをreallocすればいいだけ
ん?なんかへんだわ。 Cが**なのはなんで?*でいいよ。
371 :
366 :2009/09/25(金) 23:21:09
>>369 ありがとうございます。
試してみたいと思います。
んで、Cのメモリ使用量は 4 + 16 * 使用index数 ね
373 :
366 :2009/09/25(金) 23:29:11
>>370 ありがとうございます。
Bのに比べてメモリの再確保のしにくさを書きたかったのですが、
確かにどちらも同じような意味合いになると思うので、
*でいいと思います。
>>373 ちなみにBのほうが使用メモリは多いし、最大32個制限になっていることは分かってるのかな
375 :
347 :2009/09/25(金) 23:45:20
>>365 たぶん、
>>364 は
free(p)
でpは無効なポインタだから、p=NULLはエラーだと思ったんだよ。
そうでしょ?
>>364 さん。
ちなみに正解は
free(p)
で無効なのは*pであり、pはエラーではない。
なんかまだいろいろありそ
いろいろ?
378 :
366 :2009/09/26(土) 00:11:19
ありがとうございます。
>>369 reallocで動作させられました。
>>372 Cは、始めに
hoge = malloc(sizeof(HOGE *) * youso);
で、その後、
for(i = 0; i < youso; i++)
hoge[i] = malloc(sizeof(HOGE));
と思ったのですが、始めのが違いますかね。
>>374 はい、4×32を始めから消費している形ですからね。
最大32個は、使うであろう最大分の数にしておいて、
4×32はもったいないのですが、少ししか要素を使わない時なら、
Aの16×32よりはマシになるという感じです。
>>378 char **str = (char **)malloc(sizeof(char *) * youso);
for (i = 0; i < youso; i++)
str[i] = malloc(sizeof(char));
として、文字配列を管理するのがお好みならそれでもいいけれど。
ちなみにポインタの配列にする方法(B,C)だと、使用、未使用をNULLかどうかで判断できるように
作ることができるメリットもある。
C'案の、HOGE *にするのは、未使用かどうかについてAと同じような判定をすることになる。
>>378 ターゲットの環境はスタックサイズいくつなの?
381 :
366 :2009/09/26(土) 00:54:42
ありがとうございます。
>>379 なるほど、勉強になります。
未使用チェックは、場合によって、
間を空洞にしておきたい時とかに使えそうです。
>>380 よく分かっていないのですが、
コンパイラはBCCで、ググった所1Mとか4Kとかでてきました。
実験してみた所、char s[1000000] = "hoge";はprintfで表示できましたが、
1100000とかだと、コンパイルは通るのですが、表示はされないので、
1Mなのかもしれません。
スタックサイズはリンカに渡すオプションで変更できるだろ
数バイトの差がどうしたこうしたといってるくらいだから、ターゲット環境の スタックサイズは変更できず、かつ非常に小さいのだろうと思ってもしょうがない
「○○未満ではない」 って比較演算子でどう書くの?
>=
386 :
366 :2009/09/26(土) 08:37:02
ありがとうございます。
>>382 オプション指定で実験し、確認できました。
>>383 なるほど、組み込みとかの場合、
細かく意識する必要があるのですね。
教えてください。 EclipseでC言語書いてるんですが +-----------------test.c------------------ | #include <stdio.h> | #include <stdlib.h> | int main(int argc, char *argv[]) { | int a; | printf("%d\n", argc); | for (a = 0; a < argc; a++) { | printf("%s\n", argv[a]); | } | return EXIT_SUCCESS; | } +---------------------------------------- 『実行』→『実行構成』→『引数』のプログラムの引数に +---------------------------------------- | アホ | バカ | ドジっ子 +---------------------------------------- って入れて実行すると +---------------------------------------- | 4 | C:\workspace\Test\Debug\Test.exe | アホ | バカ | ドジっ子 +---------------------------------------- 『C:\workspace\Test\Debug\Test.exe』が余分に 出力されてしまい引数が4つになってしまいます。 どなたか解決方法をご存知の方、教えてください。
a = 1から繰り返せばいいんだよ
引数が4つのままだろ^^;
390 :
デフォルトの名無しさん :2009/09/26(土) 09:38:05
文字列を格納した配列から、sscanfで文字列を読み取ろうとしています。 変換指定子によって、必要な情報だけ抜き出そうとしています(%*[+]%[A-Z]など)。 しかし、変換指定子に外れた入力がきたときに、残りの文字列が裏に残ってしまいますよね。 これを回避する方法を教えて下さい。 stdinから入力の場合はfeof(stdin)やfflush(stdin)で回避できるとおもうんですが、 配列からの入力だとわからなくて…。 お願いします。
>>387 それで合ってるじゃん
ちなみに2つめのargv[]は空白でもいい事になっている
えっ?合ってるの? Eclipseじゃなく、コマンドでコンパイルして実行したら3 3 アホ バカ ドジっ子 って出ない?
§5.1.2.2.1 If the value of argc is greater than zero, the string pointed to by argv[0] represents the program name; argv[0][0] shall be the null character if the program name is not available from the host environment. If the value of argc is greater than one, the strings pointed to by argv[1] through argv[argc-1] represent the program parameters.
了解です_/ ̄!○
>>390 配列でも関係ないのでは?
fflush(stdin)はM$の独自拡張なので使わない方がよい
そのためにわざわざsscanf()を使っているんでしょ?
残りの文字列は捨ててしまえばよい
while( (p=strstr()) ){ これをpがNULLの時が真にするには?
>>397 while( !(p=strstr()) ){
わかんなくなったら素直にわけろ
400 :
390 :2009/09/26(土) 13:28:35
>>395 >残りの文字列は捨ててしまえばよい
同じ文字列を対象としてsscanfを2回実行するとのこってません?
どうやって捨てるんでしょうか。
sscanf()なら残った文字列はfflush()も糞もないだろ
>>400 …は?
scanf() じゃなく sscanf() なんだよな?
「残る」といえば元の配列にすべて残ってるし
正直、何を気にしてるのか解らないんだが。
消費した分は捨てて残りをさらにスキャンしたいってことだろ 何バイト消費したか知る術を知りたいと
それなら変換指定子使わずにstrcspn()使って面倒でも 自前でやるべきだろ 楽をしようとしてかえって苦労してる
さっさとstdregex.hつけろって話ですよ
それで整数オーバーフローの脆弱性を仕込むですね、わかります
if文で条件式が(a || b)の場合 aとbどちらか先に評価されるかってコンパイラによって異なるのでしょうか?
異なりません
必ずaから評価され、aが真ならbは評価されません
412 :
デフォルトの名無しさん :2009/09/26(土) 16:48:15
あれ? デジャブかな。。病院行くよ
if の代わりに使っても処理が速くなったりはしないし、 単に可読性が落ちるだけだから、 上級者きどって多用するようなことはするなよ。
>>413 > if の代わりに使っても処理が速くなったりはしないし、
この根拠は?
コンパイラの最適化?
415 :
デフォルトの名無しさん :2009/09/26(土) 16:59:33
compiler で assembler に出力すると使用している CPU も載っていたのですが? これは source によって 載る 載らない が決まると云う事なのでしょうか?
418 :
デフォルトの名無しさん :2009/09/26(土) 17:10:10
ルー大柴か
なんらかのポインタをchar *pと宣言して、ここに文字列char[7] = "string"を入れたい場合、 pをmallocするしかないのでしょうか?
いいえ
ポインタに文字列は入りません。 まあ、4 文字くらいなら無理矢理入るかも。
やりたいことを正確に表現できるようになったら、質問する必要もなくなるんだろうけどねえ。
こまかいやつがいるなあw
大雑把なやつもいるなあ
エラーが出るだろ普通
>>420 char buf[256];
char *p;
p = buf;
>>420 char *p = "string";
"string" みたいなリテラル文字列を 書き替え可能な位置に配置するコンパイルオプションってなんだっけ? これ指定すると、 char *p = "string"; char *q = "string"; みたいな同一内容の文字列リテラルでも別々に用意されるんだよな。
>>429 そもそも、コンパイラによってオプションが変わるわけだが。
>>429 同一文字列をマージするかどうかって話だろうけどさ、
> 書き替え可能な位置に配置する
そもそも不可能ってか未定義の動作だろ?
文字列リテラル領域を別々に用意するのと書き換え可能にするのは別問題
書き替え可能にするために別々に用意するんだよ。 昔は書き替えが許可されてたしな。 gcc なら -traditional でできる。
>>431 未定義の動作になってるね
Annex J
J.2 Undefined behavior
1 The following are unspecified:
? The program attempts to modify a string literal (6.4.5).
C89ではUnspecified behavior、つまり不定の動作とされていたが
C99ではさらに厳しくなっているようだ
#define dTEST test.txt fp = fopen("dTEST","w"); ってすると 当たり前だがdTESTってファイルができちまう test.txtを作りたいんだ ""の中でも#defineを使う方法ってあるの? 誰か教えてください dTESTの定義は変えない方法でお願いします
#define TO_STR_CORE(x) #x #define TO_STR(x) TO_STR_CORE(x) こんなのを用意しておいて、fp = fopen(TO_STR(dTEST), "w"); このやり方だと、文字列の中に#defineを効かせるというより、#defineで置換した結果を文字列化しているというほうが正確だけど。
単純な置き換えコマンド使ったら?
まあ、たぶん、だけど
>>435 は
>>436 のような「プリプロセッサを駆使してなんとかしたい」ではなく
単に、「dTESTの文字列のファイル名を得たい」だと思うぞ。
もちろん、なんとかして(#を使って)dTESTを文字列化しなきゃならんが
その後はsprintf等でファイル名を作成する等でも充分だと思う。
440 :
435 :2009/09/26(土) 22:11:19
>>436-439 回答ありがとうです
>>436 こんなやり方があるなんて知らなかった( ..)φ
>>439 これ以外のやり方が知りたかったんです。
でも結局これが一番わかりやすい。
↓これがしたかったからなんだけど、
#define dTEST test.txt
sprintf(filename,"%02d_dTEST",num);
やっぱこれで十分かな??
#define dTEST "test.txt"
sprintf(tmp,dTEST);
sprintf(filename,"%02d_%s",num,tmp);
うん
>>440 そんなことしなくても
#define dTEST "test.txt"
sprintf(filename,"%02d_" dTEST, num);
これでいいだろ。
空白で区切ったリテラル文字列は連結されるよ。 printf("Hell" "o" "," " " "World.");
>>442-443 あうう・・・知ってたのに全く思いつきませんでした(ノД`)
お恥ずかしいです
これで全部解決です。回答くれた人ありがとう
お騒がせしましたー
>>知ってたのに 嘘をつかないように
嘘じゃねーよ
>>445 いるよねー
そうやって張っても仕方ない見栄を張るヤツwwww
でも今回の彼の言いたいことは
>>文法は知ってたのに
って意味なんじゃないかねぇ?
まあ正確には
>>知ってた(ような気になってた)
だろうな。
まあ入門篇なんだから
>dTESTの定義は変えない方法でお願いします じゃなかったのかと。
>>448 そうだけど見栄を張るのはおかしいよな。
精神的にも入門編かwwww
新入社員だってまずは精神教育だろ
精神教育w餃子の王将ですか?
サブルーチンの仕方を教えてください(´・ω・`) 何がダメか教えてください・・・。 #include<stdio.h> #include<string.h> int main(){ int heikin,max = 0,min = 999999999,goukei = 0,ken = 0; char namae[20],maxn[20],minn[20]; sub 1(); while(strcmp(namae,"end")){ if(max < uriage){ max = uriage; strcpy(maxn,namae); } if(min > uriage){ min = uriage; strcpy(minn,namae); } goukei += uriage; ken++; sub 1(); } heikin = goukei / ken; printf("合計:%d\n 最多売上担当者:%s 金額:%d\n 最小売上担当者:%s 金額:%d\n 平均:%d\n ",goukei,maxn,max,minn,min,heikin); return 0; } sub 1(){ printf("担当者名:"); scanf("%s",&namae); printf("売上:"); scanf("%d",&uriage); }
宿題は宿題スレへ
宿題じゃないです。 独学です。
>何がダメか 「サブルーチンの仕方」などという謎の用法。 関数の正しい定義方法。 関数名として認められない例 (途中に空白がある等)。 まあ人に訊くレベルにすら達してない。
サブルーチンの定義方法を教えてください!
458 :
デフォルトの名無しさん :2009/09/27(日) 13:48:48
そしてダサい変数名...
かっこいい変数名ってどういうのですか?
>>453 いろいろ指摘したい点はあるというかありすぎる。
まずはもっとシンプルなサンプル読んで
関数の作り方をちゃんと学んでからにしようぜ。
とりあえずsub 1は駄目。sub1にしとけ。
サブルーチンなどという考え方はC言語では既に滅んでいる。
えぇぇ!? まじすか
サブルーチンという言葉にはBASICのイメージがある 変数のスコープが甘いというか無いというかw
新しい言語を学ぶとき、自分の知っている言語のことはいったん忘れたほうがいい。 異なる言語は異なるパラダイムで設計されているから。 独学ならK&R第2版をまっさらな気持ちで読むといい。 三日でCの初歩が完全に身につく。
処理速度が一番早いのtってC?
ジャンルによる。科学計算では相変わらずFORTRAN最強伝説。 あと、C言語はプログラマのプログラム以外の知識が低い場合もカスになりやすい。 (ライブラリが充実していないので)
467 :
デフォルトの名無しさん :2009/09/27(日) 15:06:22
C言語「ライブラリが貧弱でサーセンw」
Numerical Recipes in C からパクれ 今や原書はタダで読めるらしいし
犯罪を助長する発言は自重して下さい!
逆じゃないよ。ちゃんとmaxには最大売り上げが、minには最小売り上げが入る。 疑問を持ったら実際に実行してみよう。 まぁ、このコードはバグだらけ以前の問題なので 実行できないけどw
エラーは6個まで減らすことが出来たが、 サブルーチンがやっぱわかんねw
大丈夫 みんな理解できないから
>>475 大丈夫。
どちらかというと悪手だから。
どちらかというと
>>420 の方が理解できないが。
if や for で1文だけのときみたいに int main() return 0; とすることはできませんか?
はい
そうしないことはできかねませんね?
無理。Cはそういう便利な省略表記を充実させようっていうのはあんまりないんだよ。
>>479 {} は
1. 複数の文・式をひとつのブロックとしてまとめる。
(if, for, while 等)
2. 構文上、必須。
(switch, 関数, 構造体定義, 配列や構造体の初期値)
の2種類ある。後者は必須といったら必須なの!
NULLってどこで定義されてるんですか? stdio.hなどをインクルードすると定義されてるようですがgrepしても見あたりません インクルードせずにコンパイルするとNULL error: 'NULL' undeclared (first use in this function)
すみません。誤って投稿してしまいました stdio.hなどをインクルードせずにコンパイルするとNULLが定義されてないと怒られます error: 'NULL' undeclared (first use in this function) コンパイラはgcc 4.2.1です NULLってどこに定義されてるんでしょうか?
>>484 さらに grep で include を探す
私の環境 cygwin (gcc 4.3.2) ではずばり stdio.h とかにありました。 stdio.h:#ifndef NULL stdio.h:#define NULL 0 stdlib.h:#ifndef NULL stdlib.h:#define NULL 0 string.h:#ifndef NULL string.h:#define NULL 0
NULLなんて久しく使ってないな
環境によって違うだろうけど、普通はstddef.h ANSI C 4.1.5 Common definitions <stddef.h> The following types and macros are defined in the standard header <stddef.h> . Some are also defined in other headers, as noted in their respective sections. : The macros are NULL which expands to an implementation-defined null pointer constant; and ISO/IEC 9899:1999 (E) 7.17 Common de?nitions <stddef.h> 1 The following types and macros are de?ned in the standard header <stddef.h>. Some are also de?ned in other headers, as noted in their respective subclauses. 3 The macros are NULL which expands to an implementation-de?ned null pointer constant; null pointer constantはまた別のところを参照してね これ以上はガチ規格準拠スレでやろうか
>>489 ANSI Cでは、<stddef.h>のほか、<stdio.h>、<stdlib.h>、<string.h>、<time.h>でもNULLが定義されていることになっている。
ソースの頭に #ifndef NULL #define NULL 0 #endif って書いときゃいいけど。
ダイテル本の演習問題を全て解けたら、中級者を自認していいですか?
いいんじゃないかな。
そこは門に続く道への入り口だろ。
495 :
484 :2009/09/27(日) 23:52:45
>>486-491 stddef.hからインクルードされるsys/_null.hでNULLが定義されてるのを見つけました
stdio.hとかも同様にsys/_null.hをインクルードしてましたね
あ、OSはFreeBSD 7.2です
すっきりしました。ありがとうございます
>>494 今お前が倒したのは、我々の中でも一番の小物だ
的なね。うん。まだまだ先があるんだろうな。
俺はそんなにCはやりこんでないけど。
497 :
492 :2009/09/28(月) 10:09:11
なるほど。ダイテル親子のテキストこなしてやっと脱初級者ぐらいなんですね。 今ハノイの塔を再帰で解く問題で詰んでて、これを乗り越えた先に 中級者が見えてるのかなと期待してみたんですが、そう甘いもんじゃないですね。 精進します。
それはアルゴリズムの話で、言語に精通してる度合いとはまた別かと 再帰呼び出しを理解しているかどうかに的を絞れば少しは関係するけども。
再帰呼び出しは数学的帰納法ってのと同じ考え方にするのが楽
0をポインタにした表現はNULL値だってことがどこかに決められいて それの実装上の表現までは決められてないんだっけ
NULL は言語仕様の方に組み込んどいても良かった気がする。 まあ、その場合は null と小文字してほしいが。
>>500 うん。NULLの中身がどうであるかは分からないけど、ポインタを0と比較すればおk
ってなんかオウム返しみたいになった
503 :
デフォルトの名無しさん :2009/09/28(月) 22:17:39
#include <stdio.h> main() { printf ("hello world\n"); }
>>503 釣りの予感。
>>503 を叩くと、「これってK&R2」に書いてるんですけど」といって逆襲する、と。
>>505 お約束どおり
「これってK&R2の冒頭にかいてあるんですけれども」
>>508 もういらんだろう。ISO/IEC 9899 さえあればいい。
-std=c99
>>509 でもみんな読んでるんですよ。ISO には規格だけしか書いてないし。
それが何か
捨てるには惜しいかと。せめて代替となるいい初心者のための教科書を紹介していただけませんか?
スレ違い
え?入門者が一度は手に取る天下のK&R2を捨てるに値するかどうかを論じているんですよ。これはC言語界にとって大問題ではないかと。
気のせい
やはりK&Rはクソなんですね。勉強になりました。
K&R を読んだことのない人が多いようですねえ。そんな人にいわれても‥‥‥。
言い返す言葉が無くなったんですかねえ。
ええ、尽きてしまいましたねえ。www
>>515 > これはC言語界にとって大問題ではないかと。
その程度のレベルの低いお前が何を偉そうにwww
523 :
デフォルトの名無しさん :2009/09/29(火) 07:30:09
www
524 :
2 :2009/09/29(火) 08:17:54
スレの流れが早すぎる CよりEmacsの使い方を覚えなきゃいかんみたいだ orz
emacsは変態キーバインドだからいやだ ものすごい囲い込み戦法で他のエディタが使えなくなる
スレタイ100回読んで消えろ
528 :
デフォルトの名無しさん :2009/09/29(火) 13:44:30
現在時刻をファイルに出力したいのですが、 ・現在時刻出力 ・ファイル出力 は調べても別々ででてきて目的を果せません。。 サンプルおしえてください
アホはやめてしまえ
530 :
片山博文MZ ◆BVYGEn4LD2 :2009/09/29(火) 13:56:12
>>528 #include <stdlib.h>
#include <time.h>
int main(void) {
time_t t; struct tm *thetime; FILE *fp;
time(&t);
thetime = localtime(&t);
fp = fopen("data.txt", "w");
if (fp != NULL) {
fprintf(fp, "%02d:%02d:%02d",
thetime->tm_hour, thetime->tm_min, thetime->tm_sec);
fclose(fp);
}
else
printf("data.txtが開けません。\n");
return 0;
}
>>528 #include <stdlib.h>
int main(){return system("time > filename.txt");}
>>530 なんでstrftime()使わないの?
533 :
528 :2009/09/29(火) 15:51:34
>>530 、
>>531 ご協力ありがとうございました。
何とかできました。
#include <stdio.h>
#include <time.h>
main()
{
// time_t time(time_t *time);
time_t timer;
struct tm *t_st;
time(&timer);
FILE *fp;
fp = fopen("ttt.txt","a");
// fprintf(fp,"%d\n", &timer);
fprintf(fp,"%s\n", ctime(&timer));
fclose(fp);
}
円の面積を求めるプログラムを作ったのですが コンパイルしても”警告 W8019”と出てうまくいきません ググってみても実行されない行があるとなると書いてありましたが プログラムを見る限りそんなはずはないと思うんです しかし実際に指定された行をコメントアウトしてみるとうまくいきました もうわけがわかりません助けて下さい ↓がソースです /* circle.c */ #include <stdio.h> #include <math.h> #define PI 3,14 int main (void){ double r, S; printf("半径:"); scanf("%lf", &r); S = PI * pow(r,2.0); printf("S=%f\n", S); return 0; }
536 :
534 :2009/09/29(火) 19:31:50
S = PI * pow(r,2.0); のところが問題のようです
3.14
539 :
534 :2009/09/29(火) 19:33:05
3.14
#defineの機能がわかっていないように見受けられる
>541 #defineの機能ってなに
>>542 コードを置き換えてコンパイルさせることでしょ?
単なるカンマとピリオドの打ち間違いなのに、#defineの機能がわかっていないとかw
>>545 まぁ、俺だったらまず置換後のコードを疑うからさ
547 :
デフォルトの名無しさん :2009/09/29(火) 20:43:10
もまえら>541をいじめてやんなよwww さらしあげ
548 :
デフォルトの名無しさん :2009/09/29(火) 21:03:25
質問です 最近C言語を始めたのですがビットフィールドがわかりません 何に使うんですか
bool値の格納
いまどきの環境なら知る必要はないと思います。
ビット単位でデータを扱いたいときに使います。
ありがとうございました やっぱり組込み?とかで使うんですね 必要になったときにまた勉強します
>>553 最近C言語始めたなら
当分理解する必要はないと思う。
少なくとも
|とか^とかは||や&&とは違う
ってことだけ知っていれば後は必要になってから理解すれば。
頑張ってね〜!
やっぱりわかってなかったか
>>548 typedef struct {
unsigned year: 6;
unsigned month: 4;
unsigned day: 5;
unsigned hh: 5;
unsigned mm: 6;
unsigned ss: 6;
} timestamp_t;
年月日時分秒が4バイトで表現できるみたいな?
558 :
デフォルトの名無しさん :2009/09/29(火) 23:17:44
関数にしないほうが処理速度はやい?
>>558 一般的にはそうだけど、そうならないことも多々ある。
CPU、コンパイラが高度化複雑化し過ぎて古典的な高速化手法が常に通用するとは限らない。 Q. 〜やると速くなる? A. 実際に計測して速くなったら速くなり、速くならなかったら速くならない。
質問です。 配列の変数一つ一つが構造体をもつことができますか? 配列A[3]があったとします。 この配列bヘ0,1,2,3の4個のボックスになっていて A[0].nenrei A[0].sinntyou A[0].taijyuu A[1].nenrei A[1].sinntyou A[1].taijyuu こんな感じに一つの配列の変数に対して複数の値が持てるのでしょうか?
構造体の配列を作ればおk
やってみなしゃれ
566 :
562 :2009/09/30(水) 00:30:31
>>563 >>564 >>565 ありがとうございます。
構造体配列というやつで可能ということは分かりました。
宣言方法がイミフですが、ありがとうございました。
色々読んでみます。
なるほど、配列に入れられる物に制限があるかどうか気になったんだなぁ
>この配列bヘ0,1,2,3の4個のボックスになっていて 3個だぞw
ファイルが大きくなってしまったので、一部のコードを別ファイルに移して、それをincludeする 形にしようと思うのですが、その際のファイルの拡張子って.hと.c、.cppどちらを使うのが 普通なのでしょうか?
C言語なら.c .cppはC++のコードを書くのに使う
しかし通常は.cをincludeはしない
俺は.txtにしてるけど
コードのインクルードは通常.c
includeにはずっと.hを使ってきたけど、いまのところ問題ないよ
.hは通常ヘッダ
>>569 ヘッダファイル、ソースファイル、分割コンパイル
という用語は知らない?
そういやC入門書に #include <process.exe> とかあったっけw 不可能ではないが入門書に書くべきソースじゃないだろとw
578 :
デフォルトの名無しさん :2009/09/30(水) 08:25:08
>>569 ヘッダとソースに分けて分割コンパイルがいいと思う。
どうしてもインクルードしたい場合は、単純なテキスト(*.txt)でも単体で使えるソースファイル(*.c)でも オブジェクトを持たないインクルードファイル(*.h)でもないという意味で*.iにしておくなぁ。
.i より .inc をよく見る気がする
.iや.incより.cをよく見る
.iや.incも.cをよく見るよな
あるんだよね、"*.c"をインクルードしたがるプロジェクト。 単体でデバッグできないし、インクルードするソースは一本だけだし、なんでわざわざ分けるのやら。 幾つか理由がはっきりしていたのはこんな感じ。 ・インクルードされるソースには手をつけたくない。どうも、他からの流用らしい。 ・マルチプラットフォームを意識していた。尤も、他のソースが意識していないので殆ど意味がない。 ・インクルードされるソースを他のツールで生成していた。これこそ、拡張子を変えるべきだと思うのだけど。
お遊びだけどマクロでlambdaっぽいコードって書けない? これだとエラーが出る。 #define loop(v, min, max, lambda) for(int v=min; v<=max; v++){ lambda } main() { loop(i, 1, 5, (printf("[%d]\n", i)) ); }
他の拡張子はともかく.cか.hのどちらかと言えば.cだな
>>553 いつもの釣りにしちゃ丁寧だな<ビットフィールド
//
>>584 #include <stdio.h>
#define loop(v, min, max, lambda) for(int v=min; v<=max; v++) {lambda; }
int main()
{
loop(i, 1, 5, (printf("[%d]\n", i)));
}
// これなら通った。
>>589 ああそういうことか。ありがとう。
結構簡単にできる割に全く使われないねこういうの。
#define numberof(array) (sizeof(array)/sizeof((array)[0])) みたいな、ありがち定型マクロとは違うし ↓のような #define BEGIN { #define END } 別言語を真似るようなマクロはやめれ というのは良く聞く話
>>591 そんなクソコードあるの!?
初めて知ったよ。
#define BEGIN { #define END ;} だろぼけ
>>569 昔、ソースレベルリンクシステムとか言ってた奴いたよな。
BEGIN〜ENDはBシェルのソースで使われてるよ
program.h ┬ module_a.h │ │ └module_a.c │ ├ module_b.h │ │ └module_b.c │ └module_c.h │ └module_c.c program.c 普通はこんな感じじゃないの?
こんなバカな構造が「普通は」か・・・ Cプログラマでございと威張ってる奴の大半はこの程度なんだろうな。
こういうこと言う奴って、何が「馬鹿」なのか説明できないよな。
このC言語で書かれたソースコードhoge.cをコンパイラgccでコンパイルしてリンカでリンクして実行してください。 っていうのはどうやって 言えばいいでしょうか? 普通に hoge.cをgccでコンパイルして実行してください で通じますか?
>>598 module_a.h の存在意義は?
もし答えが、「module_a.c *のみ*で使う変数/関数/マクロ/typedefを別ファイルで定義した」
であれば、「バカな構造」だよ。
>>599 ビルドしてくださいとかは?
てか何も言わなくてもソース+それなりのMakefileとか何か渡せばあとやることわかるんじゃない?
>>599 相手によるけど俺には通じる
単一ファイルで標準ライブラリだけならgcc hoge.c だけで出来るし
-lm のリンクではまる人は何人か見たことはあるが
>>600 この図だけじゃ繋がりの向きが不明だろ、
program.h の中で他の 3 つの *.h が #include されてるのかもしれん。
program.hと.cが逆じゃね?
includeの入れ子は、個人的にはあまりやりたくない
606 :
599 :2009/09/30(水) 17:36:12
>>601-602 ありがとうございます。
単一ファイルで標準ライブラリだけです。
たいしたソースじゃなくて、単にサンプルコードの動作を見てもらいたい場合などです。
ありがとうございました。
607 :
デフォルトの名無しさん :2009/09/30(水) 18:51:45
makeに失敗するのですが、解決するにはどのようにすればいいですか? ld -s -x -M -Ttext 0 -e startup_32 boot/head.o init/main.o \ kernel/kernel.o mm/mm.o fs/fs.o \ lib/lib.a \ -o tools/system > System.map kernel/kernel.o: In function `scrup': console.c:(.text+0x1ed6): undefined reference to `columns' console.c:(.text+0x1fad): undefined reference to `columns' kernel/kernel.o: In function `scrdown': console.c:(.text+0x2023): undefined reference to `columns' make: *** [tools/system] Error 1
>>607 columnsというシンボルについて調べる。
あと、スレ違い。
リンクミスっているみたいだね 環境依存スレにいってそのソース(全部)をどこかに上げて聞けばいいよ
Javaの場合、double型の値をint型にキャストすると余った分は切り捨てられるのですが Cの場合は切り捨てられずに無関係の場所に書き込まれてしまうのですか?
>>610 あなたの考える「Cの場合」のコードを見せてくれよ。
double d=3.14; int i = (int)d; // =3 な適切なキャスト
「=3」が人を小ばかにするようながため息に見えたぜw
|:3ミ
バカボンのパパの鼻に見える。
>>612 結果として i には 3 が格納されるだけ。
無関係の場所への書き込み、というのがよくわからない。
たとえば、このコードでは、i を格納しているメモリの隣接する番地に、
d を構成するバイトデータなどが書き込まれることはない。
617 :
デフォルトの名無しさん :2009/09/30(水) 22:33:48
初コメです、大学からプログラムを始めたんけど全くわかりません なので誰か解いてもらえないですか? TY高速鉄道の運賃は、乗車する距離に応じて 値段が異なります。 1− 3キロ 200円 4− 5キロ 280円 6− 7キロ 350円 8− 9キロ 420円 10−11キロ 490円 12−14キロ 550円 15−17キロ 610円 (1キロ未満のは数は、1キロに切り上げます) です 「引数」は「無し」 「戻り値」は「運賃」の関数 keisan3() により、関数keisan3()内で乗車距離を キーボード入力させ、main()関数内で、 運賃をprintf表示するプログラムを作成せよ。 なお、17キロより大きい値や、0キロ以下の数値の キーボード入力をした場合、もう一度、乗車距離の キーボード入力をやり直しさせるようにプログラム すること。 [注意事項] ・乗車距離は double でキーボード入力できるものとする。 ・運賃は main() 関数 内でprintf表示してください。 ・運賃は整数とします。 ・乗車距離に対する運賃の計算は if, else if 文により実現すること。 ・キーボード入力のやり直しの箇所は、自分の創意工夫により 考えてみること。(ヒント:do while を使う) お願いします
ここはそんなスレじゃないよ
失せろゴミ
620 :
617 :2009/09/30(水) 22:39:58
自決しました。
4バイトの変数に8バイトのデータを格納する裏ワザ #include <stdio.h> main() { double d = 3.14; int n; *((double*)&n) = d; printf("%f\n", *((double*)&n)); } 3.140000
スタック壊れてますよ
____ / \ /\ キリッ . / (ー) (ー)\ <「4バイトの変数に8バイトのデータを格納する裏ワザ」 / ⌒(__人__)⌒ \ | |r┬-| | \ `ー’´ / ノ \ /´ ヽ | l \ ヽ -一””””~~``’ー?、 -一”””’ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー’´ ヽ / / | | l||l 从人 l||l l||l 从人 l||l バンバン ヽ -一””””~~``’ー?、 -一”””’ー-、 ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
626 :
デフォルトの名無しさん :2009/10/01(木) 00:22:33
まあそう虐めるなよ
>>622 _,___ ______ __ ___
_| .| _,-‐ヽ | | | .| | .|
. r‐ ̄' ――-\ ヽ _,,==========、 .| | | |
| __ __ .| l \ | ヽ | | _、_ .| .|
 ̄ / ./ \ | \ .| ―――> ,-‐' .| ヽ | |
_l .| | .| .| .| / `'、_ \ ./ ノ .7
/ ,| _ノ | ‐-― / _,、_ 7  ̄ ̄ __,~ .〉
ノ /.|  ̄ _= / ._/ .\  ̄~~| | ̄''"~ /
`ヽ_ノ \―-'" \,/ .`‐-――┘ \_____,-‐'
___ _,―、_ _,―_____
___,| .L_ / ̄―― .――ヽ / .|
| .|| ̄ ̄ ̄7 .|____ ___」 ._,、_=========_
―┐ .r‐ ̄‐-――_,ノ | ̄ ̄ ̄'~ .~ ̄ ̄'''> | \
/ / L_____ ____,ノ ―――- ,-‐'
/ ./r‐―| _,-‐' ̄'" .L__ _/ ~ヽ
/ | | L____ ./ .r‐- `ヽ、 ./ _-┐ |..___
/ | \ | |  ̄~ _へ_ / ./ / \ ~ |
`―-~ `'―‐-――┘ `‐-、――'"  ̄ ヽ┘ `―――┘
628 :
622 :2009/10/01(木) 00:49:56
,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 / ヽ/ ヽ l l l l l l ,. ‐'' ̄ "'' 、 ,,. --‐┴─-- 、 / ̄ "'' -、 / ,.-‐''"´ \ _/ ヽ l / ヽ l l / ● l l ヽ l (_人__ノ ● ヽ / そんな事言われても ,,>-‐| ´´ | / , , ,. ‐'' ̄ "' -、/ ウチ ポン・デ・ライオンやし / l ヽ_/ / ゙ヽ l ` 、 l l l ,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 l l, / ヽ / ヽ, / ヽ、,, l l l,,,___,,,/ "'''l l l ヽ /ヽ / ヽ,___,,,/ ヽ,,___,,,/ / | / |
チョコクルーラー最強
if文の条件に浮動小数型の変数を2で割った余りが0の場合を設定したいんですけど うまくいきません。どうすればいいですか
キャスト
浮動小数の割算に余りは出ません。
じゃあ割り算の結果の小数点以下が全部0になるときだけ 実行されるような条件どういうふうに書けばいいですか
modf
やりたいことがわかんねえ。 double d = ・・・; if ((int)d % 2 == 0) ・・・; 小数部を無視するならこうだけど、こういう意味じゃないんだろ?
>>632 intやlongにキャストしてから%使う以外にも、
fmod関数という手があるでしょ。
それは浮動小数の割算ではありません
どういたしまして
640 :
デフォルトの名無しさん :2009/10/01(木) 23:57:59
どう、いたし・まし・て<「どう(どのように、何を)」+「いたす(「する」の謙譲語)」+「ます(丁寧語を造る助動詞)」+「て(反問的用法の終助詞)」)。 「何を、したというわけでもありませんよ(だから、気になさらないでください)」の意
どういたしまして
C言語使いはオブジェクト指向が理解できなかった落ちこぼれだと聞きましたが やはりここにいる皆さんも頭が悪いのでしょうか?
>>642 はい、他の皆さんはどうかわかりませんが少なくとも私はあなたが仰る該当者です。
人間年を取ると頭が固くなってしまっていけませんね。
理解したからってそっちを選ぶとは限らんだろ。
C言語でもオブジェクト指向できるし C++はオブジェクト指向以外のパラダイムも入っているからねぇ 僕にもC++最強と言っていた時代がありましたが、結局C言語に戻ってきました でも、C言語にも名前空間とテンプレートが欲しい
プログラミングの真髄への道は、Cを学ぶことによって開かれる
648 :
デフォルトの名無しさん :2009/10/02(金) 01:17:24
C++はダメだろjk
C++は実装が汚すぎる
C使うと不便を感じることもあるけど落ち着くな Perlも結構落ち着くな
そこでC#ですよ
イベント処理っぽいの作りたいんだけど、よくわからん。 コールバック? 特定のキー入力があったら、この処理みたいな サンプルくれ。
>>652 C言語の仕様外の話だな
OSとかの情報がないとどうにもならんし
専用スレへ行ったほうがいいな
コンソールアプリなら標準じゃないけどgetchでどうにかなると思う。 cursesってよく知らないけどこういうのも長けてんのかな
>>653 ごめんごめん。
Linux(Fedora11)でgccを使ってる。
どーにも理解できん。
>>654 cursesってどっちかって言うと画面制御系かと
思ってたけど違う? それにgetchってループで
まわして処理するよね? そうでなくて、「割り込み」
っぽいのしたいんだけど、良かったら教えて。
イベント処理と割り込みは関係ねーよ。 Windows のメッセージ処理だって割り込みなんかしてないし。
割り込みなら Ctrl-C があるだろ。 それ使えよ。
スレッド使って割り込むんですかわかりません><;
>>657 初心者なもので、用語を間違って使っていたら謝る。
>>658 そのシグナル使いたくない理由があるんだ。
ちなみにGUIは難しすぎるんで、コンソールアプリなんだ。
誰か教えてくれ。
やりたいことが分からんから答えにくいが、 たぶん、kbhit() と getch() で出来るんじゃないか?
>>659 そんな高度な技になるのか・・・
素人にゃ無理っぽいな。
説明不足でほんとすまん。 libmad使ってコンソールで動くMP3プレイヤーを 作ろうと思ってるんだ。 サンプルのminimad.cみながら なんとか音出すところまではできたんだけど、演奏中に 他の処理(スキップとかボリュームとか)させるには どうしたもんかと悩んでるんだ。 なんかどっかにいいサンプルコードでもないもんかな?
>>656 割り込みでなければならない理由は?
たとえばこのアプリのこのような処理、という具体例はあるかな。
例:IEでページ読み込み中に×を押したら中断するような感じ
→スレッド終わらせてるだけ。シングルスレッドでやるなら随時×ボタンが押されたかどうかを見ることで解決
>>664 >>663 にも書いたけど、MP3演奏中に[P]キーで停止、
[F]キーで次のファイル、[R]キーで前のファイル、
といったイメージなんだけど、それって割り込みしないと
いけなくない? もしかして根本的に間違ってる?
処理Aをしている途中で処理Bをするためには、処理Aを止めなければならない 処理Aを止めるためには処理Aを操作可能な状態にいなければならない そのためには、処理Aを別スレッドで動かす、もしくは処理Aが自発的に止まるようにする
>>665 ごめん、入れ違いになったね。
そのライブラリにコールバック関数を渡すことはできないのかな。
非同期の演奏モードは無いのか? 同期しかないなら、それは演奏中に止めたりするようにできてないのか? 非同期で演奏できるなら普通に制御できるだろ。
minimad.cとやらを見てみたけど、 /* * This is the output callback function. It is called after each frame of * MPEG audio data has been completely decoded. The purpose of this callback * is to output (or play) the decoded PCM audio. */ ってなってるからここで随時操作されたかどうかをチェックすればいいんでないの?
なんだよ、ちゃんと用意されてるんじゃねーかよ。 時間無駄にしたわ。
672 :
669 :2009/10/02(金) 04:09:02
ああ、ついクセでメッセージキューがあることを期待してしまった
>>669 outputファンクションの中でgetch()なりなんなりで
入力があったかどうかを調べろってことなの?
>>670 すまん・・・
674 :
669 :2009/10/02(金) 04:14:09
>>671 ほんとに雑にしか見てないけど-DUSE_ASYNCで非同期になるんでないのかね。
675 :
669 :2009/10/02(金) 04:20:36
/* * This is the function called by main() above to perform all the decoding. * It instantiates a decoder object and configures it with the input, * output, and error callback functions above. A single call to * mad_decoder_run() continues until a callback function returns * MAD_FLOW_STOP (to stop decoding) or MAD_FLOW_BREAK (to stop decoding and * signal an error). */ とあるのでコールバック関数でMAD_FLOW_STOPを返せばいいんでない? 自前のMAD_FLOW_STOPが何かはわからんが。
探し方が悪いのか、頭が悪いのか、このlibmadってドキュメントが 見つかんなくてさ。 とにかくoutputの中でキー入力を見張って MAD_FLOW_STOPを送るような感じでやってみるよ。 アドバイスありがと。 またわかんなくなったら来るからよろしく。
コールバック関数というのは、時間のかかる処理A(たとえばdecode関数)のようなものを実装するときに、 処理を取られっぱなしになると困るであろうということから、処理Aの中で定期的に呼び出す関数のこと このとき、コールバック関数のインターフェイスのみが提供され、その実装は使用者にゆだねられる。 mad_decoder_initの第3パラメータ以降はすべてタイミングの異なるコールバック関数。
確かにドキュメント見あたらんね。
俺もコメント見ながら話してるだけだし、あんまり当てにならないかもよ。
>>672 で言いたかったのは
ouputの中でgetch使うと何かキーを押すまでそこで処理が止まっちゃうよということ。
kbhitで判定すれば取れるかも?
でしょ〜。 参考にできるのがそのminimad.cくらいで、他に 解説がない。 初心者にはつらいよ。 せてももっとサンプルコードがあると助かるんだけど。 ソースコード読めってことなのか・・・
>せてもも ??? 作った奴には聞けないのかね。
せめてもっとのミスだろ
彼氏がC++つかってた。別れたい… C++だとC厨とか呼ばれてCOBOL厨並みに恥ずかしいww 下向いちゃうしww 彼にはせめてVB使って欲しい・・・ 友達とかに彼のこときかれたら・・・・もう最悪ww せめて普通にVBやJavaぐらいは使って欲しい。 常識的に考えて欲しいだけなんです! 彼がC厨だとばれた時の恥ずかしさとか分かる? あのね?たとえば週末10〜20人ぐらいでバーベキューとか行くでしょ? それぞれ彼氏と一緒来るわけじゃない? みんなの彼氏たちは普通に医者だとか弁護士だとか商社マンとかなわけでしょ? C厨と一緒だと大恥かくでしょうがww
intへのポインタ とか doubleへのポインタ といった宣言をしますけど これって所詮は全てポインタでありアドレスなんだから、分けて考える必要って無いように思うのですが、 このような考え方は何か間違ってるでしょうか? 文字列にしても配列にしても、先頭のアドレスを指してるだけで配列自体は長さすら認識してないわけだから int型へのポインタと配列へのポインタすらも区別は必要ないように思えます。
>>682 別れればいいじゃん?
なぜそんな彼氏にしがみついてるのか理解できない
>>683 もう一回 配列 と ポインタ の違いを確認するべし
int a[5]; で sizeof(a) はどうなる?
int *p; で sizeof(p) はどうなる?
>>683 アドレスの値だけが重要であってその中身を問わないならその通りだが、実際にアドレスをそんな風に使うことは滅多にない
アドレスは、いずれその中身を参照するために保持しているのが普通だ
だったら、その型が何なのか、示されている方が扱いやすい
配列の長さがわからないのは不便だとは思うが、実は配列の長さを明示できるポインタの型もある
int (*p)[10] みたいな・・・ ただ長さが固定の配列へのポインタは思うほど役に立たないと思われ
分けて考えないと、一々アドレスを指定して、そこから何バイト読むか指定して、 データの型を指定して、って面倒な処理をしなきゃいけなくなるだろ。
unsigned char data[65536]; ここにデータ配置してすらすらプログラミングできない奴は頭が悪い。
メモリアロケータを自作しろという話ですね、わかります
>>687 qsort のように、型が確定してないインターフェースの関数を実装する場合には
そうするしかないやね
>>683 配列へのポインタから配列の長さを知ることはできるよ
693 :
683 :2009/10/02(金) 16:51:12
>>685 試してみましたが、
sizeof(a) => 20
sizeof(p) => 4
でした。両方4になると思ってましが何か色々と自分の知識不足のようです。。
char c1[10] = "りんご";
char *c2 = "みかん";
どっちもchar型配列だけどc1は自分の長さを知っていて*c2は自分の長さを知らない、ということかな。
>>686 >>687 なるほど…参照先を読み出す時に、ポインタ自身が参照先の型を知っていることが役に立つんですね。
レスありがとうございました。
694 :
683 :2009/10/02(金) 16:52:17
というか考えてみれば、c2の場合、与えられる文字列によってその都度c2の長さが更新されるってのも無理な話ですね。
695 :
683 :2009/10/02(金) 16:53:41
>>692 それが当てはまるのは、配列が長さを指定して宣言された場合のみ、という認識で合ってますでしょうか?
何か色々と勘違いしてるようなw
sizeof に括弧つけるんじゃねーよ。
> char c1[10] = "りんご"; > char *c2 = "みかん"; > どっちもchar型配列だけどc1は自分の長さを知っていて*c2は自分の長さを知らない、ということかな。 ちがう c1 は char型の配列 (で char を 10個収められる器がある) c2 は char型のポインタ c1++ は文法エラーになるが c2++ は文法エラーにならない
char c1[10] = "りんご"; char *c2 = "みかん"; c2++とか出来て便利 c1++はできない
>>697 ごめんよ ごめんよ
sizeof unary-expression
sizeof(type-name)
だったか
入門スレといえど最低限の知識は見つけてから質問しろよ ほんと最近ゆとりが万延してるな
何が最低限かというのは人によって違うと思う もうちょっと具体的に言うべき
すでに質問者は納得したようだが
>>688 を実践してみるのも良い勉強法だったかもしれん
>>688 の言ってる意味すら分からない俺は最下層プログラマー
>>704 つまり、メモリ管理を自分でやれってこった。
例えば整数型が欲しいなら* (int *) (data + 0)、
実数型が欲しいなら* (double *) (data + 8)、
と言う具合だな。
昔は64キロバイトの中でやりくりしたもんじゃった
あっそう
自作関数に関する質問なんですが #include<stdio.h> int calc(int i, int j) { int r = i + j; return r; の int r = i + j; return r; という部分を return i + j にするのとでは特に違いはないのでしょうか? 好きな方を使えばいいという感じなのでしょうか?
710 :
デフォルトの名無しさん :2009/10/02(金) 21:17:07
>>709 特に違いはないよ。
どっちかというと無駄なオブジェクトrができなくて良い分、後者の方が効率はよい。
ただしコンパイラの最適化が働けば同じかな。
>>710 ありがとうございます
特に気にしなくてもいいんですね
変数 r を使う意味について考える習慣が大事という気がする。 その変数を使わなければ行数を節約できるだろう。 だが、変数として名前をつけて管理した方がソースが読みやすくなり、 またデバッガでその変化を追跡するのが容易になったりするかも知れない。
関数内でconst int a = 0;と宣言すると 変数aはどこに確保されるのでしょうか?
関数内で int a = 0; とした場合と同じような所に 確保される可能性が高いと思われます。
#include<stdio.h> void hoge(int foo){ const int a=4; if(foo<0) return; printf("&a@hoge=%p\n", &a); hoge(foo-1); } int main(void){ int dummy1; const int a=2, b=3; int dummy2; printf("&dummy1=%p &a=%p &b=%p &dummy2=%p\n", &dummy1, &a, &b, &dummy2); hoge(5); return 0; } 実行結果 &dummy1=0022FF68 &a=0022FF6C &b=0022FF70 &dummy2=0022FF74 &a@hoge=0022FF30 &a@hoge=0022FF10 &a@hoge=0022FEF0 &a@hoge=0022FED0 &a@hoge=0022FEB0 &a@hoge=0022FE90
>>716 いや、const変数はアドレス演算子使うかどうかで最適化の結果が変わるんだけど
constじゃなくても同じだと思うけど
switch(c){ case a*b: //49行目 printf("正解です。\n"); s++; break; default: printf("不正解です。\n答えは%dです。", a*b); puts("\n"); printf("あなたは%d問中%d問正解です。\n", q, s); exit(0); break; } ーーーーーーーーーー エラー E2313 kakezan.cpp 49: 定数式が必要(関数 hantei() ) と出るんですが a*b では間違っているのですか? ーー Borland C++ 5.5.1 vista
なんで delete obj; のあとに obj = NULL; するんですか
\やだー!/
727 :
デフォルトの名無しさん :2009/10/03(土) 00:55:42
変数名、関数名、予約語などが大文字小文字の区別をしない開発環境があったら教えていただきたい
エディタで置換すればいいが 変な癖はつけない方が吉かな
>>727 case sensitiveな言語だから、自動で大文字小文字を変更する開発環境を求める感じかね。
VBAのエディタとかはそういうのするけど、Cでは見たこと無い
>>719 配列宣言時 要素数指示に使える/使えない ぐらいの差があるからね
const int num = 10;
int array[num]; /* Cは文法エラー C++はOK */
>>733 それでもC99なら・・・C99ならやってくれる・・・!!
>>735 C99って、もしかして
int num = foo();
assert(num > 0);
int array[num];
が通ったりするの!?
やってみれば分かると思うけど、普通に通るはず。
-std=c99でも-std=c89でも通ったよw
740 :
739 :2009/10/03(土) 12:36:12
>>738 > -std=c89でも通ったよw
いやwじゃねーだろ
通らねぇよ。
通ったらたまったもんじゃない。
C99ではおkだったなんて。
もうC++ばっかやってるとC言語の躍進についていけなくなるな。
int array[10]; としたとき, array と &array って同じ型ですか?
永遠に抜けない無限ループ作ったとしたら while(1)よりgotoの方が早い?
どっちでも一緒
下のプログラム作って実行すると,下の実行結果となるんです. &arrayのsizeofが,なぜ4(アドレスのバイト数)ではなく10となるんでしょうか? ---プログラム--- char array[10]; printf("%d %d\n",sizeof(array),sizeof(&array)); ---実行結果--- 10 10
>>746 どうもありがとう.納得することができました.
ちなみに
>>746 のプログラムは,俺の使用しているBCC Developer(ver1.2.21)では,
10 10
1 10
となりました.
BCCがそう思うんならそうなんだろう 『BCCん中』ではな AAは無理だった
>>738 gccは-pedanticつけないと独自拡張使いまくるからな。
750 :
738 :2009/10/03(土) 14:51:35
>>749 -std=c89 -pedantic
でもwarning止まりだね
Javaしか知らないので的外れな質問かもしれませんが、 C言語にはJavaにあたるArrayListやLinkedList、Mapといったコレクションライブラリは標準ライブラリとして提供されてないのですか? 自分で一から構造体を定義して連結リストを作って…とやっていくのが王道ですか? だとしたらすごく大変そうなのですが。。
>>751 標準ではないライブラリを使えばいいだけです
>>751 C言語じゃないといけない理由がないのであれば、C++でやれば?
うん、そうだね 用途に合わせて自分で毎回作るか 自分で汎用的なライブラリを作って使いまわすか CSTLのようなマクロバリバリのライブラリを利用するか
755 :
751 :2009/10/03(土) 16:02:29
なるほどありがとうございます。 Javaと違って個人のスキルが大きく作用しそうですね
そうでもないよ。
1000個の要素を持つ配列を個用意して、そこに適当に選んだ場所に値を入れて それをソートし、使う、というプログラムを組んでいます。 今、ある値をその配列の10番目に入れるか、500番目に入れるかで プログラムの重さが全く違うことに気づきました。 ソートが重くなってるのかと思いましたが、どうやら違うようです。 どうも値を挿入する段階で重くなっているように見えます。 どのような原因が考えられるでしょうか?
例えば先頭に挿入したらデータが500分動くだろ。 それで遅くなる。 どういう操作を最も頻繁に行うかで適切なデータ構造は変わってくるよ。 配列が得意なのはランダムアクセス、交換、データの末尾への追加。 挿入削除は遅い。
仮想メモリだろ。
500じゃなくて1000か
>757 "適当に選んだ場所に値を入れる"時に、>758見たいに挿入=後ろにずらしてくのか? 元々その場所に入っていた値が無くなるだけではなくて? 何をしているのか良く分からないのでなんとも言えん 単に新しい値に置き換えてソートしているなら10番目に入れようが500番目に入れようが処理速度に影響無いと思うんだが...
>>757 > ソートが重くなってるのかと思いましたが、どうやら違うようです。
> どうも値を挿入する段階で重くなっているように見えます。
その判断の根拠は?
763 :
デフォルトの名無しさん :2009/10/03(土) 22:42:27
配列を動的に確保することって出来ないの?
C99使うかかmalloc使うか環境限定でalloca使うか
Cのmalloc()嫌だよなあ 解放忘れを必ずと言っていいほどする やはりC++のコンストラクタ・デストラクタ・クラス・演算子の多重定義が ないと苦しいわー
>>765 いっそわざと開放しなかったんです!
って言い張れば?
どうせプロセスが終了すれば…(ry
っていう輩と一緒になって。
767 :
デフォルトの名無しさん :2009/10/03(土) 22:54:42
そんなあなたにガベージコレクション
リソースの開放忘れするような奴はC言語使うな
なんでここC++厨が多いの?
>>769 所詮C言語は程度がしれてるってことだろ。
>解放忘れ 確保した領域がプログラムの終了まで使われる場合はfreeする必要はない。 プログラムの終了と同時に自動的にその領域は解放される freeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない
>>771 >freeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない
freeしたらOSに返す場合もあるよ
WindowsとかWindowsとかWindowsとか
>>771 それくらい知ってる。
知らない人もいるかもしれないけど。
> プログラムの終了と同時に自動的にその領域は解放される
別にそんな保証はないだろ。
ただそう言うOSが多いってだけでさ。
適当なことを断定的に言うなよ。
>>772 WindowsでもOSに返せない場合があるよな
malloc()した領域が切れ切れにフラグメントしていてブロックに
なっていない場合
2chの専ブラなどで長時間使っていると次第に使用メモリが
増えていくのはそのせいだと思う
しかし未使用ハンドルも一緒に増えて行くのは何とかして欲しい
おっさんはすぐどうでもいい雑談はじめるな
(1)の戻り値をprintf("%s",hoge());表示しても 文字化けするということは、 "HOGE"は静的領域に確保されていないということですか? (1) const char *hoge(void) { const char *test[] = "HOGE"; return test; } (2) const char *hoge(void) { static const char *test[] = "HOGE"; return test; }
>>776 (1)のtest[]は関数の終了と同時に消滅するだろ
>776 >"HOGE"は静的領域に確保されていない って話じゃなくて >779 だね
>>780 規格書に書いてない情報は信用しない事にしている
実装方法はC言語の関知するところではない
>>772 もしかして、malloc/freeの実装が単にHeapAlloc/HeapFreeに丸投げの場合のことを言っている?
HeapAlloc/HeapFreeはOSのAPIだけど、
こいつらはよそのmallocと同じように別のAPIで確保したメモリを管理しているだけなので、
「HeapFreeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない」
と言い換えができる。
じゃあfree()は何のためにあるのさ? リッチなOSがない組み込み機器だってあるのに。
>785 確保した領域を再利用するためだろ
>>785 freeのあと、mallocしたら以前mallocで確保した領域と同じ領域が割り当てられるのはよくあること。
再利用する場合でもfree()しなくて良いとはだれも書いてないし
だね そもそも俺はfreeすべき派だし
だいたい「終了時に解放される」からいい、なんて何の理由にもならない。 年中稼動してるサーバーサイドプログラムとかでそんなこと言ってたら速攻クビだよ。
>「終了時に解放される」からいい いやだから再利用しない限りfree()いらない。だろ?
またmalloc解放論争かよ おまえらヒマですね
そして次はcalloc (or memset)初期化論争w
>>793 free()が出てくるんだから「いらなくなった時」の話だろが。
プログラム終了時まで永続的に使う領域にfree()が不要なのは当たり前だろ。
君ら邪魔
>>792 逆に、仕事がある時に起動して仕事終わったらすぐ終了するようなプロセスでは問題ないってことだ。
終了
>だいたい「終了時に解放される」からいい、なんて何の理由にもならない。 ↑ ↓ >プログラム終了時まで永続的に使う領域にfree()が不要なのは当たり前だろ。 フフフフフ
mmapとかVirtualAllocとか使ったら
>>750 pedanticオプションをもう一度勉強してください。
というかその警告内容見てください。
してないよ freeは必ずすべき
細かくゴチャゴチャとメモリ確保するようなプログラムは プログラムごと終了してしまった方がいいな。 スタブとして作って、一仕事終わるたびにプログラム終了。これで良い。
あなたは人生終了してください
>>805 > プログラムごと終了してしまった方がいいな。
えっ?
しかしつまらんスレだな
>>765 free() 忘れるような人はきっと delete も忘れる。
RAIIでおk
やはりC#が最高だな
×プログラムごと終了してしまった方がいいな。 ○OSごと終了してしまった方がいいな。
値を返さないファンクションを関数と呼ぶのはやめろ。
じゃあ何と呼ぶの、そのファンクション(笑)を
ファンクション=関数 値を返さない関数を関数と呼ぶのはやめろ?
プロシージャとでも呼べばいいのかな わたしは基本的に値を返さなくてもいい関数でもintを返すように定義しているけどね 関数型やった所為か関数は値を返すものしか考えられない
以前から気になっていたのだが、 プログラミング言語でいう「function」は数学の「関数」とはちょっと違うよね? 辞書とか書籍を参考にしてみたけど、「機能」という意味らしいのだが。 実際どっちなの?
>>818 >プログラミング言語でいう「function」は数学の「関数」とはちょっと違うよね?
FORTRAN でいう Function Subprogram は関数ですが何か
821 :
818 :2009/10/04(日) 16:49:12
ちょっとパソコン(笑)に詳しい数学の先生が、 大学時代にやったプログラミングの実習で覚えたらしいのだが 「プログラミングは数学なんだよ!関数とかでてくるよ! だから君も数学勉強しておきなw」 って調子乗ってるからどうにかできないものかと。 関数のことばっかり言ってる。 これがバカの一つ覚えってやつですかね。
>>818 数学における「関数」を英語にするとなんていうか知ってるか?
823 :
818 :2009/10/04(日) 16:50:40
数学の先生がもしプログラミングを出来なかったらそれこそ恐ろしいがな たぶん818が知ってる数学の関数のレベルが低いだけだと思う
825 :
818 :2009/10/04(日) 16:55:25
俺様が Wikipedia で調べてやったぞ w > 関数(function)が返す値は戻り値(もどりち)または返り値(かえりち)と呼ばれる。 > functionが関数と訳されるのは、単に機能の実装を行うだけでなく、 > 引数としてとりうる値の集合から、戻り値としてとりうる値の集合への > 写像のように捉えることができるためである。したがって、ほとんどの > 命令型プログラミング言語では次の点において数学の関数とは異なる。 > * 引数が同じでも状況に応じて戻り値が異なる(状態を持つ) > * 関数の処理の実行によってシステムに変化が発生する(副作用を持つ) > * 戻り値が存在しない場合がある
C#やれよ。 面白いぞ。 型とか構造体とか全部objectの派生になってて良く出来てるよ。
ああ、粘着し始めた…ガキが
828 :
818 :2009/10/04(日) 16:58:35
>>827 どうした?
Wikipedia 様の記事を引用したんだから、ちゃんと反論してよ
どうしてこうなった…
その引用文の前半部分の日本語読めてるか知らないけど そういう意味で関数と呼ばれる。調べても分かるようなことを 2chで聞いてから、それに反対するために調べる おかしいよ
wikipediaクソだな。
>>825 その言い方は、function に与えられる条件の一部を引数とし、function が生成した結果の
一部のみを戻り値としている。条件空間から結果空間への函数を成している事は事実である。
833 :
818 :2009/10/04(日) 17:16:48
>>830 > そういう意味で関数と呼ばれる
ちょっとまってくれ!
俺の質問は、*** 数学の意味での関数か *** ということだったはずだが。
wiki荒らしてやるニダ
じゃあ本来の順序を無視して、関数という言葉がもとからあったとして それを数学とプログラミングの一部に当てはめたとしよう すると関数はもともと同一であったとしても 数学とプログラミングが完全に同一でなければその中で意味も変わるかもしれない つまりその質問は数学とプログラミングが全く同じかという馬鹿らしい質問なんだよ プログラミングが証明問題を解くプロセスに似ていたり 時に数学的な考え方が重要であったりしても 数学とプログラミングが全く同じだなんて誰も言えないよ 関数という呼ぶ意図は同じだろうが それがプログラミングの中でも数学の意味である必要性はない だからといってその先生は嘘を言ってるわけではない、と思う
こんなレベルで言葉の意味にこだわる奴って アスベスト症候群?だっけ?
いや定義にこだわるのは重要だろ
>>837 アスペルガーのことかな
「こんなことを勉強して何の役に立つのか」と考える学生が多いから
言っただけだろうに、先生も大変だな。厳密には違うってつっこむなよ
初等数学は諸々の準備段階の話だろ
何が正しいか?厳密にはどうなのか? これらを追求するのはプログラマに限らずコンピュータを仕事とする人の姿勢として大事なことだよ。 何故ならコンピュータは命令されたとおりにしか動かないからな。
>>838 や
>>840 の言い分は誤謬だろう
対人において常にそうである必要はあるのかという話
人間は大文字と小文字を区別することも同じものとみなすことも出来るし
ソースコードに関わる話でもあるまい
842 :
デフォルトの名無しさん :2009/10/04(日) 18:16:37
命令の正しさは重要ではない
>>841 対人のアウトプットもインプットも正しい方が正確に意図が伝わるだろう。
相手の応用力に期待するのは対人能力が低いと言えるな。
でも役所の書式は細かすぎてきらい しかも細かい指定がある部分と書く人にゆだねられる部分があるからだいきらい
値を返そうが返すまいが「ファンクション」と呼んで問題はないが、 「関数」と呼ぶ場合は必ず値を返さなくてはならない。 米や芋を「ベジタブル」とするのは問題ない。 しかし、米や芋は「野菜」ではない。
C言語はオブジェクト指向が理解できない人たちが残ってる墓場と聞きましたが やはり先輩方も頭が悪いのでしょうか?
狭義にはね
>>813 なんだ。理解できていなかったのか。
きみは入門スレに来るのはまだ早いよ。帰んな。
そもそもC言語の定義は数学書に載ってないし C言語のパーサに関数のプロトタイプとかあるので ほとんど全部関数って呼んでるなぁ俺
ファンクションか関数かなんて拘って何か意味あんの? 拘ってる奴だけが勝手に脳内変換して解釈すればいいじゃん
「ファンクション」あるいは「機関」と呼ぶべきだな。 「関数」は適切じゃない。 main 機関、printf 機関、問題ない。
だから拘ってる奴だけが勝手に誤用だと判断したら 正しく脳内変換すればいいじゃん。だってそれはC言語の定義じゃないから どっかで身に付けた習慣を人に押し付けられてもね
逆に考えるんだ。 「「「値を返さない」という値」を返している」 と解釈するんだ。 「関数」で問題ないよ。
>846 >642-646
不都合があるときだけ特別に「値を返さない関数」と呼べばいいじゃん
言語規格上定義が決まってるのにうだうだ言ってる奴はなんなの
つまり FunctionとSubを使い分けるBasicがCよりも正しい(結論)
>>853 OCamlのunit型なんかそういう考え方だよねきっと。OCaml使ったことないけど。
printf は返値を使ってくれないことが多いな
>>857 function と呼んでいる間は値を返さなくても問題ないんだよ。
function を「関数」と訳した瞬間に意味が抜け落ちておかしくなるんだよ。
でも関数じゃん
規格書で「関数」って言葉を使ってるんだから関数でいいじゃん。
値を返さない関数はありえないっていう言語作ればいいじゃん。
ライブラリ関数の一部は関数ではなかったのか!
>>826 構造体は値型なわけだが。
>>833 JIS Cに於いては、値を戻すかどうかに関わらず「関数」と呼ぶ。
勿論、数学の関数とは無関係で、責任は最初の翻訳者にある。
一方で、値を返さないものを関数とは呼ばない言語が多くあって
それらは数学の関数と同じと考えて差し支えない。
つまりそれが「数学でいう関数と同じものかどうか」は
プログラミング言語次第であって、そもそも最初の
>>818 で
>プログラミング言語でいう
というのがおかしい。
867 :
デフォルトの名無しさん :2009/10/04(日) 21:17:47
正直CよりPascalのほうがなんかかっこいい
スマートさならpythonが一番だな
functionと関数は違うとか言ってる知ったかぶりな奴は何を根拠に言ってるわけ? lispなんかだとfunctionは必ず値を返す。 値を返すこと以外が主目的であるような関数は、その目的を副作用として提供するだけで値は常に返す。
lispではどうこういわれても、ここはC言語のスレなわけで。
ふと思ったんだけど、「式」は値を持たなくてもいいの? っていうか戻り値voidな関数の呼び出しは、値を返さないけど式と言えるの?
「式」に値の意味はない。 こっちは原語でも同様。
>>871 値を持つと言うかどうか分からないけど、
少なくとも戻り値voidな関数の呼び出しもCでは式、例えばfree(p);はvoid型の式。
なお、(void)printf("hoge");や(void)0;のようにvoidでキャストしてvoid型の式を作ることも可能。
>>873 >(void>printf( ... ) って、単にいにしえの lint をごまかすだけの作法だったような気がするのですが。
いやいや、単に「戻り値を見ずに捨てますよ」って明示しなさいなってことだろ >873 lintとかw
値は返しますが、その値に意味なんて無いよ!
ってことだろ。
voidの英単語の意味を考えて見れば分かるはず。
>>875 さんと俺は同意見だな。
877 :
873 :2009/10/05(月) 00:27:07
>>874-845 いやいや、Cの文法上、そうも書けると言っているだけで推奨するorしないという意図はこめていないよ。
878 :
875 :2009/10/05(月) 00:35:44
いやいや、>875 は >874 が 「lint」とか書いてたから...ってだけ >推奨するorしない とか関係ない
処理系によってはvoidと書けば最適化に効果がある
880 :
873 :2009/10/05(月) 01:09:52
>>878 ああ、そういうことか。
すまん、ちょっと勘違いしていた。
>>881 別にどっちも同じだろ。
ここで何か悪いか?
馬鹿がファンクションと関数は違うとか 数学の関数とは違うとか論外なことを言わなければ 議論の必要もない
何気に”論外なことを言うと議論の必要が有る”っつってんのがひどい
実際そうだよ。現実には無視されて終わりだが 2chでは無視すると粘着するし、相手すると論破するまで終わらない 最悪だよ
スルー検定ですねわかる
どうしてmalloc+memsetとcallocの議論をしちゃいけないの? どうして他人の意見を封殺するの?
論破されるのが恐いんだろ。
realloc して領域が広がった部分を 0 埋めしてくれる関数は欲しい
論破できるなら議論もすぐ終わるだろ
入門スレで議論するのもどうかと思うんだが
正しいことを書いただけじゃ論破にならない。 相手が理解できるようにかみくだいて説明できなきゃ。 まあ、だいたいが説明能力=理解力なんで ちゃんと理解できてないと説明はできない。
>>891 議論で宗教問題が解決するなら戦争なんか起こらんわい。
>>894 よくよめ。
宗教論争にまで発展する内容について、論破できるなんて言ってる
>>888 への皮肉だ
896 :
818 :2009/10/05(月) 16:29:27
/(^o^)\
おまえらを論破するくらいは楽勝だろ。
gotoについて語れよ
>899 C言語ので疑似例外処理に使っています
お前らBC++5.5でgotoをgo tooと書くとwarningにme tooって表示されるの知ってた?
知ってた
>>900 setjmp longjmp を使うほどではないけれど ってところ?
寂しいならVIPでやれ
>903 そう、関数内で閉じる例外のみ *jmp()は関数外に飛べるけどintというのがなぁ マクロで覆っても構文が汚くなるのも好きになれない
ループが最後まで実行されたときと、途中で抜けたときで分岐するときなんかはgoto使いたくなる。 チキンだからフラグ持たせたり、ループカウンタの判定で処理するけど。
フラグとk(ry やめようきりがない。
stdlib.hで宣言されているmalloc(), calloc(), realloc()のいずれかひとつを一度だけ呼び出すことによって、動的に3次元配列(配列の配列の配列)のようなオブジェクトを作るにはどうすればよいか。 3次元配列のようなオブジェクトとは、T ***t = T_allocate_3d_array(width, height, depth);とすることでメモリ上に割り当てられたオブジェクトことである。
>>909 そういうときは「教えてください」って言うんだよ
>>909 int*** cube = (int***)malloc(width*height*depth*sizeof(int));
だめだよ、お兄ちゃん 物乞いに餌あげちゃあ 彼らは動物園のゴリラ さんと同じなんだから
単にかけ算した分確保すればいいんでないの?
>>913 ばーか、それじゃ4,2,7がほしいとき乗算2回入って遅くなるだろ。t(4,2,7)で直にいじれるようにしろと聞いてんだよ。
ID無いからコテハンつけて発言しろよ >917 オマエモナー
918 :
デフォルトの名無しさん :2009/10/05(月) 20:48:23
あはい
状態遷移にしたほーが(ry しんどいやめましょか
最初に #define で数値を決定したものをにちに変更することは可能なのでしょうか? たとえば #define A 5 if(x<4) このときAの数値を変更 わかりずらかったらすいません
>>921 #if というディレクティブはありますね。これを調べてみてください。
>>921 #defineはコンパイル時に働くもの。
if は実行時に働くもの。
よって、ムリ。
Aを変数にすべき。
お兄たんが
>>909 ができたら入門卒業だっていってたよ
何に使うんだよ ボクセル分割とかか?
>>924 卒業!
malloc(sizeof(T**)*depth+sizeof(T*)*height*depth+sizeof(T)*width*height*depth);
927 :
デフォルトの名無しさん :2009/10/05(月) 22:27:14
何か関数の由来勘違いしてる人が多そうだな function->函数(中国語の音訳)->関数(日本語の当て字) だぞ したがって別に値を返そうが返すまいが functionを関数と呼ぶのは理にかなっている
さすが
>>926 、卒業だな。
ついでに3次元配列のように使うサンプルコードがあればなおよかった。
930 :
デフォルトの名無しさん :2009/10/05(月) 23:41:24
C言語をはじめたばかりであまりわからないのですが、 ビットシフトはなんの役に立つのでしょうか?
>>930 大して役に立たない。
初心者は気にしないでよい。
それよかとにかくひたすらポインタになれる事にのみ
全力をそそごう。
>>930 マシン語に近いところをいじれるのが売りという時代もあった
ポインタにしてもマシン語から考えればなんでもない話
ここはレベルの低いインターネットだな
だからコテ付けろと何度いえばわかるんだ
>>935 コテつけたらどうなるんですか
ID強制表示の話じゃないんですか
ああああ
whileの中を一回も通らずに終わってしまいます 何故でしょうか? #include<stdio.h> int main(){ int eof = 0,a,b,c,d,e,f,g,h,S = 0,T = 0; while(eof = 0){ scanf("%d %d %d %d",&a,&b,&c,&d); scanf("%d %d %d %d",&e,&f,&g,&h); S = a + b + c + d; T = e + f + g + h; if(S >= T ){ printf("%d",S); } else{ printf("%d",T); } return 0; } }
while(eof == 0){
あぁ、、、、 有難うございます・・・。
コテつけろよ! っておっしゃってますよ
印字されないんですが、何ででしょうか? #include<stdio.h> int main(){ int h[30],a,b; for(a = 0;a < 28;a++){ scanf("%d",&b); h[b] = 1; } for(a = 0;a < 29;a++){ if(h[a] == 0){ putchar(h[a]); } } }
されるだろ。
>>943 何がしたいのか分からん
h が初期化されていない
1 は文字じゃない
putchar('\0'); しか実行されない
>>945 すまん、何するか言うの忘れてた
1~30までの数字を28個打って、
残った二つの数字を出力するっていうプログラム
俺は数字が出てきたところに1を入れて、
下のループで0が入ってる数字を出力してるんだが、
何でputchar(\0);しか実行されないのかわからない
あと、h[30]の時点で、配列には0が入ってるんじゃないんですか?
h[30] = 0ってしてもだめだったんですが・・・。
int h[30] = {0}; これで全部0になるよ
> h[30]の時点で、配列には0が入ってるんじゃないんですか? はいってません。 memsetでもつかえ。 あと2回目のループで出力したいのはh[a]ではなくて、aの値じゃないのか。
>>947-948 ありがとうございます
一応それに従って変えてみたんですが、
デバッグした時に、強制的に終わらせられました
#include<stdio.h>
int main(){
int h[30] = {0},a,b;
for(a = 0;a < 28;a++){
scanf("%d",&b);
h[b] = 1;
}
for(a = 0;a < 29;a++){
if(h[a] == 0){
putchar(a);
}
}
}
変な数字入れたんだろ。 ついでに、表示だが、 それだと強制終了の原因にはならないが 期待通りの結果にもならないだろうな。
putcharは変数の値を出力する関数じゃねえつーの! for(a = 0;a < 29;a++){ は0〜28までしか回らないけどいいのか?
今の僕には理解できな〜いー♪
もうちょっとヌルい所からやったほうがいいよ。 こういうのは結局は段階だからさ。 順番にやっていけば出来るようになってるって奴だから。
h[b] = '1';
いやいや、そこはフラグだから。 数字入れちゃだめだろ。 数値入れないと。
for(a=0; a<30; a++) if(!a[h]) printf("%d", a);
putchar(a); -> printf("%d\n",a);
>>955 別に数字入れても動作はかわんねーだろ
0かそれ以外で判定してるんだから
まあ数字にする意味はないけどなw
961 :
デフォルトの名無しさん :2009/10/06(火) 07:23:56
>>959 >このスレってまともに規格を知らない奴らが多すぎないか?
スレタイからして止むを得まい。
このスレが初心者お断りなら、そういう不満も受け付けるけどね
964 :
デフォルトの名無しさん :2009/10/06(火) 09:23:13
C使うヤツはバカ
と言う奴に限って雑魚
具体的なことは何も言えないやつに限って、こういうことででかい態度を取りたがるw
誰でも一度は思っただろう C言語 ↓ Cランゲージ ↓ シーランゲージ ↓ 知らん刑事
ないない
>>967 そこまで頭良くなければCは出来ないって? あはは
970 :
デフォルトの名無しさん :2009/10/06(火) 10:53:10
. 1. HTML で検索した結果 1〜10件目 / 約5,040,000,000件 . 2. PHP で検索した結果 1〜10件目 / 約2,970,000,000件 . 3. Java...... で検索した結果 1〜10件目 / 約 835,000,000件 . 4. Forth. で検索した結果 1〜10件目 / 約 323,000,000件 . 5. Ruby.. で検索した結果 1〜10件目 / 約 275,000,000件 . 6. perl..... で検索した結果 1〜10件目 / 約 245,000,000件 . 7. Python... で検索した結果 1〜10件目 / 約 204,000,000件 . 8. pascal... で検索した結果 1〜10件目 / 約 170,000,000件 . 9. Delphi で検索した結果 1〜10件目 / 約 127,000,000件 10. VisualBasic...で検索した結果 1〜10件目 / 約 121,000,000件 11. lisp... で検索した結果 1〜10件目 / 約. 26,700,000件 12. fortran で検索した結果 1〜10件目 / 約. 21,300,000件 13. COBOL で検索した結果 1〜10件目 / 約. 18,500,000件 14. HSP で検索した結果 1〜10件目 / 約. 12,300,000件 15. FreeBasic.. で検索した結果 1〜10件目 / 約 6,320,000件 16. Tcl/Tk. で検索した結果 1〜10件目 / 約 4,940,000件 17. QBasic で検索した結果 1〜10件目 / 約 4,190,000件 18. VisualC.... で検索した結果 1〜10件目 / 約 1,360,000件 ← ここ 19. DarkBASIC. で検索した結果 1〜10件目 / 約 1,320,000件 20. BasicStudio で検索した結果 1〜10件目 / 約 304,000件 21. N88basic. で検索した結果 1〜10件目 / 約 215,000件 22. f-basic で検索した結果 1〜10件目 / 約 109,000件 23. ActiveBasic で検索した結果 1〜10件目 / 約. 89,800件 24. 99BASIC.... で検索した結果 1〜10件目 / 約. 11,500件 3Dprogramming で検索した結果 1〜10件目 / 約794,000件 2Dprogramming で検索した結果 1〜10件目 / 約. 57,400件 intel で検索した結果 1〜10件目 / 約729,000,000件 amd で検索した結果 1〜10件目 / 約355,000,000件
"C" で検索しろよ。
オススメのエディタ教えてくれ
notepad
cat
EDIT/LSE
EDLIN
wordmaster
Turbo Pascal
Visual C++
今使ってるエディタの不満点を言わなきゃわからんよ
linuxで自動インデント機能があるエディタある?
>>981 wineでWindowsのソフトを動かすのもお薦め。
たまにあるんだよな。 自動インデントする代わりにタブ入力できなくなってるとかのオレルール押し付けエディタが。
気に入らないエディタは使わなければいいだけなので、そのようなエディタが世の中に存在していても特に害は無い
>>985 > そのようなエディタが世の中に存在していても特に害は無い
誰も害があるなんて 言ってないだろwww
987 :
デフォルトの名無しさん :2009/10/06(火) 18:50:13
ってゆーか、オレルール作らないとvimもemacsも使いづらいよね。 使いづらかったら使いやすいようにすればいい。そのためにカスタマイズできるようになっているんだから。
入力ミスを指摘してくれるようなエディタってある?
>>988 TABキーをインデントに割り当てているからTABコードの入力はエスケープしないといけないエディタならあるね。
決して押し付けているわけではないだろうけれど、調べることもできない>984のような人には押し付けに感じるのかもしれない。
991 :
デフォルトの名無しさん :2009/10/06(火) 19:23:38
VIPでやれ
>>989 求める物のレベルが分からないけど、まぁ、ある。
知能が低いのはどうしようもないな
あら、次立たないのか まぁそれはそれで構わないけど
>>981 emacs/mule はデフォではいっていませんかね
viでオートインデントできるよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。