C言語なら俺に聞け(入門篇) Part 53

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
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
2デフォルトの名無しさん:2009/09/17(木) 11:30:54
Hello worldから教えてください先生
マジレスきぼん
3デフォルトの名無しさん:2009/09/17(木) 12:19:58
#include <stdio.h>
int main(){
puts("Hello, World!");
return 0;
}

これで完璧じゃない?
4デフォルトの名無しさん:2009/09/17(木) 12:52:02
int main(void)推奨
5デフォルトの名無しさん:2009/09/17(木) 12:58:45
>4
お前は俺か
心の中で思っていた
6デフォルトの名無しさん:2009/09/17(木) 14:34:10
>>4
なぜ?
7デフォルトの名無しさん:2009/09/17(木) 17:12:08
>>4からここまでHelloWorld無関係
8デフォルトの名無しさん:2009/09/17(木) 18:21:09
#include <stdio.h>
main(){return puts(&"Hello, World!"[0]);}
9デフォルトの名無しさん: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");
}
10デフォルトの名無しさん:2009/09/17(木) 18:54:04
#include <stdio.h>
int f(char *p){
return *p && (f(p+1),putchar(*p));
}
int main(){
return f("\n!dlroW ,olleH");
}
11デフォルトの名無しさん:2009/09/17(木) 18:59:22
#error HelloWorld
12デフォルトの名無しさん:2009/09/17(木) 19:05:20
@echo Hello, World.
13デフォルトの名無しさん:2009/09/17(木) 19:46:14
他のレスの趣旨がわかっていない間抜けが一人いるな。
14デフォルトの名無しさん:2009/09/17(木) 19:49:12
いつもそういう自己紹介してるのかい?
15デフォルトの名無しさん:2009/09/17(木) 19:50:44
あんたみたいな人が相手のときはそうかもね。
16デフォルトの名無しさん:2009/09/17(木) 19:52:45
燃料が少なすぎでし
17デフォルトの名無しさん:2009/09/17(木) 19:54:11
>>8はなるほどって思える。
>>9>>10はなんじゃこりゃwwわけわかんねwwwうぇっうぇっwwwてなる。
18デフォルトの名無しさん:2009/09/17(木) 20:00:48
わかれよw
19デフォルトの名無しさん:2009/09/17(木) 20:18:18
>return *p && (f(p+1),putchar(*p));

これって常に左から判定されると決まってるの?

putchar('A') && putchar('B');

これが BA と出力される可能性って無いの?
20デフォルトの名無しさん:2009/09/17(木) 20:22:41
決まってる
無い
詳しくは副作用完了点でぐぐる
21デフォルトの名無しさん:2009/09/17(木) 20:37:52
#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;
}
22デフォルトの名無しさん:2009/09/17(木) 20:58:11
たまに>19みたいな馬鹿が沸くよな。
ちょっと調べてからレスすればいいのにね。
23デフォルトの名無しさん:2009/09/17(木) 21:18:51
#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 */
24デフォルトの名無しさん:2009/09/17(木) 21:22:06
w
25割と詰まらん:2009/09/17(木) 21:35:28
#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;
}
26デフォルトの名無しさん:2009/09/17(木) 21:41:03
#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 */
27デフォルトの名無しさん:2009/09/17(木) 22:57:45
#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;
}
28デフォルトの名無しさん:2009/09/17(木) 23:39:28
char s1[4] = { 0, '0', '0', 0 };
char *p = "\000";

これって同じ内容になるの?
29デフォルトの名無しさん:2009/09/17(木) 23:47:38
>>28
同じ内容が何を意味しているのか分からないけど、
おそらく君の考えている通り同じです。

まあ型が違うとか後者は変更不可能だとかちょっとした差はあるけどもね。
30デフォルトの名無しさん:2009/09/17(木) 23:49:41
前スレ埋まってからここ使えよ
31デフォルトの名無しさん:2009/09/17(木) 23:58:25
>>27
頭の痛くなるHelloWorldだな
32デフォルトの名無しさん:2009/09/18(金) 00:18:38
>>29
"\000"
は { 000, '\0' } にならないか?


"\xabcdefghi"
こういうのはどうなるわけ?
どこで区切るの?
33デフォルトの名無しさん:2009/09/18(金) 00:25:54
ヘイ、こうなったぞ彼女。

ttp://codepad.org/9Bt3TGvw

34デフォルトの名無しさん:2009/09/18(金) 00:25:57
char *p = "\0""00";
こうすれば良いんじゃね?
35デフォルトの名無しさん:2009/09/18(金) 01:06:54
char s[]="abcde";
if (s[2] = 'c'){};

ifのとこで不正な代入とかコンパイルエラー出るんだけど
意味わからん
36デフォルトの名無しさん:2009/09/18(金) 01:09:29
>>35
比較したいんじゃねーのか?
っていうコンパイラの気遣い
37デフォルトの名無しさん:2009/09/18(金) 01:17:54
環境と警告レベル書いてみ
38デフォルトの名無しさん:2009/09/18(金) 01:19:04
とぅんとぅるぴん
39デフォルトの名無しさん:2009/09/18(金) 01:19:08
どうせエラーじゃないオチだろ
40デフォルトの名無しさん:2009/09/18(金) 01:20:54
サンクス
==って書かないといけなかったんだな
41デフォルトの名無しさん:2009/09/18(金) 01:23:23
いけないわけじゃない。
42デフォルトの名無しさん:2009/09/18(金) 01:25:00
んで、結局これは
strlen("\012345678")
いくつになるのよ?
43デフォルトの名無しさん:2009/09/18(金) 01:56:44
7
44デフォルトの名無しさん:2009/09/18(金) 02:07:47
mallocは"エムアロック"と読むのであって断じて"マロック"は許されない。
mallocを"マロック"って読むというのならじゃあcallocのことは"キャロック"と読むのかと。
mallocのことは”マロック"と読んでおいてcallocのことは"シーアロック"と読むような
そんな統一感のない人き方は軽蔑されるべきだ。同様にcharを"キャラ"と読むならintは"インテ"と読まないなら市ね!!
45デフォルトの名無しさん:2009/09/18(金) 02:15:55
callocはカロックだろ。
もちろん、mallocはマロックだ。
46デフォルトの名無しさん:2009/09/18(金) 02:19:31
キャラとイントでサーセン
47デフォルトの名無しさん:2009/09/18(金) 03:14:40
>>42
0
48デフォルトの名無しさん:2009/09/18(金) 04:40:24
イントと読む人はcharをなんと発音すれば?キャル?
49デフォルトの名無しさん:2009/09/18(金) 04:41:26
チャー
50デフォルトの名無しさん:2009/09/18(金) 05:43:52
どいつもこいつもバカばっか
51デフォルトの名無しさん:2009/09/18(金) 06:09:28
そうだな
そしてお前がその筆頭
52デフォルトの名無しさん:2009/09/18(金) 07:14:51
キャラ配列に直接代入するのとメモコピー使うのとってどっちが速いん
53デフォルトの名無しさん:2009/09/18(金) 07:34:11
メモコピー
54デフォルトの名無しさん:2009/09/18(金) 09:30:33
>>52
一概に言えない。そもそも気にするほど差が出ないかもしれない。

>>42
八進文字定数は一バイトを表す最長一致なので、一般的には3桁取得する。
従って、"\012""345678"と解釈されるので>43の言うとおり7になると考えられる。
つまり、>47は試してみもしない間抜け。

>>32
16進文字定数の場合はより貪欲な最長一致が行なわれるので、"\xabcdef""ghi"となる。
55デフォルトの名無しさん:2009/09/18(金) 10:38:00
"\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文字まで読み出す方法教えて
57デフォルトの名無しさん:2009/09/18(金) 11:56:14
>>56
strtok
58デフォルトの名無しさん:2009/09/18(金) 12:21:39
>>56
sscanf("abcxdef", "[^x]", & target)
59デフォルトの名無しさん:2009/09/18(金) 12:56:41
CスレでC++の文法使っちゃう>>55のようなバカは一刻も早く死んで欲しい
60デフォルトの名無しさん:2009/09/18(金) 13:13:00
>>59
それはスレの外でやったのを引用してもってきただけ。
61デフォルトの名無しさん:2009/09/18(金) 13:20:21
引用だろうがスレ違いなのに、なに開き直ってんの?
6233:2009/09/18(金) 13:44:13
あ?
もしかして元はと言えば俺が原因かw

すまんな、最近はどうも息をするようにC++のコードを書いてしまう。


しっかし、俺が適当に書いたコードで喧嘩するなんて、
お前ら相当の暇人だな。
63デフォルトの名無しさん:2009/09/18(金) 16:16:42
charをキャラと読む人は
intをインテ
macをマッキ
と読んでいる。
64デフォルトの名無しさん:2009/09/18(金) 18:51:21
呼んでない
65デフォルトの名無しさん:2009/09/18(金) 22:12:25
gettimeofdayっていつカウンタが一周して0に戻りますか
66デフォルトの名無しさん:2009/09/18(金) 22:28:22
>>65
何それ?
APIは知らんよ。
67デフォルトの名無しさん:2009/09/18(金) 22:31:28
計算すれば分かるんでない?
68デフォルトの名無しさん:2009/09/18(金) 22:33:44
136年という計算結果になったが合ってる?
69デフォルトの名無しさん:2009/09/18(金) 22:40:07
time_t による。
70デフォルトの名無しさん:2009/09/19(土) 04:48:48
32bitならそうなんでない?
2100年ちょっとぐらいまでは大丈夫ってことかな
71デフォルトの名無しさん:2009/09/19(土) 07:14:18
DOS画面出さずに実行することって出来ないの?
72デフォルトの名無しさん:2009/09/19(土) 10:04:50
>>71
WinMainでWindow作らなけりゃいいんじゃない
73デフォルトの名無しさん:2009/09/19(土) 11:05:28
>>72
kwsk
74デフォルトの名無しさん:2009/09/19(土) 11:40:22
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
75デフォルトの名無しさん:2009/09/19(土) 16:58:00
char *p;
p=strstr(s1,s2);
p+5;

strstrの戻り値アドレスに+5したいのにコンパイルエラーになる
「コードは効果を持たない」だとか
76デフォルトの名無しさん:2009/09/19(土) 16:58:54
>>75
+=
77デフォルトの名無しさん:2009/09/19(土) 17:19:23
さんくす
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に移したいんだけどうまくいかない
79デフォルトの名無しさん:2009/09/19(土) 17:46:27
理がない

識別子sはなんだ
s1, s2, pはなんだ
pがNULLでないことは保証できるのか
p2の型はなんだ
s1に'1'があることは保証できるのか
何がやりたいんだ
80デフォルトの名無しさん:2009/09/19(土) 17:46:51
p2ってなんだよ。
81デフォルトの名無しさん:2009/09/19(土) 17:57:32
char s,s1,s2,*p,*p2
82デフォルトの名無しさん:2009/09/19(土) 17:58:16
>>70
yearは1900年からの起算だから2036年であぼーんする
83デフォルトの名無しさん:2009/09/19(土) 18:08:04
そもそも、timeを経過秒数で表そうなんて
誰が考えたんだよ。
84デフォルトの名無しさん:2009/09/19(土) 18:13:40
>>83 私です。
85デフォルトの名無しさん:2009/09/19(土) 18:14:29
if (char *first = strstr(s1, s2)) {
 first += 4;
 if (char *last = strchr(first, '1')) {
  ++last;
  memcpy(p2, first, last-first);
  p2[last-first] = '\0';
 }
}
86ぅゅ ◆e6.oHu1j.o :2009/09/19(土) 18:36:36
>>79
まぁ某スレのシモネタクソコテ大学生じゃああるまいし
そこまで理に重んじなくてもいいんじゃないか??
87デフォルトの名無しさん:2009/09/19(土) 19:09:44
>>85
アドレス値って減算とかできるのか
色々勉強になったありがとう
88デフォルトの名無しさん:2009/09/19(土) 19:22:53
last と first が同じ配列の一部か最後の要素のひとつ後である場合のみね。
89デフォルトの名無しさん:2009/09/19(土) 19:48:28
void *p = -1;
とかできるんだなきもい
え?できない?
90デフォルトの名無しさん:2009/09/19(土) 20:03:15
ポインタは基本的に正の値のみ
91デフォルトの名無しさん:2009/09/19(土) 20:37:46
まあポインタ値を整数型に変換したとき
(なんらかの整数型に変換できることは規格で定められている)
それを符号付きで扱うか符合なしで扱うかは自由だけどな。

また、符号付き整数として扱った場合に
負の値を持つ数値になるかどうかは、処理系やOS次第。
例えばDOSの頃の16bitアドレスがマイナスになるのなんてざらだった。
ていうか、スタック上のアドレスはほぼ全てマイナスの処理系があったり。

今でも、Win32のINVALID_HANDLE_VALUEやPOSIXのMAP_FAILEDのように
「無効なポインタ値」として、NULLの他に特定のマイナス値をキャストして使う場合もある。
(「特定のありえない値」がマイナスとは限らないが)
92デフォルトの名無しさん:2009/09/19(土) 20:45:43
書き方変えればいいのか?
void *p = ((void*) 1) - ((void*) 2);
93デフォルトの名無しさん:2009/09/19(土) 20:51:58
ポインタ + 数値 や ポインタ - 数値 はポインタ型だけど、
ポインタ - ポインタ はポインタ型ではなくて数値型(ptrdiff_t)になるよ。
94デフォルトの名無しさん:2009/09/19(土) 20:52:40
void*って計算できたっけ?
95デフォルトの名無しさん:2009/09/19(土) 20:54:05
void* に対する演算は許されないよ。
96デフォルトの名無しさん:2009/09/19(土) 21:42:50
whileの、条件文の中で、a=bとか代入出来無いの?
おそらく不正な代入とエラーが出る。
97デフォルトの名無しさん:2009/09/19(土) 21:49:39
エラーはでない
よくできたコンパイラであれば警告される
98デフォルトの名無しさん:2009/09/19(土) 22:01:49
解決方法は無いの?
99デフォルトの名無しさん:2009/09/19(土) 22:05:10
while ( (a = b) )
100デフォルトの名無しさん:2009/09/19(土) 22:14:33
バイナリファイルをそのまま、アドレスの20000hとかにリンクしたいのだけど、やりかたを教えてください。
101デフォルトの名無しさん:2009/09/19(土) 22:16:11
まず、リンクする、とはどういう意味か
日本人にもわかるように説明してください
102デフォルトの名無しさん:2009/09/19(土) 22:34:05
>>100
出直してきてください。

なんか他の言語の経験者ですか?
自分の脳内だけで補完するのはご遠慮いただきたい。
103デフォルトの名無しさん:2009/09/19(土) 22:34:47
説明不足ですいません。

バイナリーファイルをc言語形式のデータに変換後、コンパイルしてリンク
すると時間がかかるので、バイナリファイルを直接、20000hにリンカで配置
できないかと思いまして質問してみました。
104デフォルトの名無しさん:2009/09/19(土) 22:35:43
>>103
リソース?
105デフォルトの名無しさん:2009/09/19(土) 22:37:24
>>99
それでも駄目だった
コンパイラ変えるしかないか
106デフォルトの名無しさん:2009/09/19(土) 22:46:17
そのコンパイラは標準に準拠していない
コンパイラ名とそのバージョンを教えてくれ、避けるようにするから
107デフォルトの名無しさん:2009/09/19(土) 22:47:20
while ( (a = b) != 0 )
108デフォルトの名無しさん:2009/09/19(土) 22:47:58
>>96
警告をエラーにするオプションつけてるんじゃないの?
109デフォルトの名無しさん:2009/09/19(土) 22:56:19
なんだかよく分からないけどコンパイラはBorland C++ Compiler5.5
あとウィンドウズ用のgccってMinGWってやつでいいの?
110デフォルトの名無しさん:2009/09/19(土) 23:03:34
VC++が無難
111デフォルトの名無しさん:2009/09/19(土) 23:25:41
いくらBCCでも()で括れば警告消えるはずだが。
112デフォルトの名無しさん:2009/09/19(土) 23:31:00
while (a = b, a)
でも良い。若干意味は変わるけど。
113デフォルトの名無しさん:2009/09/19(土) 23:32:09
>>109
確かにそうですね。。。
ありがとうございました。
114デフォルトの名無しさん:2009/09/19(土) 23:45:56
>>82
あれあれ、なんかしらんが1970年と勘違いしてた
訂正ありがとう
115デフォルトの名無しさん: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
続行するには何かキーを押してください . . .
このようになってしまいます
116デフォルトの名無しさん:2009/09/20(日) 00:04:16
すいません自己解決しました
117デフォルトの名無しさん:2009/09/20(日) 00:05:25
>>115
ふざけんな
ここに貼れ。
C code - 45 lines - codepad
ttp://codepad.org/ZQpaxLqh

それから自決したならその理由と方法も書くこと!
118デフォルトの名無しさん:2009/09/20(日) 00:08:10
>>117
すいませんでした

