C言語なら俺に聞け(入門篇) Part 53
レス数が1000を超えています。これ以上書き込みはできません。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。
教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
http://pc12.2ch.net/test/read.cgi/tech/1250204272/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 52
http://pc12.2ch.net/test/read.cgi/tech/1250446591/
過去スレ
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
0002デフォルトの名無しさん
2009/09/17(木) 11:30:54マジレスきぼん
0003デフォルトの名無しさん
2009/09/17(木) 12:19:58int main(){
puts("Hello, World!");
return 0;
}
これで完璧じゃない?
0004デフォルトの名無しさん
2009/09/17(木) 12:52:020005デフォルトの名無しさん
2009/09/17(木) 12:58:45お前は俺か
心の中で思っていた
0006デフォルトの名無しさん
2009/09/17(木) 14:34:10なぜ?
0007デフォルトの名無しさん
2009/09/17(木) 17:12:080008デフォルトの名無しさん
2009/09/17(木) 18:21:09main(){return puts(&"Hello, World!"[0]);}
0009デフォルトの名無しさん
2009/09/17(木) 18:52:01#include <stdio.h>
int f(char *p){
return *p && (f(p+1),putchar(*p));
}
int main(){
return f("!dlroW ,olleH");
}
0010デフォルトの名無しさん
2009/09/17(木) 18:54:04int f(char *p){
return *p && (f(p+1),putchar(*p));
}
int main(){
return f("\n!dlroW ,olleH");
}
0011デフォルトの名無しさん
2009/09/17(木) 18:59:220012デフォルトの名無しさん
2009/09/17(木) 19:05:200013デフォルトの名無しさん
2009/09/17(木) 19:46:140014デフォルトの名無しさん
2009/09/17(木) 19:49:120015デフォルトの名無しさん
2009/09/17(木) 19:50:440016デフォルトの名無しさん
2009/09/17(木) 19:52:450017デフォルトの名無しさん
2009/09/17(木) 19:54:11>>9と>>10はなんじゃこりゃwwわけわかんねwwwうぇっうぇっwwwてなる。
0018デフォルトの名無しさん
2009/09/17(木) 20:00:480019デフォルトの名無しさん
2009/09/17(木) 20:18:18これって常に左から判定されると決まってるの?
putchar('A') && putchar('B');
これが BA と出力される可能性って無いの?
0020デフォルトの名無しさん
2009/09/17(木) 20:22:41無い
詳しくは副作用完了点でぐぐる
0021デフォルトの名無しさん
2009/09/17(木) 20:37:52int main(void) {
char aisatu[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, '\0'};
fputs(aisatu, stdout);
return 0;
}
0022デフォルトの名無しさん
2009/09/17(木) 20:58:11ちょっと調べてからレスすればいいのにね。
0023デフォルトの名無しさん
2009/09/17(木) 21:18:51int
f(const char *s)
{
return *s && putchar(*s) && f(s+1);
}
int
main(void)
{
return f(&0["Hellow, world!\n"]);
}
/* orz */
0024デフォルトの名無しさん
2009/09/17(木) 21:22:060025割と詰まらん
2009/09/17(木) 21:35:28static char const hello[] = "Hello world!\n";
int main()
{
for (unsigned ic = 0; ic < sizeof(hello) - 1; ++ic) putchar(ic[hello]);
return 0;
}
0026デフォルトの名無しさん
2009/09/17(木) 21:41:03int
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 */
0027デフォルトの名無しさん
2009/09/17(木) 22:57:45int 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;
}
0028デフォルトの名無しさん
2009/09/17(木) 23:39:28char *p = "\000";
これって同じ内容になるの?
0029デフォルトの名無しさん
2009/09/17(木) 23:47:38同じ内容が何を意味しているのか分からないけど、
おそらく君の考えている通り同じです。
まあ型が違うとか後者は変更不可能だとかちょっとした差はあるけどもね。
0030デフォルトの名無しさん
2009/09/17(木) 23:49:410031デフォルトの名無しさん
2009/09/17(木) 23:58:25頭の痛くなるHelloWorldだな
0032デフォルトの名無しさん
2009/09/18(金) 00:18:38"\000"
は { 000, '\0' } にならないか?
"\xabcdefghi"
こういうのはどうなるわけ?
どこで区切るの?
0033デフォルトの名無しさん
2009/09/18(金) 00:25:54ttp://codepad.org/9Bt3TGvw
0034デフォルトの名無しさん
2009/09/18(金) 00:25:57こうすれば良いんじゃね?
0035デフォルトの名無しさん
2009/09/18(金) 01:06:54if (s[2] = 'c'){};
ifのとこで不正な代入とかコンパイルエラー出るんだけど
意味わからん
0036デフォルトの名無しさん
2009/09/18(金) 01:09:29比較したいんじゃねーのか?
っていうコンパイラの気遣い
0037デフォルトの名無しさん
2009/09/18(金) 01:17:540038デフォルトの名無しさん
2009/09/18(金) 01:19:040039デフォルトの名無しさん
2009/09/18(金) 01:19:080040デフォルトの名無しさん
2009/09/18(金) 01:20:54==って書かないといけなかったんだな
0041デフォルトの名無しさん
2009/09/18(金) 01:23:230042デフォルトの名無しさん
2009/09/18(金) 01:25:00strlen("\012345678")
いくつになるのよ?
0043デフォルトの名無しさん
2009/09/18(金) 01:56:440044デフォルトの名無しさん
2009/09/18(金) 02:07:47mallocを"マロック"って読むというのならじゃあcallocのことは"キャロック"と読むのかと。
mallocのことは”マロック"と読んでおいてcallocのことは"シーアロック"と読むような
そんな統一感のない人き方は軽蔑されるべきだ。同様にcharを"キャラ"と読むならintは"インテ"と読まないなら市ね!!
0045デフォルトの名無しさん
2009/09/18(金) 02:15:55もちろん、mallocはマロックだ。
0046デフォルトの名無しさん
2009/09/18(金) 02:19:310047デフォルトの名無しさん
2009/09/18(金) 03:14:400
0048デフォルトの名無しさん
2009/09/18(金) 04:40:240049デフォルトの名無しさん
2009/09/18(金) 04:41:260050デフォルトの名無しさん
2009/09/18(金) 05:43:520051デフォルトの名無しさん
2009/09/18(金) 06:09:28そしてお前がその筆頭
0052デフォルトの名無しさん
2009/09/18(金) 07:14:510053デフォルトの名無しさん
2009/09/18(金) 07:34:110054デフォルトの名無しさん
2009/09/18(金) 09:30:33一概に言えない。そもそも気にするほど差が出ないかもしれない。
>>42
八進文字定数は一バイトを表す最長一致なので、一般的には3桁取得する。
従って、"\012""345678"と解釈されるので>43の言うとおり7になると考えられる。
つまり、>47は試してみもしない間抜け。
>>32
16進文字定数の場合はより貪欲な最長一致が行なわれるので、"\xabcdef""ghi"となる。
0055デフォルトの名無しさん
2009/09/18(金) 10:38:00>>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] を参照しても鼻から悪魔。
0056デフォルトの名無しさん
2009/09/18(金) 11:53:110057デフォルトの名無しさん
2009/09/18(金) 11:56:14strtok
0058デフォルトの名無しさん
2009/09/18(金) 12:21:39sscanf("abcxdef", "[^x]", & target)
0059デフォルトの名無しさん
2009/09/18(金) 12:56:410060デフォルトの名無しさん
2009/09/18(金) 13:13:00それはスレの外でやったのを引用してもってきただけ。
0061デフォルトの名無しさん
2009/09/18(金) 13:20:21006233
2009/09/18(金) 13:44:13もしかして元はと言えば俺が原因かw
すまんな、最近はどうも息をするようにC++のコードを書いてしまう。
しっかし、俺が適当に書いたコードで喧嘩するなんて、
お前ら相当の暇人だな。
0063デフォルトの名無しさん
2009/09/18(金) 16:16:42intをインテ
macをマッキ
と読んでいる。
0064デフォルトの名無しさん
2009/09/18(金) 18:51:210065デフォルトの名無しさん
2009/09/18(金) 22:12:250066デフォルトの名無しさん
2009/09/18(金) 22:28:22何それ?
APIは知らんよ。
0067デフォルトの名無しさん
2009/09/18(金) 22:31:280068デフォルトの名無しさん
2009/09/18(金) 22:33:440069デフォルトの名無しさん
2009/09/18(金) 22:40:070070デフォルトの名無しさん
2009/09/19(土) 04:48:482100年ちょっとぐらいまでは大丈夫ってことかな
0071デフォルトの名無しさん
2009/09/19(土) 07:14:180072デフォルトの名無しさん
2009/09/19(土) 10:04:50WinMainでWindow作らなけりゃいいんじゃない
0073デフォルトの名無しさん
2009/09/19(土) 11:05:28kwsk
0074デフォルトの名無しさん
2009/09/19(土) 11:40:220075デフォルトの名無しさん
2009/09/19(土) 16:58:00p=strstr(s1,s2);
p+5;
strstrの戻り値アドレスに+5したいのにコンパイルエラーになる
「コードは効果を持たない」だとか
0076デフォルトの名無しさん
2009/09/19(土) 16:58:54+=
0077デフォルトの名無しさん
2009/09/19(土) 17:19:230078デフォルトの名無しさん
2009/09/19(土) 17:36:59char s[64];
p=strstr(s1,s2);
p+=4;
while(*p++!='1'){
memcpy(p2,p,1);
p2++;}
strstrで見つけた文字から5バイトずらしたとこから
文字「1」までを変数sに移したいんだけどうまくいかない
0079デフォルトの名無しさん
2009/09/19(土) 17:46:27識別子sはなんだ
s1, s2, pはなんだ
pがNULLでないことは保証できるのか
p2の型はなんだ
s1に'1'があることは保証できるのか
何がやりたいんだ
0080デフォルトの名無しさん
2009/09/19(土) 17:46:510081デフォルトの名無しさん
2009/09/19(土) 17:57:320082デフォルトの名無しさん
2009/09/19(土) 17:58:16yearは1900年からの起算だから2036年であぼーんする
0083デフォルトの名無しさん
2009/09/19(土) 18:08:04誰が考えたんだよ。
0084デフォルトの名無しさん
2009/09/19(土) 18:13:400085デフォルトの名無しさん
2009/09/19(土) 18:14:29first += 4;
if (char *last = strchr(first, '1')) {
++last;
memcpy(p2, first, last-first);
p2[last-first] = '\0';
}
}
0087デフォルトの名無しさん
2009/09/19(土) 19:09:44アドレス値って減算とかできるのか
色々勉強になったありがとう
0088デフォルトの名無しさん
2009/09/19(土) 19:22:530089デフォルトの名無しさん
2009/09/19(土) 19:48:28とかできるんだなきもい
え?できない?
0090デフォルトの名無しさん
2009/09/19(土) 20:03:150091デフォルトの名無しさん
2009/09/19(土) 20:37:46(なんらかの整数型に変換できることは規格で定められている)
それを符号付きで扱うか符合なしで扱うかは自由だけどな。
また、符号付き整数として扱った場合に
負の値を持つ数値になるかどうかは、処理系やOS次第。
例えばDOSの頃の16bitアドレスがマイナスになるのなんてざらだった。
ていうか、スタック上のアドレスはほぼ全てマイナスの処理系があったり。
今でも、Win32のINVALID_HANDLE_VALUEやPOSIXのMAP_FAILEDのように
「無効なポインタ値」として、NULLの他に特定のマイナス値をキャストして使う場合もある。
(「特定のありえない値」がマイナスとは限らないが)
0092デフォルトの名無しさん
2009/09/19(土) 20:45:43void *p = ((void*) 1) - ((void*) 2);
0093デフォルトの名無しさん
2009/09/19(土) 20:51:58ポインタ - ポインタ はポインタ型ではなくて数値型(ptrdiff_t)になるよ。
0094デフォルトの名無しさん
2009/09/19(土) 20:52:400095デフォルトの名無しさん
2009/09/19(土) 20:54:050096デフォルトの名無しさん
2009/09/19(土) 21:42:50おそらく不正な代入とエラーが出る。
0097デフォルトの名無しさん
2009/09/19(土) 21:49:39よくできたコンパイラであれば警告される
0098デフォルトの名無しさん
2009/09/19(土) 22:01:490099デフォルトの名無しさん
2009/09/19(土) 22:05:100100デフォルトの名無しさん
2009/09/19(土) 22:14:330101デフォルトの名無しさん
2009/09/19(土) 22:16:11日本人にもわかるように説明してください
0102デフォルトの名無しさん
2009/09/19(土) 22:34:05出直してきてください。
なんか他の言語の経験者ですか?
自分の脳内だけで補完するのはご遠慮いただきたい。
0103デフォルトの名無しさん
2009/09/19(土) 22:34:47バイナリーファイルをc言語形式のデータに変換後、コンパイルしてリンク
すると時間がかかるので、バイナリファイルを直接、20000hにリンカで配置
できないかと思いまして質問してみました。
0104デフォルトの名無しさん
2009/09/19(土) 22:35:43リソース?
0105デフォルトの名無しさん
2009/09/19(土) 22:37:24それでも駄目だった
コンパイラ変えるしかないか
0106デフォルトの名無しさん
2009/09/19(土) 22:46:17コンパイラ名とそのバージョンを教えてくれ、避けるようにするから
0107デフォルトの名無しさん
2009/09/19(土) 22:47:200108デフォルトの名無しさん
2009/09/19(土) 22:47:58警告をエラーにするオプションつけてるんじゃないの?
0109デフォルトの名無しさん
2009/09/19(土) 22:56:19あとウィンドウズ用のgccってMinGWってやつでいいの?
0110デフォルトの名無しさん
2009/09/19(土) 23:03:340111デフォルトの名無しさん
2009/09/19(土) 23:25:410112デフォルトの名無しさん
2009/09/19(土) 23:31:00でも良い。若干意味は変わるけど。
0113デフォルトの名無しさん
2009/09/19(土) 23:32:09確かにそうですね。。。
ありがとうございました。
0114デフォルトの名無しさん
2009/09/19(土) 23:45:56あれあれ、なんかしらんが1970年と勘違いしてた
訂正ありがとう
0115デフォルトの名無しさん
2009/09/20(日) 00:01:57ビルドはうまく行くんですけども入力が通らないんです
http://uproda.2ch-library.com/lib170895.c.shtml
試験の成績(ABCDF)を入力してください
入力を終了するには、EOF文字を入力してくださ
A
成績を表す文字が正しくありません
もう一度入力してください
成績を表す文字が正しくありません
もう一度入力してください
^Z
成績の集計結果
Aの数→0
Bの数→0
Cの数→0
Dの数→0
Fの数→0
続行するには何かキーを押してください . . .
このようになってしまいます
0116デフォルトの名無しさん
2009/09/20(日) 00:04:160117デフォルトの名無しさん
2009/09/20(日) 00:05:25ふざけんな
ここに貼れ。
C code - 45 lines - codepad
ttp://codepad.org/ZQpaxLqh
それから自決したならその理由と方法も書くこと!
0118デフォルトの名無しさん
2009/09/20(日) 00:08:10すいませんでした
入力が受け付けられなかった理由は
12行目の while( ( grade = getchar() != EOF)) { が原因で、
while( ( grade = getchar() ) != EOF) { と書くはずのところを間違えてしまったからでした
0119デフォルトの名無しさん
2009/09/20(日) 00:18:18自決したことにしないでください
0120デフォルトの名無しさん
2009/09/20(日) 00:45:57使ってるリンカによる。
GNUリンカではリンカスクリプト書けば大抵のことはできたけど。
0121デフォルトの名無しさん
2009/09/20(日) 07:33:04gcc なら objcopy を使えばいい。
Windowsアプリなら、リソースにするのが常道。
0122デフォルトの名無しさん
2009/09/20(日) 08:06:550除算の箇所を見つけたいので、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の使い方がおかしいのか、シグナルの考え方を根本的に間違えているのか、
どなたかご教示ください。
0123デフォルトの名無しさん
2009/09/20(日) 08:55:47標準的な環境(IEEE754)では、浮動小数点演算のゼロ除算は
Inf(無限大)になって、CPUトラップは上がらない。
よってシグナルも送られない。
CPUやOSが対応していれば、この挙動を変えることが出来る
かもしれないが、cygwinに詳しくないので分からない
0124123
2009/09/20(日) 09:02:50>>122のコードにこれを入れたらシグナル上がったよ
unsigned int cw;
__asm__ __volatile__ ("fnstcw %0" : "=m" (cw));
cw &= ~(0x01 | 0x04 | 0x08);
__asm__ __volatile__ ("fldcw %0" : : "m" (cw));
ちなみにここに書いてあった
http://www.fortran-2000.com/ArnaudRecipes/CompilerTricks.html#x86_FP
0125デフォルトの名無しさん
2009/09/20(日) 10:56:58このプログラムの例文について
コマンドによって確保した領域は削除の指示をしない限り
Freeによって解放されないような感じなのですが、あってますか?
0126デフォルトの名無しさん
2009/09/20(日) 12:29:550127デフォルトの名無しさん
2009/09/20(日) 13:33:22アプリケーションレベルですか。OS レベルですか?
それによって正否がかわりますね。
0128デフォルトの名無しさん
2009/09/20(日) 14:05:18OSレベルで、です
0129デフォルトの名無しさん
2009/09/20(日) 14:48:36MS-DOS の時代から、 malloc() したら最後、たとえ free() しても exit するまで他のプロセスからは使えないようですね。
ま、環境にもよりますが。
0130デフォルトの名無しさん
2009/09/20(日) 15:08:07助かりました
0131質問
2009/09/20(日) 17:30:49できればバックドア型がいいです。
0132デフォルトの名無しさん
2009/09/20(日) 17:31:440133デフォルトの名無しさん
2009/09/20(日) 17:35:280134デフォルトの名無しさん
2009/09/20(日) 19:35:12できれば胸は大きい方がいいです。
0135デフォルトの名無しさん
2009/09/20(日) 21:00:100136122
2009/09/20(日) 22:29:34教えていただいたコードを埋め込むとシグナルがあがりました。
ただ、参照先が英語な上に、アセンブラも入っているため、まだ自分には理解できそうにないです。
やろうとしていることは、ガリガリとprintfでも埋め込んでいけば事足りるので、シグナルは断念します。
説明と参考サイトまで探していただいて、ありがとうございました。
0137デフォルトの名無しさん
2009/09/20(日) 22:54:12教えていただいた通りにやったらできました。ありがとうございました。
0138デフォルトの名無しさん
2009/09/20(日) 23:07:130139デフォルトの名無しさん
2009/09/20(日) 23:10:240140デフォルトの名無しさん
2009/09/21(月) 00:54:080141デフォルトの名無しさん
2009/09/21(月) 01:27:01そんな俺を導いてくれる神はいないか?
0142デフォルトの名無しさん
2009/09/21(月) 01:28:150143デフォルトの名無しさん
2009/09/21(月) 01:31:21CSTL というものもあるし
自作してもいいんじゃないかな
0144デフォルトの名無しさん
2009/09/21(月) 02:52:18float p = {123.456789};
printf("少数点第二位切り捨て後%f",p);
0145デフォルトの名無しさん
2009/09/21(月) 02:57:02p の値によっては悲惨なことになるけど
#include <stdio.h>
#include <math.h>
int main(void){
float p = 123.456789, q;
q=floor(p*100)/100;
printf("小数点第二位切り捨て後%.2f",q);
return 0;
}
0146デフォルトの名無しさん
2009/09/21(月) 03:22:31ありがとうございます。
0147デフォルトの名無しさん
2009/09/21(月) 03:25:45#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;
}
0148デフォルトの名無しさん
2009/09/21(月) 09:39:150149デフォルトの名無しさん
2009/09/21(月) 10:07:17#include <inttypes.h>
intptr_t
uintptr_t
0150デフォルトの名無しさん
2009/09/21(月) 10:16:490151デフォルトの名無しさん
2009/09/21(月) 10:25:03int n = 5;
char c = '0' + n;
0152デフォルトの名無しさん
2009/09/21(月) 11:09:12ってしたいときmemcpyで3つずらしたところから探すのとstrstrで検索するの
どっちのほうが早いの?
0153デフォルトの名無しさん
2009/09/21(月) 11:18:17環境による。速度や効率については実際に試すのが吉。
0154デフォルトの名無しさん
2009/09/21(月) 12:10:251行目はmemcmp(キャラ配列の3バイト, 指定した文字列, strlen(指定した文字列))と読めるのだけど、
なんでmemcpy()が出てきたりstrstr()が出てきたりするのか判らん。
0155デフォルトの名無しさん
2009/09/21(月) 12:19:070156デフォルトの名無しさん
2009/09/21(月) 14:15:19memcpyは3バイト以降をバッファにコピーして、それとあとでstrcmpなりmemcmpするんでしょう。もしくはtypo
0157デフォルトの名無しさん
2009/09/21(月) 15:45:50気にしたら負けレベル
0158デフォルトの名無しさん
2009/09/21(月) 16:25:35int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
printf("test");
return 0;
}
bcc
コンパイルエラーになるんだけど
サンプル引用したものなのに
0159デフォルトの名無しさん
2009/09/21(月) 16:37:11#include <stdio.h>
を追加したら
0160デフォルトの名無しさん
2009/09/21(月) 16:39:00エラーメッセージくらい貼れよ
0161デフォルトの名無しさん
2009/09/21(月) 16:50:030162デフォルトの名無しさん
2009/09/21(月) 16:52:030163デフォルトの名無しさん
2009/09/21(月) 16:53:470164デフォルトの名無しさん
2009/09/21(月) 16:58:38WinMainの引数全部に同じエラーが出る
あと外部シンボル’_main’が未解決 だって
0165デフォルトの名無しさん
2009/09/21(月) 17:04:180166デフォルトの名無しさん
2009/09/21(月) 17:33:15上のはエラーじゃなくてウォーニンだろ。
下のはコンパイルエラーじゃなくてリンクエラーだ。
0167デフォルトの名無しさん
2009/09/21(月) 17:45:370168デフォルトの名無しさん
2009/09/21(月) 17:48:470169デフォルトの名無しさん
2009/09/21(月) 17:59:16これだけじゃ検索ヒットしない
0170デフォルトの名無しさん
2009/09/21(月) 18:02:11コンパイラのマニュアルをどうぞ
っても-Wだけだとまた困りそうだけど
0171デフォルトの名無しさん
2009/09/21(月) 18:04:160172デフォルトの名無しさん
2009/09/21(月) 18:13:06>C言語の*入門者*向け解説スレッドです。
>初心者、初級者の方は他の質問スレのほうが良いかもしれません。
0173デフォルトの名無しさん
2009/09/21(月) 18:29:05回答者サンクス
>>172 スマソ
0174デフォルトの名無しさん
2009/09/21(月) 19:35:100175デフォルトの名無しさん
2009/09/21(月) 21:42:340176デフォルトの名無しさん
2009/09/21(月) 22:02:260177デフォルトの名無しさん
2009/09/21(月) 23:17:28Sleep(0.9)って可能でしょうか?
0178デフォルトの名無しさん
2009/09/21(月) 23:25:50Sleep(0.9)だとわからないなぁ
0179デフォルトの名無しさん
2009/09/21(月) 23:36:52その表記は単に
Sleep(0);
と見なされるだけだろ。
で、
Sleep(0) ってのは何も問題ないよ。
割り当てられた残り CPU 時間を打ち切ってシステムに制御を返すはず。
0180デフォルトの名無しさん
2009/09/21(月) 23:40:41精度は低いし、そもそも設定するのは休止する最低限の時間であって
戻ってくる時間を指定できるわけじゃない。
0181デフォルトの名無しさん
2009/09/21(月) 23:44:290182デフォルトの名無しさん
2009/09/21(月) 23:46:37while (GetTickCount() - t < 1000);
0183177
2009/09/21(月) 23:47:180184デフォルトの名無しさん
2009/09/21(月) 23:49:30それビジーループにならない?
0185デフォルトの名無しさん
2009/09/21(月) 23:57:560186デフォルトの名無しさん
2009/09/22(火) 00:05:540187デフォルトの名無しさん
2009/09/22(火) 00:06:40エコに反する、勿体ない。
0188デフォルトの名無しさん
2009/09/22(火) 00:12:080189デフォルトの名無しさん
2009/09/22(火) 00:14:44n+1秒以内に復帰するとかって保障されてる?
必要だったら>>182もしょうがないと思うが
0190デフォルトの名無しさん
2009/09/22(火) 00:24:200191デフォルトの名無しさん
2009/09/22(火) 00:29:260192デフォルトの名無しさん
2009/09/22(火) 00:32:52複数回の平均なら容易く制御できる。
t = GetTickCount();
while(1) {
何らかの処理;
t += 900;
Sleep(t - GetTickCount());
}
0193デフォルトの名無しさん
2009/09/22(火) 01:27:08xミリ秒停止するなら,x-hミリ秒(もしくはx-2hミリ秒)程度のsleep()を入れて,そこから先はビジーループ
ってのをやったけど,実時間性を保障するシステムより耐性のあるシステムを作ったほうが安全
※といっても hは保障できる値ではないのでリアルタイム処理なんかはあきらめるしかない
0194デフォルトの名無しさん
2009/09/22(火) 01:39:18退勤時間 − 出勤時間で勤務時間を求めるプログラムです
一応出来たのですが、変数使いすぎだし、効率悪いような気がしてなりません。。。
もっと簡単に纏めれるやり方ってありますか?
#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--;
}}
0195デフォルトの名無しさん
2009/09/22(火) 01:40:38if(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);
}
}
0196デフォルトの名無しさん
2009/09/22(火) 01:41:33データ構造と処理構造見直せ
おもにtime_tでdifftimeしたり
0197デフォルトの名無しさん
2009/09/22(火) 06:18:21void copy(char *to,const char *from)
{
while(*to++ = *from++)
;
}
だと「不正な代入」と警告が出てしまう
プログラム自体は動くがこの書き方だとまずい?
0198デフォルトの名無しさん
2009/09/22(火) 06:36:10while((*to++ = *from++))
とすると警告出さなくなるかもしれない。
0200デフォルトの名無しさん
2009/09/22(火) 06:49:30memcpy
0201デフォルトの名無しさん
2009/09/22(火) 06:50:390202デフォルトの名無しさん
2009/09/22(火) 07:03:40K&R本にも「このような書き方はマスターすべきである」と書いてあるし
0203デフォルトの名無しさん
2009/09/22(火) 07:20:17不必要な場面でも使えとは書いてないだろ。
0204デフォルトの名無しさん
2009/09/22(火) 07:23:47速いからったってstrcpyと比較しなきゃフェアじゃないだろ
0205デフォルトの名無しさん
2009/09/22(火) 07:36:21なら while((*to++ = *from++) != 0)
ってすればいい。
0206デフォルトの名無しさん
2009/09/22(火) 07:37:25もしかして、「K&R」の名前も知らないの?
ここはC言語のスレだよね?
0207デフォルトの名無しさん
2009/09/22(火) 07:48:32この記法についてはidiomとして十分浸透しているものだから別にあれこれ言うつもりはないし、
すんなり読めるようになっておくべきだとも思う。
けれど、K&Rが絶対であるという考えは(そのように言ってはいないのかもしれないが)
やめておいた方がいいよ。
K&RのHello Worldは今ではタブーなコードであるし。
0208デフォルトの名無しさん
2009/09/22(火) 07:49:39知らないモグリが回答なんてするはずないよね
0209デフォルトの名無しさん
2009/09/22(火) 07:53:170210209
2009/09/22(火) 07:55:400211デフォルトの名無しさん
2009/09/22(火) 08:05:44もちろん、盲信すべきでもない。
が、K&Rの名前も知らない
つまり、まともに知識を得ようとすれば必ず知っているはずの名前を知らない
という事実が問題。
他の言語でも大抵最初に扱われる、「Hello worldの由来」としても。
この点は、K&Rの知名度よりはだいぶ劣るが
C FAQについても言える。
何かについて詳しく知ろうと調べていけば、普通はこの存在を知ることになるし
Cでまともなコードを書こうとしている人なら、存在自体は知っていなければおかしい。
そして、鵜呑みにする必要は無いが、どんなことが書いてあるか等は目を通しておくべき。
0212デフォルトの名無しさん
2009/09/22(火) 08:06:39↓のような 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 が取得できるのだが……。
以上、よろしくお願いします。
0213デフォルトの名無しさん
2009/09/22(火) 08:21:30Knuth先生はC言語に直接関わってないだろ。
RMSもフリーのコンパイラ作ったっていう関わり方だし、
Cに関してはKernighan/Ritchieは別格。
0214デフォルトの名無しさん
2009/09/22(火) 08:23:170215デフォルトの名無しさん
2009/09/22(火) 08:25:48寝起きだからバグってたらごめん。
真面目に処理するときは自前コードじゃなくて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なんだ。すまない。
0216209
2009/09/22(火) 08:27:28ラリーウォールじゃLだしなんかインパクトに欠けるし(失礼)とかそっちで精一杯だったorz
0217デフォルトの名無しさん
2009/09/22(火) 08:31:35定石的なやり方は
fgetsで一行文の文字列読み込んで、それをsscanfで変換。
0218デフォルトの名無しさん
2009/09/22(火) 08:48:09K&R論争なんてやりたくないしとりあえずボケちゃえと思ったんだ。
乗っかってくれた209さんには感謝してるよー
0219デフォルトの名無しさん
2009/09/22(火) 09:09:59こんな早朝からありがとうございました!
↓のコードで成功しました。※スペースは、掲示板の都合上、全角スペースを用いています。
>>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;
}
0220219
2009/09/22(火) 09:26:140221デフォルトの名無しさん
2009/09/22(火) 09:57:060222デフォルトの名無しさん
2009/09/22(火) 10:00:33よほどやることがないんだな
0223219
2009/09/22(火) 10:44:58#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;
}
0224デフォルトの名無しさん
2009/09/22(火) 10:45:3867
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
0225デフォルトの名無しさん
2009/09/22(火) 11:38:06m[258] = '1';
free(m);
明らかに確保してない領域に書き込んでいるのですが
実行してもエラーが出ません、なぜでしょうか?
0226デフォルトの名無しさん
2009/09/22(火) 11:39:520227デフォルトの名無しさん
2009/09/22(火) 11:41:35OSが保護していない領域は書き換えられまくり。
0228デフォルトの名無しさん
2009/09/22(火) 11:42:070229デフォルトの名無しさん
2009/09/22(火) 12:34:24そうですね。課題は巡回セールスマン問題で、
ありがたいことにネットにプログラムはあったんですが、
細かい仕様は当然違うので、その調整をしてました。
プログラミングなんて1年以上前に3ヶ月程やっただけなので、
本当に気が重かったのですが、このスレのおかげで何とか提出できそうです
0230デフォルトの名無しさん
2009/09/22(火) 13:04:50その理由もある程度推測できるようになる(mallocの実装例が載っているので)。
0231デフォルトの名無しさん
2009/09/22(火) 13:33:590232デフォルトの名無しさん
2009/09/22(火) 16:47:22int main(void){
float i,j;
i = 1/3;
printf("%f\n",i);
j = i*3;
printf("%f\n",j);
return 0;
}
のプログラムを実行してみたんですけど、i,jの値ともにゼロになってしまうんですけど
これはどういうことなんですかね?
0233デフォルトの名無しさん
2009/09/22(火) 16:49:02> i = 1/3;
i = 1.0/3;
0234デフォルトの名無しさん
2009/09/22(火) 16:49:211.f/3
1.0/3
にしろ
0235デフォルトの名無しさん
2009/09/22(火) 16:51:17わかりました。ありがとうございます。
0236デフォルトの名無しさん
2009/09/22(火) 22:50:39>K&RのHello Worldは今ではタブーなコードであるし。
フレーム抜きで詳説希望
0237デフォルトの名無しさん
2009/09/22(火) 23:11:490238デフォルトの名無しさん
2009/09/22(火) 23:19:42個人的な思い込みに反してるだけだろうしな
0239デフォルトの名無しさん
2009/09/22(火) 23:31:390240デフォルトの名無しさん
2009/09/23(水) 00:06:28int argc;
char **argv
{
printf(""Hello world!);
}
0241デフォルトの名無しさん
2009/09/23(水) 00:19:020242デフォルトの名無しさん
2009/09/23(水) 00:29:53それはK&R1。
0243デフォルトの名無しさん
2009/09/23(水) 00:32:23こういう問題って頭の中だけで考えますか?
それとも一回紙に大体書き出してからやりますか?
0244デフォルトの名無しさん
2009/09/23(水) 00:36:100245デフォルトの名無しさん
2009/09/23(水) 00:36:59ああそれはうざい。
というかprintf(""Hello world!);は革新的すぎるぜ
0246デフォルトの名無しさん
2009/09/23(水) 00:39:27そうなんですか。
>>244さんなら、これをどうプログラミングしますか?
0247デフォルトの名無しさん
2009/09/23(水) 00:40:35その問題なら、いきなりコーディングできるのでは?
0248デフォルトの名無しさん
2009/09/23(水) 00:41:14まだ統一された規格が無かった頃のコードなの?
0249デフォルトの名無しさん
2009/09/23(水) 00:41:26簡単ですかねー・・・?
まだ経験が浅いので、作ってみたらgdgdになってました(´・ω・`)
0250デフォルトの名無しさん
2009/09/23(水) 00:44:370251247
2009/09/23(水) 00:49:23自分ならまず、ゲーム部分のシミュレータ作って(返り値が個数)、
入力データ N 個の一箇所を別の色に変えたデータを作る部分を
作って、全体制御と一番小さい数値を返す部分を作って、
終わり
0252デフォルトの名無しさん
2009/09/23(水) 00:53:55void main() は明らかに間違い。
0253デフォルトの名無しさん
2009/09/23(水) 00:57:070254デフォルトの名無しさん
2009/09/23(水) 01:06:16-を使うことが多いと思うのですが,これはなぜでしょうか?
retrun1やreturn2はみない気がしています.
0255デフォルトの名無しさん
2009/09/23(水) 01:13:08関数によっては、 0以上の正数が正常値で、負数がマイナス値
という事情があるかもしれない。ファイルディスクリプタとか
0256デフォルトの名無しさん
2009/09/23(水) 01:21:41とは限らない
0257デフォルトの名無しさん
2009/09/23(水) 01:22:28ん?呼び出し規約で問題がでませんか?スタートアップ側でintが返るのを仮定しているのに void な関数をリンクしちゃっていいのですかね。
0258デフォルトの名無しさん
2009/09/23(水) 01:25:19蛇足だが main は int main の省略形
0259デフォルトの名無しさん
2009/09/23(水) 01:48:02組み込みではそもそもmain関数が無いこともある。
慣習的に、mainにあたる関数をmainって名付けることが多いけど。
0260デフォルトの名無しさん
2009/09/23(水) 02:45:140261デフォルトの名無しさん
2009/09/23(水) 02:51:140262デフォルトの名無しさん
2009/09/23(水) 02:58:23ほう、動くのですかね、void main() で。
0263デフォルトの名無しさん
2009/09/23(水) 03:28:300264デフォルトの名無しさん
2009/09/23(水) 03:29:460265デフォルトの名無しさん
2009/09/23(水) 03:29:51非推奨だったりしないのかな、という点で。
0266デフォルトの名無しさん
2009/09/23(水) 04:19:20省略すれば int になります。
0267デフォルトの名無しさん
2009/09/23(水) 04:39:100268デフォルトの名無しさん
2009/09/23(水) 05:25:130269デフォルトの名無しさん
2009/09/23(水) 05:34:08原因不明だけどプログラムが正常に動作しなくなったって時にやると、うまく動くようになることもある。
大抵は依存関係の解決に問題があるんだけどね。
0270デフォルトの名無しさん
2009/09/23(水) 06:07:380271デフォルトの名無しさん
2009/09/23(水) 08:01:010272デフォルトの名無しさん
2009/09/23(水) 08:59:130273デフォルトの名無しさん
2009/09/23(水) 09:00:450274デフォルトの名無しさん
2009/09/23(水) 09:02:270275デフォルトの名無しさん
2009/09/23(水) 09:02:28system("cls"); じゃだめかい
0276272
2009/09/23(水) 09:07:52clsで初期化された
0277デフォルトの名無しさん
2009/09/23(水) 09:08:370278デフォルトの名無しさん
2009/09/23(水) 11:16:50main()以外の関数でも省略してもエラーにならないしな。
戻り値がvoid以外でも。
0279デフォルトの名無しさん
2009/09/23(水) 11:19:07なので書いてはいけない。
0280デフォルトの名無しさん
2009/09/23(水) 11:37:250281デフォルトの名無しさん
2009/09/23(水) 12:19:29デフォでintに決め打ちされてしまうだけですね。
0282デフォルトの名無しさん
2009/09/23(水) 13:32:30いや、
double func()
{
return 0.0;
}
↑こういう関数でreturnを削除しても、
double func()
{
}
↑エラーにならないってこと。
0283デフォルトの名無しさん
2009/09/23(水) 14:52:14iso標準のC言語の仕様としては、
double func(){}
この返却値を使わない限りは大丈夫なの?(問題無く動作する?)
それともこれをコンパイルした時点で未定義の動作になる?
0284デフォルトの名無しさん
2009/09/23(水) 15:00:40> and the value of the function call is used by the caller,
> the behavior is undefined.
使わなければ大丈夫っぽい感じ
0285283
2009/09/23(水) 15:02:05確かに。
and the value of the function call is used by the caller,
の部分ね。
ありがとうございます。
0286デフォルトの名無しさん
2009/09/23(水) 18:02:59皆さんがお勧めする本があったら教えてください、お願いします!
あと問題数もこなしたいので、柴田望洋さんの
「解きながら学ぶC言語」も買おうと思ってるんですが、この本は良本ですか?
0287デフォルトの名無しさん
2009/09/23(水) 18:15:49にランクを分けるにしても、人によってその敷居が違うから
>>286の実力がよく分からない。
とりあえず関数ポインタは知ってる?使える?
0288デフォルトの名無しさん
2009/09/23(水) 18:25:51C言語を学習している目的がわからないと、勧めようがない。
0289デフォルトの名無しさん
2009/09/23(水) 18:30:14どちらかというと入門書レベルだけどPractical C Programmingとか。
時代遅れだったらごめん。
0290デフォルトの名無しさん
2009/09/23(水) 18:34:28Numetrical recipesとかでつか
0291デフォルトの名無しさん
2009/09/23(水) 18:49:100292デフォルトの名無しさん
2009/09/23(水) 18:57:20誤爆するなよp
スナックで「目がきれいですね」と言われブチギレ、ボコボコに 寺の住職を逮捕…埼玉
http://hideyoshi.2ch.net/test/read.cgi/dqnplus/1253699754/
0293デフォルトの名無しさん
2009/09/23(水) 18:59:28題名も忘れてしまったが、C言語のマクロを使いまくる本があったな。
あれは変態におすすめだったと思う。
0294デフォルトの名無しさん
2009/09/23(水) 19:00:49すまん
お詫びになるかは分からんけど・・・
いろんな本読んだりしていろんなコードを読むことも大事です。
0295デフォルトの名無しさん
2009/09/23(水) 19:36:52これかなぁ
http://www.amazon.co.jp/dp/493079594X
Cプリプロセッサ・パワー―C言語の秘められた能力を解き放つ-林-晴比古
確かプリプロセッサの誤用が多くて有名な本
誰か変態な本知らない
0296デフォルトの名無しさん
2009/09/23(水) 19:43:22まだ理解できていないところも少しありますが、次のステップに進むべきでしょうか?
0297デフォルトの名無しさん
2009/09/23(水) 20:08:59お前ごときのかわりならいくらでもいる
0298デフォルトの名無しさん
2009/09/23(水) 20:13:21関数ポインタは・・・知りません(´・ω・`)
ポインタなら知ってます。。。が、書けといわれたら無理。
実力はどのように表現したら良いですか?
とりあえずC言語を始めて18日ですw
簡単なソート系なら何も見ずにコード書ける
0299デフォルトの名無しさん
2009/09/23(水) 20:14:25とりあえず、人に答えてもらったら
たとえ気にくわなかろうが
一応の返事をするという最低限のマナーは守ろうか。
0300デフォルトの名無しさん
2009/09/23(水) 20:14:290301デフォルトの名無しさん
2009/09/23(水) 20:15:55情報オリンピックに出たいからです。
2008年の予選問題の、問1、2までなら自力で制限時間内に解けたんですが、
問3が解けませんでした。
0302デフォルトの名無しさん
2009/09/23(水) 20:15:55> 何も見ずに
そんな事に価値は無い
0303デフォルトの名無しさん
2009/09/23(水) 20:15:57C言語以外のこともよく知っているレベル
0304デフォルトの名無しさん
2009/09/23(水) 20:19:06すいません、用事があったので席をはずしてました
それと今からもちょっと用事があります・・・。
>>302
試しで作ってみただけです
0305デフォルトの名無しさん
2009/09/23(水) 20:23:34基本が解ったら後は習うより慣れ
まだ知らないこともたくさんあるだろうけど
必要に迫られて調べていけば覚える
0306デフォルトの名無しさん
2009/09/23(水) 20:26:02それはC言語を応用してWinAPIのようなものも使えるようになるってことですか?
それとも設計とかのことですか?
0307デフォルトの名無しさん
2009/09/23(水) 20:26:36まずは単方向リストだ
0308デフォルトの名無しさん
2009/09/23(水) 20:48:29『C言語による最新アルゴリズム事典』
http://oku.edu.mie-u.ac.jp/~okumura/algo/
興味のあるプログラムをとりあえず動かしてみるなり改造するなり
とにかく自分で書いてみないとどうにもならん
0309デフォルトの名無しさん
2009/09/23(水) 21:02:46確かにまずはアルゴリズムの勉強していかないとまずい。
本に書いてあるコードを実行してみたり改造したり、
自分でいろいろ実験がてらに作ってみたりして勉強してみます。
ありがとうございました。
0310デフォルトの名無しさん
2009/09/23(水) 21:42:18自分もこの本でアルゴリズムの勉強したから大きいことはいえないけど、
もう「最新」っていえるような本じゃないよね。「定番」に書き換えるべき^^
0311デフォルトの名無しさん
2009/09/23(水) 21:57:590312デフォルトの名無しさん
2009/09/23(水) 21:58:490313デフォルトの名無しさん
2009/09/23(水) 22:09:10このCSTLっての結構勉強になるね
0314デフォルトの名無しさん
2009/09/23(水) 23:07:23パフォーマンスがいい可能性があると思う。 C++用に作られた物より。
0315デフォルトの名無しさん
2009/09/24(木) 00:07:18一般的にはグローバル変数の方がアクセスは遅くなるだろうけど
初期化の話ならアクセス1回だけなので、ほとんど変わらない
0316デフォルトの名無しさん
2009/09/24(木) 00:44:39C言語に的を絞るなら、高性能なコンパイラが書けるレベル。
0317デフォルトの名無しさん
2009/09/24(木) 00:46:48天才じゃねーか
C言語では低性能なコンパイラを作るのですら相当きついだろ。
0318デフォルトの名無しさん
2009/09/24(木) 00:55:13情報系の学科出てれば、実習でコンパイラくらいは作るわけで。
C言語ほどの規模じゃないにしても。
0319317
2009/09/24(木) 00:57:36なんちゃってインタプリタなら作ったことあるぜ。
だからといって C言語のコンパイラは作れる気がしない
というかC言語の仕様を完全に理解していないとつくれねーし。
0320318
2009/09/24(木) 01:22:14C言語の構文解析用のyacc/lexコードはネットに転がってたような
(ほかのコンパイラのソースについてたのかも)
そういうの参考にしつつ、ちまちまやって一年くらいで最適化無しなのは作れた。
バグはたくさんあっただろうけど。
0321デフォルトの名無しさん
2009/09/24(木) 02:16:07それなりに詳しくはなれる
0322デフォルトの名無しさん
2009/09/24(木) 03:10:50{
*src = '\0';
}
int main()
{
test("test");
}
これメモリエラー出ちゃう
どうすれば・・・・・
0323デフォルトの名無しさん
2009/09/24(木) 03:17:52"test"が書き込み不可なメモリに確保されているんだろう。
int main()
{
char str[] = "test";
test(str);
}
とすれば、strは書き込み可能な配列なので問題なく動くはず。
0324デフォルトの名無しさん
2009/09/24(木) 11:35:20今Cについてできるだけ熟練したいと思っています。
(今のレベルとしては「独習c」を終えたレベルです。)
そこで、オープンソースのものを読んで先輩方の書かれたコードを参考にしたいと考えました。
コードリーディング初心者が読みやすい"短い"コードが欲しいのですが、よい入手方法はありますか?
google codeなどを見つけましたが、コードの行数で絞る方法が分かりません。
環境はGNU/Linux Debianを想定しています。
//興味のあるプログラムはあるんです。zshとかglibcその物とか。ただ、相手が巨大過ぎるので..
よろしくお願いします。
0325デフォルトの名無しさん
2009/09/24(木) 11:42:37今Cで書かれた他人のソースを読んでも
たぶんAPI使いまくりで訳が分からないとおもうぞ。
結局標準のC言語だけではたいしたこと出来ないんだから
どうしてもAPIを使用することになってしまう。
Application Programming Interface - Wikipedia
ttp://ja.wikipedia.org/wiki/Application_Programming_Interface
君の書き込みを見る限り頭良さそうなので独習cのレベルは理解していると仮定する。
そのレベルなら、Cにこだわる理由がないなら
C++の勉強にシフトした方が良いと思う。
まあ他の人の意見も参考にした方が良いと思うが、俺的にはC++がお薦め。
0326325
2009/09/24(木) 11:44:29要するに俺が言いたいのは
「APIや外部ライブラリの勉強をすることになるだろうが、
どうせならその前にC++を十分に学んでおいた方が
絶対便利だと思うよ」
ってことです。
0327デフォルトの名無しさん
2009/09/24(木) 11:45:530328デフォルトの名無しさん
2009/09/24(木) 11:53:27早速のレスありがとうございます。APIと言うものがなんであるかは既に知っています。
C++に以降すべきですか...確かに興味はあります。僕自身の興味として最終的にlinux(+unix)について
深く理解したいと言うものがあり、Cも当然理解できないとまずいだろうと思っています。
(これに反する理由があれば、当然c++に以降しますが)
ただ、今C++について学んだところで、また初心者本を買ってそれを一冊使いきるだけになってしまうのではないかと心配しています。
とりあえず、cをそれなりに使えるようになってからチャレンジしたいと思っています。
//そのためにコードを読まないといけないんじゃないか、と思っているわけです。
どうもありがとうございます。
0329デフォルトの名無しさん
2009/09/24(木) 11:55:08> 327 名前:デフォルトの名無しさん [sage]: 2009/09/24(木) 11:45:53
> 熟練したいなら標準ライブラリの仕様読みこむのが先
今からglibcについて勉強する、ということでいいのでしょうか?
0330デフォルトの名無しさん
2009/09/24(木) 12:03:45生産性ではかれば、C++の優しいはず。
0331325
2009/09/24(木) 12:08:03とりあえず外部ライブラリはC++クラスの形で提供されていたりして
C++の知識がないと使える枠が狭くなっちゃうじゃない。
ところで他は何の言語の知識がある?
0332324
2009/09/24(木) 12:19:26> とりあえず外部ライブラリはC++クラスの形で提供されていたりして
> C++の知識がないと使える枠が狭くなっちゃうじゃない。
それは知りませんでした。C++を学んでおくといい理由の一つですね。参考になります。
> ところで他は何の言語の知識がある?
よく知っている順から上げると、perl,emacs lisp,python,rubyです。
..どれもさわりの部分だけで、{モジュール、ライブラリ}と呼ばれるものを検索して、利用したりと言ったことはやっていません。
ずぶの素人です。
//もしかしたら自分に足りないのはライブラリを利用する方法を知らないことかもしれません。
//javaは大嫌いです。今のところ学ぶ気はありません。
0333デフォルトの名無しさん
2009/09/24(木) 12:22:05linuxについて深く理解したいのなら、OSそのものの教科書があるから
そっちを勉強した方がいいとおもうよ。
とりあえず定番のタネンバウム先生の教科書で勉強するとか。
(MINIXのソースは手頃な大きさだし、Cの勉強にもいいとおもう)
0334デフォルトの名無しさん
2009/09/24(木) 12:28:12レスありがとうございます
あの有名なminixを学ぶ、ですか。いいかもしれませんね。
//発狂して新しいOSを作るとか言い出さないか自分が心配ですw
>linuxについて深く理解したいのなら、OSそのものの教科書があるから
>そっちを勉強した方がいいとおもうよ。
OSと言う大きな括り方ではなく、Linuxに含まれる数多くのツールのコードを読んで勉強したいと思っています
//ボトムアップ、と言っては間違っているでしょうか?ローカルなところからやってみたいです。
ありがとうございます。
0335デフォルトの名無しさん
2009/09/24(木) 12:34:44http://www.ecs.shimane-u.ac.jp/~stamura/NumericalComputation-Tips.html
ここの"InfやNaNが発生する場所を特定したい."じゃないか?
0336デフォルトの名無しさん
2009/09/24(木) 12:35:040337デフォルトの名無しさん
2009/09/24(木) 12:44:470338デフォルトの名無しさん
2009/09/24(木) 12:50:590339デフォルトの名無しさん
2009/09/24(木) 22:25:58コードリーディング初心者が読みやすい"短い"コード
ならば
Short Coding
http://www.amazon.co.jp/dp/4839925232
0340デフォルトの名無しさん
2009/09/25(金) 01:00:54自レスなんだよ。マッチポンプだからな。
どこどこ嫁の方がリファレンスのない自慰レスよりマシ
0341デフォルトの名無しさん
2009/09/25(金) 11:28:12cでここまで出来るのかという感じで
0342デフォルトの名無しさん
2009/09/25(金) 11:52:44CやC++はともかく日本語が困難なようですね
0343デフォルトの名無しさん
2009/09/25(金) 11:54:040344デフォルトの名無しさん
2009/09/25(金) 14:20:160345デフォルトの名無しさん
2009/09/25(金) 14:23:04WinAPIスレかC/C++スレへでもどうぞ。
0346デフォルトの名無しさん
2009/09/25(金) 14:24:07まだ解放していないか、あるいは解放に成功したかはどうやってチェックすればいい?
0347デフォルトの名無しさん
2009/09/25(金) 14:26:37それは不可能。
そのため、君のコーディング規約として
freeする度に直後にNULLを代入するようにするとかそうすべき。
0348デフォルトの名無しさん
2009/09/25(金) 14:32:480349デフォルトの名無しさん
2009/09/25(金) 14:43:13free() が成功したかどうかは free() 自身が知っているのみだが
もし失敗しました、と言われてもプログラマにできることなどない。
>>348
一般論として、マクロ内に "{}" は入れない方がいい。
if (〜)
freeandnull(hoge1);
else
freeandnull(hoge2);
なんて書かれると、「; で if は終わってるのに else ってなんじゃい!」
という趣旨のエラーが表示される。
0350デフォルトの名無しさん
2009/09/25(金) 14:45:270351デフォルトの名無しさん
2009/09/25(金) 14:45:41ですねわかる
0352デフォルトの名無しさん
2009/09/25(金) 14:50:430353デフォルトの名無しさん
2009/09/25(金) 14:51:440354デフォルトの名無しさん
2009/09/25(金) 14:52:360355デフォルトの名無しさん
2009/09/25(金) 14:55:180356デフォルトの名無しさん
2009/09/25(金) 14:55:510357デフォルトの名無しさん
2009/09/25(金) 15:08:34Cには参照型がないのでこんな無様なことになる。
void freeAndNull(void ** pptr) {free(* pptr); * pptr = NULL;}
しかも、使うにはfreeAndNull(& ptr)などとしないといけない。
0358デフォルトの名無しさん
2009/09/25(金) 16:01:20#define Free(p) freeAndNull(&p)
0359デフォルトの名無しさん
2009/09/25(金) 16:10:400360デフォルトの名無しさん
2009/09/25(金) 16:43:170361デフォルトの名無しさん
2009/09/25(金) 16:55:35もちろんそうだよ
>358
当然だが
#define Free(p) freeAndNull(&(p))
の方がいい
Free(p_foo+i)
ついでに言うとfreeAndNull()でNULLかどうかのチェックいれといた方がいい
そういえば、C言語@便利な(笑)マクロスレ落ちたな
0362デフォルトの名無しさん
2009/09/25(金) 16:57:260363デフォルトの名無しさん
2009/09/25(金) 17:13:04もっと重要な事にT *からvoid **に変換できるかどうかについて思い出した
確かガチ規格準拠スレかどっかのサイトであった気がするが
T *からvoid *への変換とその逆は可能で
T *のポインタからvoid **はできない、一段階しか無理でconstが外せない云々かんぬんだったと思う
0364デフォルトの名無しさん
2009/09/25(金) 20:52:00それエラーか警告出ない?
0365デフォルトの名無しさん
2009/09/25(金) 21:15:55何故そう思うのか
(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()の戻り値を捨てるときや使わない引数に警告が出ないようにすることがある、もっとキモいな
0366デフォルトの名無しさん
2009/09/25(金) 22:08:41int 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と手順を踏む必要がある?
0367デフォルトの名無しさん
2009/09/25(金) 22:16:52(ポインタが4バイトという仮定の下で)計算は合っているけど、
要素数が実行時に決定または変化するという場合はHOGE*にするぞ普通。
0368366
2009/09/25(金) 22:39:24ありがとうございます。
通常は、そのHOGE*にHOGE×使用要素数分mallocだと思うんですけど、
好きなタイミングで要素数を増やしたい場合、
一度freeしてから、新しい要素数分でmallocし直す必要がありそうなので
Bのやり方をあげてみました。
リストを使えばそれでも実装できるみたいなのですが、
なかなか感じがつかめません。
0369デフォルトの名無しさん
2009/09/25(金) 23:14:55Cはhogeをreallocすればいいだけ
0370デフォルトの名無しさん
2009/09/25(金) 23:19:18Cが**なのはなんで?*でいいよ。
0372デフォルトの名無しさん
2009/09/25(金) 23:22:404 + 16 * 使用index数
ね
0373366
2009/09/25(金) 23:29:11ありがとうございます。
Bのに比べてメモリの再確保のしにくさを書きたかったのですが、
確かにどちらも同じような意味合いになると思うので、
*でいいと思います。
0374デフォルトの名無しさん
2009/09/25(金) 23:32:38ちなみにBのほうが使用メモリは多いし、最大32個制限になっていることは分かってるのかな
0375347
2009/09/25(金) 23:45:20たぶん、>>364は
free(p)
でpは無効なポインタだから、p=NULLはエラーだと思ったんだよ。
そうでしょ?>>364さん。
ちなみに正解は
free(p)
で無効なのは*pであり、pはエラーではない。
0376デフォルトの名無しさん
2009/09/25(金) 23:52:070377デフォルトの名無しさん
2009/09/26(土) 00:03:460378366
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よりはマシになるという感じです。
0379デフォルトの名無しさん
2009/09/26(土) 00:19:06char **str = (char **)malloc(sizeof(char *) * youso);
for (i = 0; i < youso; i++)
str[i] = malloc(sizeof(char));
として、文字配列を管理するのがお好みならそれでもいいけれど。
ちなみにポインタの配列にする方法(B,C)だと、使用、未使用をNULLかどうかで判断できるように
作ることができるメリットもある。
C'案の、HOGE *にするのは、未使用かどうかについてAと同じような判定をすることになる。
0380デフォルトの名無しさん
2009/09/26(土) 00:26:36ターゲットの環境はスタックサイズいくつなの?
0381366
2009/09/26(土) 00:54:42>>379
なるほど、勉強になります。
未使用チェックは、場合によって、
間を空洞にしておきたい時とかに使えそうです。
>>380
よく分かっていないのですが、
コンパイラはBCCで、ググった所1Mとか4Kとかでてきました。
実験してみた所、char s[1000000] = "hoge";はprintfで表示できましたが、
1100000とかだと、コンパイルは通るのですが、表示はされないので、
1Mなのかもしれません。
0382デフォルトの名無しさん
2009/09/26(土) 01:04:500383デフォルトの名無しさん
2009/09/26(土) 02:28:04スタックサイズは変更できず、かつ非常に小さいのだろうと思ってもしょうがない
0384デフォルトの名無しさん
2009/09/26(土) 07:38:45って比較演算子でどう書くの?
0385デフォルトの名無しさん
2009/09/26(土) 07:46:430386366
2009/09/26(土) 08:37:02>>382
オプション指定で実験し、確認できました。
>>383
なるほど、組み込みとかの場合、
細かく意識する必要があるのですね。
0387デフォルトの名無しさん
2009/09/26(土) 09:32:01Eclipseで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つになってしまいます。
どなたか解決方法をご存知の方、教えてください。
0388デフォルトの名無しさん
2009/09/26(土) 09:33:430389デフォルトの名無しさん
2009/09/26(土) 09:37:420390デフォルトの名無しさん
2009/09/26(土) 09:38:05変換指定子によって、必要な情報だけ抜き出そうとしています(%*[+]%[A-Z]など)。
しかし、変換指定子に外れた入力がきたときに、残りの文字列が裏に残ってしまいますよね。
これを回避する方法を教えて下さい。
stdinから入力の場合はfeof(stdin)やfflush(stdin)で回避できるとおもうんですが、
配列からの入力だとわからなくて…。
お願いします。
0391デフォルトの名無しさん
2009/09/26(土) 09:49:38それで合ってるじゃん
ちなみに2つめのargv[]は空白でもいい事になっている
0392デフォルトの名無しさん
2009/09/26(土) 09:58:40Eclipseじゃなく、コマンドでコンパイルして実行したら3
3
アホ
バカ
ドジっ子
って出ない?
0393デフォルトの名無しさん
2009/09/26(土) 10:00:52If 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.
0394デフォルトの名無しさん
2009/09/26(土) 10:02:360395デフォルトの名無しさん
2009/09/26(土) 10:45:44配列でも関係ないのでは?
fflush(stdin)はM$の独自拡張なので使わない方がよい
そのためにわざわざsscanf()を使っているんでしょ?
残りの文字列は捨ててしまえばよい
0396デフォルトの名無しさん
2009/09/26(土) 11:22:10よくよく考えたらそうか。サンクス
0397デフォルトの名無しさん
2009/09/26(土) 13:18:28これをpがNULLの時が真にするには?
0398デフォルトの名無しさん
2009/09/26(土) 13:22:04while( !(p=strstr()) ){
0399デフォルトの名無しさん
2009/09/26(土) 13:26:190400390
2009/09/26(土) 13:28:35>残りの文字列は捨ててしまえばよい
同じ文字列を対象としてsscanfを2回実行するとのこってません?
どうやって捨てるんでしょうか。
0401デフォルトの名無しさん
2009/09/26(土) 13:32:450402デフォルトの名無しさん
2009/09/26(土) 13:34:17…は?
scanf() じゃなく sscanf() なんだよな?
「残る」といえば元の配列にすべて残ってるし
正直、何を気にしてるのか解らないんだが。
0403デフォルトの名無しさん
2009/09/26(土) 13:36:09何バイト消費したか知る術を知りたいと
0404デフォルトの名無しさん
2009/09/26(土) 13:39:17自前でやるべきだろ
楽をしようとしてかえって苦労してる
0405デフォルトの名無しさん
2009/09/26(土) 13:40:18それなら %n が使える
0406デフォルトの名無しさん
2009/09/26(土) 14:12:120407デフォルトの名無しさん
2009/09/26(土) 14:13:120408デフォルトの名無しさん
2009/09/26(土) 15:54:13aとbどちらか先に評価されるかってコンパイラによって異なるのでしょうか?
0409デフォルトの名無しさん
2009/09/26(土) 15:56:300410デフォルトの名無しさん
2009/09/26(土) 15:59:010411デフォルトの名無しさん
2009/09/26(土) 16:04:01入門者には
短絡評価 - Wikipedia
ttp://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1
ここが分かりやすいだろう。;
0412デフォルトの名無しさん
2009/09/26(土) 16:48:15デジャブかな。。病院行くよ
0413デフォルトの名無しさん
2009/09/26(土) 16:50:38単に可読性が落ちるだけだから、
上級者きどって多用するようなことはするなよ。
0414デフォルトの名無しさん
2009/09/26(土) 16:53:59> if の代わりに使っても処理が速くなったりはしないし、
この根拠は?
コンパイラの最適化?
0415デフォルトの名無しさん
2009/09/26(土) 16:59:33これは source によって 載る 載らない が決まると云う事なのでしょうか?
0416デフォルトの名無しさん
2009/09/26(土) 17:03:330417デフォルトの名無しさん
2009/09/26(土) 17:07:03どこの国のお方w
0418デフォルトの名無しさん
2009/09/26(土) 17:10:100419デフォルトの名無しさん
2009/09/26(土) 18:47:58可読性どうこうは状況による。
0420デフォルトの名無しさん
2009/09/26(土) 19:00:45pをmallocするしかないのでしょうか?
0421デフォルトの名無しさん
2009/09/26(土) 19:03:560422デフォルトの名無しさん
2009/09/26(土) 19:06:04まあ、4 文字くらいなら無理矢理入るかも。
0423デフォルトの名無しさん
2009/09/26(土) 19:07:450424デフォルトの名無しさん
2009/09/26(土) 19:07:500425デフォルトの名無しさん
2009/09/26(土) 19:09:020426デフォルトの名無しさん
2009/09/26(土) 19:10:030427デフォルトの名無しさん
2009/09/26(土) 19:11:32char buf[256];
char *p;
p = buf;
0428デフォルトの名無しさん
2009/09/26(土) 19:22:41char *p = "string";
0429デフォルトの名無しさん
2009/09/26(土) 19:27:56書き替え可能な位置に配置するコンパイルオプションってなんだっけ?
これ指定すると、
char *p = "string";
char *q = "string";
みたいな同一内容の文字列リテラルでも別々に用意されるんだよな。
0430デフォルトの名無しさん
2009/09/26(土) 19:37:36そもそも、コンパイラによってオプションが変わるわけだが。
0431デフォルトの名無しさん
2009/09/26(土) 19:38:06同一文字列をマージするかどうかって話だろうけどさ、
> 書き替え可能な位置に配置する
そもそも不可能ってか未定義の動作だろ?
0432デフォルトの名無しさん
2009/09/26(土) 19:39:370433デフォルトの名無しさん
2009/09/26(土) 20:18:23昔は書き替えが許可されてたしな。
gcc なら -traditional でできる。
0434デフォルトの名無しさん
2009/09/26(土) 20:33:58未定義の動作になってるね
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ではさらに厳しくなっているようだ
0435デフォルトの名無しさん
2009/09/26(土) 21:38:53fp = fopen("dTEST","w");
ってすると
当たり前だがdTESTってファイルができちまう
test.txtを作りたいんだ
""の中でも#defineを使う方法ってあるの?
誰か教えてください
dTESTの定義は変えない方法でお願いします
0436デフォルトの名無しさん
2009/09/26(土) 21:48:01#define TO_STR(x) TO_STR_CORE(x)
こんなのを用意しておいて、fp = fopen(TO_STR(dTEST), "w");
このやり方だと、文字列の中に#defineを効かせるというより、#defineで置換した結果を文字列化しているというほうが正確だけど。
0437デフォルトの名無しさん
2009/09/26(土) 21:51:040438デフォルトの名無しさん
2009/09/26(土) 21:57:01>>435は>>436のような「プリプロセッサを駆使してなんとかしたい」ではなく
単に、「dTESTの文字列のファイル名を得たい」だと思うぞ。
もちろん、なんとかして(#を使って)dTESTを文字列化しなきゃならんが
その後はsprintf等でファイル名を作成する等でも充分だと思う。
0439デフォルトの名無しさん
2009/09/26(土) 21:59:06これは容認できませんか?
http://codepad.org/2vAoTWcb
0440435
2009/09/26(土) 22:11:19回答ありがとうです
>>436
こんなやり方があるなんて知らなかった( ..)φ
>>439
これ以外のやり方が知りたかったんです。
でも結局これが一番わかりやすい。
↓これがしたかったからなんだけど、
#define dTEST test.txt
sprintf(filename,"%02d_dTEST",num);
やっぱこれで十分かな??
#define dTEST "test.txt"
sprintf(tmp,dTEST);
sprintf(filename,"%02d_%s",num,tmp);
0441デフォルトの名無しさん
2009/09/26(土) 22:14:180442デフォルトの名無しさん
2009/09/26(土) 22:19:06そんなことしなくても
#define dTEST "test.txt"
sprintf(filename,"%02d_" dTEST, num);
これでいいだろ。
0443デフォルトの名無しさん
2009/09/26(土) 22:23:23printf("Hell" "o"
","
" "
"World.");
0444デフォルトの名無しさん
2009/09/26(土) 22:35:17あうう・・・知ってたのに全く思いつきませんでした(ノД`)
お恥ずかしいです
これで全部解決です。回答くれた人ありがとう
お騒がせしましたー
0445デフォルトの名無しさん
2009/09/27(日) 04:29:26嘘をつかないように
0446デフォルトの名無しさん
2009/09/27(日) 05:17:410447デフォルトの名無しさん
2009/09/27(日) 10:39:55いるよねー
そうやって張っても仕方ない見栄を張るヤツwwww
でも今回の彼の言いたいことは
>>文法は知ってたのに
って意味なんじゃないかねぇ?
まあ正確には
>>知ってた(ような気になってた)
だろうな。
0448デフォルトの名無しさん
2009/09/27(日) 13:05:390449デフォルトの名無しさん
2009/09/27(日) 13:10:01じゃなかったのかと。
0450デフォルトの名無しさん
2009/09/27(日) 13:15:33そうだけど見栄を張るのはおかしいよな。
精神的にも入門編かwwww
0451デフォルトの名無しさん
2009/09/27(日) 13:19:230452デフォルトの名無しさん
2009/09/27(日) 13:30:030453デフォルトの名無しさん
2009/09/27(日) 13:30:20何がダメか教えてください・・・。
#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);
}
0454デフォルトの名無しさん
2009/09/27(日) 13:34:490455デフォルトの名無しさん
2009/09/27(日) 13:35:33独学です。
0456デフォルトの名無しさん
2009/09/27(日) 13:40:36「サブルーチンの仕方」などという謎の用法。
関数の正しい定義方法。
関数名として認められない例 (途中に空白がある等)。
まあ人に訊くレベルにすら達してない。
0457デフォルトの名無しさん
2009/09/27(日) 13:44:510458デフォルトの名無しさん
2009/09/27(日) 13:48:480459デフォルトの名無しさん
2009/09/27(日) 13:50:540460デフォルトの名無しさん
2009/09/27(日) 13:51:21いろいろ指摘したい点はあるというかありすぎる。
まずはもっとシンプルなサンプル読んで
関数の作り方をちゃんと学んでからにしようぜ。
とりあえずsub 1は駄目。sub1にしとけ。
0461デフォルトの名無しさん
2009/09/27(日) 14:16:470462デフォルトの名無しさん
2009/09/27(日) 14:18:34まじすか
0463デフォルトの名無しさん
2009/09/27(日) 14:22:15変数のスコープが甘いというか無いというかw
0464デフォルトの名無しさん
2009/09/27(日) 14:29:02異なる言語は異なるパラダイムで設計されているから。
独学ならK&R第2版をまっさらな気持ちで読むといい。
三日でCの初歩が完全に身につく。
0465デフォルトの名無しさん
2009/09/27(日) 14:40:370466デフォルトの名無しさん
2009/09/27(日) 14:50:19あと、C言語はプログラマのプログラム以外の知識が低い場合もカスになりやすい。
(ライブラリが充実していないので)
0467デフォルトの名無しさん
2009/09/27(日) 15:06:220468デフォルトの名無しさん
2009/09/27(日) 15:10:18からパクれ
今や原書はタダで読めるらしいし
0469デフォルトの名無しさん
2009/09/27(日) 16:22:080470デフォルトの名無しさん
2009/09/27(日) 16:25:32maxとminは逆じゃないのか?
0471デフォルトの名無しさん
2009/09/27(日) 16:35:05疑問を持ったら実際に実行してみよう。
まぁ、このコードはバグだらけ以前の問題なので
実行できないけどw
0472デフォルトの名無しさん
2009/09/27(日) 16:37:52サブルーチンがやっぱわかんねw
0473デフォルトの名無しさん
2009/09/27(日) 17:19:07通報した
0474デフォルトの名無しさん
2009/09/27(日) 17:49:28これはひどい。
0475デフォルトの名無しさん
2009/09/27(日) 18:48:490476デフォルトの名無しさん
2009/09/27(日) 18:57:09みんな理解できないから
0477デフォルトの名無しさん
2009/09/27(日) 18:58:29大丈夫。
どちらかというと悪手だから。
0478デフォルトの名無しさん
2009/09/27(日) 19:24:290479デフォルトの名無しさん
2009/09/27(日) 19:59:27int main() return 0;
とすることはできませんか?
0480デフォルトの名無しさん
2009/09/27(日) 20:00:170481デフォルトの名無しさん
2009/09/27(日) 20:10:080482デフォルトの名無しさん
2009/09/27(日) 20:15:280483デフォルトの名無しさん
2009/09/27(日) 20:41:59{} は
1. 複数の文・式をひとつのブロックとしてまとめる。
(if, for, while 等)
2. 構文上、必須。
(switch, 関数, 構造体定義, 配列や構造体の初期値)
の2種類ある。後者は必須といったら必須なの!
0484デフォルトの名無しさん
2009/09/27(日) 21:19:12stdio.hなどをインクルードすると定義されてるようですがgrepしても見あたりません
インクルードせずにコンパイルするとNULL
error: 'NULL' undeclared (first use in this function)
0485デフォルトの名無しさん
2009/09/27(日) 21:21:00stdio.hなどをインクルードせずにコンパイルするとNULLが定義されてないと怒られます
error: 'NULL' undeclared (first use in this function)
コンパイラはgcc 4.2.1です
NULLってどこに定義されてるんでしょうか?
0486デフォルトの名無しさん
2009/09/27(日) 21:21:25さらに grep で include を探す
0487デフォルトの名無しさん
2009/09/27(日) 21:28:55stdio.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
0488デフォルトの名無しさん
2009/09/27(日) 21:37:590489デフォルトの名無しさん
2009/09/27(日) 21:56:58ANSI 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はまた別のところを参照してね
これ以上はガチ規格準拠スレでやろうか
0490デフォルトの名無しさん
2009/09/27(日) 22:07:15ANSI Cでは、<stddef.h>のほか、<stdio.h>、<stdlib.h>、<string.h>、<time.h>でもNULLが定義されていることになっている。
0491デフォルトの名無しさん
2009/09/27(日) 22:12:05#ifndef NULL
#define NULL 0
#endif
って書いときゃいいけど。
0492デフォルトの名無しさん
2009/09/27(日) 22:56:150493デフォルトの名無しさん
2009/09/27(日) 23:01:410494デフォルトの名無しさん
2009/09/27(日) 23:13:500495484
2009/09/27(日) 23:52:45stddef.hからインクルードされるsys/_null.hでNULLが定義されてるのを見つけました
stdio.hとかも同様にsys/_null.hをインクルードしてましたね
あ、OSはFreeBSD 7.2です
すっきりしました。ありがとうございます
0496デフォルトの名無しさん
2009/09/28(月) 00:09:55今お前が倒したのは、我々の中でも一番の小物だ
的なね。うん。まだまだ先があるんだろうな。
俺はそんなにCはやりこんでないけど。
0497492
2009/09/28(月) 10:09:11今ハノイの塔を再帰で解く問題で詰んでて、これを乗り越えた先に
中級者が見えてるのかなと期待してみたんですが、そう甘いもんじゃないですね。
精進します。
0498デフォルトの名無しさん
2009/09/28(月) 10:16:59再帰呼び出しを理解しているかどうかに的を絞れば少しは関係するけども。
0499デフォルトの名無しさん
2009/09/28(月) 10:19:090500デフォルトの名無しさん
2009/09/28(月) 12:52:17それの実装上の表現までは決められてないんだっけ
0501デフォルトの名無しさん
2009/09/28(月) 14:32:26まあ、その場合は null と小文字してほしいが。
0502デフォルトの名無しさん
2009/09/28(月) 14:35:02うん。NULLの中身がどうであるかは分からないけど、ポインタを0と比較すればおk
ってなんかオウム返しみたいになった
0503デフォルトの名無しさん
2009/09/28(月) 22:17:39main() {
printf ("hello world\n");
}
0504デフォルトの名無しさん
2009/09/29(火) 03:43:24釣りの予感。>>503 を叩くと、「これってK&R2」に書いてるんですけど」といって逆襲する、と。
0505デフォルトの名無しさん
2009/09/29(火) 04:11:42何その糞コード
0506デフォルトの名無しさん
2009/09/29(火) 04:20:27お約束どおり
「これってK&R2の冒頭にかいてあるんですけれども」
0507デフォルトの名無しさん
2009/09/29(火) 04:23:30さっさと捨てろ
0508デフォルトの名無しさん
2009/09/29(火) 04:27:13K&R2を捨てるのですか?
0509デフォルトの名無しさん
2009/09/29(火) 04:39:17もういらんだろう。ISO/IEC 9899 さえあればいい。
0510デフォルトの名無しさん
2009/09/29(火) 04:40:090511デフォルトの名無しさん
2009/09/29(火) 04:40:59でもみんな読んでるんですよ。ISO には規格だけしか書いてないし。
0512デフォルトの名無しさん
2009/09/29(火) 04:48:460513デフォルトの名無しさん
2009/09/29(火) 04:50:430514デフォルトの名無しさん
2009/09/29(火) 04:55:200515デフォルトの名無しさん
2009/09/29(火) 04:58:330516デフォルトの名無しさん
2009/09/29(火) 05:01:200517デフォルトの名無しさん
2009/09/29(火) 05:05:52K&Rってクソじゃねーか!!!!!!!!!!
http://pc11.2ch.net/test/read.cgi/prog/1241453536/l50
0518デフォルトの名無しさん
2009/09/29(火) 05:08:070519デフォルトの名無しさん
2009/09/29(火) 05:28:540520デフォルトの名無しさん
2009/09/29(火) 05:43:010521デフォルトの名無しさん
2009/09/29(火) 05:48:550522デフォルトの名無しさん
2009/09/29(火) 07:05:48> これはC言語界にとって大問題ではないかと。
その程度のレベルの低いお前が何を偉そうにwww
0523デフォルトの名無しさん
2009/09/29(火) 07:30:0905242
2009/09/29(火) 08:17:54CよりEmacsの使い方を覚えなきゃいかんみたいだ orz
0525デフォルトの名無しさん
2009/09/29(火) 11:23:20お好きなところへどうぞ。
俺のC言語勉強日記
http://pc12.2ch.net/test/read.cgi/tech/1213765748/
C言語を勉強しあおう
http://pc12.2ch.net/test/read.cgi/tech/1190599975/
C言語の第一歩
http://pc12.2ch.net/test/read.cgi/tech/1031374980/
おまいら!今日からC言語を学んでいくぞー!パート3
http://pc12.2ch.net/test/read.cgi/tech/1134646050/
C言語をやりたいんですが
http://pc12.2ch.net/test/read.cgi/tech/1198344909/
0526デフォルトの名無しさん
2009/09/29(火) 12:37:00ものすごい囲い込み戦法で他のエディタが使えなくなる
0527デフォルトの名無しさん
2009/09/29(火) 12:39:100528デフォルトの名無しさん
2009/09/29(火) 13:44:30・現在時刻出力
・ファイル出力
は調べても別々ででてきて目的を果せません。。
サンプルおしえてください
0529デフォルトの名無しさん
2009/09/29(火) 13:48:230530片山博文MZ ◆BVYGEn4LD2
2009/09/29(火) 13:56:12#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;
}
0531デフォルトの名無しさん
2009/09/29(火) 14:09:17#include <stdlib.h>
int main(){return system("time > filename.txt");}
0532デフォルトの名無しさん
2009/09/29(火) 14:17:36なんでstrftime()使わないの?
0533528
2009/09/29(火) 15:51:34ご協力ありがとうございました。
何とかできました。
#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);
}
0534デフォルトの名無しさん
2009/09/29(火) 19:30:35コンパイルしても”警告 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;
}
0535デフォルトの名無しさん
2009/09/29(火) 19:31:463,14 3.14
0536534
2009/09/29(火) 19:31:50のところが問題のようです
0537デフォルトの名無しさん
2009/09/29(火) 19:32:050538デフォルトの名無しさん
2009/09/29(火) 19:32:41指定された行?
0540デフォルトの名無しさん
2009/09/29(火) 20:08:380541デフォルトの名無しさん
2009/09/29(火) 20:12:090542デフォルトの名無しさん
2009/09/29(火) 20:13:18#defineの機能ってなに
0543デフォルトの名無しさん
2009/09/29(火) 20:20:02コードを置き換えてコンパイルさせることでしょ?
0544デフォルトの名無しさん
2009/09/29(火) 20:37:29後半要らない。
0545デフォルトの名無しさん
2009/09/29(火) 20:39:320546デフォルトの名無しさん
2009/09/29(火) 20:42:50まぁ、俺だったらまず置換後のコードを疑うからさ
0547デフォルトの名無しさん
2009/09/29(火) 20:43:10さらしあげ
0548デフォルトの名無しさん
2009/09/29(火) 21:03:25最近C言語を始めたのですがビットフィールドがわかりません
何に使うんですか
0549デフォルトの名無しさん
2009/09/29(火) 21:05:350550デフォルトの名無しさん
2009/09/29(火) 21:05:560551デフォルトの名無しさん
2009/09/29(火) 21:06:590552デフォルトの名無しさん
2009/09/29(火) 21:09:28http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/tcpheaders.html
http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/images/tcp-headers.jpg
こういう1〜4バイトの中に複数のフラグがたくさん詰まってるデータを操作する時に使ったりする
0553デフォルトの名無しさん
2009/09/29(火) 21:12:13やっぱり組込み?とかで使うんですね
必要になったときにまた勉強します
0554デフォルトの名無しさん
2009/09/29(火) 21:17:55最近C言語始めたなら
当分理解する必要はないと思う。
少なくとも
|とか^とかは||や&&とは違う
ってことだけ知っていれば後は必要になってから理解すれば。
頑張ってね〜!
0555デフォルトの名無しさん
2009/09/29(火) 21:32:330556デフォルトの名無しさん
2009/09/29(火) 22:15:47typedef struct {
unsigned year: 6;
unsigned month: 4;
unsigned day: 5;
unsigned hh: 5;
unsigned mm: 6;
unsigned ss: 6;
} timestamp_t;
年月日時分秒が4バイトで表現できるみたいな?
0557デフォルトの名無しさん
2009/09/29(火) 22:58:57節子、それビット演算や
0558デフォルトの名無しさん
2009/09/29(火) 23:17:440559デフォルトの名無しさん
2009/09/29(火) 23:19:24一般的にはそうだけど、そうならないことも多々ある。
0560デフォルトの名無しさん
2009/09/29(火) 23:40:29Q. 〜やると速くなる?
A. 実際に計測して速くなったら速くなり、速くならなかったら速くならない。
0561デフォルトの名無しさん
2009/09/29(火) 23:51:11ttp://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89
w
0562デフォルトの名無しさん
2009/09/30(水) 00:15:59配列の変数一つ一つが構造体をもつことができますか?
配列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
こんな感じに一つの配列の変数に対して複数の値が持てるのでしょうか?
0563デフォルトの名無しさん
2009/09/30(水) 00:17:42もてもてです
0564デフォルトの名無しさん
2009/09/30(水) 00:23:050565デフォルトの名無しさん
2009/09/30(水) 00:24:050566562
2009/09/30(水) 00:30:31>>564
>>565
ありがとうございます。
構造体配列というやつで可能ということは分かりました。
宣言方法がイミフですが、ありがとうございました。
色々読んでみます。
0567デフォルトの名無しさん
2009/09/30(水) 00:31:070568デフォルトの名無しさん
2009/09/30(水) 01:38:553個だぞw
0569デフォルトの名無しさん
2009/09/30(水) 03:33:04形にしようと思うのですが、その際のファイルの拡張子って.hと.c、.cppどちらを使うのが
普通なのでしょうか?
0570デフォルトの名無しさん
2009/09/30(水) 03:35:31.cppはC++のコードを書くのに使う
0571デフォルトの名無しさん
2009/09/30(水) 03:48:150572デフォルトの名無しさん
2009/09/30(水) 04:43:530573デフォルトの名無しさん
2009/09/30(水) 04:59:140574デフォルトの名無しさん
2009/09/30(水) 05:09:180575デフォルトの名無しさん
2009/09/30(水) 05:38:400576デフォルトの名無しさん
2009/09/30(水) 07:17:16ヘッダファイル、ソースファイル、分割コンパイル
という用語は知らない?
0577デフォルトの名無しさん
2009/09/30(水) 07:58:39不可能ではないが入門書に書くべきソースじゃないだろとw
0578デフォルトの名無しさん
2009/09/30(水) 08:25:08ヘッダとソースに分けて分割コンパイルがいいと思う。
0579デフォルトの名無しさん
2009/09/30(水) 09:33:52オブジェクトを持たないインクルードファイル(*.h)でもないという意味で*.iにしておくなぁ。
0580デフォルトの名無しさん
2009/09/30(水) 10:12:360581デフォルトの名無しさん
2009/09/30(水) 10:47:030582デフォルトの名無しさん
2009/09/30(水) 10:54:480583デフォルトの名無しさん
2009/09/30(水) 10:55:39単体でデバッグできないし、インクルードするソースは一本だけだし、なんでわざわざ分けるのやら。
幾つか理由がはっきりしていたのはこんな感じ。
・インクルードされるソースには手をつけたくない。どうも、他からの流用らしい。
・マルチプラットフォームを意識していた。尤も、他のソースが意識していないので殆ど意味がない。
・インクルードされるソースを他のツールで生成していた。これこそ、拡張子を変えるべきだと思うのだけど。
0584デフォルトの名無しさん
2009/09/30(水) 10:59:57これだとエラーが出る。
#define loop(v, min, max, lambda) for(int v=min; v<=max; v++){ lambda }
main()
{
loop(i, 1, 5, (printf("[%d]\n", i)) );
}
0585デフォルトの名無しさん
2009/09/30(水) 11:01:390586デフォルトの名無しさん
2009/09/30(水) 11:04:10そりゃそうだ
0587デフォルトの名無しさん
2009/09/30(水) 11:10:34どうして?
0588デフォルトの名無しさん
2009/09/30(水) 11:50:38いつもの釣りにしちゃ丁寧だな<ビットフィールド
0589デフォルトの名無しさん
2009/09/30(水) 11:54:01#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)));
}
// これなら通った。
0590デフォルトの名無しさん
2009/09/30(水) 12:18:17ああそういうことか。ありがとう。
結構簡単にできる割に全く使われないねこういうの。
0591デフォルトの名無しさん
2009/09/30(水) 12:24:00みたいな、ありがち定型マクロとは違うし
↓のような
#define BEGIN {
#define END }
別言語を真似るようなマクロはやめれ というのは良く聞く話
0592デフォルトの名無しさん
2009/09/30(水) 14:54:19そんなクソコードあるの!?
初めて知ったよ。
0593デフォルトの名無しさん
2009/09/30(水) 15:16:34#define END ;}
だろぼけ
0594デフォルトの名無しさん
2009/09/30(水) 15:19:17昔、ソースレベルリンクシステムとか言ってた奴いたよな。
0595デフォルトの名無しさん
2009/09/30(水) 15:35:400596デフォルトの名無しさん
2009/09/30(水) 15:57:56│ │ └module_a.c
│ ├ module_b.h
│ │ └module_b.c
│ └module_c.h
│ └module_c.c
program.c
普通はこんな感じじゃないの?
0597デフォルトの名無しさん
2009/09/30(水) 16:35:45Cプログラマでございと威張ってる奴の大半はこの程度なんだろうな。
0598デフォルトの名無しさん
2009/09/30(水) 16:58:320599デフォルトの名無しさん
2009/09/30(水) 17:06:55っていうのはどうやって 言えばいいでしょうか?
普通に
hoge.cをgccでコンパイルして実行してください
で通じますか?
0600デフォルトの名無しさん
2009/09/30(水) 17:16:42module_a.h の存在意義は?
もし答えが、「module_a.c *のみ*で使う変数/関数/マクロ/typedefを別ファイルで定義した」
であれば、「バカな構造」だよ。
0601デフォルトの名無しさん
2009/09/30(水) 17:17:48ビルドしてくださいとかは?
てか何も言わなくてもソース+それなりのMakefileとか何か渡せばあとやることわかるんじゃない?
0602デフォルトの名無しさん
2009/09/30(水) 17:19:14相手によるけど俺には通じる
単一ファイルで標準ライブラリだけならgcc hoge.c だけで出来るし
-lm のリンクではまる人は何人か見たことはあるが
0603デフォルトの名無しさん
2009/09/30(水) 17:21:56この図だけじゃ繋がりの向きが不明だろ、
program.h の中で他の 3 つの *.h が #include されてるのかもしれん。
0604デフォルトの名無しさん
2009/09/30(水) 17:28:550605デフォルトの名無しさん
2009/09/30(水) 17:33:160606599
2009/09/30(水) 17:36:12ありがとうございます。
単一ファイルで標準ライブラリだけです。
たいしたソースじゃなくて、単にサンプルコードの動作を見てもらいたい場合などです。
ありがとうございました。
0607デフォルトの名無しさん
2009/09/30(水) 18:51:45ld -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
0608デフォルトの名無しさん
2009/09/30(水) 19:03:07columnsというシンボルについて調べる。
あと、スレ違い。
0609デフォルトの名無しさん
2009/09/30(水) 19:05:04環境依存スレにいってそのソース(全部)をどこかに上げて聞けばいいよ
0610デフォルトの名無しさん
2009/09/30(水) 19:06:22Cの場合は切り捨てられずに無関係の場所に書き込まれてしまうのですか?
0611デフォルトの名無しさん
2009/09/30(水) 19:14:42あなたの考える「Cの場合」のコードを見せてくれよ。
0612デフォルトの名無しさん
2009/09/30(水) 19:18:47int i = (int)d; // =3 な適切なキャスト
0613デフォルトの名無しさん
2009/09/30(水) 19:36:060614デフォルトの名無しさん
2009/09/30(水) 19:46:270615デフォルトの名無しさん
2009/09/30(水) 20:51:150616デフォルトの名無しさん
2009/09/30(水) 22:05:19結果として i には 3 が格納されるだけ。
無関係の場所への書き込み、というのがよくわからない。
たとえば、このコードでは、i を格納しているメモリの隣接する番地に、
d を構成するバイトデータなどが書き込まれることはない。
0617デフォルトの名無しさん
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 を使う)
お願いします
0618デフォルトの名無しさん
2009/09/30(水) 22:34:540619デフォルトの名無しさん
2009/09/30(水) 22:36:560620617
2009/09/30(水) 22:39:580621デフォルトの名無しさん
2009/09/30(水) 22:46:59http://pc12.2ch.net/test/read.cgi/tech/1242876647/717
0622デフォルトの名無しさん
2009/09/30(水) 23:44:51#include <stdio.h>
main()
{
double d = 3.14;
int n;
*((double*)&n) = d;
printf("%f\n", *((double*)&n));
}
3.140000
0623デフォルトの名無しさん
2009/09/30(水) 23:55:330624デフォルトの名無しさん
2009/10/01(木) 00:06:27何が裏技だアホか
0625デフォルトの名無しさん
2009/10/01(木) 00:17:41/ \ /\ キリッ
. / (ー) (ー)\ <「4バイトの変数に8バイトのデータを格納する裏ワザ」
/ ⌒(__人__)⌒ \
| |r┬-| |
\ `ー’´ /
ノ \
/´ ヽ
| l \
ヽ -一””””~~``’ー?、 -一”””’ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / //
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー’´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||l バンバン
ヽ -一””””~~``’ー?、 -一”””’ー-、
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
0626デフォルトの名無しさん
2009/10/01(木) 00:22:330627デフォルトの名無しさん
2009/10/01(木) 00:41:43_,___ ______ __ ___
_| .| _,-‐ヽ | | | .| | .|
. r‐ ̄' ――-\ ヽ _,,==========、 .| | | |
| __ __ .| l \ | ヽ | | _、_ .| .|
 ̄ / ./ \ | \ .| ―――> ,-‐' .| ヽ | |
_l .| | .| .| .| / `'、_ \ ./ ノ .7
/ ,| _ノ | ‐-― / _,、_ 7  ̄ ̄ __,~ .〉
ノ /.|  ̄ _= / ._/ .\  ̄~~| | ̄''"~ /
`ヽ_ノ \―-'" \,/ .`‐-――┘ \_____,-‐'
___ _,―、_ _,―_____
___,| .L_ / ̄―― .――ヽ / .|
| .|| ̄ ̄ ̄7 .|____ ___」 ._,、_=========_
―┐ .r‐ ̄‐-――_,ノ | ̄ ̄ ̄'~ .~ ̄ ̄'''> | \
/ / L_____ ____,ノ ―――- ,-‐'
/ ./r‐―| _,-‐' ̄'" .L__ _/ ~ヽ
/ | | L____ ./ .r‐- `ヽ、 ./ _-┐ |..___
/ | \ | |  ̄~ _へ_ / ./ / \ ~ |
`―-~ `'―‐-――┘ `‐-、――'"  ̄ ヽ┘ `―――┘
0628622
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
ヽ /ヽ /
ヽ,___,,,/ ヽ,,___,,,/
/ |
/ |
0629デフォルトの名無しさん
2009/10/01(木) 04:13:370630デフォルトの名無しさん
2009/10/01(木) 22:40:26うまくいきません。どうすればいいですか
0631デフォルトの名無しさん
2009/10/01(木) 22:42:210632デフォルトの名無しさん
2009/10/01(木) 22:48:530633デフォルトの名無しさん
2009/10/01(木) 22:53:54実行されるような条件どういうふうに書けばいいですか
0634デフォルトの名無しさん
2009/10/01(木) 22:56:040635デフォルトの名無しさん
2009/10/01(木) 22:58:13double d = ・・・;
if ((int)d % 2 == 0) ・・・;
小数部を無視するならこうだけど、こういう意味じゃないんだろ?
0636デフォルトの名無しさん
2009/10/01(木) 22:58:35intやlongにキャストしてから%使う以外にも、
fmod関数という手があるでしょ。
0637デフォルトの名無しさん
2009/10/01(木) 23:01:410638デフォルトの名無しさん
2009/10/01(木) 23:04:52modfで出来ました。これは知りませんでした、ありがとうございます
0639デフォルトの名無しさん
2009/10/01(木) 23:05:170640デフォルトの名無しさん
2009/10/01(木) 23:57:59「何を、したというわけでもありませんよ(だから、気になさらないでください)」の意
0641デフォルトの名無しさん
2009/10/01(木) 23:59:120642デフォルトの名無しさん
2009/10/02(金) 00:50:04やはりここにいる皆さんも頭が悪いのでしょうか?
0643デフォルトの名無しさん
2009/10/02(金) 00:52:500644デフォルトの名無しさん
2009/10/02(金) 00:53:46はい、他の皆さんはどうかわかりませんが少なくとも私はあなたが仰る該当者です。
人間年を取ると頭が固くなってしまっていけませんね。
0645デフォルトの名無しさん
2009/10/02(金) 01:01:450646デフォルトの名無しさん
2009/10/02(金) 01:07:28C++はオブジェクト指向以外のパラダイムも入っているからねぇ
僕にもC++最強と言っていた時代がありましたが、結局C言語に戻ってきました
でも、C言語にも名前空間とテンプレートが欲しい
0647デフォルトの名無しさん
2009/10/02(金) 01:10:400648デフォルトの名無しさん
2009/10/02(金) 01:17:240649デフォルトの名無しさん
2009/10/02(金) 02:06:120650デフォルトの名無しさん
2009/10/02(金) 02:13:58Perlも結構落ち着くな
0651デフォルトの名無しさん
2009/10/02(金) 02:14:080652デフォルトの名無しさん
2009/10/02(金) 02:20:25コールバック? 特定のキー入力があったら、この処理みたいな
サンプルくれ。
0653デフォルトの名無しさん
2009/10/02(金) 02:23:05C言語の仕様外の話だな
OSとかの情報がないとどうにもならんし
専用スレへ行ったほうがいいな
0654デフォルトの名無しさん
2009/10/02(金) 02:27:25cursesってよく知らないけどこういうのも長けてんのかな
0655デフォルトの名無しさん
2009/10/02(金) 02:27:51ごめんごめん。
Linux(Fedora11)でgccを使ってる。
どーにも理解できん。
0656デフォルトの名無しさん
2009/10/02(金) 02:33:07cursesってどっちかって言うと画面制御系かと
思ってたけど違う? それにgetchってループで
まわして処理するよね? そうでなくて、「割り込み」
っぽいのしたいんだけど、良かったら教えて。
0657デフォルトの名無しさん
2009/10/02(金) 03:00:45Windows のメッセージ処理だって割り込みなんかしてないし。
0658デフォルトの名無しさん
2009/10/02(金) 03:18:17それ使えよ。
0659デフォルトの名無しさん
2009/10/02(金) 03:22:490660デフォルトの名無しさん
2009/10/02(金) 03:23:24初心者なもので、用語を間違って使っていたら謝る。
>>658
そのシグナル使いたくない理由があるんだ。
ちなみにGUIは難しすぎるんで、コンソールアプリなんだ。
誰か教えてくれ。
0661デフォルトの名無しさん
2009/10/02(金) 03:29:10たぶん、kbhit() と getch() で出来るんじゃないか?
0662デフォルトの名無しさん
2009/10/02(金) 03:29:33そんな高度な技になるのか・・・
素人にゃ無理っぽいな。
0663デフォルトの名無しさん
2009/10/02(金) 03:37:01libmad使ってコンソールで動くMP3プレイヤーを
作ろうと思ってるんだ。 サンプルのminimad.cみながら
なんとか音出すところまではできたんだけど、演奏中に
他の処理(スキップとかボリュームとか)させるには
どうしたもんかと悩んでるんだ。
なんかどっかにいいサンプルコードでもないもんかな?
0664デフォルトの名無しさん
2009/10/02(金) 03:41:22割り込みでなければならない理由は?
たとえばこのアプリのこのような処理、という具体例はあるかな。
例:IEでページ読み込み中に×を押したら中断するような感じ
→スレッド終わらせてるだけ。シングルスレッドでやるなら随時×ボタンが押されたかどうかを見ることで解決
0665デフォルトの名無しさん
2009/10/02(金) 03:51:06>>663にも書いたけど、MP3演奏中に[P]キーで停止、
[F]キーで次のファイル、[R]キーで前のファイル、
といったイメージなんだけど、それって割り込みしないと
いけなくない? もしかして根本的に間違ってる?
0666デフォルトの名無しさん
2009/10/02(金) 03:51:35処理Aを止めるためには処理Aを操作可能な状態にいなければならない
そのためには、処理Aを別スレッドで動かす、もしくは処理Aが自発的に止まるようにする
0667デフォルトの名無しさん
2009/10/02(金) 03:53:21ごめん、入れ違いになったね。
そのライブラリにコールバック関数を渡すことはできないのかな。
0668デフォルトの名無しさん
2009/10/02(金) 03:57:22同期しかないなら、それは演奏中に止めたりするようにできてないのか?
非同期で演奏できるなら普通に制御できるだろ。
0669デフォルトの名無しさん
2009/10/02(金) 04:03:04/*
* 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.
*/
ってなってるからここで随時操作されたかどうかをチェックすればいいんでないの?
0670デフォルトの名無しさん
2009/10/02(金) 04:05:49時間無駄にしたわ。
0671デフォルトの名無しさん
2009/10/02(金) 04:06:06もしできたら↓ダウンロードしてみてもらえる?
ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz
この中にminimad.cってサンプルがあるんだけど
演奏中(decodeファンクション中)に自前の
MAD_FLOW_STOPを送りたかったらどうすんの?
「コールバック関数」をしっかり理解できてないから
なんだろうけど、ちんぷんかんぷんで・・・
>>668
非同期モードか・・・ 調べてみるよ。
0672669
2009/10/02(金) 04:09:020673デフォルトの名無しさん
2009/10/02(金) 04:09:19outputファンクションの中でgetch()なりなんなりで
入力があったかどうかを調べろってことなの?
>>670
すまん・・・
0675669
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が何かはわからんが。
0676デフォルトの名無しさん
2009/10/02(金) 04:30:36見つかんなくてさ。 とにかくoutputの中でキー入力を見張って
MAD_FLOW_STOPを送るような感じでやってみるよ。
アドバイスありがと。 またわかんなくなったら来るからよろしく。
0677デフォルトの名無しさん
2009/10/02(金) 04:33:11処理を取られっぱなしになると困るであろうということから、処理Aの中で定期的に呼び出す関数のこと
このとき、コールバック関数のインターフェイスのみが提供され、その実装は使用者にゆだねられる。
mad_decoder_initの第3パラメータ以降はすべてタイミングの異なるコールバック関数。
0678デフォルトの名無しさん
2009/10/02(金) 04:38:51俺もコメント見ながら話してるだけだし、あんまり当てにならないかもよ。
>>672で言いたかったのは
ouputの中でgetch使うと何かキーを押すまでそこで処理が止まっちゃうよということ。
kbhitで判定すれば取れるかも?
0679デフォルトの名無しさん
2009/10/02(金) 05:04:25参考にできるのがそのminimad.cくらいで、他に
解説がない。 初心者にはつらいよ。
せてももっとサンプルコードがあると助かるんだけど。
ソースコード読めってことなのか・・・
0680デフォルトの名無しさん
2009/10/02(金) 11:19:50???
作った奴には聞けないのかね。
0681デフォルトの名無しさん
2009/10/02(金) 15:08:530682デフォルトの名無しさん
2009/10/02(金) 15:36:22C++だとC厨とか呼ばれてCOBOL厨並みに恥ずかしいww
下向いちゃうしww
彼にはせめてVB使って欲しい・・・
友達とかに彼のこときかれたら・・・・もう最悪ww
せめて普通にVBやJavaぐらいは使って欲しい。
常識的に考えて欲しいだけなんです!
彼がC厨だとばれた時の恥ずかしさとか分かる?
あのね?たとえば週末10〜20人ぐらいでバーベキューとか行くでしょ?
それぞれ彼氏と一緒来るわけじゃない?
みんなの彼氏たちは普通に医者だとか弁護士だとか商社マンとかなわけでしょ?
C厨と一緒だと大恥かくでしょうがww
0683デフォルトの名無しさん
2009/10/02(金) 15:38:20これって所詮は全てポインタでありアドレスなんだから、分けて考える必要って無いように思うのですが、
このような考え方は何か間違ってるでしょうか?
文字列にしても配列にしても、先頭のアドレスを指してるだけで配列自体は長さすら認識してないわけだから
int型へのポインタと配列へのポインタすらも区別は必要ないように思えます。
0684デフォルトの名無しさん
2009/10/02(金) 15:39:35別れればいいじゃん?
なぜそんな彼氏にしがみついてるのか理解できない
0685デフォルトの名無しさん
2009/10/02(金) 15:44:50もう一回 配列 と ポインタ の違いを確認するべし
int a[5]; で sizeof(a) はどうなる?
int *p; で sizeof(p) はどうなる?
0686デフォルトの名無しさん
2009/10/02(金) 15:47:03アドレスの値だけが重要であってその中身を問わないならその通りだが、実際にアドレスをそんな風に使うことは滅多にない
アドレスは、いずれその中身を参照するために保持しているのが普通だ
だったら、その型が何なのか、示されている方が扱いやすい
配列の長さがわからないのは不便だとは思うが、実は配列の長さを明示できるポインタの型もある
int (*p)[10] みたいな・・・ ただ長さが固定の配列へのポインタは思うほど役に立たないと思われ
0687デフォルトの名無しさん
2009/10/02(金) 16:15:05データの型を指定して、って面倒な処理をしなきゃいけなくなるだろ。
0688デフォルトの名無しさん
2009/10/02(金) 16:17:36ここにデータ配置してすらすらプログラミングできない奴は頭が悪い。
0689デフォルトの名無しさん
2009/10/02(金) 16:25:230690デフォルトの名無しさん
2009/10/02(金) 16:26:45qsort のように、型が確定してないインターフェースの関数を実装する場合には
そうするしかないやね
0691デフォルトの名無しさん
2009/10/02(金) 16:45:48なんだっけ、軽自動車だっけ
0692デフォルトの名無しさん
2009/10/02(金) 16:47:18配列へのポインタから配列の長さを知ることはできるよ
0693683
2009/10/02(金) 16:51:12試してみましたが、
sizeof(a) => 20
sizeof(p) => 4
でした。両方4になると思ってましが何か色々と自分の知識不足のようです。。
char c1[10] = "りんご";
char *c2 = "みかん";
どっちもchar型配列だけどc1は自分の長さを知っていて*c2は自分の長さを知らない、ということかな。
>>686
>>687
なるほど…参照先を読み出す時に、ポインタ自身が参照先の型を知っていることが役に立つんですね。
レスありがとうございました。
0694683
2009/10/02(金) 16:52:170696デフォルトの名無しさん
2009/10/02(金) 16:57:180697デフォルトの名無しさん
2009/10/02(金) 17:01:130698デフォルトの名無しさん
2009/10/02(金) 17:02:08> char *c2 = "みかん";
> どっちもchar型配列だけどc1は自分の長さを知っていて*c2は自分の長さを知らない、ということかな。
ちがう
c1 は char型の配列 (で char を 10個収められる器がある)
c2 は char型のポインタ
c1++ は文法エラーになるが c2++ は文法エラーにならない
0699デフォルトの名無しさん
2009/10/02(金) 17:08:32char *c2 = "みかん";
c2++とか出来て便利
c1++はできない
0700デフォルトの名無しさん
2009/10/02(金) 17:09:17ごめんよ ごめんよ
sizeof unary-expression
sizeof(type-name)
だったか
0701デフォルトの名無しさん
2009/10/02(金) 17:19:06ほんと最近ゆとりが万延してるな
0702デフォルトの名無しさん
2009/10/02(金) 17:33:00もうちょっと具体的に言うべき
0703デフォルトの名無しさん
2009/10/02(金) 18:07:53>>688を実践してみるのも良い勉強法だったかもしれん
0704デフォルトの名無しさん
2009/10/02(金) 18:28:380705デフォルトの名無しさん
2009/10/02(金) 19:00:36つまり、メモリ管理を自分でやれってこった。
例えば整数型が欲しいなら* (int *) (data + 0)、
実数型が欲しいなら* (double *) (data + 8)、
と言う具合だな。
0706デフォルトの名無しさん
2009/10/02(金) 20:31:330707デフォルトの名無しさん
2009/10/02(金) 20:36:300708デフォルトの名無しさん
2009/10/02(金) 20:40:37http://tsushima.2ch.net/test/read.cgi/newsplus/1254472455/
0709デフォルトの名無しさん
2009/10/02(金) 21:15:40#include<stdio.h>
int calc(int i, int j) {
int r = i + j;
return r;
の
int r = i + j;
return r;
という部分を
return i + j
にするのとでは特に違いはないのでしょうか?
好きな方を使えばいいという感じなのでしょうか?
0710デフォルトの名無しさん
2009/10/02(金) 21:17:07特に違いはないよ。
どっちかというと無駄なオブジェクトrができなくて良い分、後者の方が効率はよい。
ただしコンパイラの最適化が働けば同じかな。
0711デフォルトの名無しさん
2009/10/02(金) 21:48:36ありがとうございます
特に気にしなくてもいいんですね
0712デフォルトの名無しさん
2009/10/02(金) 22:16:32その変数を使わなければ行数を節約できるだろう。
だが、変数として名前をつけて管理した方がソースが読みやすくなり、
またデバッガでその変化を追跡するのが容易になったりするかも知れない。
0713デフォルトの名無しさん
2009/10/02(金) 22:51:39変数aはどこに確保されるのでしょうか?
0714デフォルトの名無しさん
2009/10/02(金) 22:58:15確保される可能性が高いと思われます。
0715デフォルトの名無しさん
2009/10/02(金) 22:58:19静的領域
0716デフォルトの名無しさん
2009/10/02(金) 23:21:47void 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
0717デフォルトの名無しさん
2009/10/02(金) 23:59:36いや、const変数はアドレス演算子使うかどうかで最適化の結果が変わるんだけど
0718デフォルトの名無しさん
2009/10/03(土) 00:01:500719デフォルトの名無しさん
2009/10/03(土) 00:04:54とりあえず貼ってみた。
ttp://codepad.org/dev6lB77
コンパイル時定数になるとか何だとかはC++からだよね?
まあいいや、おやすみなさい。
0720デフォルトの名無しさん
2009/10/03(土) 00:05:34case 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
0721デフォルトの名無しさん
2009/10/03(土) 00:06:27残念ながら定数だけしか使用できません
0722デフォルトの名無しさん
2009/10/03(土) 00:10:12わかりました
ありがとうございます
0723デフォルトの名無しさん
2009/10/03(土) 00:47:05delete obj;
のあとに
obj = NULL;
するんですか
0724デフォルトの名無しさん
2009/10/03(土) 00:51:11なんでこのすれにかきこんだのですか
0725デフォルトの名無しさん
2009/10/03(土) 00:51:290726デフォルトの名無しさん
2009/10/03(土) 00:51:53まともな人はやらないんじゃないの。
0727デフォルトの名無しさん
2009/10/03(土) 00:55:420728デフォルトの名無しさん
2009/10/03(土) 00:57:54そういうCの方言はないと思う。
0729デフォルトの名無しさん
2009/10/03(土) 02:37:21変な癖はつけない方が吉かな
0730デフォルトの名無しさん
2009/10/03(土) 02:52:45windowsのコマンドライン
0731デフォルトの名無しさん
2009/10/03(土) 03:07:35何の話をしてるの?
0732デフォルトの名無しさん
2009/10/03(土) 03:16:05case sensitiveな言語だから、自動で大文字小文字を変更する開発環境を求める感じかね。
VBAのエディタとかはそういうのするけど、Cでは見たこと無い
0733デフォルトの名無しさん
2009/10/03(土) 03:18:46配列宣言時 要素数指示に使える/使えない ぐらいの差があるからね
const int num = 10;
int array[num]; /* Cは文法エラー C++はOK */
0734デフォルトの名無しさん
2009/10/03(土) 03:34:08それでもC99なら・・・C99ならやってくれる・・・!!
0735デフォルトの名無しさん
2009/10/03(土) 08:48:53むしろ >>727 に言ってやれ。
>>734
まあ C99 なら const かどうかも関係ないんだけどな。
0736デフォルトの名無しさん
2009/10/03(土) 10:57:57C99って、もしかして
int num = foo();
assert(num > 0);
int array[num];
が通ったりするの!?
0737デフォルトの名無しさん
2009/10/03(土) 12:24:500738デフォルトの名無しさん
2009/10/03(土) 12:32:560739デフォルトの名無しさん
2009/10/03(土) 12:34:27ホントだ。
ttp://codepad.org/7VrisE5Y
いつの間にC言語は配列の動的確保に対応して来たんだ!?
Comeauで試してもOKだった。
マジかよ。
0740739
2009/10/03(土) 12:36:12> -std=c89でも通ったよw
いやwじゃねーだろ
通らねぇよ。
通ったらたまったもんじゃない。
C99ではおkだったなんて。
もうC++ばっかやってるとC言語の躍進についていけなくなるな。
0741デフォルトの名無しさん
2009/10/03(土) 13:01:550742デフォルトの名無しさん
2009/10/03(土) 13:02:38いいえ、ちがいます
0743デフォルトの名無しさん
2009/10/03(土) 13:13:17while(1)よりgotoの方が早い?
0744デフォルトの名無しさん
2009/10/03(土) 13:16:170745デフォルトの名無しさん
2009/10/03(土) 13:22:00&arrayのsizeofが,なぜ4(アドレスのバイト数)ではなく10となるんでしょうか?
---プログラム---
char array[10];
printf("%d %d\n",sizeof(array),sizeof(&array));
---実行結果---
10 10
0746デフォルトの名無しさん
2009/10/03(土) 13:38:36処理系のバグじゃないの?
http://codepad.org/5riQqVfR
0747デフォルトの名無しさん
2009/10/03(土) 13:45:52どうもありがとう.納得することができました.
ちなみに>>746のプログラムは,俺の使用しているBCC Developer(ver1.2.21)では,
10 10
1 10
となりました.
0748デフォルトの名無しさん
2009/10/03(土) 13:50:49AAは無理だった
0749デフォルトの名無しさん
2009/10/03(土) 14:03:08gccは-pedanticつけないと独自拡張使いまくるからな。
0751デフォルトの名無しさん
2009/10/03(土) 15:56:50C言語にはJavaにあたるArrayListやLinkedList、Mapといったコレクションライブラリは標準ライブラリとして提供されてないのですか?
自分で一から構造体を定義して連結リストを作って…とやっていくのが王道ですか?
だとしたらすごく大変そうなのですが。。
0752デフォルトの名無しさん
2009/10/03(土) 15:57:58標準ではないライブラリを使えばいいだけです
0753デフォルトの名無しさん
2009/10/03(土) 15:59:14C言語じゃないといけない理由がないのであれば、C++でやれば?
0754デフォルトの名無しさん
2009/10/03(土) 15:59:26用途に合わせて自分で毎回作るか
自分で汎用的なライブラリを作って使いまわすか
CSTLのようなマクロバリバリのライブラリを利用するか
0755751
2009/10/03(土) 16:02:29Javaと違って個人のスキルが大きく作用しそうですね
0756デフォルトの名無しさん
2009/10/03(土) 16:08:230757デフォルトの名無しさん
2009/10/03(土) 20:08:15それをソートし、使う、というプログラムを組んでいます。
今、ある値をその配列の10番目に入れるか、500番目に入れるかで
プログラムの重さが全く違うことに気づきました。
ソートが重くなってるのかと思いましたが、どうやら違うようです。
どうも値を挿入する段階で重くなっているように見えます。
どのような原因が考えられるでしょうか?
0758デフォルトの名無しさん
2009/10/03(土) 20:11:58それで遅くなる。
どういう操作を最も頻繁に行うかで適切なデータ構造は変わってくるよ。
配列が得意なのはランダムアクセス、交換、データの末尾への追加。
挿入削除は遅い。
0759デフォルトの名無しさん
2009/10/03(土) 20:24:520760デフォルトの名無しさん
2009/10/03(土) 20:38:220761デフォルトの名無しさん
2009/10/03(土) 21:32:20"適当に選んだ場所に値を入れる"時に、>758見たいに挿入=後ろにずらしてくのか?
元々その場所に入っていた値が無くなるだけではなくて?
何をしているのか良く分からないのでなんとも言えん
単に新しい値に置き換えてソートしているなら10番目に入れようが500番目に入れようが処理速度に影響無いと思うんだが...
0762デフォルトの名無しさん
2009/10/03(土) 22:39:57> ソートが重くなってるのかと思いましたが、どうやら違うようです。
> どうも値を挿入する段階で重くなっているように見えます。
その判断の根拠は?
0763デフォルトの名無しさん
2009/10/03(土) 22:42:270764デフォルトの名無しさん
2009/10/03(土) 22:43:560765デフォルトの名無しさん
2009/10/03(土) 22:49:07解放忘れを必ずと言っていいほどする
やはりC++のコンストラクタ・デストラクタ・クラス・演算子の多重定義が
ないと苦しいわー
0766デフォルトの名無しさん
2009/10/03(土) 22:50:53いっそわざと開放しなかったんです!
って言い張れば?
どうせプロセスが終了すれば…(ry
っていう輩と一緒になって。
0767デフォルトの名無しさん
2009/10/03(土) 22:54:420768デフォルトの名無しさん
2009/10/03(土) 22:57:000769デフォルトの名無しさん
2009/10/03(土) 22:57:010770デフォルトの名無しさん
2009/10/03(土) 23:08:30所詮C言語は程度がしれてるってことだろ。
0771デフォルトの名無しさん
2009/10/03(土) 23:09:55確保した領域がプログラムの終了まで使われる場合はfreeする必要はない。
プログラムの終了と同時に自動的にその領域は解放される
freeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない
0772デフォルトの名無しさん
2009/10/03(土) 23:18:32>freeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない
freeしたらOSに返す場合もあるよ
WindowsとかWindowsとかWindowsとか
0773デフォルトの名無しさん
2009/10/03(土) 23:21:02それくらい知ってる。
知らない人もいるかもしれないけど。
> プログラムの終了と同時に自動的にその領域は解放される
別にそんな保証はないだろ。
ただそう言うOSが多いってだけでさ。
適当なことを断定的に言うなよ。
0774デフォルトの名無しさん
2009/10/03(土) 23:24:23WindowsでもOSに返せない場合があるよな
malloc()した領域が切れ切れにフラグメントしていてブロックに
なっていない場合
2chの専ブラなどで長時間使っていると次第に使用メモリが
増えていくのはそのせいだと思う
しかし未使用ハンドルも一緒に増えて行くのは何とかして欲しい
0775デフォルトの名無しさん
2009/10/03(土) 23:26:360776デフォルトの名無しさん
2009/10/03(土) 23:26:56文字化けするということは、
"HOGE"は静的領域に確保されていないということですか?
(1)
const char *hoge(void)
{
const char *test[] = "HOGE";
return test;
}
(2)
const char *hoge(void)
{
static const char *test[] = "HOGE";
return test;
}
0777デフォルトの名無しさん
2009/10/03(土) 23:27:01CSTL Vector
http://cstl.sourceforge.jp/vector.html
0778デフォルトの名無しさん
2009/10/03(土) 23:28:54型が違う
0779デフォルトの名無しさん
2009/10/03(土) 23:30:58(1)のtest[]は関数の終了と同時に消滅するだろ
0780デフォルトの名無しさん
2009/10/03(土) 23:34:00>mallocにより取得されるアドレスは、データセグメント内のヒープと呼ばれる領域にある。ヒープは、mallocするたびにスタックの方向に拡張されていく。しかし、freeを行なってメモリを解放しても、ヒープ全体が縮小するわけではない。
0781デフォルトの名無しさん
2009/10/03(土) 23:36:52>"HOGE"は静的領域に確保されていない
って話じゃなくて >779 だね
0782デフォルトの名無しさん
2009/10/03(土) 23:38:35規格書に書いてない情報は信用しない事にしている
0783デフォルトの名無しさん
2009/10/03(土) 23:40:460784デフォルトの名無しさん
2009/10/03(土) 23:51:31もしかして、malloc/freeの実装が単にHeapAlloc/HeapFreeに丸投げの場合のことを言っている?
HeapAlloc/HeapFreeはOSのAPIだけど、
こいつらはよそのmallocと同じように別のAPIで確保したメモリを管理しているだけなので、
「HeapFreeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない」
と言い換えができる。
0785デフォルトの名無しさん
2009/10/04(日) 00:30:34リッチなOSがない組み込み機器だってあるのに。
0786デフォルトの名無しさん
2009/10/04(日) 00:30:36型ちがいじゃが仕方がない
0787デフォルトの名無しさん
2009/10/04(日) 00:35:25確保した領域を再利用するためだろ
0788デフォルトの名無しさん
2009/10/04(日) 00:39:13freeのあと、mallocしたら以前mallocで確保した領域と同じ領域が割り当てられるのはよくあること。
0789デフォルトの名無しさん
2009/10/04(日) 00:41:16ならfree()すべきだろ。
0790デフォルトの名無しさん
2009/10/04(日) 00:45:540791デフォルトの名無しさん
2009/10/04(日) 00:51:32そもそも俺はfreeすべき派だし
0792デフォルトの名無しさん
2009/10/04(日) 00:56:03年中稼動してるサーバーサイドプログラムとかでそんなこと言ってたら速攻クビだよ。
0793デフォルトの名無しさん
2009/10/04(日) 01:03:06いやだから再利用しない限りfree()いらない。だろ?
0794デフォルトの名無しさん
2009/10/04(日) 01:06:24おまえらヒマですね
0795デフォルトの名無しさん
2009/10/04(日) 01:08:220796デフォルトの名無しさん
2009/10/04(日) 01:28:34free()が出てくるんだから「いらなくなった時」の話だろが。
プログラム終了時まで永続的に使う領域にfree()が不要なのは当たり前だろ。
0797デフォルトの名無しさん
2009/10/04(日) 01:32:140798デフォルトの名無しさん
2009/10/04(日) 01:39:09逆に、仕事がある時に起動して仕事終わったらすぐ終了するようなプロセスでは問題ないってことだ。
0799デフォルトの名無しさん
2009/10/04(日) 02:11:080800デフォルトの名無しさん
2009/10/04(日) 02:59:36↑
↓
>プログラム終了時まで永続的に使う領域にfree()が不要なのは当たり前だろ。
フフフフフ
0801デフォルトの名無しさん
2009/10/04(日) 03:04:410802デフォルトの名無しさん
2009/10/04(日) 05:31:37pedanticオプションをもう一度勉強してください。
というかその警告内容見てください。
0803デフォルトの名無しさん
2009/10/04(日) 05:42:01freeしなくていいという話をなんか勘違いしてないか?
0804デフォルトの名無しさん
2009/10/04(日) 06:04:16freeは必ずすべき
0805デフォルトの名無しさん
2009/10/04(日) 07:14:05プログラムごと終了してしまった方がいいな。
スタブとして作って、一仕事終わるたびにプログラム終了。これで良い。
0806デフォルトの名無しさん
2009/10/04(日) 07:15:060807デフォルトの名無しさん
2009/10/04(日) 08:25:12> プログラムごと終了してしまった方がいいな。
えっ?
0808デフォルトの名無しさん
2009/10/04(日) 09:13:140809デフォルトの名無しさん
2009/10/04(日) 09:22:15free() 忘れるような人はきっと delete も忘れる。
0810デフォルトの名無しさん
2009/10/04(日) 09:30:090811デフォルトの名無しさん
2009/10/04(日) 16:25:120812デフォルトの名無しさん
2009/10/04(日) 16:32:47えっ、じゃねーよ。無知は黙ってろ。
0813デフォルトの名無しさん
2009/10/04(日) 16:33:38○OSごと終了してしまった方がいいな。
0814デフォルトの名無しさん
2009/10/04(日) 16:37:130815デフォルトの名無しさん
2009/10/04(日) 16:38:180816デフォルトの名無しさん
2009/10/04(日) 16:39:18値を返さない関数を関数と呼ぶのはやめろ?
0817デフォルトの名無しさん
2009/10/04(日) 16:41:45わたしは基本的に値を返さなくてもいい関数でもintを返すように定義しているけどね
関数型やった所為か関数は値を返すものしか考えられない
0818デフォルトの名無しさん
2009/10/04(日) 16:42:24プログラミング言語でいう「function」は数学の「関数」とはちょっと違うよね?
辞書とか書籍を参考にしてみたけど、「機能」という意味らしいのだが。
実際どっちなの?
0819デフォルトの名無しさん
2009/10/04(日) 16:46:03ああ、他の言語の話ね
0820デフォルトの名無しさん
2009/10/04(日) 16:47:05>プログラミング言語でいう「function」は数学の「関数」とはちょっと違うよね?
FORTRAN でいう Function Subprogram は関数ですが何か
0821818
2009/10/04(日) 16:49:12大学時代にやったプログラミングの実習で覚えたらしいのだが
「プログラミングは数学なんだよ!関数とかでてくるよ!
だから君も数学勉強しておきなw」
って調子乗ってるからどうにかできないものかと。
関数のことばっかり言ってる。
これがバカの一つ覚えってやつですかね。
0822デフォルトの名無しさん
2009/10/04(日) 16:50:05数学における「関数」を英語にするとなんていうか知ってるか?
0824デフォルトの名無しさん
2009/10/04(日) 16:54:46たぶん818が知ってる数学の関数のレベルが低いだけだと思う
0825818
2009/10/04(日) 16:55:25> 関数(function)が返す値は戻り値(もどりち)または返り値(かえりち)と呼ばれる。
> functionが関数と訳されるのは、単に機能の実装を行うだけでなく、
> 引数としてとりうる値の集合から、戻り値としてとりうる値の集合への
> 写像のように捉えることができるためである。したがって、ほとんどの
> 命令型プログラミング言語では次の点において数学の関数とは異なる。
> * 引数が同じでも状況に応じて戻り値が異なる(状態を持つ)
> * 関数の処理の実行によってシステムに変化が発生する(副作用を持つ)
> * 戻り値が存在しない場合がある
0826デフォルトの名無しさん
2009/10/04(日) 16:55:48面白いぞ。
型とか構造体とか全部objectの派生になってて良く出来てるよ。
0827デフォルトの名無しさん
2009/10/04(日) 16:57:390829デフォルトの名無しさん
2009/10/04(日) 17:00:070830デフォルトの名無しさん
2009/10/04(日) 17:02:44そういう意味で関数と呼ばれる。調べても分かるようなことを
2chで聞いてから、それに反対するために調べる
おかしいよ
0831デフォルトの名無しさん
2009/10/04(日) 17:03:050832デフォルトの名無しさん
2009/10/04(日) 17:08:28その言い方は、function に与えられる条件の一部を引数とし、function が生成した結果の
一部のみを戻り値としている。条件空間から結果空間への函数を成している事は事実である。
0833818
2009/10/04(日) 17:16:48> そういう意味で関数と呼ばれる
ちょっとまってくれ!
俺の質問は、*** 数学の意味での関数か *** ということだったはずだが。
0834デフォルトの名無しさん
2009/10/04(日) 17:29:10ダメなら編集すればいいだけじゃん
0835デフォルトの名無しさん
2009/10/04(日) 17:30:440836デフォルトの名無しさん
2009/10/04(日) 17:33:36それを数学とプログラミングの一部に当てはめたとしよう
すると関数はもともと同一であったとしても
数学とプログラミングが完全に同一でなければその中で意味も変わるかもしれない
つまりその質問は数学とプログラミングが全く同じかという馬鹿らしい質問なんだよ
プログラミングが証明問題を解くプロセスに似ていたり
時に数学的な考え方が重要であったりしても
数学とプログラミングが全く同じだなんて誰も言えないよ
関数という呼ぶ意図は同じだろうが
それがプログラミングの中でも数学の意味である必要性はない
だからといってその先生は嘘を言ってるわけではない、と思う
0837デフォルトの名無しさん
2009/10/04(日) 17:40:44アスベスト症候群?だっけ?
0838デフォルトの名無しさん
2009/10/04(日) 17:43:330839デフォルトの名無しさん
2009/10/04(日) 17:50:47アスペルガーのことかな
「こんなことを勉強して何の役に立つのか」と考える学生が多いから
言っただけだろうに、先生も大変だな。厳密には違うってつっこむなよ
初等数学は諸々の準備段階の話だろ
0840デフォルトの名無しさん
2009/10/04(日) 17:58:12これらを追求するのはプログラマに限らずコンピュータを仕事とする人の姿勢として大事なことだよ。
何故ならコンピュータは命令されたとおりにしか動かないからな。
0841デフォルトの名無しさん
2009/10/04(日) 18:12:33対人において常にそうである必要はあるのかという話
人間は大文字と小文字を区別することも同じものとみなすことも出来るし
ソースコードに関わる話でもあるまい
0842デフォルトの名無しさん
2009/10/04(日) 18:16:370843デフォルトの名無しさん
2009/10/04(日) 18:22:50対人のアウトプットもインプットも正しい方が正確に意図が伝わるだろう。
相手の応用力に期待するのは対人能力が低いと言えるな。
0844デフォルトの名無しさん
2009/10/04(日) 18:29:31しかも細かい指定がある部分と書く人にゆだねられる部分があるからだいきらい
0845デフォルトの名無しさん
2009/10/04(日) 18:33:34「関数」と呼ぶ場合は必ず値を返さなくてはならない。
米や芋を「ベジタブル」とするのは問題ない。
しかし、米や芋は「野菜」ではない。
0846デフォルトの名無しさん
2009/10/04(日) 18:35:50やはり先輩方も頭が悪いのでしょうか?
0847デフォルトの名無しさん
2009/10/04(日) 18:36:350848デフォルトの名無しさん
2009/10/04(日) 18:39:32なんだ。理解できていなかったのか。
きみは入門スレに来るのはまだ早いよ。帰んな。
0849デフォルトの名無しさん
2009/10/04(日) 18:39:51C言語のパーサに関数のプロトタイプとかあるので
ほとんど全部関数って呼んでるなぁ俺
0850デフォルトの名無しさん
2009/10/04(日) 18:40:24拘ってる奴だけが勝手に脳内変換して解釈すればいいじゃん
0851デフォルトの名無しさん
2009/10/04(日) 18:41:41「関数」は適切じゃない。
main 機関、printf 機関、問題ない。
0852デフォルトの名無しさん
2009/10/04(日) 18:43:01正しく脳内変換すればいいじゃん。だってそれはC言語の定義じゃないから
どっかで身に付けた習慣を人に押し付けられてもね
0853デフォルトの名無しさん
2009/10/04(日) 18:44:03「「「値を返さない」という値」を返している」
と解釈するんだ。
「関数」で問題ないよ。
0854デフォルトの名無しさん
2009/10/04(日) 18:45:21>642-646
0855デフォルトの名無しさん
2009/10/04(日) 18:45:220856デフォルトの名無しさん
2009/10/04(日) 18:46:370857デフォルトの名無しさん
2009/10/04(日) 18:46:580858デフォルトの名無しさん
2009/10/04(日) 18:54:41OCamlのunit型なんかそういう考え方だよねきっと。OCaml使ったことないけど。
0859デフォルトの名無しさん
2009/10/04(日) 18:58:010860デフォルトの名無しさん
2009/10/04(日) 19:42:37function と呼んでいる間は値を返さなくても問題ないんだよ。
function を「関数」と訳した瞬間に意味が抜け落ちておかしくなるんだよ。
0861デフォルトの名無しさん
2009/10/04(日) 20:01:050862デフォルトの名無しさん
2009/10/04(日) 20:08:100863デフォルトの名無しさん
2009/10/04(日) 20:41:120864デフォルトの名無しさん
2009/10/04(日) 20:46:050865デフォルトの名無しさん
2009/10/04(日) 20:54:25構造体は値型なわけだが。
>>833
JIS Cに於いては、値を戻すかどうかに関わらず「関数」と呼ぶ。
勿論、数学の関数とは無関係で、責任は最初の翻訳者にある。
一方で、値を返さないものを関数とは呼ばない言語が多くあって
それらは数学の関数と同じと考えて差し支えない。
つまりそれが「数学でいう関数と同じものかどうか」は
プログラミング言語次第であって、そもそも最初の >>818 で
>プログラミング言語でいう
というのがおかしい。
0866デフォルトの名無しさん
2009/10/04(日) 21:10:04あたりが混乱の原因だと思うけどな
0867デフォルトの名無しさん
2009/10/04(日) 21:17:470868デフォルトの名無しさん
2009/10/04(日) 21:27:090869デフォルトの名無しさん
2009/10/04(日) 21:33:15lispなんかだとfunctionは必ず値を返す。
値を返すこと以外が主目的であるような関数は、その目的を副作用として提供するだけで値は常に返す。
0870デフォルトの名無しさん
2009/10/04(日) 22:00:040871デフォルトの名無しさん
2009/10/04(日) 22:26:04っていうか戻り値voidな関数の呼び出しは、値を返さないけど式と言えるの?
0872デフォルトの名無しさん
2009/10/04(日) 22:34:02こっちは原語でも同様。
0873デフォルトの名無しさん
2009/10/04(日) 22:49:14値を持つと言うかどうか分からないけど、
少なくとも戻り値voidな関数の呼び出しもCでは式、例えばfree(p);はvoid型の式。
なお、(void)printf("hoge");や(void)0;のようにvoidでキャストしてvoid型の式を作ることも可能。
0874デフォルトの名無しさん
2009/10/04(日) 23:13:46>(void>printf( ... ) って、単にいにしえの lint をごまかすだけの作法だったような気がするのですが。
0875デフォルトの名無しさん
2009/10/04(日) 23:23:20lintとかw
0876デフォルトの名無しさん
2009/10/04(日) 23:35:25ってことだろ。
voidの英単語の意味を考えて見れば分かるはず。
>>875さんと俺は同意見だな。
0878875
2009/10/05(月) 00:35:44>推奨するorしない
とか関係ない
0879デフォルトの名無しさん
2009/10/05(月) 00:38:330881デフォルトの名無しさん
2009/10/05(月) 01:16:28【初心者お断り】ガチ規格準拠C専用スレ Part134
http://pc12.2ch.net/test/read.cgi/tech/1246115922/
0882デフォルトの名無しさん
2009/10/05(月) 07:02:58別にどっちも同じだろ。
ここで何か悪いか?
0883デフォルトの名無しさん
2009/10/05(月) 07:40:59数学の関数とは違うとか論外なことを言わなければ
議論の必要もない
0884デフォルトの名無しさん
2009/10/05(月) 08:43:070885デフォルトの名無しさん
2009/10/05(月) 08:49:422chでは無視すると粘着するし、相手すると論破するまで終わらない
最悪だよ
0886デフォルトの名無しさん
2009/10/05(月) 09:02:160887デフォルトの名無しさん
2009/10/05(月) 12:39:50どうして他人の意見を封殺するの?
0888デフォルトの名無しさん
2009/10/05(月) 13:52:240889デフォルトの名無しさん
2009/10/05(月) 13:54:380890デフォルトの名無しさん
2009/10/05(月) 14:01:33キリがないから。主に >>888 みたいな奴の所為で。
0891デフォルトの名無しさん
2009/10/05(月) 15:05:210892デフォルトの名無しさん
2009/10/05(月) 15:12:150893デフォルトの名無しさん
2009/10/05(月) 15:39:32相手が理解できるようにかみくだいて説明できなきゃ。
まあ、だいたいが説明能力=理解力なんで
ちゃんと理解できてないと説明はできない。
0894デフォルトの名無しさん
2009/10/05(月) 16:02:50議論で宗教問題が解決するなら戦争なんか起こらんわい。
0895デフォルトの名無しさん
2009/10/05(月) 16:15:56よくよめ。
宗教論争にまで発展する内容について、論破できるなんて言ってる>>888への皮肉だ
0897デフォルトの名無しさん
2009/10/05(月) 16:34:020898デフォルトの名無しさん
2009/10/05(月) 16:35:470899デフォルトの名無しさん
2009/10/05(月) 17:22:400900デフォルトの名無しさん
2009/10/05(月) 17:38:56C言語ので疑似例外処理に使っています
0901デフォルトの名無しさん
2009/10/05(月) 17:45:050902デフォルトの名無しさん
2009/10/05(月) 17:45:430903デフォルトの名無しさん
2009/10/05(月) 17:50:32setjmp longjmp を使うほどではないけれど ってところ?
0904デフォルトの名無しさん
2009/10/05(月) 17:54:260905デフォルトの名無しさん
2009/10/05(月) 17:59:54そう、関数内で閉じる例外のみ
*jmp()は関数外に飛べるけどintというのがなぁ
マクロで覆っても構文が汚くなるのも好きになれない
0906デフォルトの名無しさん
2009/10/05(月) 18:26:19結論が出てるからつまんない
0907デフォルトの名無しさん
2009/10/05(月) 18:36:31チキンだからフラグ持たせたり、ループカウンタの判定で処理するけど。
0908デフォルトの名無しさん
2009/10/05(月) 18:38:47やめようきりがない。
0909デフォルトの名無しさん
2009/10/05(月) 20:25:233次元配列のようなオブジェクトとは、T ***t = T_allocate_3d_array(width, height, depth);とすることでメモリ上に割り当てられたオブジェクトことである。
0910デフォルトの名無しさん
2009/10/05(月) 20:27:20そういうときは「教えてください」って言うんだよ
0911デフォルトの名無しさん
2009/10/05(月) 20:28:36「教えてください」といってみるテスト
0912デフォルトの名無しさん
2009/10/05(月) 20:28:42アレをアレしてアレすればよい。
0913デフォルトの名無しさん
2009/10/05(月) 20:34:12int*** cube = (int***)malloc(width*height*depth*sizeof(int));
0914デフォルトの名無しさん
2009/10/05(月) 20:34:49物乞いに餌あげちゃあ
彼らは動物園のゴリラ
さんと同じなんだから
0915デフォルトの名無しさん
2009/10/05(月) 20:35:010916デフォルトの名無しさん
2009/10/05(月) 20:40:58ばーか、それじゃ4,2,7がほしいとき乗算2回入って遅くなるだろ。t(4,2,7)で直にいじれるようにしろと聞いてんだよ。
0917デフォルトの名無しさん
2009/10/05(月) 20:46:40>917 オマエモナー
0918デフォルトの名無しさん
2009/10/05(月) 20:48:230919デフォルトの名無しさん
2009/10/05(月) 21:00:58なにをいっているのかわからない
0920デフォルトの名無しさん
2009/10/05(月) 21:10:22しんどいやめましょか
0921デフォルトの名無しさん
2009/10/05(月) 22:09:01#define で数値を決定したものをにちに変更することは可能なのでしょうか?
たとえば
#define A 5
if(x<4)
このときAの数値を変更
わかりずらかったらすいません
0922デフォルトの名無しさん
2009/10/05(月) 22:11:47#if というディレクティブはありますね。これを調べてみてください。
0923デフォルトの名無しさん
2009/10/05(月) 22:13:35#defineはコンパイル時に働くもの。
if は実行時に働くもの。
よって、ムリ。
Aを変数にすべき。
0924デフォルトの名無しさん
2009/10/05(月) 22:23:050925デフォルトの名無しさん
2009/10/05(月) 22:24:37ボクセル分割とかか?
0926デフォルトの名無しさん
2009/10/05(月) 22:26:55卒業!
malloc(sizeof(T**)*depth+sizeof(T*)*height*depth+sizeof(T)*width*height*depth);
0927デフォルトの名無しさん
2009/10/05(月) 22:27:14function->函数(中国語の音訳)->関数(日本語の当て字)
だぞ
したがって別に値を返そうが返すまいが
functionを関数と呼ぶのは理にかなっている
0928デフォルトの名無しさん
2009/10/05(月) 22:30:28プリプロセッサ命令
ttp://www.cppll.jp/cppreference/preproc.html
とりあえずここを読みましょう。
0929デフォルトの名無しさん
2009/10/05(月) 22:44:07ついでに3次元配列のように使うサンプルコードがあればなおよかった。
0930デフォルトの名無しさん
2009/10/05(月) 23:41:24ビットシフトはなんの役に立つのでしょうか?
0931デフォルトの名無しさん
2009/10/05(月) 23:42:48大して役に立たない。
初心者は気にしないでよい。
それよかとにかくひたすらポインタになれる事にのみ
全力をそそごう。
0932デフォルトの名無しさん
2009/10/05(月) 23:56:25マシン語に近いところをいじれるのが売りという時代もあった
ポインタにしてもマシン語から考えればなんでもない話
0933デフォルトの名無しさん
2009/10/05(月) 23:56:45そのコピペを作るのに役立ちました
0934デフォルトの名無しさん
2009/10/05(月) 23:58:150935デフォルトの名無しさん
2009/10/05(月) 23:59:430938もももも
2009/10/06(火) 00:07:180939デフォルトの名無しさん
2009/10/06(火) 00:22:26何故でしょうか?
#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;
}
}
0940デフォルトの名無しさん
2009/10/06(火) 00:23:190941デフォルトの名無しさん
2009/10/06(火) 00:24:44有難うございます・・・。
0942やじうまワイド
2009/10/06(火) 00:26:26っておっしゃってますよ
0943デフォルトの名無しさん
2009/10/06(火) 00:42:24#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]);
}
}
}
0944デフォルトの名無しさん
2009/10/06(火) 01:12:400945デフォルトの名無しさん
2009/10/06(火) 01:17:11何がしたいのか分からん
h が初期化されていない
1 は文字じゃない
putchar('\0'); しか実行されない
0946デフォルトの名無しさん
2009/10/06(火) 01:37:30すまん、何するか言うの忘れてた
1~30までの数字を28個打って、
残った二つの数字を出力するっていうプログラム
俺は数字が出てきたところに1を入れて、
下のループで0が入ってる数字を出力してるんだが、
何でputchar(\0);しか実行されないのかわからない
あと、h[30]の時点で、配列には0が入ってるんじゃないんですか?
h[30] = 0ってしてもだめだったんですが・・・。
0947デフォルトの名無しさん
2009/10/06(火) 01:50:54これで全部0になるよ
0948デフォルトの名無しさん
2009/10/06(火) 01:52:29はいってません。
memsetでもつかえ。
あと2回目のループで出力したいのはh[a]ではなくて、aの値じゃないのか。
0949デフォルトの名無しさん
2009/10/06(火) 02:15:15ありがとうございます
一応それに従って変えてみたんですが、
デバッグした時に、強制的に終わらせられました
#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);
}
}
}
0950デフォルトの名無しさん
2009/10/06(火) 02:43:16ついでに、表示だが、
それだと強制終了の原因にはならないが
期待通りの結果にもならないだろうな。
0951デフォルトの名無しさん
2009/10/06(火) 02:44:27for(a = 0;a < 29;a++){
は0〜28までしか回らないけどいいのか?
0952デフォルトの名無しさん
2009/10/06(火) 02:51:170953デフォルトの名無しさん
2009/10/06(火) 03:13:15こういうのは結局は段階だからさ。
順番にやっていけば出来るようになってるって奴だから。
0954デフォルトの名無しさん
2009/10/06(火) 03:46:230955デフォルトの名無しさん
2009/10/06(火) 04:02:49数字入れちゃだめだろ。
数値入れないと。
0956デフォルトの名無しさん
2009/10/06(火) 04:04:210957デフォルトの名無しさん
2009/10/06(火) 04:06:00->
printf("%d\n",a);
0958デフォルトの名無しさん
2009/10/06(火) 04:06:06別に数字入れても動作はかわんねーだろ
0かそれ以外で判定してるんだから
まあ数字にする意味はないけどなw
0959デフォルトの名無しさん
2009/10/06(火) 07:03:09【初心者お断り】ガチ規格準拠C専用スレ Part134
http://pc12.2ch.net/test/read.cgi/tech/1246115922/
確かにこういうスレはあるが、
だからといってこのスレで
厳密規格準拠議論をしてはならないわけではないよな?
むしろプログラミング言語の議論なんだから
標準規格の話題が出て来ない方がおかしい。
0960デフォルトの名無しさん
2009/10/06(火) 07:07:24>>881
とかね。
0961デフォルトの名無しさん
2009/10/06(火) 07:23:56スレ違い
0962デフォルトの名無しさん
2009/10/06(火) 08:59:46>このスレってまともに規格を知らない奴らが多すぎないか?
スレタイからして止むを得まい。
0963デフォルトの名無しさん
2009/10/06(火) 09:11:400964デフォルトの名無しさん
2009/10/06(火) 09:23:130965デフォルトの名無しさん
2009/10/06(火) 09:27:050966デフォルトの名無しさん
2009/10/06(火) 09:41:210967デフォルトの名無しさん
2009/10/06(火) 09:48:56C言語
↓
Cランゲージ
↓
シーランゲージ
↓
知らん刑事
0968デフォルトの名無しさん
2009/10/06(火) 10:28:340969デフォルトの名無しさん
2009/10/06(火) 10:49:36そこまで頭良くなければCは出来ないって? あはは
0970デフォルトの名無しさん
2009/10/06(火) 10:53:10. 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件
0971デフォルトの名無しさん
2009/10/06(火) 12:51:030972デフォルトの名無しさん
2009/10/06(火) 16:09:350973デフォルトの名無しさん
2009/10/06(火) 16:11:310974デフォルトの名無しさん
2009/10/06(火) 16:14:320975デフォルトの名無しさん
2009/10/06(火) 16:17:210976デフォルトの名無しさん
2009/10/06(火) 16:23:530977デフォルトの名無しさん
2009/10/06(火) 16:53:300978デフォルトの名無しさん
2009/10/06(火) 17:06:180979デフォルトの名無しさん
2009/10/06(火) 17:22:210980デフォルトの名無しさん
2009/10/06(火) 17:44:050981デフォルトの名無しさん
2009/10/06(火) 18:33:480982デフォルトの名無しさん
2009/10/06(火) 18:34:46vim とか
0983デフォルトの名無しさん
2009/10/06(火) 18:38:41wineでWindowsのソフトを動かすのもお薦め。
0984デフォルトの名無しさん
2009/10/06(火) 18:44:59自動インデントする代わりにタブ入力できなくなってるとかのオレルール押し付けエディタが。
0985デフォルトの名無しさん
2009/10/06(火) 18:46:570986デフォルトの名無しさん
2009/10/06(火) 18:47:34> そのようなエディタが世の中に存在していても特に害は無い
誰も害があるなんて 言ってないだろwww
0987デフォルトの名無しさん
2009/10/06(火) 18:50:13使いづらかったら使いやすいようにすればいい。そのためにカスタマイズできるようになっているんだから。
0988デフォルトの名無しさん
2009/10/06(火) 19:08:00そんなエディタがあるの?
0989デフォルトの名無しさん
2009/10/06(火) 19:11:050990デフォルトの名無しさん
2009/10/06(火) 19:22:16TABキーをインデントに割り当てているからTABコードの入力はエスケープしないといけないエディタならあるね。
決して押し付けているわけではないだろうけれど、調べることもできない>984のような人には押し付けに感じるのかもしれない。
0991デフォルトの名無しさん
2009/10/06(火) 19:23:38支援求む!
0992デフォルトの名無しさん
2009/10/06(火) 19:35:310993デフォルトの名無しさん
2009/10/06(火) 19:37:490994デフォルトの名無しさん
2009/10/06(火) 19:38:26帰れ!
0995デフォルトの名無しさん
2009/10/06(火) 19:46:58求める物のレベルが分からないけど、まぁ、ある。
0996デフォルトの名無しさん
2009/10/06(火) 19:49:180997デフォルトの名無しさん
2009/10/06(火) 19:51:24まぁそれはそれで構わないけど
0998デフォルトの名無しさん
2009/10/06(火) 20:17:03emacs/mule はデフォではいっていませんかね
0999デフォルトの名無しさん
2009/10/06(火) 20:27:111000デフォルトの名無しさん
2009/10/06(火) 20:39:1010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。