入力が受け付けられなかった理由は
12行目の while( ( grade = getchar() != EOF)) { が原因で、
while( ( grade = getchar() ) != EOF) { と書くはずのところを間違えてしまったからでした
119デフォルトの名無しさん:2009/09/20(日) 00:18:18
>>117
自決したことにしないでください
120デフォルトの名無しさん:2009/09/20(日) 00:45:57
>>103
使ってるリンカによる。
GNUリンカではリンカスクリプト書けば大抵のことはできたけど。
121デフォルトの名無しさん:2009/09/20(日) 07:33:04
>>103
gcc なら objcopy を使えばいい。
Windowsアプリなら、リソースにするのが常道。
122デフォルトの名無しさん:2009/09/20(日) 08:06:55
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の使い方がおかしいのか、シグナルの考え方を根本的に間違えているのか、
どなたかご教示ください。
123デフォルトの名無しさん:2009/09/20(日) 08:55:47
>>122
標準的な環境(IEEE754)では、浮動小数点演算のゼロ除算は
Inf(無限大)になって、CPUトラップは上がらない。
よってシグナルも送られない。

CPUやOSが対応していれば、この挙動を変えることが出来る
かもしれないが、cygwinに詳しくないので分からない
124123:2009/09/20(日) 09:02:50
ググったら、FPUの設定方法が分かった
>>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
125デフォルトの名無しさん:2009/09/20(日) 10:56:58
ttp://www.geocities.jp/ky_webid/algorithm/017.html
このプログラムの例文について
コマンドによって確保した領域は削除の指示をしない限り
Freeによって解放されないような感じなのですが、あってますか?

126デフォルトの名無しさん:2009/09/20(日) 12:29:55
削除の指示をしてないのに確保した領域が開放されたら困るだろw
127デフォルトの名無しさん:2009/09/20(日) 13:33:22
>>125
アプリケーションレベルですか。OS レベルですか?
それによって正否がかわりますね。
128デフォルトの名無しさん:2009/09/20(日) 14:05:18
>>127
OSレベルで、です
129デフォルトの名無しさん:2009/09/20(日) 14:48:36
>>128
MS-DOS の時代から、 malloc() したら最後、たとえ free() しても exit するまで他のプロセスからは使えないようですね。
ま、環境にもよりますが。
130デフォルトの名無しさん:2009/09/20(日) 15:08:07
>>129
助かりました
131質問:2009/09/20(日) 17:30:49
C言語でウイルスは作れますか?
できればバックドア型がいいです。
132デフォルトの名無しさん:2009/09/20(日) 17:31:44
そんなのでいいならApacheを無断でインスコして起動させておけばいいです
133デフォルトの名無しさん:2009/09/20(日) 17:35:28
まだここは夏休みか
134デフォルトの名無しさん:2009/09/20(日) 19:35:12
C言語で3Dの女の子は作れますか?
できれば胸は大きい方がいいです。
135デフォルトの名無しさん:2009/09/20(日) 21:00:10
モデリングソフトと3Dエンジンと物理エンジン作れば。
136122:2009/09/20(日) 22:29:34
>>123
教えていただいたコードを埋め込むとシグナルがあがりました。
ただ、参照先が英語な上に、アセンブラも入っているため、まだ自分には理解できそうにないです。
やろうとしていることは、ガリガリとprintfでも埋め込んでいけば事足りるので、シグナルは断念します。
説明と参考サイトまで探していただいて、ありがとうございました。
137デフォルトの名無しさん:2009/09/20(日) 22:54:12
>>135
教えていただいた通りにやったらできました。ありがとうございました。
138デフォルトの名無しさん:2009/09/20(日) 23:07:13
天才あらわる
139デフォルトの名無しさん:2009/09/20(日) 23:10:24
やっぱり画面から出てこないお(´;ω;`)
140デフォルトの名無しさん:2009/09/21(月) 00:54:08
擬似的なものでいいのならGeForce 3D Visionあたりを試してみればいいんじゃないだろうか
141デフォルトの名無しさん:2009/09/21(月) 01:27:01
コンテナとか使いたいんだが、C++には行きたくない。
そんな俺を導いてくれる神はいないか?
142デフォルトの名無しさん:2009/09/21(月) 01:28:15
人工知能も組まないと、ただのダッチワイフじゃないか
143デフォルトの名無しさん:2009/09/21(月) 01:31:21
>>141
CSTL というものもあるし
自作してもいいんじゃないかな
144デフォルトの名無しさん:2009/09/21(月) 02:52:18
少数点第二位で変数を切り捨てたいのですが簡単な方法を教えて下さい.
float p = {123.456789};

printf("少数点第二位切り捨て後%f",p);
145デフォルトの名無しさん:2009/09/21(月) 02:57:02
>>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;
}
146デフォルトの名無しさん:2009/09/21(月) 03:22:31
>>145
ありがとうございます。
147デフォルトの名無しさん: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;
}
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)にするには?
151デフォルトの名無しさん:2009/09/21(月) 10:25:03
>>150
int n = 5;
char c = '0' + n;
152デフォルトの名無しさん:2009/09/21(月) 11:09:12
もしキャラ配列の3バイト以降が指定した文字列と一致したら〜
ってしたいときmemcpyで3つずらしたところから探すのとstrstrで検索するの
どっちのほうが早いの?
153デフォルトの名無しさん:2009/09/21(月) 11:18:17
>>152
環境による。速度や効率については実際に試すのが吉。
154デフォルトの名無しさん:2009/09/21(月) 12:10:25
>>152
1行目はmemcmp(キャラ配列の3バイト, 指定した文字列, strlen(指定した文字列))と読めるのだけど、
なんでmemcpy()が出てきたりstrstr()が出てきたりするのか判らん。
155デフォルトの名無しさん:2009/09/21(月) 12:19:07
一行目のその読みが違ってる可能性もあるわけだ。
156デフォルトの名無しさん:2009/09/21(月) 14:15:19
strstrは分かるでしょう
memcpyは3バイト以降をバッファにコピーして、それとあとでstrcmpなりmemcmpするんでしょう。もしくはtypo
157デフォルトの名無しさん:2009/09/21(月) 15:45:50
strstr()で3バイト分の検査がどの程度の時間かかるのか見積もりがわからないけど
気にしたら負けレベル
158デフォルトの名無しさん:2009/09/21(月) 16:25:35
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
printf("test");
return 0;
}

bcc
コンパイルエラーになるんだけど
サンプル引用したものなのに
159デフォルトの名無しさん:2009/09/21(月) 16:37:11
>>158
#include <stdio.h>
を追加したら
160デフォルトの名無しさん:2009/09/21(月) 16:39:00
>>158
エラーメッセージくらい貼れよ
161デフォルトの名無しさん:2009/09/21(月) 16:50:03
環境によってはそれでコンパイルできるからなあ
162デフォルトの名無しさん:2009/09/21(月) 16:52:03
コマンドまたはファイル名が違います.
163デフォルトの名無しさん:2009/09/21(月) 16:53:47
-W
164デフォルトの名無しさん:2009/09/21(月) 16:58:38
パラメータ’hInst’は一度も使用されてないだとか
WinMainの引数全部に同じエラーが出る
あと外部シンボル’_main’が未解決 だって
165デフォルトの名無しさん:2009/09/21(月) 17:04:18
-Werrが付いてるんだ。殊勝な心がけだね
166デフォルトの名無しさん:2009/09/21(月) 17:33:15
>>164
上のはエラーじゃなくてウォーニンだろ。
下のはコンパイルエラーじゃなくてリンクエラーだ。
167デフォルトの名無しさん:2009/09/21(月) 17:45:37
それでどうやって解決するの?
168デフォルトの名無しさん:2009/09/21(月) 17:48:47
>>163 で既に答え出てるだろ。
169デフォルトの名無しさん:2009/09/21(月) 17:59:16
-Wって何のかわからん
これだけじゃ検索ヒットしない
170デフォルトの名無しさん:2009/09/21(月) 18:02:11
>>169
コンパイラのマニュアルをどうぞ
っても-Wだけだとまた困りそうだけど
171デフォルトの名無しさん:2009/09/21(月) 18:04:16
bcc32 [リターン]
172デフォルトの名無しさん:2009/09/21(月) 18:13:06
まったくもう、なぜ>>1に目を通さないかね?
>C言語の*入門者*向け解説スレッドです。
>初心者、初級者の方は他の質問スレのほうが良いかもしれません。
173デフォルトの名無しさん:2009/09/21(月) 18:29:05
ああやっとできた
回答者サンクス
>>172 スマソ
174デフォルトの名無しさん:2009/09/21(月) 19:35:10
>リターン
175デフォルトの名無しさん:2009/09/21(月) 21:42:34
-WだとWを検索対象から外す意味だぞ
176デフォルトの名無しさん:2009/09/21(月) 22:02:26
-w
177デフォルトの名無しさん:2009/09/21(月) 23:17:28
くだらない質問なんですが,
Sleep(0.9)って可能でしょうか?
178デフォルトの名無しさん:2009/09/21(月) 23:25:50
sleep(0.9)だったらコンパイラがエラーか警告吐くとおもうけど
Sleep(0.9)だとわからないなぁ
179デフォルトの名無しさん:2009/09/21(月) 23:36:52
その Sleep ってのが Win32API のことなら、引数は整数型だから、
その表記は単に
Sleep(0);
と見なされるだけだろ。
で、
Sleep(0) ってのは何も問題ないよ。
割り当てられた残り CPU 時間を打ち切ってシステムに制御を返すはず。
180デフォルトの名無しさん:2009/09/21(月) 23:40:41
Sleep を時間待ちに使おうとしてるなら止めたほうがいいよ。
精度は低いし、そもそも設定するのは休止する最低限の時間であって
戻ってくる時間を指定できるわけじゃない。
181デフォルトの名無しさん:2009/09/21(月) 23:44:29
じゃぁどうすればいい?
182デフォルトの名無しさん:2009/09/21(月) 23:46:37
DWORD t = GetTickCount();
while (GetTickCount() - t < 1000);
183177:2009/09/21(月) 23:47:18
やはり0となるのですね.すっきりしました,ありがとうございます.
184デフォルトの名無しさん:2009/09/21(月) 23:49:30
>>182
それビジーループにならない?
185デフォルトの名無しさん:2009/09/21(月) 23:57:56
何か問題でも?
186デフォルトの名無しさん:2009/09/22(火) 00:05:54
>>182 だったらsleepのほうがいい。
187デフォルトの名無しさん:2009/09/22(火) 00:06:40
>>185
エコに反する、勿体ない。
188デフォルトの名無しさん:2009/09/22(火) 00:12:08
具体的に
189デフォルトの名無しさん:2009/09/22(火) 00:14:44
sleep(n)でn秒以上止まることは保障されてるけれど
n+1秒以内に復帰するとかって保障されてる?
必要だったら>>182もしょうがないと思うが
190デフォルトの名無しさん:2009/09/22(火) 00:24:20
>>182にしたって、他のタスクが忙しくて実行が止まってるかもしれないんで保証されないのは同じだし。
191デフォルトの名無しさん:2009/09/22(火) 00:29:26
作業用PCのHDD逝ったあああああああああああ
192デフォルトの名無しさん:2009/09/22(火) 00:32:52
1発のwaitを正確に行うのは難しいが、
複数回の平均なら容易く制御できる。
t = GetTickCount();
while(1) {
 何らかの処理;
 t += 900;
 Sleep(t - GetTickCount());
}
193デフォルトの名無しさん:2009/09/22(火) 01:27:08
まず1ミリ秒のsleep()が平均(もしくは最悪)の待ち時間 hを計算しておく
xミリ秒停止するなら,x-hミリ秒(もしくはx-2hミリ秒)程度のsleep()を入れて,そこから先はビジーループ

ってのをやったけど,実時間性を保障するシステムより耐性のあるシステムを作ったほうが安全

※といっても hは保障できる値ではないのでリアルタイム処理なんかはあきらめるしかない
194デフォルトの名無しさん: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--;
}}
195デフォルトの名無しさん:2009/09/22(火) 01:40:38

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);
}
}
196デフォルトの名無しさん:2009/09/22(火) 01:41:33
>>194
データ構造と処理構造見直せ
おもにtime_tでdifftimeしたり
197デフォルトの名無しさん:2009/09/22(火) 06:18:21
文章をコピーする関数で

void copy(char *to,const char *from)
{
while(*to++ = *from++)
;
}

だと「不正な代入」と警告が出てしまう
プログラム自体は動くがこの書き方だとまずい?
198デフォルトの名無しさん:2009/09/22(火) 06:36:10
別に問題ないけど、気になるんだったら
while((*to++ = *from++))
とすると警告出さなくなるかもしれない。
199197:2009/09/22(火) 06:47:06
>>198の通りにやっても警告が出てしまう・・・
本に書いてある通りの書き方だから多分大丈夫だと思うし深く考えなくていいかな
200デフォルトの名無しさん:2009/09/22(火) 06:49:30

memcpy
201デフォルトの名無しさん:2009/09/22(火) 06:50:39
なんでマニアックな書き方すんだ _?
202デフォルトの名無しさん:2009/09/22(火) 07:03:40
マニアックでも何でもねーよ
K&R本にも「このような書き方はマスターすべきである」と書いてあるし
203デフォルトの名無しさん:2009/09/22(火) 07:20:17
memcpyつかったほうが速いし、その本みたことないが
不必要な場面でも使えとは書いてないだろ。 
204デフォルトの名無しさん:2009/09/22(火) 07:23:47
なんでmemcpyが出てくるんだ?
速いからったってstrcpyと比較しなきゃフェアじゃないだろ
205デフォルトの名無しさん:2009/09/22(火) 07:36:21
>>199
なら while((*to++ = *from++) != 0)
ってすればいい。
206デフォルトの名無しさん:2009/09/22(火) 07:37:25
>>203
もしかして、「K&R」の名前も知らないの?

ここはC言語のスレだよね?
207デフォルトの名無しさん:2009/09/22(火) 07:48:32
K&R至上主義の方がちょくちょく現れるが、今の時代に合わせて変えていくことも大事だよ。
この記法についてはidiomとして十分浸透しているものだから別にあれこれ言うつもりはないし、
すんなり読めるようになっておくべきだとも思う。
けれど、K&Rが絶対であるという考えは(そのように言ってはいないのかもしれないが)
やめておいた方がいいよ。
K&RのHello Worldは今ではタブーなコードであるし。
208デフォルトの名無しさん:2009/09/22(火) 07:49:39
Ken TompsonとDennis Ritchieはこの世界じゃ神様だもんな
知らないモグリが回答なんてするはずないよね
209デフォルトの名無しさん:2009/09/22(火) 07:53:17
俺としてはRMSも入れてあげたい、っていうか、釣りだよね
210209:2009/09/22(火) 07:55:40
Knuth先生とRMSにするか。
211デフォルトの名無しさん:2009/09/22(火) 08:05:44
別にK&Rを読めとか崇拝しろとか言っているわけじゃない。
もちろん、盲信すべきでもない。

が、K&Rの名前も知らない
つまり、まともに知識を得ようとすれば必ず知っているはずの名前を知らない
という事実が問題。
他の言語でも大抵最初に扱われる、「Hello worldの由来」としても。

この点は、K&Rの知名度よりはだいぶ劣るが
C FAQについても言える。
何かについて詳しく知ろうと調べていけば、普通はこの存在を知ることになるし
Cでまともなコードを書こうとしている人なら、存在自体は知っていなければおかしい。
そして、鵜呑みにする必要は無いが、どんなことが書いてあるか等は目を通しておくべき。
212デフォルトの名無しさん: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 が取得できるのだが……。

以上、よろしくお願いします。
213デフォルトの名無しさん:2009/09/22(火) 08:21:30
>>210
Knuth先生はC言語に直接関わってないだろ。
RMSもフリーのコンパイラ作ったっていう関わり方だし、
Cに関してはKernighan/Ritchieは別格。
214デフォルトの名無しさん:2009/09/22(火) 08:23:17
ケントンプソン出てきた時点でこの業界の偉人でK&Rを組み立てる流れになったんじゃなかったのかよ
215デフォルトの名無しさん:2009/09/22(火) 08:25:48
>>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なんだ。すまない。
216209:2009/09/22(火) 08:27:28
すまない。ほんとうにすまなかった。
ラリーウォールじゃLだしなんかインパクトに欠けるし(失礼)とかそっちで精一杯だったorz
217デフォルトの名無しさん:2009/09/22(火) 08:31:35
>>212
定石的なやり方は
fgetsで一行文の文字列読み込んで、それをsscanfで変換。
218デフォルトの名無しさん:2009/09/22(火) 08:48:09
>>216
K&R論争なんてやりたくないしとりあえずボケちゃえと思ったんだ。
乗っかってくれた209さんには感謝してるよー
219デフォルトの名無しさん:2009/09/22(火) 09:09:59
>>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;
}
220219:2009/09/22(火) 09:26:14
あれ。ちょっとまだバグがあるので、これから修正します
221デフォルトの名無しさん:2009/09/22(火) 09:57:06
サイズを求める手間を足しても、memcpyの方が198のやり方より速いの?
222デフォルトの名無しさん:2009/09/22(火) 10:00:33
2009にもなってまだこんなネタで盛り上がれるなんて
よほどやることがないんだな
223219: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;
}
224デフォルトの名無しさん:2009/09/22(火) 10:45:38
*** 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
225デフォルトの名無しさん:2009/09/22(火) 11:38:06
char *m  = (char*)malloc (sizeof(char)*256);
m[258] = '1';
free(m);

明らかに確保してない領域に書き込んでいるのですが
実行してもエラーが出ません、なぜでしょうか?
226デフォルトの名無しさん:2009/09/22(火) 11:39:52
エラーを出力することが規定されていないから
227デフォルトの名無しさん:2009/09/22(火) 11:41:35
そういう言語だから。
OSが保護していない領域は書き換えられまくり。
228デフォルトの名無しさん:2009/09/22(火) 11:42:07
なんだよ都市数ってwなんかの宿題か?
229デフォルトの名無しさん:2009/09/22(火) 12:34:24
>>228
そうですね。課題は巡回セールスマン問題で、
ありがたいことにネットにプログラムはあったんですが、
細かい仕様は当然違うので、その調整をしてました。

プログラミングなんて1年以上前に3ヶ月程やっただけなので、
本当に気が重かったのですが、このスレのおかげで何とか提出できそうです
230デフォルトの名無しさん:2009/09/22(火) 13:04:50
K&R(第2版)を読めば>>225みたいなのがどうして一見正常に機能するのか
その理由もある程度推測できるようになる(mallocの実装例が載っているので)。
231デフォルトの名無しさん:2009/09/22(火) 13:33:59
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の値ともにゼロになってしまうんですけど
これはどういうことなんですかね?
233デフォルトの名無しさん:2009/09/22(火) 16:49:02
>>232
> i = 1/3;

i = 1.0/3;
234デフォルトの名無しさん:2009/09/22(火) 16:49:21
1/3は整数で完結してるから0になる
1.f/3
1.0/3
にしろ
235デフォルトの名無しさん:2009/09/22(火) 16:51:17
すみません!!
わかりました。ありがとうございます。
236デフォルトの名無しさん:2009/09/22(火) 22:50:39
>>207
>K&RのHello Worldは今ではタブーなコードであるし。
フレーム抜きで詳説希望
237デフォルトの名無しさん:2009/09/22(火) 23:11:49
どうせ「第二版」というものを開いた事も無いような奴が寝言言ってるだけだろ
238デフォルトの名無しさん:2009/09/22(火) 23:19:42
タブーなんていう曖昧な表現をするあたり、何か問題があるにしても
個人的な思い込みに反してるだけだろうしな
239デフォルトの名無しさん:2009/09/22(火) 23:31:39
return がないとかそういう話かね。
240デフォルトの名無しさん:2009/09/23(水) 00:06:28
main(argc,argv)
int argc;
char **argv
{
printf(""Hello world!);
}
241デフォルトの名無しさん:2009/09/23(水) 00:19:02
笑っちゃうね、もう少し勉強してからきてね
242デフォルトの名無しさん:2009/09/23(水) 00:29:53
>>240
それはK&R1。
243デフォルトの名無しさん:2009/09/23(水) 00:32:23
http://www.ioi-jp.org/joi/2008/2009-yo-prob_and_sol/2009-yo-t3/2009-yo-t3.html
こういう問題って頭の中だけで考えますか?
それとも一回紙に大体書き出してからやりますか?
244デフォルトの名無しさん:2009/09/23(水) 00:36:10
適当にコーディングしながら考える。
245デフォルトの名無しさん:2009/09/23(水) 00:36:59
>>240
ああそれはうざい。

というかprintf(""Hello world!);は革新的すぎるぜ
246デフォルトの名無しさん:2009/09/23(水) 00:39:27
>>244
そうなんですか。

>>244さんなら、これをどうプログラミングしますか?
247デフォルトの名無しさん:2009/09/23(水) 00:40:35
>>243
その問題なら、いきなりコーディングできるのでは?
248デフォルトの名無しさん:2009/09/23(水) 00:41:14
古い本だとmain( )やvoid main( )で表記してるのがあるけど、
まだ統一された規格が無かった頃のコードなの?
249デフォルトの名無しさん:2009/09/23(水) 00:41:26
>>247
簡単ですかねー・・・?
まだ経験が浅いので、作ってみたらgdgdになってました(´・ω・`)
250デフォルトの名無しさん:2009/09/23(水) 00:44:37
組み込みの世界は無限ループするからvoid main()が一般的ってほんと?
251247:2009/09/23(水) 00:49:23
>>249
自分ならまず、ゲーム部分のシミュレータ作って(返り値が個数)、
入力データ N 個の一箇所を別の色に変えたデータを作る部分を
作って、全体制御と一番小さい数値を返す部分を作って、
終わり
252デフォルトの名無しさん:2009/09/23(水) 00:53:55
>>248
void main() は明らかに間違い。
253デフォルトの名無しさん:2009/09/23(水) 00:57:07
exit() で終わるなら別に void でも問題でないけどね
254デフォルトの名無しさん:2009/09/23(水) 01:06:16
よくエラーを返すときはreturn -1,return -2など
-を使うことが多いと思うのですが,これはなぜでしょうか?
retrun1やreturn2はみない気がしています.
255デフォルトの名無しさん:2009/09/23(水) 01:13:08
気のせいじゃない?return 1 とか 2 とかもあるよ

関数によっては、 0以上の正数が正常値で、負数がマイナス値
という事情があるかもしれない。ファイルディスクリプタとか
256デフォルトの名無しさん:2009/09/23(水) 01:21:41
>>252
とは限らない
257デフォルトの名無しさん:2009/09/23(水) 01:22:28
>>253
ん?呼び出し規約で問題がでませんか?スタートアップ側でintが返るのを仮定しているのに void な関数をリンクしちゃっていいのですかね。
258デフォルトの名無しさん:2009/09/23(水) 01:25:19
たしか仕様じゃできるかぎりint mainにしろ、でも void mainで始まる事を禁止してはいなかったような
蛇足だが main は int main の省略形
259デフォルトの名無しさん:2009/09/23(水) 01:48:02
>>250
組み込みではそもそもmain関数が無いこともある。
慣習的に、mainにあたる関数をmainって名付けることが多いけど。
260デフォルトの名無しさん:2009/09/23(水) 02:45:14
動けばいい、それだけだ
261デフォルトの名無しさん:2009/09/23(水) 02:51:14
お前はそれでいい
262デフォルトの名無しさん:2009/09/23(水) 02:58:23
>>260
ほう、動くのですかね、void main() で。
263デフォルトの名無しさん:2009/09/23(水) 03:28:30
動く環境もある
264デフォルトの名無しさん:2009/09/23(水) 03:29:46
アプリケーションエントリのスタブ関数(mainの呼び出しもと)はANSI以外のCだとてんでばらばら
265デフォルトの名無しさん:2009/09/23(水) 03:29:51
main()と戻り値の方を省略するのはなんの問題もないの?
非推奨だったりしないのかな、という点で。
266デフォルトの名無しさん:2009/09/23(水) 04:19:20
>>265
省略すれば int になります。
267デフォルトの名無しさん:2009/09/23(水) 04:39:10
警告が出力されるままになるのが気がかりなんだけど、規格上はそれで問題ないということ?
268デフォルトの名無しさん:2009/09/23(水) 05:25:13
VCなどでソリューションリビルドって,どういった時にする物なのでしょうか?
269デフォルトの名無しさん:2009/09/23(水) 05:34:08
>>268
原因不明だけどプログラムが正常に動作しなくなったって時にやると、うまく動くようになることもある。
大抵は依存関係の解決に問題があるんだけどね。
270デフォルトの名無しさん:2009/09/23(水) 06:07:38
何らかの理由でオブジェクトファイルよりもソースファイルの方が日付が古く、内容が新しくなった場合とか?
271デフォルトの名無しさん:2009/09/23(水) 08:01:01
リリース用のビルドを作る時に何となくやる
272デフォルトの名無しさん:2009/09/23(水) 08:59:13
printfとかでDOS画面に表示された文字を全部消すことはできませんか?
273デフォルトの名無しさん:2009/09/23(水) 09:00:45
DOS画面は無理だな。疑似DOS画面を用意すればいいだろう。
274デフォルトの名無しさん:2009/09/23(水) 09:02:27
system("cls");
275デフォルトの名無しさん:2009/09/23(水) 09:02:28
DOS画面ということは Windows 環境での話かね?
system("cls"); じゃだめかい
276272:2009/09/23(水) 09:07:52
スマンカッタ
clsで初期化された
277デフォルトの名無しさん:2009/09/23(水) 09:08:37
273だった
278デフォルトの名無しさん:2009/09/23(水) 11:16:50
>>265
main()以外の関数でも省略してもエラーにならないしな。
戻り値がvoid以外でも。
279デフォルトの名無しさん:2009/09/23(水) 11:19:07
void main()の弊害は馬鹿が絡んできて貴重な時間を浪費させられること。これに尽きる。
なので書いてはいけない。
280デフォルトの名無しさん:2009/09/23(水) 11:37:25
自分はメタな立場から発言してるから、バカとは違うと思ってるバカも絡んできてしまうしな。
281デフォルトの名無しさん:2009/09/23(水) 12:19:29
>>278
デフォでintに決め打ちされてしまうだけですね。
282デフォルトの名無しさん:2009/09/23(水) 13:32:30
>>281
いや、

double func()
{
return 0.0;
}

↑こういう関数でreturnを削除しても、

double func()
{
}

↑エラーにならないってこと。
283デフォルトの名無しさん:2009/09/23(水) 14:52:14
>>282
iso標準のC言語の仕様としては、
 double func(){}
この返却値を使わない限りは大丈夫なの?(問題無く動作する?)
それともこれをコンパイルした時点で未定義の動作になる?
284デフォルトの名無しさん:2009/09/23(水) 15:00:40
> If the } that terminates a function is reached,
> and the value of the function call is used by the caller,
> the behavior is undefined.

使わなければ大丈夫っぽい感じ
285283:2009/09/23(水) 15:02:05
>>284
確かに。
and the value of the function call is used by the caller,
の部分ね。

ありがとうございます。
286デフォルトの名無しさん:2009/09/23(水) 18:02:59
C言語の中級者向けに書かれた本を探しているんですが、
皆さんがお勧めする本があったら教えてください、お願いします!

あと問題数もこなしたいので、柴田望洋さんの
「解きながら学ぶC言語」も買おうと思ってるんですが、この本は良本ですか?
287デフォルトの名無しさん:2009/09/23(水) 18:15:49
入門者・初心者・中級者・上級者・変態
にランクを分けるにしても、人によってその敷居が違うから
>>286の実力がよく分からない。

とりあえず関数ポインタは知ってる?使える?
288デフォルトの名無しさん:2009/09/23(水) 18:25:51
>>286
C言語を学習している目的がわからないと、勧めようがない。
289デフォルトの名無しさん:2009/09/23(水) 18:30:14
make, assert, データ抽象化とかそこらへん説明してる中堅の良書ってなかなかないんだよな。
どちらかというと入門書レベルだけどPractical C Programmingとか。
時代遅れだったらごめん。
290デフォルトの名無しさん:2009/09/23(水) 18:34:28
変態にオヌヌメの教えてくれ
Numetrical recipesとかでつか
291デフォルトの名無しさん:2009/09/23(水) 18:49:10
※住職は目が汚く濁っています。
292デフォルトの名無しさん:2009/09/23(水) 18:57:20
>>291
誤爆するなよp

スナックで「目がきれいですね」と言われブチギレ、ボコボコに 寺の住職を逮捕…埼玉
http://hideyoshi.2ch.net/test/read.cgi/dqnplus/1253699754/
293デフォルトの名無しさん:2009/09/23(水) 18:59:28
>>290
題名も忘れてしまったが、C言語のマクロを使いまくる本があったな。
あれは変態におすすめだったと思う。
294デフォルトの名無しさん:2009/09/23(水) 19:00:49
>>292
すまん

お詫びになるかは分からんけど・・・
いろんな本読んだりしていろんなコードを読むことも大事です。
295デフォルトの名無しさん:2009/09/23(水) 19:36:52
>293
これかなぁ
http://www.amazon.co.jp/dp/493079594X
Cプリプロセッサ・パワー―C言語の秘められた能力を解き放つ-林-晴比古
確かプリプロセッサの誤用が多くて有名な本

誰か変態な本知らない
296デフォルトの名無しさん:2009/09/23(水) 19:43:22
何も作れませんがC言語の入門書は読みました。
まだ理解できていないところも少しありますが、次のステップに進むべきでしょうか?
297デフォルトの名無しさん:2009/09/23(水) 20:08:59
やめてしまえ
お前ごときのかわりならいくらでもいる
298デフォルトの名無しさん:2009/09/23(水) 20:13:21
>>287
関数ポインタは・・・知りません(´・ω・`)
ポインタなら知ってます。。。が、書けといわれたら無理。

実力はどのように表現したら良いですか?
とりあえずC言語を始めて18日ですw
簡単なソート系なら何も見ずにコード書ける
299デフォルトの名無しさん:2009/09/23(水) 20:14:25
>>286
とりあえず、人に答えてもらったら
たとえ気にくわなかろうが
一応の返事をするという最低限のマナーは守ろうか。
300デフォルトの名無しさん:2009/09/23(水) 20:14:29
代わりがあまりいなくなるレベルって一体どのくらいからですか?
301デフォルトの名無しさん:2009/09/23(水) 20:15:55
>>288
情報オリンピックに出たいからです。

2008年の予選問題の、問1、2までなら自力で制限時間内に解けたんですが、
問3が解けませんでした。
302デフォルトの名無しさん:2009/09/23(水) 20:15:55
>>298
> 何も見ずに
そんな事に価値は無い
303デフォルトの名無しさん:2009/09/23(水) 20:15:57
>>300
C言語以外のこともよく知っているレベル
304デフォルトの名無しさん:2009/09/23(水) 20:19:06
>>299
すいません、用事があったので席をはずしてました
それと今からもちょっと用事があります・・・。

>>302
試しで作ってみただけです
305デフォルトの名無しさん:2009/09/23(水) 20:23:34
何でもいいからたくさんプログラムを書いていくべき
基本が解ったら後は習うより慣れ
まだ知らないこともたくさんあるだろうけど
必要に迫られて調べていけば覚える
306デフォルトの名無しさん:2009/09/23(水) 20:26:02
>>303
それはC言語を応用してWinAPIのようなものも使えるようになるってことですか?
それとも設計とかのことですか?
307デフォルトの名無しさん:2009/09/23(水) 20:26:36
ポインタが分からないなら
まずは単方向リストだ
308デフォルトの名無しさん:2009/09/23(水) 20:48:29
どうでもいいレスに返事を強制されているなw


『C言語による最新アルゴリズム事典』
http://oku.edu.mie-u.ac.jp/~okumura/algo/

興味のあるプログラムをとりあえず動かしてみるなり改造するなり
とにかく自分で書いてみないとどうにもならん
309デフォルトの名無しさん:2009/09/23(水) 21:02:46
>>306ですがなるほど、自分は大きな勘違いしてたみたいですねw
確かにまずはアルゴリズムの勉強していかないとまずい。

本に書いてあるコードを実行してみたり改造したり、
自分でいろいろ実験がてらに作ってみたりして勉強してみます。
ありがとうございました。
310デフォルトの名無しさん:2009/09/23(水) 21:42:18
>>308
自分もこの本でアルゴリズムの勉強したから大きいことはいえないけど、
もう「最新」っていえるような本じゃないよね。「定番」に書き換えるべき^^
311デフォルトの名無しさん:2009/09/23(水) 21:57:59
グローバル変数のほうが初期化に時間かかる気がするんだけど気のせい?
312デフォルトの名無しさん:2009/09/23(水) 21:58:49
気のせい
313デフォルトの名無しさん:2009/09/23(水) 22:09:10
>>143
このCSTLっての結構勉強になるね
314デフォルトの名無しさん:2009/09/23(水) 23:07:23
>>313
パフォーマンスがいい可能性があると思う。 C++用に作られた物より。
315デフォルトの名無しさん:2009/09/24(木) 00:07:18
>>311
一般的にはグローバル変数の方がアクセスは遅くなるだろうけど
初期化の話ならアクセス1回だけなので、ほとんど変わらない
316デフォルトの名無しさん:2009/09/24(木) 00:44:39
>>300
C言語に的を絞るなら、高性能なコンパイラが書けるレベル。
317デフォルトの名無しさん:2009/09/24(木) 00:46:48
>>316
天才じゃねーか

C言語では低性能なコンパイラを作るのですら相当きついだろ。
318デフォルトの名無しさん:2009/09/24(木) 00:55:13
>>317
情報系の学科出てれば、実習でコンパイラくらいは作るわけで。
C言語ほどの規模じゃないにしても。
319317:2009/09/24(木) 00:57:36
>>318
なんちゃってインタプリタなら作ったことあるぜ。

だからといって C言語のコンパイラは作れる気がしない
というかC言語の仕様を完全に理解していないとつくれねーし。
320318:2009/09/24(木) 01:22:14
>>319
C言語の構文解析用のyacc/lexコードはネットに転がってたような
(ほかのコンパイラのソースについてたのかも)
そういうの参考にしつつ、ちまちまやって一年くらいで最適化無しなのは作れた。
バグはたくさんあっただろうけど。
321デフォルトの名無しさん:2009/09/24(木) 02:16:07
完成しなくても一度やってみると細かい部分の仕様を再確認することになるから
それなりに詳しくはなれる
322デフォルトの名無しさん:2009/09/24(木) 03:10:50
void test(char *src)
{
 *src = '\0';
}

int main()
{
 test("test");
}

これメモリエラー出ちゃう
どうすれば・・・・・
323デフォルトの名無しさん:2009/09/24(木) 03:17:52
>>322
"test"が書き込み不可なメモリに確保されているんだろう。
int main()
{
char str[] = "test";
test(str);
}
とすれば、strは書き込み可能な配列なので問題なく動くはず。
324デフォルトの名無しさん:2009/09/24(木) 11:35:20
横レス失礼します
今Cについてできるだけ熟練したいと思っています。
(今のレベルとしては「独習c」を終えたレベルです。)
そこで、オープンソースのものを読んで先輩方の書かれたコードを参考にしたいと考えました。
コードリーディング初心者が読みやすい"短い"コードが欲しいのですが、よい入手方法はありますか?

google codeなどを見つけましたが、コードの行数で絞る方法が分かりません。
環境はGNU/Linux Debianを想定しています。
//興味のあるプログラムはあるんです。zshとかglibcその物とか。ただ、相手が巨大過ぎるので..
よろしくお願いします。
325デフォルトの名無しさん:2009/09/24(木) 11:42:37
>>324
今Cで書かれた他人のソースを読んでも
たぶんAPI使いまくりで訳が分からないとおもうぞ。
結局標準のC言語だけではたいしたこと出来ないんだから
どうしてもAPIを使用することになってしまう。
 Application Programming Interface - Wikipedia
 ttp://ja.wikipedia.org/wiki/Application_Programming_Interface

君の書き込みを見る限り頭良さそうなので独習cのレベルは理解していると仮定する。
そのレベルなら、Cにこだわる理由がないなら
C++の勉強にシフトした方が良いと思う。


まあ他の人の意見も参考にした方が良いと思うが、俺的にはC++がお薦め。
326325:2009/09/24(木) 11:44:29
なんか俺の書き込み頭悪そうだな。
要するに俺が言いたいのは

「APIや外部ライブラリの勉強をすることになるだろうが、
どうせならその前にC++を十分に学んでおいた方が
絶対便利だと思うよ」

ってことです。
327デフォルトの名無しさん:2009/09/24(木) 11:45:53
熟練したいなら標準ライブラリの仕様読みこむのが先
328デフォルトの名無しさん:2009/09/24(木) 11:53:27
>>325
早速のレスありがとうございます。APIと言うものがなんであるかは既に知っています。

C++に以降すべきですか...確かに興味はあります。僕自身の興味として最終的にlinux(+unix)について
深く理解したいと言うものがあり、Cも当然理解できないとまずいだろうと思っています。
(これに反する理由があれば、当然c++に以降しますが)
ただ、今C++について学んだところで、また初心者本を買ってそれを一冊使いきるだけになってしまうのではないかと心配しています。

とりあえず、cをそれなりに使えるようになってからチャレンジしたいと思っています。
//そのためにコードを読まないといけないんじゃないか、と思っているわけです。
どうもありがとうございます。
329デフォルトの名無しさん:2009/09/24(木) 11:55:08
>>327
> 327 名前:デフォルトの名無しさん [sage]: 2009/09/24(木) 11:45:53
> 熟練したいなら標準ライブラリの仕様読みこむのが先
今からglibcについて勉強する、ということでいいのでしょうか?
330デフォルトの名無しさん:2009/09/24(木) 12:03:45
C言語より、C++を使いこなすのは困難とは限らない。
生産性ではかれば、C++の優しいはず。
331325:2009/09/24(木) 12:08:03
>>328
とりあえず外部ライブラリはC++クラスの形で提供されていたりして
C++の知識がないと使える枠が狭くなっちゃうじゃない。

ところで他は何の言語の知識がある?
332324:2009/09/24(木) 12:19:26
レスありがとうございます。
> とりあえず外部ライブラリはC++クラスの形で提供されていたりして
> C++の知識がないと使える枠が狭くなっちゃうじゃない。
それは知りませんでした。C++を学んでおくといい理由の一つですね。参考になります。
> ところで他は何の言語の知識がある?
よく知っている順から上げると、perl,emacs lisp,python,rubyです。
..どれもさわりの部分だけで、{モジュール、ライブラリ}と呼ばれるものを検索して、利用したりと言ったことはやっていません。
ずぶの素人です。
//もしかしたら自分に足りないのはライブラリを利用する方法を知らないことかもしれません。
//javaは大嫌いです。今のところ学ぶ気はありません。
333デフォルトの名無しさん:2009/09/24(木) 12:22:05
>>328
linuxについて深く理解したいのなら、OSそのものの教科書があるから
そっちを勉強した方がいいとおもうよ。
とりあえず定番のタネンバウム先生の教科書で勉強するとか。
(MINIXのソースは手頃な大きさだし、Cの勉強にもいいとおもう)
334デフォルトの名無しさん:2009/09/24(木) 12:28:12
>>333
レスありがとうございます
あの有名なminixを学ぶ、ですか。いいかもしれませんね。
//発狂して新しいOSを作るとか言い出さないか自分が心配ですw
>linuxについて深く理解したいのなら、OSそのものの教科書があるから
>そっちを勉強した方がいいとおもうよ。
OSと言う大きな括り方ではなく、Linuxに含まれる数多くのツールのコードを読んで勉強したいと思っています
//ボトムアップ、と言っては間違っているでしょうか?ローカルなところからやってみたいです。
ありがとうございます。
335デフォルトの名無しさん:2009/09/24(木) 12:34:44
>>122
http://www.ecs.shimane-u.ac.jp/~stamura/NumericalComputation-Tips.html
ここの"InfやNaNが発生する場所を特定したい."じゃないか?
336デフォルトの名無しさん:2009/09/24(木) 12:35:04
すぐLinux嫁とか言う奴はほんとに読んでんのかよw
337デフォルトの名無しさん:2009/09/24(木) 12:44:47
Pascalをこれから学ぼうと思うのですが、win環境でおすすめの開発環境はありませんか?
338デフォルトの名無しさん:2009/09/24(木) 12:50:59
Delphiがいいんじゃないかい?
339デフォルトの名無しさん:2009/09/24(木) 22:25:58
>>324
コードリーディング初心者が読みやすい"短い"コード

ならば
Short Coding
http://www.amazon.co.jp/dp/4839925232
340デフォルトの名無しさん:2009/09/25(金) 01:00:54
>>336
自レスなんだよ。マッチポンプだからな。
どこどこ嫁の方がリファレンスのない自慰レスよりマシ
341デフォルトの名無しさん:2009/09/25(金) 11:28:12
今更だけどLuaってすごいね
cでここまで出来るのかという感じで
342デフォルトの名無しさん:2009/09/25(金) 11:52:44
>>330
CやC++はともかく日本語が困難なようですね
343デフォルトの名無しさん:2009/09/25(金) 11:54:04
Luaはこういうのあったらいいなが実現している言語
344デフォルトの名無しさん:2009/09/25(金) 14:20:16
Windowsで右上の×を押して終了したときの処理はどうやったらいいんですか?
345デフォルトの名無しさん:2009/09/25(金) 14:23:04
>>344
WinAPIスレかC/C++スレへでもどうぞ。
346デフォルトの名無しさん:2009/09/25(金) 14:24:07
free()が成功した場合でも対象のポインタにはNULLが入らないの?
まだ解放していないか、あるいは解放に成功したかはどうやってチェックすればいい?
347デフォルトの名無しさん:2009/09/25(金) 14:26:37
>>346
それは不可能。

そのため、君のコーディング規約として
freeする度に直後にNULLを代入するようにするとかそうすべき。
348デフォルトの名無しさん:2009/09/25(金) 14:32:48
#define freeandnull(p) {free(p); p=0;}
349デフォルトの名無しさん:2009/09/25(金) 14:43:13
>>346
free() が成功したかどうかは free() 自身が知っているのみだが
もし失敗しました、と言われてもプログラマにできることなどない。

>>348
一般論として、マクロ内に "{}" は入れない方がいい。

if (〜)
  freeandnull(hoge1);
else
  freeandnull(hoge2);

なんて書かれると、「; で if は終わってるのに else ってなんじゃい!」
という趣旨のエラーが表示される。
350デフォルトの名無しさん:2009/09/25(金) 14:45:27
だからdo{ }while(0)で括れと何度言ったらわかるんだ
351デフォルトの名無しさん:2009/09/25(金) 14:45:41
do{free(p); p=0;}while(0)

ですねわかる
352デフォルトの名無しさん:2009/09/25(金) 14:50:43
それじゃ for() の中にカンマで区切ってならべられないじゃないかー!
353デフォルトの名無しさん:2009/09/25(金) 14:51:44
だからもうC++に移行すればいいんだよ。
354デフォルトの名無しさん:2009/09/25(金) 14:52:36
(free(p),p=NULL)
355デフォルトの名無しさん:2009/09/25(金) 14:55:18
インライン関数にしたら
356デフォルトの名無しさん:2009/09/25(金) 14:55:51
Oh...
357デフォルトの名無しさん:2009/09/25(金) 15:08:34
>>355
Cには参照型がないのでこんな無様なことになる。
void freeAndNull(void ** pptr) {free(* pptr); * pptr = NULL;}
しかも、使うにはfreeAndNull(& ptr)などとしないといけない。
358デフォルトの名無しさん:2009/09/25(金) 16:01:20
マクロとインライン関数を組み合わせればいいじゃん。
#define Free(p) freeAndNull(&p)
359デフォルトの名無しさん:2009/09/25(金) 16:10:40
Free(a[1]);
360デフォルトの名無しさん:2009/09/25(金) 16:43:17
えっ? &a[1] は &(a[1]) って解釈されるよね?
361デフォルトの名無しさん:2009/09/25(金) 16:55:35
>360
もちろんそうだよ
>358
当然だが
#define Free(p) freeAndNull(&(p))
の方がいい
Free(p_foo+i)
ついでに言うとfreeAndNull()でNULLかどうかのチェックいれといた方がいい

そういえば、C言語@便利な(笑)マクロスレ落ちたな
362デフォルトの名無しさん:2009/09/25(金) 16:57:26
free()にはNULLを渡してもいいことになってるんだから無駄なチェックじゃないの
363デフォルトの名無しさん:2009/09/25(金) 17:13:04
free()とNULL代入のコストをどうみるかということね、チェックしなくてもいいか

もっと重要な事にT *からvoid **に変換できるかどうかについて思い出した
確かガチ規格準拠スレかどっかのサイトであった気がするが
T *からvoid *への変換とその逆は可能で
T *のポインタからvoid **はできない、一段階しか無理でconstが外せない云々かんぬんだったと思う
364デフォルトの名無しさん:2009/09/25(金) 20:52:00
>>354
それエラーか警告出ない?
365デフォルトの名無しさん:2009/09/25(金) 21:15:55
>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()の戻り値を捨てるときや使わない引数に警告が出ないようにすることがある、もっとキモいな
366デフォルトの名無しさん:2009/09/25(金) 22:08:41
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と手順を踏む必要がある?
367デフォルトの名無しさん:2009/09/25(金) 22:16:52
>>366
(ポインタが4バイトという仮定の下で)計算は合っているけど、
要素数が実行時に決定または変化するという場合はHOGE*にするぞ普通。
368366:2009/09/25(金) 22:39:24
>>367
ありがとうございます。

通常は、そのHOGE*にHOGE×使用要素数分mallocだと思うんですけど、
好きなタイミングで要素数を増やしたい場合、
一度freeしてから、新しい要素数分でmallocし直す必要がありそうなので
Bのやり方をあげてみました。

リストを使えばそれでも実装できるみたいなのですが、
なかなか感じがつかめません。
369デフォルトの名無しさん:2009/09/25(金) 23:14:55
>>368
Cはhogeをreallocすればいいだけ
370デフォルトの名無しさん:2009/09/25(金) 23:19:18
ん?なんかへんだわ。
Cが**なのはなんで?*でいいよ。
371366:2009/09/25(金) 23:21:09
>>369
ありがとうございます。
試してみたいと思います。
372デフォルトの名無しさん:2009/09/25(金) 23:22:40
んで、Cのメモリ使用量は
4 + 16 * 使用index数
373366:2009/09/25(金) 23:29:11
>>370
ありがとうございます。
Bのに比べてメモリの再確保のしにくさを書きたかったのですが、
確かにどちらも同じような意味合いになると思うので、
*でいいと思います。
374デフォルトの名無しさん:2009/09/25(金) 23:32:38
>>373
ちなみにBのほうが使用メモリは多いし、最大32個制限になっていることは分かってるのかな
375347:2009/09/25(金) 23:45:20
>>365
たぶん、>>364
free(p)
でpは無効なポインタだから、p=NULLはエラーだと思ったんだよ。

そうでしょ?>>364さん。

ちなみに正解は
free(p)
で無効なのは*pであり、pはエラーではない。
376デフォルトの名無しさん:2009/09/25(金) 23:52:07
なんかまだいろいろありそ
377デフォルトの名無しさん:2009/09/26(土) 00:03:46
いろいろ?
378366: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よりはマシになるという感じです。
379デフォルトの名無しさん:2009/09/26(土) 00:19:06
>>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と同じような判定をすることになる。
380デフォルトの名無しさん:2009/09/26(土) 00:26:36
>>378
ターゲットの環境はスタックサイズいくつなの?
381366:2009/09/26(土) 00:54:42
ありがとうございます。

>>379
なるほど、勉強になります。
未使用チェックは、場合によって、
間を空洞にしておきたい時とかに使えそうです。

>>380
よく分かっていないのですが、
コンパイラはBCCで、ググった所1Mとか4Kとかでてきました。

実験してみた所、char s[1000000] = "hoge";はprintfで表示できましたが、
1100000とかだと、コンパイルは通るのですが、表示はされないので、
1Mなのかもしれません。
382デフォルトの名無しさん:2009/09/26(土) 01:04:50
スタックサイズはリンカに渡すオプションで変更できるだろ
383デフォルトの名無しさん:2009/09/26(土) 02:28:04
数バイトの差がどうしたこうしたといってるくらいだから、ターゲット環境の
スタックサイズは変更できず、かつ非常に小さいのだろうと思ってもしょうがない
384デフォルトの名無しさん:2009/09/26(土) 07:38:45
「○○未満ではない」
って比較演算子でどう書くの?
385デフォルトの名無しさん:2009/09/26(土) 07:46:43
>=
386366:2009/09/26(土) 08:37:02
ありがとうございます。

>>382
オプション指定で実験し、確認できました。

>>383
なるほど、組み込みとかの場合、
細かく意識する必要があるのですね。
387デフォルトの名無しさん:2009/09/26(土) 09:32:01
教えてください。
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つになってしまいます。
どなたか解決方法をご存知の方、教えてください。
388デフォルトの名無しさん:2009/09/26(土) 09:33:43
a = 1から繰り返せばいいんだよ
389デフォルトの名無しさん:2009/09/26(土) 09:37:42
引数が4つのままだろ^^;
390デフォルトの名無しさん:2009/09/26(土) 09:38:05
文字列を格納した配列から、sscanfで文字列を読み取ろうとしています。
変換指定子によって、必要な情報だけ抜き出そうとしています(%*[+]%[A-Z]など)。
しかし、変換指定子に外れた入力がきたときに、残りの文字列が裏に残ってしまいますよね。
これを回避する方法を教えて下さい。
stdinから入力の場合はfeof(stdin)やfflush(stdin)で回避できるとおもうんですが、
配列からの入力だとわからなくて…。
お願いします。
391デフォルトの名無しさん:2009/09/26(土) 09:49:38
>>387
それで合ってるじゃん
ちなみに2つめのargv[]は空白でもいい事になっている
392デフォルトの名無しさん:2009/09/26(土) 09:58:40
えっ?合ってるの?
Eclipseじゃなく、コマンドでコンパイルして実行したら3


アホ
バカ
ドジっ子

って出ない?
393デフォルトの名無しさん:2009/09/26(土) 10:00:52
§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.
394デフォルトの名無しさん:2009/09/26(土) 10:02:36
了解です_/ ̄!○
395デフォルトの名無しさん:2009/09/26(土) 10:45:44
>>390
配列でも関係ないのでは?
fflush(stdin)はM$の独自拡張なので使わない方がよい
そのためにわざわざsscanf()を使っているんでしょ?

残りの文字列は捨ててしまえばよい
396デフォルトの名無しさん:2009/09/26(土) 11:22:10
>>385
よくよく考えたらそうか。サンクス
397デフォルトの名無しさん:2009/09/26(土) 13:18:28
while( (p=strstr()) ){
これをpがNULLの時が真にするには?
398デフォルトの名無しさん:2009/09/26(土) 13:22:04
>>397
while( !(p=strstr()) ){
399デフォルトの名無しさん:2009/09/26(土) 13:26:19
わかんなくなったら素直にわけろ
400390:2009/09/26(土) 13:28:35
>>395
>残りの文字列は捨ててしまえばよい

同じ文字列を対象としてsscanfを2回実行するとのこってません?
どうやって捨てるんでしょうか。
401デフォルトの名無しさん:2009/09/26(土) 13:32:45
sscanf()なら残った文字列はfflush()も糞もないだろ
402デフォルトの名無しさん:2009/09/26(土) 13:34:17
>>400
…は?
scanf() じゃなく sscanf() なんだよな?
「残る」といえば元の配列にすべて残ってるし
正直、何を気にしてるのか解らないんだが。
403デフォルトの名無しさん:2009/09/26(土) 13:36:09
消費した分は捨てて残りをさらにスキャンしたいってことだろ
何バイト消費したか知る術を知りたいと
404デフォルトの名無しさん:2009/09/26(土) 13:39:17
それなら変換指定子使わずにstrcspn()使って面倒でも
自前でやるべきだろ
楽をしようとしてかえって苦労してる
405デフォルトの名無しさん:2009/09/26(土) 13:40:18
>>403
それなら %n が使える
406デフォルトの名無しさん:2009/09/26(土) 14:12:12
さっさとstdregex.hつけろって話ですよ
407デフォルトの名無しさん:2009/09/26(土) 14:13:12
それで整数オーバーフローの脆弱性を仕込むですね、わかります
408デフォルトの名無しさん:2009/09/26(土) 15:54:13
if文で条件式が(a || b)の場合
aとbどちらか先に評価されるかってコンパイラによって異なるのでしょうか?
409デフォルトの名無しさん:2009/09/26(土) 15:56:30
異なりません
410デフォルトの名無しさん:2009/09/26(土) 15:59:01
必ずaから評価され、aが真ならbは評価されません
411デフォルトの名無しさん:2009/09/26(土) 16:04:01
>>408
入門者には
短絡評価 - Wikipedia
ttp://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1
ここが分かりやすいだろう。;
412デフォルトの名無しさん:2009/09/26(土) 16:48:15
あれ?
デジャブかな。。病院行くよ
413デフォルトの名無しさん:2009/09/26(土) 16:50:38
if の代わりに使っても処理が速くなったりはしないし、
単に可読性が落ちるだけだから、
上級者きどって多用するようなことはするなよ。

414デフォルトの名無しさん:2009/09/26(土) 16:53:59
>>413
> if の代わりに使っても処理が速くなったりはしないし、
この根拠は?
コンパイラの最適化?
415デフォルトの名無しさん:2009/09/26(土) 16:59:33
compiler で assembler に出力すると使用している CPU も載っていたのですが?
これは source によって 載る 載らない が決まると云う事なのでしょうか?
416デフォルトの名無しさん:2009/09/26(土) 17:03:33
>>415 日本語でOK
417デフォルトの名無しさん:2009/09/26(土) 17:07:03
>>415
どこの国のお方w
418デフォルトの名無しさん:2009/09/26(土) 17:10:10
ルー大柴か
419デフォルトの名無しさん:2009/09/26(土) 18:47:58
>>413
可読性どうこうは状況による。
420デフォルトの名無しさん:2009/09/26(土) 19:00:45
なんらかのポインタをchar *pと宣言して、ここに文字列char[7] = "string"を入れたい場合、
pをmallocするしかないのでしょうか?
421デフォルトの名無しさん:2009/09/26(土) 19:03:56
いいえ
422デフォルトの名無しさん:2009/09/26(土) 19:06:04
ポインタに文字列は入りません。
まあ、4 文字くらいなら無理矢理入るかも。
423デフォルトの名無しさん:2009/09/26(土) 19:07:45
やりたいことを正確に表現できるようになったら、質問する必要もなくなるんだろうけどねえ。
424デフォルトの名無しさん:2009/09/26(土) 19:07:50
こまかいやつがいるなあw
425デフォルトの名無しさん:2009/09/26(土) 19:09:02
大雑把なやつもいるなあ
426デフォルトの名無しさん:2009/09/26(土) 19:10:03
エラーが出るだろ普通
427デフォルトの名無しさん:2009/09/26(土) 19:11:32
>>420
char buf[256];
char *p;

p = buf;
428デフォルトの名無しさん:2009/09/26(土) 19:22:41
>>420
char *p = "string";
429デフォルトの名無しさん:2009/09/26(土) 19:27:56
"string" みたいなリテラル文字列を
書き替え可能な位置に配置するコンパイルオプションってなんだっけ?

これ指定すると、
char *p = "string";
char *q = "string";
みたいな同一内容の文字列リテラルでも別々に用意されるんだよな。
430デフォルトの名無しさん:2009/09/26(土) 19:37:36
>>429
そもそも、コンパイラによってオプションが変わるわけだが。
431デフォルトの名無しさん:2009/09/26(土) 19:38:06
>>429
同一文字列をマージするかどうかって話だろうけどさ、
> 書き替え可能な位置に配置する
そもそも不可能ってか未定義の動作だろ?
432デフォルトの名無しさん:2009/09/26(土) 19:39:37
文字列リテラル領域を別々に用意するのと書き換え可能にするのは別問題
433デフォルトの名無しさん:2009/09/26(土) 20:18:23
書き替え可能にするために別々に用意するんだよ。
昔は書き替えが許可されてたしな。
gcc なら -traditional でできる。
434デフォルトの名無しさん:2009/09/26(土) 20:33:58
>>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ではさらに厳しくなっているようだ
435デフォルトの名無しさん:2009/09/26(土) 21:38:53
#define dTEST test.txt

fp = fopen("dTEST","w");

ってすると
当たり前だがdTESTってファイルができちまう
test.txtを作りたいんだ

""の中でも#defineを使う方法ってあるの?
誰か教えてください

dTESTの定義は変えない方法でお願いします

436デフォルトの名無しさん:2009/09/26(土) 21:48:01
#define TO_STR_CORE(x) #x
#define TO_STR(x) TO_STR_CORE(x)
こんなのを用意しておいて、fp = fopen(TO_STR(dTEST), "w");
このやり方だと、文字列の中に#defineを効かせるというより、#defineで置換した結果を文字列化しているというほうが正確だけど。
437デフォルトの名無しさん:2009/09/26(土) 21:51:04
単純な置き換えコマンド使ったら?
438デフォルトの名無しさん:2009/09/26(土) 21:57:01
まあ、たぶん、だけど
>>435>>436のような「プリプロセッサを駆使してなんとかしたい」ではなく
単に、「dTESTの文字列のファイル名を得たい」だと思うぞ。

もちろん、なんとかして(#を使って)dTESTを文字列化しなきゃならんが
その後はsprintf等でファイル名を作成する等でも充分だと思う。
439デフォルトの名無しさん:2009/09/26(土) 21:59:06
>>435
これは容認できませんか?
http://codepad.org/2vAoTWcb
440435: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);

441デフォルトの名無しさん:2009/09/26(土) 22:14:18
うん
442デフォルトの名無しさん:2009/09/26(土) 22:19:06
>>440
そんなことしなくても

#define dTEST "test.txt"
sprintf(filename,"%02d_" dTEST, num);

これでいいだろ。
443デフォルトの名無しさん:2009/09/26(土) 22:23:23
空白で区切ったリテラル文字列は連結されるよ。
printf("Hell" "o"
","
" "
"World.");
444デフォルトの名無しさん:2009/09/26(土) 22:35:17
>>442-443

あうう・・・知ってたのに全く思いつきませんでした(ノД`)
お恥ずかしいです

これで全部解決です。回答くれた人ありがとう
お騒がせしましたー


445デフォルトの名無しさん:2009/09/27(日) 04:29:26
>>知ってたのに

嘘をつかないように
446デフォルトの名無しさん:2009/09/27(日) 05:17:41
嘘じゃねーよ
447デフォルトの名無しさん:2009/09/27(日) 10:39:55
>>445
いるよねー
そうやって張っても仕方ない見栄を張るヤツwwww

でも今回の彼の言いたいことは
>>文法は知ってたのに
って意味なんじゃないかねぇ?

まあ正確には
>>知ってた(ような気になってた)
だろうな。
448デフォルトの名無しさん:2009/09/27(日) 13:05:39
まあ入門篇なんだから
449デフォルトの名無しさん:2009/09/27(日) 13:10:01
>dTESTの定義は変えない方法でお願いします
じゃなかったのかと。
450デフォルトの名無しさん:2009/09/27(日) 13:15:33
>>448
そうだけど見栄を張るのはおかしいよな。
精神的にも入門編かwwww
451デフォルトの名無しさん:2009/09/27(日) 13:19:23
新入社員だってまずは精神教育だろ
452デフォルトの名無しさん:2009/09/27(日) 13:30:03
精神教育w餃子の王将ですか?
453デフォルトの名無しさん: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);
}
454デフォルトの名無しさん:2009/09/27(日) 13:34:49
宿題は宿題スレへ
455デフォルトの名無しさん:2009/09/27(日) 13:35:33
宿題じゃないです。
独学です。
456デフォルトの名無しさん:2009/09/27(日) 13:40:36
>何がダメか
「サブルーチンの仕方」などという謎の用法。
関数の正しい定義方法。
関数名として認められない例 (途中に空白がある等)。

まあ人に訊くレベルにすら達してない。
457デフォルトの名無しさん:2009/09/27(日) 13:44:51
サブルーチンの定義方法を教えてください!
458デフォルトの名無しさん:2009/09/27(日) 13:48:48
そしてダサい変数名...
459デフォルトの名無しさん:2009/09/27(日) 13:50:54
かっこいい変数名ってどういうのですか?
460デフォルトの名無しさん:2009/09/27(日) 13:51:21
>>453
いろいろ指摘したい点はあるというかありすぎる。
まずはもっとシンプルなサンプル読んで
関数の作り方をちゃんと学んでからにしようぜ。
とりあえずsub 1は駄目。sub1にしとけ。
461デフォルトの名無しさん:2009/09/27(日) 14:16:47
サブルーチンなどという考え方はC言語では既に滅んでいる。
462デフォルトの名無しさん:2009/09/27(日) 14:18:34
えぇぇ!?
まじすか
463デフォルトの名無しさん:2009/09/27(日) 14:22:15
サブルーチンという言葉にはBASICのイメージがある
変数のスコープが甘いというか無いというかw
464デフォルトの名無しさん:2009/09/27(日) 14:29:02
新しい言語を学ぶとき、自分の知っている言語のことはいったん忘れたほうがいい。
異なる言語は異なるパラダイムで設計されているから。
独学ならK&R第2版をまっさらな気持ちで読むといい。
三日でCの初歩が完全に身につく。
465デフォルトの名無しさん:2009/09/27(日) 14:40:37
処理速度が一番早いのtってC?
466デフォルトの名無しさん:2009/09/27(日) 14:50:19
ジャンルによる。科学計算では相変わらずFORTRAN最強伝説。
あと、C言語はプログラマのプログラム以外の知識が低い場合もカスになりやすい。
(ライブラリが充実していないので)
467デフォルトの名無しさん:2009/09/27(日) 15:06:22
C言語「ライブラリが貧弱でサーセンw」
468デフォルトの名無しさん:2009/09/27(日) 15:10:18
Numerical Recipes in C
からパクれ

今や原書はタダで読めるらしいし
469デフォルトの名無しさん:2009/09/27(日) 16:22:08
犯罪を助長する発言は自重して下さい!
470デフォルトの名無しさん:2009/09/27(日) 16:25:32
>>453
maxとminは逆じゃないのか?
471デフォルトの名無しさん:2009/09/27(日) 16:35:05
逆じゃないよ。ちゃんとmaxには最大売り上げが、minには最小売り上げが入る。
疑問を持ったら実際に実行してみよう。

まぁ、このコードはバグだらけ以前の問題なので
実行できないけどw
472デフォルトの名無しさん:2009/09/27(日) 16:37:52
エラーは6個まで減らすことが出来たが、
サブルーチンがやっぱわかんねw
473デフォルトの名無しさん:2009/09/27(日) 17:19:07
>>468
通報した
474デフォルトの名無しさん:2009/09/27(日) 17:49:28
>>470
これはひどい。
475デフォルトの名無しさん:2009/09/27(日) 18:48:49
やばい>>428が理解できない
476デフォルトの名無しさん:2009/09/27(日) 18:57:09
大丈夫
みんな理解できないから
477デフォルトの名無しさん:2009/09/27(日) 18:58:29
>>475
大丈夫。
どちらかというと悪手だから。
478デフォルトの名無しさん:2009/09/27(日) 19:24:29
どちらかというと >>420 の方が理解できないが。
479デフォルトの名無しさん:2009/09/27(日) 19:59:27
if や for で1文だけのときみたいに

int main() return 0;

とすることはできませんか?
480デフォルトの名無しさん:2009/09/27(日) 20:00:17
はい
481デフォルトの名無しさん:2009/09/27(日) 20:10:08
そうしないことはできかねませんね?
482デフォルトの名無しさん:2009/09/27(日) 20:15:28
無理。Cはそういう便利な省略表記を充実させようっていうのはあんまりないんだよ。
483デフォルトの名無しさん:2009/09/27(日) 20:41:59
>>479
{} は
1. 複数の文・式をひとつのブロックとしてまとめる。
  (if, for, while 等)
2. 構文上、必須。
  (switch, 関数, 構造体定義, 配列や構造体の初期値)
の2種類ある。後者は必須といったら必須なの!
484デフォルトの名無しさん:2009/09/27(日) 21:19:12
NULLってどこで定義されてるんですか?
stdio.hなどをインクルードすると定義されてるようですがgrepしても見あたりません
インクルードせずにコンパイルするとNULL
error: 'NULL' undeclared (first use in this function)
485デフォルトの名無しさん:2009/09/27(日) 21:21:00
すみません。誤って投稿してしまいました

stdio.hなどをインクルードせずにコンパイルするとNULLが定義されてないと怒られます
error: 'NULL' undeclared (first use in this function)
コンパイラはgcc 4.2.1です
NULLってどこに定義されてるんでしょうか?
486デフォルトの名無しさん:2009/09/27(日) 21:21:25
>>484
さらに grep で include を探す
487デフォルトの名無しさん:2009/09/27(日) 21:28:55
私の環境 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
488デフォルトの名無しさん:2009/09/27(日) 21:37:59
NULLなんて久しく使ってないな
489デフォルトの名無しさん:2009/09/27(日) 21:56:58
環境によって違うだろうけど、普通は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はまた別のところを参照してね
これ以上はガチ規格準拠スレでやろうか
490デフォルトの名無しさん:2009/09/27(日) 22:07:15
>>489
ANSI Cでは、<stddef.h>のほか、<stdio.h>、<stdlib.h>、<string.h>、<time.h>でもNULLが定義されていることになっている。
491デフォルトの名無しさん:2009/09/27(日) 22:12:05
ソースの頭に
#ifndef NULL
#define NULL 0
#endif
って書いときゃいいけど。
492デフォルトの名無しさん:2009/09/27(日) 22:56:15
ダイテル本の演習問題を全て解けたら、中級者を自認していいですか?
493デフォルトの名無しさん:2009/09/27(日) 23:01:41
いいんじゃないかな。
494デフォルトの名無しさん:2009/09/27(日) 23:13:50
そこは門に続く道への入り口だろ。
495484:2009/09/27(日) 23:52:45
>>486-491
stddef.hからインクルードされるsys/_null.hでNULLが定義されてるのを見つけました
stdio.hとかも同様にsys/_null.hをインクルードしてましたね
あ、OSはFreeBSD 7.2です
すっきりしました。ありがとうございます
496デフォルトの名無しさん:2009/09/28(月) 00:09:55
>>494
今お前が倒したのは、我々の中でも一番の小物だ

的なね。うん。まだまだ先があるんだろうな。
俺はそんなにCはやりこんでないけど。
497492:2009/09/28(月) 10:09:11
なるほど。ダイテル親子のテキストこなしてやっと脱初級者ぐらいなんですね。

今ハノイの塔を再帰で解く問題で詰んでて、これを乗り越えた先に
中級者が見えてるのかなと期待してみたんですが、そう甘いもんじゃないですね。
精進します。
498デフォルトの名無しさん:2009/09/28(月) 10:16:59
それはアルゴリズムの話で、言語に精通してる度合いとはまた別かと
再帰呼び出しを理解しているかどうかに的を絞れば少しは関係するけども。
499デフォルトの名無しさん:2009/09/28(月) 10:19:09
再帰呼び出しは数学的帰納法ってのと同じ考え方にするのが楽
500デフォルトの名無しさん:2009/09/28(月) 12:52:17
0をポインタにした表現はNULL値だってことがどこかに決められいて
それの実装上の表現までは決められてないんだっけ
501デフォルトの名無しさん:2009/09/28(月) 14:32:26
NULL は言語仕様の方に組み込んどいても良かった気がする。
まあ、その場合は null と小文字してほしいが。
502デフォルトの名無しさん:2009/09/28(月) 14:35:02
>>500
うん。NULLの中身がどうであるかは分からないけど、ポインタを0と比較すればおk
ってなんかオウム返しみたいになった
503デフォルトの名無しさん:2009/09/28(月) 22:17:39
#include <stdio.h>
main() {
printf ("hello world\n");
}
504デフォルトの名無しさん:2009/09/29(火) 03:43:24
>>503
釣りの予感。>>503 を叩くと、「これってK&R2」に書いてるんですけど」といって逆襲する、と。
505デフォルトの名無しさん:2009/09/29(火) 04:11:42
>>503
何その糞コード
506デフォルトの名無しさん:2009/09/29(火) 04:20:27
>>505
お約束どおり

「これってK&R2の冒頭にかいてあるんですけれども」
507デフォルトの名無しさん:2009/09/29(火) 04:23:30
>>506
さっさと捨てろ
508デフォルトの名無しさん:2009/09/29(火) 04:27:13
>>507
K&R2を捨てるのですか?
509デフォルトの名無しさん:2009/09/29(火) 04:39:17
>>508
もういらんだろう。ISO/IEC 9899 さえあればいい。
510デフォルトの名無しさん:2009/09/29(火) 04:40:09
-std=c99
511デフォルトの名無しさん:2009/09/29(火) 04:40:59
>>509
でもみんな読んでるんですよ。ISO には規格だけしか書いてないし。
512デフォルトの名無しさん:2009/09/29(火) 04:48:46
それが何か
513デフォルトの名無しさん:2009/09/29(火) 04:50:43
捨てるには惜しいかと。せめて代替となるいい初心者のための教科書を紹介していただけませんか?
514デフォルトの名無しさん:2009/09/29(火) 04:55:20
スレ違い
515デフォルトの名無しさん:2009/09/29(火) 04:58:33
え?入門者が一度は手に取る天下のK&R2を捨てるに値するかどうかを論じているんですよ。これはC言語界にとって大問題ではないかと。
516デフォルトの名無しさん:2009/09/29(火) 05:01:20
気のせい
517デフォルトの名無しさん:2009/09/29(火) 05:05:52
>>515
K&Rってクソじゃねーか!!!!!!!!!!
http://pc11.2ch.net/test/read.cgi/prog/1241453536/l50
518デフォルトの名無しさん:2009/09/29(火) 05:08:07
やはりK&Rはクソなんですね。勉強になりました。
519デフォルトの名無しさん:2009/09/29(火) 05:28:54
K&R を読んだことのない人が多いようですねえ。そんな人にいわれても‥‥‥。
520デフォルトの名無しさん:2009/09/29(火) 05:43:01
言い返す言葉が無くなったんですかねえ。
521デフォルトの名無しさん:2009/09/29(火) 05:48:55
ええ、尽きてしまいましたねえ。www
522デフォルトの名無しさん:2009/09/29(火) 07:05:48
>>515
> これはC言語界にとって大問題ではないかと。

その程度のレベルの低いお前が何を偉そうにwww
523デフォルトの名無しさん:2009/09/29(火) 07:30:09
www
5242:2009/09/29(火) 08:17:54
スレの流れが早すぎる
CよりEmacsの使い方を覚えなきゃいかんみたいだ orz
525デフォルトの名無しさん:2009/09/29(火) 11:23:20
>>524
お好きなところへどうぞ。

俺の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/
526デフォルトの名無しさん:2009/09/29(火) 12:37:00
emacsは変態キーバインドだからいやだ
ものすごい囲い込み戦法で他のエディタが使えなくなる
527デフォルトの名無しさん:2009/09/29(火) 12:39:10
スレタイ100回読んで消えろ
528デフォルトの名無しさん:2009/09/29(火) 13:44:30
現在時刻をファイルに出力したいのですが、
・現在時刻出力
・ファイル出力
は調べても別々ででてきて目的を果せません。。

サンプルおしえてください
529デフォルトの名無しさん:2009/09/29(火) 13:48:23
アホはやめてしまえ
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;
}
531デフォルトの名無しさん:2009/09/29(火) 14:09:17
>>528
#include <stdlib.h>
int main(){return system("time > filename.txt");}
532デフォルトの名無しさん:2009/09/29(火) 14:17:36
>>530
なんでstrftime()使わないの?
533528: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);
}
534デフォルトの名無しさん: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;
}
535デフォルトの名無しさん:2009/09/29(火) 19:31:46
>>534
3,14 3.14
536534:2009/09/29(火) 19:31:50
S = PI * pow(r,2.0);
のところが問題のようです
537デフォルトの名無しさん:2009/09/29(火) 19:32:05
3.14
538デフォルトの名無しさん:2009/09/29(火) 19:32:41
>>534
指定された行?
539534:2009/09/29(火) 19:33:05
>>535
ありがとうございますできました!!
540デフォルトの名無しさん:2009/09/29(火) 20:08:38
3.14
541デフォルトの名無しさん:2009/09/29(火) 20:12:09
#defineの機能がわかっていないように見受けられる
542デフォルトの名無しさん:2009/09/29(火) 20:13:18
>541
#defineの機能ってなに
543デフォルトの名無しさん:2009/09/29(火) 20:20:02
>>542
コードを置き換えてコンパイルさせることでしょ?
544デフォルトの名無しさん:2009/09/29(火) 20:37:29
>>543
後半要らない。
545デフォルトの名無しさん:2009/09/29(火) 20:39:32
単なるカンマとピリオドの打ち間違いなのに、#defineの機能がわかっていないとかw
546デフォルトの名無しさん:2009/09/29(火) 20:42:50
>>545
まぁ、俺だったらまず置換後のコードを疑うからさ
547デフォルトの名無しさん:2009/09/29(火) 20:43:10
もまえら>541をいじめてやんなよwww
さらしあげ
548デフォルトの名無しさん:2009/09/29(火) 21:03:25
質問です
最近C言語を始めたのですがビットフィールドがわかりません
何に使うんですか
549デフォルトの名無しさん:2009/09/29(火) 21:05:35
bool値の格納
550デフォルトの名無しさん:2009/09/29(火) 21:05:56
いまどきの環境なら知る必要はないと思います。
551デフォルトの名無しさん:2009/09/29(火) 21:06:59
ビット単位でデータを扱いたいときに使います。
552デフォルトの名無しさん:2009/09/29(火) 21:09:28
>>548
http://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バイトの中に複数のフラグがたくさん詰まってるデータを操作する時に使ったりする
553デフォルトの名無しさん:2009/09/29(火) 21:12:13
ありがとうございました
やっぱり組込み?とかで使うんですね
必要になったときにまた勉強します
554デフォルトの名無しさん:2009/09/29(火) 21:17:55
>>553
最近C言語始めたなら
当分理解する必要はないと思う。

少なくとも
|とか^とかは||や&&とは違う
ってことだけ知っていれば後は必要になってから理解すれば。

頑張ってね〜!
555デフォルトの名無しさん:2009/09/29(火) 21:32:33
やっぱりわかってなかったか
556デフォルトの名無しさん:2009/09/29(火) 22:15:47
>>548
typedef struct {
    unsigned year: 6;
    unsigned month: 4;
    unsigned day: 5;
    unsigned hh: 5;
    unsigned mm: 6;
    unsigned ss: 6;
} timestamp_t;

年月日時分秒が4バイトで表現できるみたいな?
557デフォルトの名無しさん:2009/09/29(火) 22:58:57
>>554
節子、それビット演算や
558デフォルトの名無しさん:2009/09/29(火) 23:17:44
関数にしないほうが処理速度はやい?
559デフォルトの名無しさん:2009/09/29(火) 23:19:24
>>558
一般的にはそうだけど、そうならないことも多々ある。
560デフォルトの名無しさん:2009/09/29(火) 23:40:29
CPU、コンパイラが高度化複雑化し過ぎて古典的な高速化手法が常に通用するとは限らない。

Q. 〜やると速くなる?

A. 実際に計測して速くなったら速くなり、速くならなかったら速くならない。
561デフォルトの名無しさん:2009/09/29(火) 23:51:11
562デフォルトの名無しさん: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


こんな感じに一つの配列の変数に対して複数の値が持てるのでしょうか?
563デフォルトの名無しさん:2009/09/30(水) 00:17:42
>>562
もてもてです
564デフォルトの名無しさん:2009/09/30(水) 00:23:05
構造体の配列を作ればおk
565デフォルトの名無しさん:2009/09/30(水) 00:24:05
やってみなしゃれ
566562:2009/09/30(水) 00:30:31
>>563
>>564
>>565
ありがとうございます。
構造体配列というやつで可能ということは分かりました。
宣言方法がイミフですが、ありがとうございました。
色々読んでみます。

567デフォルトの名無しさん:2009/09/30(水) 00:31:07
なるほど、配列に入れられる物に制限があるかどうか気になったんだなぁ
568デフォルトの名無しさん:2009/09/30(水) 01:38:55
>この配列bヘ0,1,2,3の4個のボックスになっていて
3個だぞw
569デフォルトの名無しさん:2009/09/30(水) 03:33:04
ファイルが大きくなってしまったので、一部のコードを別ファイルに移して、それをincludeする
形にしようと思うのですが、その際のファイルの拡張子って.hと.c、.cppどちらを使うのが
普通なのでしょうか?
570デフォルトの名無しさん:2009/09/30(水) 03:35:31
C言語なら.c
.cppはC++のコードを書くのに使う
571デフォルトの名無しさん:2009/09/30(水) 03:48:15
しかし通常は.cをincludeはしない
572デフォルトの名無しさん:2009/09/30(水) 04:43:53
俺は.txtにしてるけど
573デフォルトの名無しさん:2009/09/30(水) 04:59:14
コードのインクルードは通常.c
574デフォルトの名無しさん:2009/09/30(水) 05:09:18
includeにはずっと.hを使ってきたけど、いまのところ問題ないよ
575デフォルトの名無しさん:2009/09/30(水) 05:38:40
.hは通常ヘッダ
576デフォルトの名無しさん:2009/09/30(水) 07:17:16
>>569
ヘッダファイル、ソースファイル、分割コンパイル
という用語は知らない?
577デフォルトの名無しさん:2009/09/30(水) 07:58:39
そういやC入門書に #include <process.exe> とかあったっけw
不可能ではないが入門書に書くべきソースじゃないだろとw
578デフォルトの名無しさん:2009/09/30(水) 08:25:08
>>569
ヘッダとソースに分けて分割コンパイルがいいと思う。
579デフォルトの名無しさん:2009/09/30(水) 09:33:52
どうしてもインクルードしたい場合は、単純なテキスト(*.txt)でも単体で使えるソースファイル(*.c)でも
オブジェクトを持たないインクルードファイル(*.h)でもないという意味で*.iにしておくなぁ。
580デフォルトの名無しさん:2009/09/30(水) 10:12:36
.i より .inc をよく見る気がする
581デフォルトの名無しさん:2009/09/30(水) 10:47:03
.iや.incより.cをよく見る
582デフォルトの名無しさん:2009/09/30(水) 10:54:48
.iや.incも.cをよく見るよな
583デフォルトの名無しさん:2009/09/30(水) 10:55:39
あるんだよね、"*.c"をインクルードしたがるプロジェクト。
単体でデバッグできないし、インクルードするソースは一本だけだし、なんでわざわざ分けるのやら。
幾つか理由がはっきりしていたのはこんな感じ。
・インクルードされるソースには手をつけたくない。どうも、他からの流用らしい。
・マルチプラットフォームを意識していた。尤も、他のソースが意識していないので殆ど意味がない。
・インクルードされるソースを他のツールで生成していた。これこそ、拡張子を変えるべきだと思うのだけど。
584デフォルトの名無しさん:2009/09/30(水) 10:59:57
お遊びだけどマクロでlambdaっぽいコードって書けない?
これだとエラーが出る。

#define loop(v, min, max, lambda) for(int v=min; v<=max; v++){ lambda }

main()
{
loop(i, 1, 5, (printf("[%d]\n", i)) );
}
585デフォルトの名無しさん:2009/09/30(水) 11:01:39
他の拡張子はともかく.cか.hのどちらかと言えば.cだな
586デフォルトの名無しさん:2009/09/30(水) 11:04:10
>>584
そりゃそうだ
587デフォルトの名無しさん:2009/09/30(水) 11:10:34
>>586
どうして?
588デフォルトの名無しさん:2009/09/30(水) 11:50:38
>>553
いつもの釣りにしちゃ丁寧だな<ビットフィールド
589デフォルトの名無しさん:2009/09/30(水) 11:54:01
// >>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)));
}
// これなら通った。
590デフォルトの名無しさん:2009/09/30(水) 12:18:17
>>589
ああそういうことか。ありがとう。
結構簡単にできる割に全く使われないねこういうの。
591デフォルトの名無しさん:2009/09/30(水) 12:24:00
#define numberof(array) (sizeof(array)/sizeof((array)[0]))
みたいな、ありがち定型マクロとは違うし

↓のような
#define BEGIN {
#define END }
別言語を真似るようなマクロはやめれ というのは良く聞く話
592デフォルトの名無しさん:2009/09/30(水) 14:54:19
>>591
そんなクソコードあるの!?
初めて知ったよ。
593デフォルトの名無しさん:2009/09/30(水) 15:16:34
#define BEGIN {
#define END ;}
だろぼけ
594デフォルトの名無しさん:2009/09/30(水) 15:19:17
>>569
昔、ソースレベルリンクシステムとか言ってた奴いたよな。
595デフォルトの名無しさん:2009/09/30(水) 15:35:40
BEGIN〜ENDはBシェルのソースで使われてるよ
596デフォルトの名無しさん:2009/09/30(水) 15:57:56
program.h ┬ module_a.h
  │   │  └module_a.c
  │   ├ module_b.h
  │   │  └module_b.c
  │   └module_c.h
  │       └module_c.c
program.c

普通はこんな感じじゃないの?
597デフォルトの名無しさん:2009/09/30(水) 16:35:45
こんなバカな構造が「普通は」か・・・
Cプログラマでございと威張ってる奴の大半はこの程度なんだろうな。
598デフォルトの名無しさん:2009/09/30(水) 16:58:32
こういうこと言う奴って、何が「馬鹿」なのか説明できないよな。
599デフォルトの名無しさん:2009/09/30(水) 17:06:55
このC言語で書かれたソースコードhoge.cをコンパイラgccでコンパイルしてリンカでリンクして実行してください。
っていうのはどうやって 言えばいいでしょうか?

普通に
hoge.cをgccでコンパイルして実行してください
で通じますか?
600デフォルトの名無しさん:2009/09/30(水) 17:16:42
>>598
module_a.h の存在意義は?
もし答えが、「module_a.c *のみ*で使う変数/関数/マクロ/typedefを別ファイルで定義した」
であれば、「バカな構造」だよ。
601デフォルトの名無しさん:2009/09/30(水) 17:17:48
>>599
ビルドしてくださいとかは?
てか何も言わなくてもソース+それなりのMakefileとか何か渡せばあとやることわかるんじゃない?
602デフォルトの名無しさん:2009/09/30(水) 17:19:14
>>599
相手によるけど俺には通じる
単一ファイルで標準ライブラリだけならgcc hoge.c だけで出来るし
-lm のリンクではまる人は何人か見たことはあるが
603デフォルトの名無しさん:2009/09/30(水) 17:21:56
>>600
この図だけじゃ繋がりの向きが不明だろ、
program.h の中で他の 3 つの *.h が #include されてるのかもしれん。
604デフォルトの名無しさん:2009/09/30(水) 17:28:55
program.hと.cが逆じゃね?
605デフォルトの名無しさん:2009/09/30(水) 17:33:16
includeの入れ子は、個人的にはあまりやりたくない
606599: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
608デフォルトの名無しさん:2009/09/30(水) 19:03:07
>>607
columnsというシンボルについて調べる。
あと、スレ違い。
609デフォルトの名無しさん:2009/09/30(水) 19:05:04
リンクミスっているみたいだね
環境依存スレにいってそのソース(全部)をどこかに上げて聞けばいいよ
610デフォルトの名無しさん:2009/09/30(水) 19:06:22
Javaの場合、double型の値をint型にキャストすると余った分は切り捨てられるのですが
Cの場合は切り捨てられずに無関係の場所に書き込まれてしまうのですか?
611デフォルトの名無しさん:2009/09/30(水) 19:14:42
>>610
あなたの考える「Cの場合」のコードを見せてくれよ。
612デフォルトの名無しさん:2009/09/30(水) 19:18:47
double d=3.14;
int i = (int)d; // =3 な適切なキャスト
613デフォルトの名無しさん:2009/09/30(水) 19:36:06
「=3」が人を小ばかにするようながため息に見えたぜw
614デフォルトの名無しさん:2009/09/30(水) 19:46:27
|:3ミ
615デフォルトの名無しさん:2009/09/30(水) 20:51:15
バカボンのパパの鼻に見える。
616デフォルトの名無しさん:2009/09/30(水) 22:05:19
>>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 を使う)
お願いします
618デフォルトの名無しさん:2009/09/30(水) 22:34:54
ここはそんなスレじゃないよ
619デフォルトの名無しさん:2009/09/30(水) 22:36:56
失せろゴミ
620617:2009/09/30(水) 22:39:58
自決しました。
621デフォルトの名無しさん:2009/09/30(水) 22:46:59
622デフォルトの名無しさん:2009/09/30(水) 23:44:51
4バイトの変数に8バイトのデータを格納する裏ワザ

#include <stdio.h>

main()
{
double d = 3.14;
int n;

*((double*)&n) = d;
printf("%f\n", *((double*)&n));
}

3.140000
623デフォルトの名無しさん:2009/09/30(水) 23:55:33
スタック壊れてますよ
624デフォルトの名無しさん:2009/10/01(木) 00:06:27
>>622
何が裏技だアホか
625デフォルトの名無しさん:2009/10/01(木) 00:17:41
          ____
       / \  /\ キリッ
.     / (ー)  (ー)\    <「4バイトの変数に8バイトのデータを格納する裏ワザ」
    /   ⌒(__人__)⌒ \
    |      |r┬-|    |
     \     `ー’´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一””””~~``’ー?、   -一”””’ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ   <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)   
| / / /     |r┬-|    | (⌒)/ / / //       
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/      
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー’´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l  バンバン
 ヽ    -一””””~~``’ー?、   -一”””’ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
626デフォルトの名無しさん:2009/10/01(木) 00:22:33
まあそう虐めるなよ
627デフォルトの名無しさん:2009/10/01(木) 00:41:43
>>622
    _,___            ______       __      ___
    _|  .|   _,-‐ヽ     |      |      |  .|     |   .|
. r‐ ̄'   ――-\  ヽ   _,,==========、     .|   |     |   |
 | __   __   .| l  \ |         ヽ    |   | _、_   .|  .|
  ̄ /  ./  \  | \ .|  ―――>   ,-‐'     .|     ヽ  |  |
  _l  .|   |  .| .|  .|    /    `'、_      \  ./   ノ  .7
  /  ,|  _ノ  | ‐-―   /   _,、_   7        ̄ ̄  __,~   .〉
 ノ  /.|  ̄   _=     /  ._/  .\   ̄~~|    | ̄''"~    /
 `ヽ_ノ \―-'"       \,/    .`‐-――┘    \_____,-‐'
    ___               _,―、_         _,―_____
 ___,|  .L_           / ̄――   .――ヽ     /       .|
 |       .|| ̄ ̄ ̄7  .|____     ___」   ._,、_=========_
 ―┐  .r‐ ̄‐-――_,ノ  | ̄ ̄ ̄'~   .~ ̄ ̄'''>  |          \
   /  /             L_____   ____,ノ  ―――-   ,-‐'
  /  ./r‐―|        _,-‐' ̄'"  .L__       _/    ~ヽ
  /   | |   L____  ./  .r‐-     `ヽ、   ./   _-┐  |..___
 /   | \       |  |    ̄~   _へ_  /  ./  /  \  ~  |
 `―-~  `'―‐-――┘   `‐-、――'"    ̄    ヽ┘    `―――┘
628622: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
              ヽ          /ヽ        /
             ヽ,___,,,/  ヽ,,___,,,/
                   /     |
                /       |
629デフォルトの名無しさん:2009/10/01(木) 04:13:37
チョコクルーラー最強
630デフォルトの名無しさん:2009/10/01(木) 22:40:26
if文の条件に浮動小数型の変数を2で割った余りが0の場合を設定したいんですけど
うまくいきません。どうすればいいですか
631デフォルトの名無しさん:2009/10/01(木) 22:42:21
キャスト
632デフォルトの名無しさん:2009/10/01(木) 22:48:53
浮動小数の割算に余りは出ません。
633デフォルトの名無しさん:2009/10/01(木) 22:53:54
じゃあ割り算の結果の小数点以下が全部0になるときだけ
実行されるような条件どういうふうに書けばいいですか
634デフォルトの名無しさん:2009/10/01(木) 22:56:04
modf
635デフォルトの名無しさん:2009/10/01(木) 22:58:13
やりたいことがわかんねえ。

double d = ・・・;

if ((int)d % 2 == 0) ・・・;

小数部を無視するならこうだけど、こういう意味じゃないんだろ?
636デフォルトの名無しさん:2009/10/01(木) 22:58:35
>>632
intやlongにキャストしてから%使う以外にも、
fmod関数という手があるでしょ。
637デフォルトの名無しさん:2009/10/01(木) 23:01:41
それは浮動小数の割算ではありません
638デフォルトの名無しさん:2009/10/01(木) 23:04:52
>>634-636
modfで出来ました。これは知りませんでした、ありがとうございます
639デフォルトの名無しさん:2009/10/01(木) 23:05:17
どういたしまして
640デフォルトの名無しさん:2009/10/01(木) 23:57:59
どう、いたし・まし・て<「どう(どのように、何を)」+「いたす(「する」の謙譲語)」+「ます(丁寧語を造る助動詞)」+「て(反問的用法の終助詞)」)。
「何を、したというわけでもありませんよ(だから、気になさらないでください)」の意

641デフォルトの名無しさん:2009/10/01(木) 23:59:12
どういたしまして
642デフォルトの名無しさん:2009/10/02(金) 00:50:04
C言語使いはオブジェクト指向が理解できなかった落ちこぼれだと聞きましたが
やはりここにいる皆さんも頭が悪いのでしょうか?
643デフォルトの名無しさん:2009/10/02(金) 00:52:50
>>642 ほどではないけどな
644デフォルトの名無しさん:2009/10/02(金) 00:53:46
>>642
はい、他の皆さんはどうかわかりませんが少なくとも私はあなたが仰る該当者です。
人間年を取ると頭が固くなってしまっていけませんね。
645デフォルトの名無しさん:2009/10/02(金) 01:01:45
理解したからってそっちを選ぶとは限らんだろ。
646デフォルトの名無しさん:2009/10/02(金) 01:07:28
C言語でもオブジェクト指向できるし
C++はオブジェクト指向以外のパラダイムも入っているからねぇ
僕にもC++最強と言っていた時代がありましたが、結局C言語に戻ってきました
でも、C言語にも名前空間とテンプレートが欲しい
647デフォルトの名無しさん:2009/10/02(金) 01:10:40
プログラミングの真髄への道は、Cを学ぶことによって開かれる
648デフォルトの名無しさん:2009/10/02(金) 01:17:24
C++はダメだろjk
649デフォルトの名無しさん:2009/10/02(金) 02:06:12
C++は実装が汚すぎる
650デフォルトの名無しさん:2009/10/02(金) 02:13:58
C使うと不便を感じることもあるけど落ち着くな
Perlも結構落ち着くな
651デフォルトの名無しさん:2009/10/02(金) 02:14:08
そこでC#ですよ
652デフォルトの名無しさん:2009/10/02(金) 02:20:25
イベント処理っぽいの作りたいんだけど、よくわからん。
コールバック? 特定のキー入力があったら、この処理みたいな
サンプルくれ。
653デフォルトの名無しさん:2009/10/02(金) 02:23:05
>>652
C言語の仕様外の話だな
OSとかの情報がないとどうにもならんし
専用スレへ行ったほうがいいな
654デフォルトの名無しさん:2009/10/02(金) 02:27:25
コンソールアプリなら標準じゃないけどgetchでどうにかなると思う。
cursesってよく知らないけどこういうのも長けてんのかな
655デフォルトの名無しさん:2009/10/02(金) 02:27:51
>>653
ごめんごめん。
Linux(Fedora11)でgccを使ってる。
どーにも理解できん。
656デフォルトの名無しさん:2009/10/02(金) 02:33:07
>>654
cursesってどっちかって言うと画面制御系かと
思ってたけど違う? それにgetchってループで
まわして処理するよね? そうでなくて、「割り込み」
っぽいのしたいんだけど、良かったら教えて。
657デフォルトの名無しさん:2009/10/02(金) 03:00:45
イベント処理と割り込みは関係ねーよ。
Windows のメッセージ処理だって割り込みなんかしてないし。
658デフォルトの名無しさん:2009/10/02(金) 03:18:17
割り込みなら Ctrl-C があるだろ。
それ使えよ。
659デフォルトの名無しさん:2009/10/02(金) 03:22:49
スレッド使って割り込むんですかわかりません><;
660デフォルトの名無しさん:2009/10/02(金) 03:23:24
>>657
初心者なもので、用語を間違って使っていたら謝る。
>>658
そのシグナル使いたくない理由があるんだ。

ちなみにGUIは難しすぎるんで、コンソールアプリなんだ。
誰か教えてくれ。
661デフォルトの名無しさん:2009/10/02(金) 03:29:10
やりたいことが分からんから答えにくいが、
たぶん、kbhit() と getch() で出来るんじゃないか?
662デフォルトの名無しさん:2009/10/02(金) 03:29:33
>>659
そんな高度な技になるのか・・・
素人にゃ無理っぽいな。
663デフォルトの名無しさん:2009/10/02(金) 03:37:01
説明不足でほんとすまん。
libmad使ってコンソールで動くMP3プレイヤーを
作ろうと思ってるんだ。 サンプルのminimad.cみながら
なんとか音出すところまではできたんだけど、演奏中に
他の処理(スキップとかボリュームとか)させるには
どうしたもんかと悩んでるんだ。
なんかどっかにいいサンプルコードでもないもんかな?
664デフォルトの名無しさん:2009/10/02(金) 03:41:22
>>656
割り込みでなければならない理由は?
たとえばこのアプリのこのような処理、という具体例はあるかな。
例:IEでページ読み込み中に×を押したら中断するような感じ
  →スレッド終わらせてるだけ。シングルスレッドでやるなら随時×ボタンが押されたかどうかを見ることで解決
665デフォルトの名無しさん:2009/10/02(金) 03:51:06
>>664
>>663にも書いたけど、MP3演奏中に[P]キーで停止、
[F]キーで次のファイル、[R]キーで前のファイル、
といったイメージなんだけど、それって割り込みしないと
いけなくない? もしかして根本的に間違ってる?
666デフォルトの名無しさん:2009/10/02(金) 03:51:35
処理Aをしている途中で処理Bをするためには、処理Aを止めなければならない
処理Aを止めるためには処理Aを操作可能な状態にいなければならない
そのためには、処理Aを別スレッドで動かす、もしくは処理Aが自発的に止まるようにする
667デフォルトの名無しさん:2009/10/02(金) 03:53:21
>>665
ごめん、入れ違いになったね。
そのライブラリにコールバック関数を渡すことはできないのかな。
668デフォルトの名無しさん:2009/10/02(金) 03:57:22
非同期の演奏モードは無いのか?
同期しかないなら、それは演奏中に止めたりするようにできてないのか?
非同期で演奏できるなら普通に制御できるだろ。
669デフォルトの名無しさん:2009/10/02(金) 04:03:04
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.
*/
ってなってるからここで随時操作されたかどうかをチェックすればいいんでないの?
670デフォルトの名無しさん:2009/10/02(金) 04:05:49
なんだよ、ちゃんと用意されてるんじゃねーかよ。
時間無駄にしたわ。
671デフォルトの名無しさん:2009/10/02(金) 04:06:06
>>667
もしできたら↓ダウンロードしてみてもらえる?
ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz
この中にminimad.cってサンプルがあるんだけど
演奏中(decodeファンクション中)に自前の
MAD_FLOW_STOPを送りたかったらどうすんの?
「コールバック関数」をしっかり理解できてないから
なんだろうけど、ちんぷんかんぷんで・・・

>>668
非同期モードか・・・ 調べてみるよ。
672669:2009/10/02(金) 04:09:02
ああ、ついクセでメッセージキューがあることを期待してしまった
673デフォルトの名無しさん:2009/10/02(金) 04:09:19
>>669
outputファンクションの中でgetch()なりなんなりで
入力があったかどうかを調べろってことなの?

>>670
すまん・・・
674669:2009/10/02(金) 04:14:09
>>671
ほんとに雑にしか見てないけど-DUSE_ASYNCで非同期になるんでないのかね。
675669: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が何かはわからんが。
676デフォルトの名無しさん:2009/10/02(金) 04:30:36
探し方が悪いのか、頭が悪いのか、このlibmadってドキュメントが
見つかんなくてさ。 とにかくoutputの中でキー入力を見張って
MAD_FLOW_STOPを送るような感じでやってみるよ。
アドバイスありがと。 またわかんなくなったら来るからよろしく。
677デフォルトの名無しさん:2009/10/02(金) 04:33:11
コールバック関数というのは、時間のかかる処理A(たとえばdecode関数)のようなものを実装するときに、
処理を取られっぱなしになると困るであろうということから、処理Aの中で定期的に呼び出す関数のこと

このとき、コールバック関数のインターフェイスのみが提供され、その実装は使用者にゆだねられる。
mad_decoder_initの第3パラメータ以降はすべてタイミングの異なるコールバック関数。
678デフォルトの名無しさん:2009/10/02(金) 04:38:51
確かにドキュメント見あたらんね。
俺もコメント見ながら話してるだけだし、あんまり当てにならないかもよ。

>>672で言いたかったのは
ouputの中でgetch使うと何かキーを押すまでそこで処理が止まっちゃうよということ。
kbhitで判定すれば取れるかも?
679デフォルトの名無しさん:2009/10/02(金) 05:04:25
でしょ〜。
参考にできるのがそのminimad.cくらいで、他に
解説がない。 初心者にはつらいよ。
せてももっとサンプルコードがあると助かるんだけど。
ソースコード読めってことなのか・・・
680デフォルトの名無しさん:2009/10/02(金) 11:19:50
>せてもも
???

作った奴には聞けないのかね。
681デフォルトの名無しさん:2009/10/02(金) 15:08:53
せめてもっとのミスだろ
682デフォルトの名無しさん:2009/10/02(金) 15:36:22
彼氏がC++つかってた。別れたい…
C++だとC厨とか呼ばれてCOBOL厨並みに恥ずかしいww
下向いちゃうしww
彼にはせめてVB使って欲しい・・・
友達とかに彼のこときかれたら・・・・もう最悪ww
せめて普通にVBやJavaぐらいは使って欲しい。
常識的に考えて欲しいだけなんです!
彼がC厨だとばれた時の恥ずかしさとか分かる?
あのね?たとえば週末10〜20人ぐらいでバーベキューとか行くでしょ?
それぞれ彼氏と一緒来るわけじゃない?
みんなの彼氏たちは普通に医者だとか弁護士だとか商社マンとかなわけでしょ?
C厨と一緒だと大恥かくでしょうがww
683デフォルトの名無しさん:2009/10/02(金) 15:38:20
intへのポインタ とか doubleへのポインタ といった宣言をしますけど
これって所詮は全てポインタでありアドレスなんだから、分けて考える必要って無いように思うのですが、
このような考え方は何か間違ってるでしょうか?

文字列にしても配列にしても、先頭のアドレスを指してるだけで配列自体は長さすら認識してないわけだから
int型へのポインタと配列へのポインタすらも区別は必要ないように思えます。
684デフォルトの名無しさん:2009/10/02(金) 15:39:35
>>682
別れればいいじゃん?
なぜそんな彼氏にしがみついてるのか理解できない
685デフォルトの名無しさん:2009/10/02(金) 15:44:50
>>683
もう一回 配列 と ポインタ の違いを確認するべし

int a[5]; で sizeof(a) はどうなる?
int *p; で sizeof(p) はどうなる?
686デフォルトの名無しさん:2009/10/02(金) 15:47:03
>>683
アドレスの値だけが重要であってその中身を問わないならその通りだが、実際にアドレスをそんな風に使うことは滅多にない
アドレスは、いずれその中身を参照するために保持しているのが普通だ
だったら、その型が何なのか、示されている方が扱いやすい
配列の長さがわからないのは不便だとは思うが、実は配列の長さを明示できるポインタの型もある
int (*p)[10] みたいな・・・ ただ長さが固定の配列へのポインタは思うほど役に立たないと思われ
687デフォルトの名無しさん:2009/10/02(金) 16:15:05
分けて考えないと、一々アドレスを指定して、そこから何バイト読むか指定して、
データの型を指定して、って面倒な処理をしなきゃいけなくなるだろ。
688デフォルトの名無しさん:2009/10/02(金) 16:17:36
unsigned char data[65536];
ここにデータ配置してすらすらプログラミングできない奴は頭が悪い。
689デフォルトの名無しさん:2009/10/02(金) 16:25:23
メモリアロケータを自作しろという話ですね、わかります
690デフォルトの名無しさん:2009/10/02(金) 16:26:45
>>687
qsort のように、型が確定してないインターフェースの関数を実装する場合には
そうするしかないやね
691デフォルトの名無しさん:2009/10/02(金) 16:45:48
>>682
なんだっけ、軽自動車だっけ
692デフォルトの名無しさん:2009/10/02(金) 16:47:18
>>683
配列へのポインタから配列の長さを知ることはできるよ
693683:2009/10/02(金) 16:51:12
>>685
試してみましたが、
sizeof(a) => 20
sizeof(p) => 4
でした。両方4になると思ってましが何か色々と自分の知識不足のようです。。

char c1[10] = "りんご";
char *c2 = "みかん";
どっちもchar型配列だけどc1は自分の長さを知っていて*c2は自分の長さを知らない、ということかな。

>>686
>>687
なるほど…参照先を読み出す時に、ポインタ自身が参照先の型を知っていることが役に立つんですね。

レスありがとうございました。
694683:2009/10/02(金) 16:52:17
というか考えてみれば、c2の場合、与えられる文字列によってその都度c2の長さが更新されるってのも無理な話ですね。
695683:2009/10/02(金) 16:53:41
>>692
それが当てはまるのは、配列が長さを指定して宣言された場合のみ、という認識で合ってますでしょうか?
696デフォルトの名無しさん:2009/10/02(金) 16:57:18
何か色々と勘違いしてるようなw
697デフォルトの名無しさん:2009/10/02(金) 17:01:13
sizeof に括弧つけるんじゃねーよ。
698デフォルトの名無しさん:2009/10/02(金) 17:02:08
> char c1[10] = "りんご";
> char *c2 = "みかん";
> どっちもchar型配列だけどc1は自分の長さを知っていて*c2は自分の長さを知らない、ということかな。

ちがう
c1 は char型の配列 (で char を 10個収められる器がある)
c2 は char型のポインタ

c1++ は文法エラーになるが c2++ は文法エラーにならない
699デフォルトの名無しさん:2009/10/02(金) 17:08:32
char c1[10] = "りんご";
char *c2 = "みかん";

c2++とか出来て便利
c1++はできない
700デフォルトの名無しさん:2009/10/02(金) 17:09:17
>>697
ごめんよ ごめんよ

sizeof unary-expression
sizeof(type-name)

だったか
701デフォルトの名無しさん:2009/10/02(金) 17:19:06
入門スレといえど最低限の知識は見つけてから質問しろよ
ほんと最近ゆとりが万延してるな
702デフォルトの名無しさん:2009/10/02(金) 17:33:00
何が最低限かというのは人によって違うと思う
もうちょっと具体的に言うべき
703デフォルトの名無しさん:2009/10/02(金) 18:07:53
すでに質問者は納得したようだが
>>688を実践してみるのも良い勉強法だったかもしれん
704デフォルトの名無しさん:2009/10/02(金) 18:28:38
>>688の言ってる意味すら分からない俺は最下層プログラマー
705デフォルトの名無しさん:2009/10/02(金) 19:00:36
>>704
つまり、メモリ管理を自分でやれってこった。
例えば整数型が欲しいなら* (int *) (data + 0)、
実数型が欲しいなら* (double *) (data + 8)、
と言う具合だな。
706デフォルトの名無しさん:2009/10/02(金) 20:31:33
昔は64キロバイトの中でやりくりしたもんじゃった
707デフォルトの名無しさん:2009/10/02(金) 20:36:30
あっそう
708デフォルトの名無しさん:2009/10/02(金) 20:40:37
【政治】 麻生前首相 「鳩山政権、いずれ破綻する」(動画あり)★9
http://tsushima.2ch.net/test/read.cgi/newsplus/1254472455/
709デフォルトの名無しさん: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
にするのとでは特に違いはないのでしょうか?
好きな方を使えばいいという感じなのでしょうか?
710デフォルトの名無しさん:2009/10/02(金) 21:17:07
>>709
特に違いはないよ。
どっちかというと無駄なオブジェクトrができなくて良い分、後者の方が効率はよい。
ただしコンパイラの最適化が働けば同じかな。
711デフォルトの名無しさん:2009/10/02(金) 21:48:36
>>710
ありがとうございます
特に気にしなくてもいいんですね
712デフォルトの名無しさん:2009/10/02(金) 22:16:32
変数 r を使う意味について考える習慣が大事という気がする。
その変数を使わなければ行数を節約できるだろう。
だが、変数として名前をつけて管理した方がソースが読みやすくなり、
またデバッガでその変化を追跡するのが容易になったりするかも知れない。
713デフォルトの名無しさん:2009/10/02(金) 22:51:39
関数内でconst int a = 0;と宣言すると
変数aはどこに確保されるのでしょうか?
714デフォルトの名無しさん:2009/10/02(金) 22:58:15
関数内で int a = 0; とした場合と同じような所に
確保される可能性が高いと思われます。
715デフォルトの名無しさん:2009/10/02(金) 22:58:19
>>713
静的領域
716デフォルトの名無しさん:2009/10/02(金) 23:21:47
#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
717デフォルトの名無しさん:2009/10/02(金) 23:59:36
>>716
いや、const変数はアドレス演算子使うかどうかで最適化の結果が変わるんだけど
718デフォルトの名無しさん:2009/10/03(土) 00:01:50
constじゃなくても同じだと思うけど
719デフォルトの名無しさん:2009/10/03(土) 00:04:54
無知無知ギャルが多すぎて困る。
とりあえず貼ってみた。
 ttp://codepad.org/dev6lB77


コンパイル時定数になるとか何だとかはC++からだよね?

まあいいや、おやすみなさい。
720デフォルトの名無しさん:2009/10/03(土) 00:05:34
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
721デフォルトの名無しさん:2009/10/03(土) 00:06:27
>>720
残念ながら定数だけしか使用できません
722デフォルトの名無しさん:2009/10/03(土) 00:10:12
>>721
わかりました

ありがとうございます
723デフォルトの名無しさん:2009/10/03(土) 00:47:05
なんで
delete obj;
のあとに
obj = NULL;
するんですか
724デフォルトの名無しさん:2009/10/03(土) 00:51:11
>>723
なんでこのすれにかきこんだのですか
725デフォルトの名無しさん:2009/10/03(土) 00:51:29
\やだー!/
726デフォルトの名無しさん:2009/10/03(土) 00:51:53
>>723
まともな人はやらないんじゃないの。
727デフォルトの名無しさん:2009/10/03(土) 00:55:42
変数名、関数名、予約語などが大文字小文字の区別をしない開発環境があったら教えていただきたい
728デフォルトの名無しさん:2009/10/03(土) 00:57:54
>>727
そういうCの方言はないと思う。
729デフォルトの名無しさん:2009/10/03(土) 02:37:21
エディタで置換すればいいが
変な癖はつけない方が吉かな
730デフォルトの名無しさん:2009/10/03(土) 02:52:45
>>727
windowsのコマンドライン
731デフォルトの名無しさん:2009/10/03(土) 03:07:35
>>730
何の話をしてるの?
732デフォルトの名無しさん:2009/10/03(土) 03:16:05
>>727
case sensitiveな言語だから、自動で大文字小文字を変更する開発環境を求める感じかね。
VBAのエディタとかはそういうのするけど、Cでは見たこと無い
733デフォルトの名無しさん:2009/10/03(土) 03:18:46
>>719
配列宣言時 要素数指示に使える/使えない ぐらいの差があるからね

const int num = 10;
int array[num];   /* Cは文法エラー C++はOK */
734デフォルトの名無しさん:2009/10/03(土) 03:34:08
>>733
それでもC99なら・・・C99ならやってくれる・・・!!
735デフォルトの名無しさん:2009/10/03(土) 08:48:53
>>731
むしろ >>727 に言ってやれ。

>>734
まあ C99 なら const かどうかも関係ないんだけどな。
736デフォルトの名無しさん:2009/10/03(土) 10:57:57
>>735
C99って、もしかして
int num = foo();
assert(num > 0);
int array[num];
が通ったりするの!?
737デフォルトの名無しさん:2009/10/03(土) 12:24:50
やってみれば分かると思うけど、普通に通るはず。
738デフォルトの名無しさん:2009/10/03(土) 12:32:56
-std=c99でも-std=c89でも通ったよw
739デフォルトの名無しさん:2009/10/03(土) 12:34:27
>>737
ホントだ。
ttp://codepad.org/7VrisE5Y

いつの間にC言語は配列の動的確保に対応して来たんだ!?
Comeauで試してもOKだった。
マジかよ。
740739:2009/10/03(土) 12:36:12
>>738
> -std=c89でも通ったよw
いやwじゃねーだろ
通らねぇよ。
通ったらたまったもんじゃない。

C99ではおkだったなんて。
もうC++ばっかやってるとC言語の躍進についていけなくなるな。
741デフォルトの名無しさん:2009/10/03(土) 13:01:55
int array[10]; としたとき, array と &array って同じ型ですか?
742デフォルトの名無しさん:2009/10/03(土) 13:02:38
>>741
いいえ、ちがいます
743デフォルトの名無しさん:2009/10/03(土) 13:13:17
永遠に抜けない無限ループ作ったとしたら
while(1)よりgotoの方が早い?
744デフォルトの名無しさん:2009/10/03(土) 13:16:17
どっちでも一緒
745デフォルトの名無しさん:2009/10/03(土) 13:22:00
下のプログラム作って実行すると,下の実行結果となるんです.
&arrayのsizeofが,なぜ4(アドレスのバイト数)ではなく10となるんでしょうか?

---プログラム---
char array[10];
printf("%d %d\n",sizeof(array),sizeof(&array));

---実行結果---
10 10
746デフォルトの名無しさん:2009/10/03(土) 13:38:36
>>745
処理系のバグじゃないの?
http://codepad.org/5riQqVfR
747デフォルトの名無しさん:2009/10/03(土) 13:45:52
>>746
どうもありがとう.納得することができました.

ちなみに>>746のプログラムは,俺の使用しているBCC Developer(ver1.2.21)では,
10 10
1 10
となりました.
748デフォルトの名無しさん:2009/10/03(土) 13:50:49
BCCがそう思うんならそうなんだろう 『BCCん中』ではな
AAは無理だった
749デフォルトの名無しさん:2009/10/03(土) 14:03:08
>>738
gccは-pedanticつけないと独自拡張使いまくるからな。
750738:2009/10/03(土) 14:51:35
>>749
-std=c89 -pedantic
でもwarning止まりだね
751デフォルトの名無しさん:2009/10/03(土) 15:56:50
Javaしか知らないので的外れな質問かもしれませんが、
C言語にはJavaにあたるArrayListやLinkedList、Mapといったコレクションライブラリは標準ライブラリとして提供されてないのですか?
自分で一から構造体を定義して連結リストを作って…とやっていくのが王道ですか?
だとしたらすごく大変そうなのですが。。
752デフォルトの名無しさん:2009/10/03(土) 15:57:58
>>751
標準ではないライブラリを使えばいいだけです
753デフォルトの名無しさん:2009/10/03(土) 15:59:14
>>751
C言語じゃないといけない理由がないのであれば、C++でやれば?
754デフォルトの名無しさん:2009/10/03(土) 15:59:26
うん、そうだね
用途に合わせて自分で毎回作るか
自分で汎用的なライブラリを作って使いまわすか
CSTLのようなマクロバリバリのライブラリを利用するか
755751:2009/10/03(土) 16:02:29
なるほどありがとうございます。
Javaと違って個人のスキルが大きく作用しそうですね
756デフォルトの名無しさん:2009/10/03(土) 16:08:23
そうでもないよ。
757デフォルトの名無しさん:2009/10/03(土) 20:08:15
1000個の要素を持つ配列を個用意して、そこに適当に選んだ場所に値を入れて
それをソートし、使う、というプログラムを組んでいます。

今、ある値をその配列の10番目に入れるか、500番目に入れるかで
プログラムの重さが全く違うことに気づきました。
ソートが重くなってるのかと思いましたが、どうやら違うようです。
どうも値を挿入する段階で重くなっているように見えます。

どのような原因が考えられるでしょうか?
758デフォルトの名無しさん:2009/10/03(土) 20:11:58
例えば先頭に挿入したらデータが500分動くだろ。
それで遅くなる。
どういう操作を最も頻繁に行うかで適切なデータ構造は変わってくるよ。
配列が得意なのはランダムアクセス、交換、データの末尾への追加。
挿入削除は遅い。
759デフォルトの名無しさん:2009/10/03(土) 20:24:52
仮想メモリだろ。
760デフォルトの名無しさん:2009/10/03(土) 20:38:22
500じゃなくて1000か
761デフォルトの名無しさん:2009/10/03(土) 21:32:20
>757
"適当に選んだ場所に値を入れる"時に、>758見たいに挿入=後ろにずらしてくのか?
元々その場所に入っていた値が無くなるだけではなくて?

何をしているのか良く分からないのでなんとも言えん
単に新しい値に置き換えてソートしているなら10番目に入れようが500番目に入れようが処理速度に影響無いと思うんだが...
762デフォルトの名無しさん:2009/10/03(土) 22:39:57
>>757
> ソートが重くなってるのかと思いましたが、どうやら違うようです。
> どうも値を挿入する段階で重くなっているように見えます。
その判断の根拠は?
763デフォルトの名無しさん:2009/10/03(土) 22:42:27
配列を動的に確保することって出来ないの?
764デフォルトの名無しさん:2009/10/03(土) 22:43:56
C99使うかかmalloc使うか環境限定でalloca使うか
765デフォルトの名無しさん:2009/10/03(土) 22:49:07
Cのmalloc()嫌だよなあ
解放忘れを必ずと言っていいほどする
やはりC++のコンストラクタ・デストラクタ・クラス・演算子の多重定義が
ないと苦しいわー
766デフォルトの名無しさん:2009/10/03(土) 22:50:53
>>765
いっそわざと開放しなかったんです!
って言い張れば?

どうせプロセスが終了すれば…(ry
っていう輩と一緒になって。
767デフォルトの名無しさん:2009/10/03(土) 22:54:42
そんなあなたにガベージコレクション
768デフォルトの名無しさん:2009/10/03(土) 22:57:00
リソースの開放忘れするような奴はC言語使うな
769デフォルトの名無しさん:2009/10/03(土) 22:57:01
なんでここC++厨が多いの?
770デフォルトの名無しさん:2009/10/03(土) 23:08:30
>>769
所詮C言語は程度がしれてるってことだろ。
771デフォルトの名無しさん:2009/10/03(土) 23:09:55
>解放忘れ
確保した領域がプログラムの終了まで使われる場合はfreeする必要はない。
プログラムの終了と同時に自動的にその領域は解放される
freeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない
772デフォルトの名無しさん:2009/10/03(土) 23:18:32
>>771
>freeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない

freeしたらOSに返す場合もあるよ
WindowsとかWindowsとかWindowsとか
773デフォルトの名無しさん:2009/10/03(土) 23:21:02
>>771
それくらい知ってる。
知らない人もいるかもしれないけど。

> プログラムの終了と同時に自動的にその領域は解放される
別にそんな保証はないだろ。
ただそう言うOSが多いってだけでさ。
適当なことを断定的に言うなよ。
774デフォルトの名無しさん:2009/10/03(土) 23:24:23
>>772
WindowsでもOSに返せない場合があるよな
malloc()した領域が切れ切れにフラグメントしていてブロックに
なっていない場合

2chの専ブラなどで長時間使っていると次第に使用メモリが
増えていくのはそのせいだと思う

しかし未使用ハンドルも一緒に増えて行くのは何とかして欲しい
775デフォルトの名無しさん:2009/10/03(土) 23:26:36
おっさんはすぐどうでもいい雑談はじめるな
776デフォルトの名無しさん:2009/10/03(土) 23:26:56
(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;
}

777デフォルトの名無しさん:2009/10/03(土) 23:27:01
778デフォルトの名無しさん:2009/10/03(土) 23:28:54
>>776
型が違う
779デフォルトの名無しさん:2009/10/03(土) 23:30:58
>>776
(1)のtest[]は関数の終了と同時に消滅するだろ
780デフォルトの名無しさん:2009/10/03(土) 23:34:00
http://questionbox.jp.msn.com/qa304409.html
>mallocにより取得されるアドレスは、データセグメント内のヒープと呼ばれる領域にある。ヒープは、mallocするたびにスタックの方向に拡張されていく。しかし、freeを行なってメモリを解放しても、ヒープ全体が縮小するわけではない。
781デフォルトの名無しさん:2009/10/03(土) 23:36:52
>776
>"HOGE"は静的領域に確保されていない
って話じゃなくて >779 だね
782デフォルトの名無しさん:2009/10/03(土) 23:38:35
>>780
規格書に書いてない情報は信用しない事にしている
783デフォルトの名無しさん:2009/10/03(土) 23:40:46
実装方法はC言語の関知するところではない
784デフォルトの名無しさん:2009/10/03(土) 23:51:31
>>772
もしかして、malloc/freeの実装が単にHeapAlloc/HeapFreeに丸投げの場合のことを言っている?
HeapAlloc/HeapFreeはOSのAPIだけど、
こいつらはよそのmallocと同じように別のAPIで確保したメモリを管理しているだけなので、
「HeapFreeしてもOSに返したりしているわけではないので未使用領域が増えたりするわけではない」
と言い換えができる。
785デフォルトの名無しさん:2009/10/04(日) 00:30:34
じゃあfree()は何のためにあるのさ?
リッチなOSがない組み込み機器だってあるのに。
786デフォルトの名無しさん:2009/10/04(日) 00:30:36
>>776
型ちがいじゃが仕方がない
787デフォルトの名無しさん:2009/10/04(日) 00:35:25
>785
確保した領域を再利用するためだろ
788デフォルトの名無しさん:2009/10/04(日) 00:39:13
>>785
freeのあと、mallocしたら以前mallocで確保した領域と同じ領域が割り当てられるのはよくあること。
789デフォルトの名無しさん:2009/10/04(日) 00:41:16
>>787-788
ならfree()すべきだろ。
790デフォルトの名無しさん:2009/10/04(日) 00:45:54
再利用する場合でもfree()しなくて良いとはだれも書いてないし
791デフォルトの名無しさん:2009/10/04(日) 00:51:32
だね
そもそも俺はfreeすべき派だし
792デフォルトの名無しさん:2009/10/04(日) 00:56:03
だいたい「終了時に解放される」からいい、なんて何の理由にもならない。
年中稼動してるサーバーサイドプログラムとかでそんなこと言ってたら速攻クビだよ。
793デフォルトの名無しさん:2009/10/04(日) 01:03:06
>「終了時に解放される」からいい

いやだから再利用しない限りfree()いらない。だろ?
794デフォルトの名無しさん:2009/10/04(日) 01:06:24
またmalloc解放論争かよ
おまえらヒマですね
795デフォルトの名無しさん:2009/10/04(日) 01:08:22
そして次はcalloc (or memset)初期化論争w
796デフォルトの名無しさん:2009/10/04(日) 01:28:34
>>793
free()が出てくるんだから「いらなくなった時」の話だろが。
プログラム終了時まで永続的に使う領域にfree()が不要なのは当たり前だろ。
797デフォルトの名無しさん:2009/10/04(日) 01:32:14
君ら邪魔
798デフォルトの名無しさん:2009/10/04(日) 01:39:09
>>792
逆に、仕事がある時に起動して仕事終わったらすぐ終了するようなプロセスでは問題ないってことだ。
799デフォルトの名無しさん:2009/10/04(日) 02:11:08
終了
800デフォルトの名無しさん:2009/10/04(日) 02:59:36
>だいたい「終了時に解放される」からいい、なんて何の理由にもならない。


>プログラム終了時まで永続的に使う領域にfree()が不要なのは当たり前だろ。

フフフフフ
801デフォルトの名無しさん:2009/10/04(日) 03:04:41
mmapとかVirtualAllocとか使ったら
802デフォルトの名無しさん:2009/10/04(日) 05:31:37
>>750
pedanticオプションをもう一度勉強してください。
というかその警告内容見てください。
803デフォルトの名無しさん:2009/10/04(日) 05:42:01
>>792とか>>796って
freeしなくていいという話をなんか勘違いしてないか?
804デフォルトの名無しさん:2009/10/04(日) 06:04:16
してないよ
freeは必ずすべき
805デフォルトの名無しさん:2009/10/04(日) 07:14:05
細かくゴチャゴチャとメモリ確保するようなプログラムは
プログラムごと終了してしまった方がいいな。
スタブとして作って、一仕事終わるたびにプログラム終了。これで良い。
806デフォルトの名無しさん:2009/10/04(日) 07:15:06
あなたは人生終了してください
807デフォルトの名無しさん:2009/10/04(日) 08:25:12
>>805
> プログラムごと終了してしまった方がいいな。
えっ?
808デフォルトの名無しさん:2009/10/04(日) 09:13:14
しかしつまらんスレだな
809デフォルトの名無しさん:2009/10/04(日) 09:22:15
>>765
free() 忘れるような人はきっと delete も忘れる。
810デフォルトの名無しさん:2009/10/04(日) 09:30:09
RAIIでおk
811デフォルトの名無しさん:2009/10/04(日) 16:25:12
やはりC#が最高だな
812デフォルトの名無しさん:2009/10/04(日) 16:32:47
>>807
えっ、じゃねーよ。無知は黙ってろ。
813デフォルトの名無しさん:2009/10/04(日) 16:33:38
×プログラムごと終了してしまった方がいいな。
○OSごと終了してしまった方がいいな。
814デフォルトの名無しさん:2009/10/04(日) 16:37:13
値を返さないファンクションを関数と呼ぶのはやめろ。
815デフォルトの名無しさん:2009/10/04(日) 16:38:18
じゃあ何と呼ぶの、そのファンクション(笑)を
816デフォルトの名無しさん:2009/10/04(日) 16:39:18
ファンクション=関数
値を返さない関数を関数と呼ぶのはやめろ?
817デフォルトの名無しさん:2009/10/04(日) 16:41:45
プロシージャとでも呼べばいいのかな
わたしは基本的に値を返さなくてもいい関数でもintを返すように定義しているけどね
関数型やった所為か関数は値を返すものしか考えられない
818デフォルトの名無しさん:2009/10/04(日) 16:42:24
以前から気になっていたのだが、

プログラミング言語でいう「function」は数学の「関数」とはちょっと違うよね?
辞書とか書籍を参考にしてみたけど、「機能」という意味らしいのだが。
実際どっちなの?
819デフォルトの名無しさん:2009/10/04(日) 16:46:03
>>817
ああ、他の言語の話ね
820デフォルトの名無しさん:2009/10/04(日) 16:47:05
>>818
>プログラミング言語でいう「function」は数学の「関数」とはちょっと違うよね?
FORTRAN でいう Function Subprogram は関数ですが何か
821818:2009/10/04(日) 16:49:12
ちょっとパソコン(笑)に詳しい数学の先生が、
大学時代にやったプログラミングの実習で覚えたらしいのだが
「プログラミングは数学なんだよ!関数とかでてくるよ!
だから君も数学勉強しておきなw」

って調子乗ってるからどうにかできないものかと。
関数のことばっかり言ってる。
これがバカの一つ覚えってやつですかね。
822デフォルトの名無しさん:2009/10/04(日) 16:50:05
>>818
数学における「関数」を英語にするとなんていうか知ってるか?
823818:2009/10/04(日) 16:50:40
>>822
function だよ。
824デフォルトの名無しさん:2009/10/04(日) 16:54:46
数学の先生がもしプログラミングを出来なかったらそれこそ恐ろしいがな
たぶん818が知ってる数学の関数のレベルが低いだけだと思う
825818:2009/10/04(日) 16:55:25
俺様が Wikipedia で調べてやったぞ w

> 関数(function)が返す値は戻り値(もどりち)または返り値(かえりち)と呼ばれる。
> functionが関数と訳されるのは、単に機能の実装を行うだけでなく、
> 引数としてとりうる値の集合から、戻り値としてとりうる値の集合への
> 写像のように捉えることができるためである。したがって、ほとんどの
> 命令型プログラミング言語では次の点において数学の関数とは異なる。
>  * 引数が同じでも状況に応じて戻り値が異なる(状態を持つ)
>  * 関数の処理の実行によってシステムに変化が発生する(副作用を持つ)
>  * 戻り値が存在しない場合がある
826デフォルトの名無しさん:2009/10/04(日) 16:55:48
C#やれよ。
面白いぞ。
型とか構造体とか全部objectの派生になってて良く出来てるよ。
827デフォルトの名無しさん:2009/10/04(日) 16:57:39
ああ、粘着し始めた…ガキが
828818:2009/10/04(日) 16:58:35
>>827
どうした?
Wikipedia 様の記事を引用したんだから、ちゃんと反論してよ
829デフォルトの名無しさん:2009/10/04(日) 17:00:07
どうしてこうなった…
830デフォルトの名無しさん:2009/10/04(日) 17:02:44
その引用文の前半部分の日本語読めてるか知らないけど
そういう意味で関数と呼ばれる。調べても分かるようなことを
2chで聞いてから、それに反対するために調べる
おかしいよ
831デフォルトの名無しさん:2009/10/04(日) 17:03:05
wikipediaクソだな。
832デフォルトの名無しさん:2009/10/04(日) 17:08:28
>>825

その言い方は、function に与えられる条件の一部を引数とし、function が生成した結果の
一部のみを戻り値としている。条件空間から結果空間への函数を成している事は事実である。
833818:2009/10/04(日) 17:16:48
>>830
> そういう意味で関数と呼ばれる

ちょっとまってくれ!
俺の質問は、*** 数学の意味での関数か *** ということだったはずだが。
834デフォルトの名無しさん:2009/10/04(日) 17:29:10
>>831
ダメなら編集すればいいだけじゃん
835デフォルトの名無しさん:2009/10/04(日) 17:30:44
wiki荒らしてやるニダ
836デフォルトの名無しさん:2009/10/04(日) 17:33:36
じゃあ本来の順序を無視して、関数という言葉がもとからあったとして
それを数学とプログラミングの一部に当てはめたとしよう
すると関数はもともと同一であったとしても
数学とプログラミングが完全に同一でなければその中で意味も変わるかもしれない

つまりその質問は数学とプログラミングが全く同じかという馬鹿らしい質問なんだよ
プログラミングが証明問題を解くプロセスに似ていたり
時に数学的な考え方が重要であったりしても
数学とプログラミングが全く同じだなんて誰も言えないよ

関数という呼ぶ意図は同じだろうが
それがプログラミングの中でも数学の意味である必要性はない
だからといってその先生は嘘を言ってるわけではない、と思う
837デフォルトの名無しさん:2009/10/04(日) 17:40:44
こんなレベルで言葉の意味にこだわる奴って
アスベスト症候群?だっけ?
838デフォルトの名無しさん:2009/10/04(日) 17:43:33
いや定義にこだわるのは重要だろ
839デフォルトの名無しさん:2009/10/04(日) 17:50:47
>>837
アスペルガーのことかな

「こんなことを勉強して何の役に立つのか」と考える学生が多いから
言っただけだろうに、先生も大変だな。厳密には違うってつっこむなよ
初等数学は諸々の準備段階の話だろ
840デフォルトの名無しさん:2009/10/04(日) 17:58:12
何が正しいか?厳密にはどうなのか?
これらを追求するのはプログラマに限らずコンピュータを仕事とする人の姿勢として大事なことだよ。
何故ならコンピュータは命令されたとおりにしか動かないからな。
841デフォルトの名無しさん:2009/10/04(日) 18:12:33
>>838>>840の言い分は誤謬だろう
対人において常にそうである必要はあるのかという話
人間は大文字と小文字を区別することも同じものとみなすことも出来るし
ソースコードに関わる話でもあるまい
842デフォルトの名無しさん:2009/10/04(日) 18:16:37
命令の正しさは重要ではない
843デフォルトの名無しさん:2009/10/04(日) 18:22:50
>>841
対人のアウトプットもインプットも正しい方が正確に意図が伝わるだろう。
相手の応用力に期待するのは対人能力が低いと言えるな。
844デフォルトの名無しさん:2009/10/04(日) 18:29:31
でも役所の書式は細かすぎてきらい
しかも細かい指定がある部分と書く人にゆだねられる部分があるからだいきらい
845デフォルトの名無しさん:2009/10/04(日) 18:33:34
値を返そうが返すまいが「ファンクション」と呼んで問題はないが、
「関数」と呼ぶ場合は必ず値を返さなくてはならない。

米や芋を「ベジタブル」とするのは問題ない。
しかし、米や芋は「野菜」ではない。
846デフォルトの名無しさん:2009/10/04(日) 18:35:50
C言語はオブジェクト指向が理解できない人たちが残ってる墓場と聞きましたが
やはり先輩方も頭が悪いのでしょうか?
847デフォルトの名無しさん:2009/10/04(日) 18:36:35
狭義にはね
848デフォルトの名無しさん:2009/10/04(日) 18:39:32
>>813
なんだ。理解できていなかったのか。
きみは入門スレに来るのはまだ早いよ。帰んな。
849デフォルトの名無しさん:2009/10/04(日) 18:39:51
そもそもC言語の定義は数学書に載ってないし

C言語のパーサに関数のプロトタイプとかあるので
ほとんど全部関数って呼んでるなぁ俺
850デフォルトの名無しさん:2009/10/04(日) 18:40:24
ファンクションか関数かなんて拘って何か意味あんの?
拘ってる奴だけが勝手に脳内変換して解釈すればいいじゃん
851デフォルトの名無しさん:2009/10/04(日) 18:41:41
「ファンクション」あるいは「機関」と呼ぶべきだな。
「関数」は適切じゃない。
main 機関、printf 機関、問題ない。
852デフォルトの名無しさん:2009/10/04(日) 18:43:01
だから拘ってる奴だけが勝手に誤用だと判断したら
正しく脳内変換すればいいじゃん。だってそれはC言語の定義じゃないから
どっかで身に付けた習慣を人に押し付けられてもね
853デフォルトの名無しさん:2009/10/04(日) 18:44:03
逆に考えるんだ。
「「「値を返さない」という値」を返している」
と解釈するんだ。
「関数」で問題ないよ。
854デフォルトの名無しさん:2009/10/04(日) 18:45:21
>846
>642-646
855デフォルトの名無しさん:2009/10/04(日) 18:45:22
不都合があるときだけ特別に「値を返さない関数」と呼べばいいじゃん
856デフォルトの名無しさん:2009/10/04(日) 18:46:37
言語規格上定義が決まってるのにうだうだ言ってる奴はなんなの
857デフォルトの名無しさん:2009/10/04(日) 18:46:58
つまり FunctionとSubを使い分けるBasicがCよりも正しい(結論)
858デフォルトの名無しさん:2009/10/04(日) 18:54:41
>>853
OCamlのunit型なんかそういう考え方だよねきっと。OCaml使ったことないけど。
859デフォルトの名無しさん:2009/10/04(日) 18:58:01
printf は返値を使ってくれないことが多いな
860デフォルトの名無しさん:2009/10/04(日) 19:42:37
>>857
function と呼んでいる間は値を返さなくても問題ないんだよ。
function を「関数」と訳した瞬間に意味が抜け落ちておかしくなるんだよ。
861デフォルトの名無しさん:2009/10/04(日) 20:01:05
でも関数じゃん
862デフォルトの名無しさん:2009/10/04(日) 20:08:10
規格書で「関数」って言葉を使ってるんだから関数でいいじゃん。
863デフォルトの名無しさん:2009/10/04(日) 20:41:12
値を返さない関数はありえないっていう言語作ればいいじゃん。
864デフォルトの名無しさん:2009/10/04(日) 20:46:05
ライブラリ関数の一部は関数ではなかったのか!
865デフォルトの名無しさん:2009/10/04(日) 20:54:25
>>826
構造体は値型なわけだが。

>>833
JIS Cに於いては、値を戻すかどうかに関わらず「関数」と呼ぶ。
勿論、数学の関数とは無関係で、責任は最初の翻訳者にある。
一方で、値を返さないものを関数とは呼ばない言語が多くあって
それらは数学の関数と同じと考えて差し支えない。

つまりそれが「数学でいう関数と同じものかどうか」は
プログラミング言語次第であって、そもそも最初の >>818
>プログラミング言語でいう
というのがおかしい。
866デフォルトの名無しさん:2009/10/04(日) 21:10:04
>>822>>824

あたりが混乱の原因だと思うけどな
867デフォルトの名無しさん:2009/10/04(日) 21:17:47
正直CよりPascalのほうがなんかかっこいい
868デフォルトの名無しさん:2009/10/04(日) 21:27:09
スマートさならpythonが一番だな
869デフォルトの名無しさん:2009/10/04(日) 21:33:15
functionと関数は違うとか言ってる知ったかぶりな奴は何を根拠に言ってるわけ?
lispなんかだとfunctionは必ず値を返す。
値を返すこと以外が主目的であるような関数は、その目的を副作用として提供するだけで値は常に返す。
870デフォルトの名無しさん:2009/10/04(日) 22:00:04
lispではどうこういわれても、ここはC言語のスレなわけで。
871デフォルトの名無しさん:2009/10/04(日) 22:26:04
ふと思ったんだけど、「式」は値を持たなくてもいいの?
っていうか戻り値voidな関数の呼び出しは、値を返さないけど式と言えるの?
872デフォルトの名無しさん:2009/10/04(日) 22:34:02
「式」に値の意味はない。
こっちは原語でも同様。
873デフォルトの名無しさん:2009/10/04(日) 22:49:14
>>871
値を持つと言うかどうか分からないけど、
少なくとも戻り値voidな関数の呼び出しもCでは式、例えばfree(p);はvoid型の式。
なお、(void)printf("hoge");や(void)0;のようにvoidでキャストしてvoid型の式を作ることも可能。
874デフォルトの名無しさん:2009/10/04(日) 23:13:46
>>873
>(void>printf( ... ) って、単にいにしえの lint をごまかすだけの作法だったような気がするのですが。
875デフォルトの名無しさん:2009/10/04(日) 23:23:20
いやいや、単に「戻り値を見ずに捨てますよ」って明示しなさいなってことだろ >873
lintとかw
876デフォルトの名無しさん:2009/10/04(日) 23:35:25
値は返しますが、その値に意味なんて無いよ!
ってことだろ。
voidの英単語の意味を考えて見れば分かるはず。
>>875さんと俺は同意見だな。
877873:2009/10/05(月) 00:27:07
>>874-845
いやいや、Cの文法上、そうも書けると言っているだけで推奨するorしないという意図はこめていないよ。
878875:2009/10/05(月) 00:35:44
いやいや、>875 は >874 が 「lint」とか書いてたから...ってだけ

>推奨するorしない
とか関係ない
879デフォルトの名無しさん:2009/10/05(月) 00:38:33
処理系によってはvoidと書けば最適化に効果がある
880873:2009/10/05(月) 01:09:52
>>878
ああ、そういうことか。
すまん、ちょっと勘違いしていた。
881デフォルトの名無しさん:2009/10/05(月) 01:16:28
ここで議論しる

【初心者お断り】ガチ規格準拠C専用スレ Part134
http://pc12.2ch.net/test/read.cgi/tech/1246115922/
882デフォルトの名無しさん:2009/10/05(月) 07:02:58
>>881
別にどっちも同じだろ。
ここで何か悪いか?
883デフォルトの名無しさん:2009/10/05(月) 07:40:59
馬鹿がファンクションと関数は違うとか
数学の関数とは違うとか論外なことを言わなければ
議論の必要もない
884デフォルトの名無しさん:2009/10/05(月) 08:43:07
何気に”論外なことを言うと議論の必要が有る”っつってんのがひどい
885デフォルトの名無しさん:2009/10/05(月) 08:49:42
実際そうだよ。現実には無視されて終わりだが
2chでは無視すると粘着するし、相手すると論破するまで終わらない
最悪だよ
886デフォルトの名無しさん:2009/10/05(月) 09:02:16
スルー検定ですねわかる
887デフォルトの名無しさん:2009/10/05(月) 12:39:50
どうしてmalloc+memsetとcallocの議論をしちゃいけないの?
どうして他人の意見を封殺するの?
888デフォルトの名無しさん:2009/10/05(月) 13:52:24
論破されるのが恐いんだろ。
889デフォルトの名無しさん:2009/10/05(月) 13:54:38
realloc して領域が広がった部分を 0 埋めしてくれる関数は欲しい
890デフォルトの名無しさん:2009/10/05(月) 14:01:33
>>887
キリがないから。主に >>888 みたいな奴の所為で。
891デフォルトの名無しさん:2009/10/05(月) 15:05:21
論破できるなら議論もすぐ終わるだろ
892デフォルトの名無しさん:2009/10/05(月) 15:12:15
入門スレで議論するのもどうかと思うんだが
893デフォルトの名無しさん:2009/10/05(月) 15:39:32
正しいことを書いただけじゃ論破にならない。
相手が理解できるようにかみくだいて説明できなきゃ。
まあ、だいたいが説明能力=理解力なんで
ちゃんと理解できてないと説明はできない。
894デフォルトの名無しさん:2009/10/05(月) 16:02:50
>>891
議論で宗教問題が解決するなら戦争なんか起こらんわい。
895デフォルトの名無しさん:2009/10/05(月) 16:15:56
>>894
よくよめ。
宗教論争にまで発展する内容について、論破できるなんて言ってる>>888への皮肉だ
896818:2009/10/05(月) 16:29:27
>>883
あ?何が論外だよ

>>824 がケンカ売ったのがいけねーんだろクソ
897デフォルトの名無しさん:2009/10/05(月) 16:34:02
/(^o^)\
898デフォルトの名無しさん:2009/10/05(月) 16:35:47
おまえらを論破するくらいは楽勝だろ。
899デフォルトの名無しさん:2009/10/05(月) 17:22:40
gotoについて語れよ
900デフォルトの名無しさん:2009/10/05(月) 17:38:56
>899
C言語ので疑似例外処理に使っています
901デフォルトの名無しさん:2009/10/05(月) 17:45:05
お前らBC++5.5でgotoをgo tooと書くとwarningにme tooって表示されるの知ってた?
902デフォルトの名無しさん:2009/10/05(月) 17:45:43
知ってた
903デフォルトの名無しさん:2009/10/05(月) 17:50:32
>>900
setjmp longjmp を使うほどではないけれど ってところ?
904デフォルトの名無しさん:2009/10/05(月) 17:54:26
寂しいならVIPでやれ
905デフォルトの名無しさん:2009/10/05(月) 17:59:54
>903
そう、関数内で閉じる例外のみ
*jmp()は関数外に飛べるけどintというのがなぁ
マクロで覆っても構文が汚くなるのも好きになれない
906デフォルトの名無しさん:2009/10/05(月) 18:26:19
>>899
結論が出てるからつまんない
907デフォルトの名無しさん:2009/10/05(月) 18:36:31
ループが最後まで実行されたときと、途中で抜けたときで分岐するときなんかはgoto使いたくなる。
チキンだからフラグ持たせたり、ループカウンタの判定で処理するけど。
908デフォルトの名無しさん:2009/10/05(月) 18:38:47
フラグとk(ry
やめようきりがない。
909デフォルトの名無しさん:2009/10/05(月) 20:25:23
stdlib.hで宣言されているmalloc(), calloc(), realloc()のいずれかひとつを一度だけ呼び出すことによって、動的に3次元配列(配列の配列の配列)のようなオブジェクトを作るにはどうすればよいか。
3次元配列のようなオブジェクトとは、T ***t = T_allocate_3d_array(width, height, depth);とすることでメモリ上に割り当てられたオブジェクトことである。
910デフォルトの名無しさん:2009/10/05(月) 20:27:20
>>909
そういうときは「教えてください」って言うんだよ
911デフォルトの名無しさん:2009/10/05(月) 20:28:36
>>910
「教えてください」といってみるテスト
912デフォルトの名無しさん:2009/10/05(月) 20:28:42
>>909
アレをアレしてアレすればよい。
913デフォルトの名無しさん:2009/10/05(月) 20:34:12
>>909
int*** cube = (int***)malloc(width*height*depth*sizeof(int));
914デフォルトの名無しさん:2009/10/05(月) 20:34:49
だめだよ、お兄ちゃん
物乞いに餌あげちゃあ
彼らは動物園のゴリラ
さんと同じなんだから
915デフォルトの名無しさん:2009/10/05(月) 20:35:01
単にかけ算した分確保すればいいんでないの?
916デフォルトの名無しさん:2009/10/05(月) 20:40:58
>>913
ばーか、それじゃ4,2,7がほしいとき乗算2回入って遅くなるだろ。t(4,2,7)で直にいじれるようにしろと聞いてんだよ。
917デフォルトの名無しさん:2009/10/05(月) 20:46:40
ID無いからコテハンつけて発言しろよ

>917 オマエモナー
918デフォルトの名無しさん:2009/10/05(月) 20:48:23
あはい
919デフォルトの名無しさん:2009/10/05(月) 21:00:58
>>916
なにをいっているのかわからない
920デフォルトの名無しさん:2009/10/05(月) 21:10:22
状態遷移にしたほーが(ry
しんどいやめましょか
921デフォルトの名無しさん:2009/10/05(月) 22:09:01
最初に
#define で数値を決定したものをにちに変更することは可能なのでしょうか?
たとえば
#define A 5
if(x<4)
このときAの数値を変更

わかりずらかったらすいません
922デフォルトの名無しさん:2009/10/05(月) 22:11:47
>>921
#if というディレクティブはありますね。これを調べてみてください。
923デフォルトの名無しさん:2009/10/05(月) 22:13:35
>>921
#defineはコンパイル時に働くもの。
if は実行時に働くもの。
よって、ムリ。

Aを変数にすべき。
924デフォルトの名無しさん:2009/10/05(月) 22:23:05
お兄たんが>>909ができたら入門卒業だっていってたよ
925デフォルトの名無しさん:2009/10/05(月) 22:24:37
何に使うんだよ
ボクセル分割とかか?
926デフォルトの名無しさん:2009/10/05(月) 22:26:55
>>924
卒業!
malloc(sizeof(T**)*depth+sizeof(T*)*height*depth+sizeof(T)*width*height*depth);
927デフォルトの名無しさん:2009/10/05(月) 22:27:14
何か関数の由来勘違いしてる人が多そうだな

function->函数(中国語の音訳)->関数(日本語の当て字)
だぞ

したがって別に値を返そうが返すまいが
functionを関数と呼ぶのは理にかなっている
928デフォルトの名無しさん:2009/10/05(月) 22:30:28
>>921
プリプロセッサ命令
ttp://www.cppll.jp/cppreference/preproc.html
とりあえずここを読みましょう。
929デフォルトの名無しさん:2009/10/05(月) 22:44:07
さすが>>926、卒業だな。
ついでに3次元配列のように使うサンプルコードがあればなおよかった。
930デフォルトの名無しさん:2009/10/05(月) 23:41:24
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
931デフォルトの名無しさん:2009/10/05(月) 23:42:48
>>930
大して役に立たない。

初心者は気にしないでよい。

それよかとにかくひたすらポインタになれる事にのみ
全力をそそごう。
932デフォルトの名無しさん:2009/10/05(月) 23:56:25
>>930
マシン語に近いところをいじれるのが売りという時代もあった
ポインタにしてもマシン語から考えればなんでもない話
933デフォルトの名無しさん:2009/10/05(月) 23:56:45
>>930
そのコピペを作るのに役立ちました
934デフォルトの名無しさん:2009/10/05(月) 23:58:15
ここはレベルの低いインターネットだな
935デフォルトの名無しさん:2009/10/05(月) 23:59:43
だからコテ付けろと何度いえばわかるんだ
936コテ付けました:2009/10/06(火) 00:01:21
>>934
いえ、ハイレベルのインターネッツです
937はいわかりました:2009/10/06(火) 00:02:35
>>935
コテつけたらどうなるんですか
ID強制表示の話じゃないんですか
938もももも:2009/10/06(火) 00:07:18
ああああ
939デフォルトの名無しさん:2009/10/06(火) 00:22:26
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;
}
}
940デフォルトの名無しさん:2009/10/06(火) 00:23:19
while(eof == 0){
941デフォルトの名無しさん:2009/10/06(火) 00:24:44
あぁ、、、、
有難うございます・・・。
942やじうまワイド:2009/10/06(火) 00:26:26
コテつけろよ!
っておっしゃってますよ
943デフォルトの名無しさん: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]);
}
}
}
944デフォルトの名無しさん:2009/10/06(火) 01:12:40
されるだろ。
945デフォルトの名無しさん:2009/10/06(火) 01:17:11
>>943
何がしたいのか分からん

h が初期化されていない
1 は文字じゃない
putchar('\0'); しか実行されない
946デフォルトの名無しさん:2009/10/06(火) 01:37:30
>>945
すまん、何するか言うの忘れてた

1~30までの数字を28個打って、
残った二つの数字を出力するっていうプログラム

俺は数字が出てきたところに1を入れて、
下のループで0が入ってる数字を出力してるんだが、
何でputchar(\0);しか実行されないのかわからない
あと、h[30]の時点で、配列には0が入ってるんじゃないんですか?
h[30] = 0ってしてもだめだったんですが・・・。
947デフォルトの名無しさん:2009/10/06(火) 01:50:54
int h[30] = {0};
これで全部0になるよ
948デフォルトの名無しさん:2009/10/06(火) 01:52:29
> h[30]の時点で、配列には0が入ってるんじゃないんですか?
はいってません。
memsetでもつかえ。

あと2回目のループで出力したいのはh[a]ではなくて、aの値じゃないのか。
949デフォルトの名無しさん:2009/10/06(火) 02:15:15
>>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);
}
}
}
950デフォルトの名無しさん:2009/10/06(火) 02:43:16
変な数字入れたんだろ。
ついでに、表示だが、
それだと強制終了の原因にはならないが
期待通りの結果にもならないだろうな。
951デフォルトの名無しさん:2009/10/06(火) 02:44:27
putcharは変数の値を出力する関数じゃねえつーの!

for(a = 0;a < 29;a++){
は0〜28までしか回らないけどいいのか?
952デフォルトの名無しさん:2009/10/06(火) 02:51:17
今の僕には理解できな〜いー♪
953デフォルトの名無しさん:2009/10/06(火) 03:13:15
もうちょっとヌルい所からやったほうがいいよ。
こういうのは結局は段階だからさ。
順番にやっていけば出来るようになってるって奴だから。
954デフォルトの名無しさん:2009/10/06(火) 03:46:23
h[b] = '1';
955デフォルトの名無しさん:2009/10/06(火) 04:02:49
いやいや、そこはフラグだから。
数字入れちゃだめだろ。
数値入れないと。
956デフォルトの名無しさん:2009/10/06(火) 04:04:21
for(a=0; a<30; a++) if(!a[h]) printf("%d", a);
957デフォルトの名無しさん:2009/10/06(火) 04:06:00
putchar(a);
->
printf("%d\n",a);
958デフォルトの名無しさん:2009/10/06(火) 04:06:06
>>955
別に数字入れても動作はかわんねーだろ
0かそれ以外で判定してるんだから
まあ数字にする意味はないけどなw
959デフォルトの名無しさん:2009/10/06(火) 07:03:09
このスレってまともに規格を知らない奴らが多すぎないか?

 【初心者お断り】ガチ規格準拠C専用スレ Part134
 http://pc12.2ch.net/test/read.cgi/tech/1246115922/
確かにこういうスレはあるが、
だからといってこのスレで
厳密規格準拠議論をしてはならないわけではないよな?
むしろプログラミング言語の議論なんだから
標準規格の話題が出て来ない方がおかしい。
960デフォルトの名無しさん:2009/10/06(火) 07:07:24
>>780
>>881
とかね。
961デフォルトの名無しさん:2009/10/06(火) 07:23:56
>>959
スレ違い
962デフォルトの名無しさん:2009/10/06(火) 08:59:46
>>959
>このスレってまともに規格を知らない奴らが多すぎないか?
スレタイからして止むを得まい。
963デフォルトの名無しさん:2009/10/06(火) 09:11:40
このスレが初心者お断りなら、そういう不満も受け付けるけどね
964デフォルトの名無しさん:2009/10/06(火) 09:23:13
C使うヤツはバカ
965デフォルトの名無しさん:2009/10/06(火) 09:27:05
と言う奴に限って雑魚
966デフォルトの名無しさん:2009/10/06(火) 09:41:21
具体的なことは何も言えないやつに限って、こういうことででかい態度を取りたがるw
967デフォルトの名無しさん:2009/10/06(火) 09:48:56
誰でも一度は思っただろう

C言語
 ↓
Cランゲージ
 ↓
シーランゲージ
 ↓
知らん刑事
968デフォルトの名無しさん:2009/10/06(火) 10:28:34
ないない
969デフォルトの名無しさん:2009/10/06(火) 10:49:36
>>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件
971デフォルトの名無しさん:2009/10/06(火) 12:51:03
"C" で検索しろよ。
972デフォルトの名無しさん:2009/10/06(火) 16:09:35
オススメのエディタ教えてくれ
973デフォルトの名無しさん:2009/10/06(火) 16:11:31
notepad
974デフォルトの名無しさん:2009/10/06(火) 16:14:32
cat
975デフォルトの名無しさん:2009/10/06(火) 16:17:21
EDIT/LSE
976デフォルトの名無しさん:2009/10/06(火) 16:23:53
EDLIN
977デフォルトの名無しさん:2009/10/06(火) 16:53:30
wordmaster
978デフォルトの名無しさん:2009/10/06(火) 17:06:18
Turbo Pascal
979デフォルトの名無しさん:2009/10/06(火) 17:22:21
Visual C++
980デフォルトの名無しさん:2009/10/06(火) 17:44:05
今使ってるエディタの不満点を言わなきゃわからんよ
981デフォルトの名無しさん:2009/10/06(火) 18:33:48
linuxで自動インデント機能があるエディタある?
982デフォルトの名無しさん:2009/10/06(火) 18:34:46
>>981
vim とか
983デフォルトの名無しさん:2009/10/06(火) 18:38:41
>>981
wineでWindowsのソフトを動かすのもお薦め。
984デフォルトの名無しさん:2009/10/06(火) 18:44:59
たまにあるんだよな。
自動インデントする代わりにタブ入力できなくなってるとかのオレルール押し付けエディタが。
985デフォルトの名無しさん:2009/10/06(火) 18:46:57
気に入らないエディタは使わなければいいだけなので、そのようなエディタが世の中に存在していても特に害は無い
986デフォルトの名無しさん:2009/10/06(火) 18:47:34
>>985
> そのようなエディタが世の中に存在していても特に害は無い
誰も害があるなんて 言ってないだろwww
987デフォルトの名無しさん:2009/10/06(火) 18:50:13
ってゆーか、オレルール作らないとvimもemacsも使いづらいよね。

使いづらかったら使いやすいようにすればいい。そのためにカスタマイズできるようになっているんだから。
988デフォルトの名無しさん:2009/10/06(火) 19:08:00
>>984
そんなエディタがあるの?
989デフォルトの名無しさん:2009/10/06(火) 19:11:05
入力ミスを指摘してくれるようなエディタってある?
990デフォルトの名無しさん:2009/10/06(火) 19:22:16
>>988
TABキーをインデントに割り当てているからTABコードの入力はエスケープしないといけないエディタならあるね。
決して押し付けているわけではないだろうけれど、調べることもできない>984のような人には押し付けに感じるのかもしれない。
991デフォルトの名無しさん:2009/10/06(火) 19:23:38
992デフォルトの名無しさん:2009/10/06(火) 19:35:31
VIPでやれ
993デフォルトの名無しさん:2009/10/06(火) 19:37:49
994デフォルトの名無しさん:2009/10/06(火) 19:38:26
>>991
帰れ!
995デフォルトの名無しさん:2009/10/06(火) 19:46:58
>>989
求める物のレベルが分からないけど、まぁ、ある。
996デフォルトの名無しさん:2009/10/06(火) 19:49:18
知能が低いのはどうしようもないな
997デフォルトの名無しさん:2009/10/06(火) 19:51:24
あら、次立たないのか
まぁそれはそれで構わないけど
998デフォルトの名無しさん:2009/10/06(火) 20:17:03
>>981
emacs/mule はデフォではいっていませんかね
999デフォルトの名無しさん:2009/10/06(火) 20:27:11
>>1000に俺の童貞をプレゼント
1000デフォルトの名無しさん:2009/10/06(火) 20:39:10
viでオートインデントできるよ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。