トップページ⇒tech
1001コメント260KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG?DIA(320721)
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
0002デフォルトの名無しさん2009/09/17(木) 11:30:54
Hello worldから教えてください先生
マジレスきぼん
0003デフォルトの名無しさん2009/09/17(木) 12:19:58
#include <stdio.h>
int main(){
puts("Hello, World!");
return 0;
}

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

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

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

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

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

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


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

ttp://codepad.org/9Bt3TGvw

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

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

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

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

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


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

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

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

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

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

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

バイナリーファイルをc言語形式のデータに変換後、コンパイルしてリンク
すると時間がかかるので、バイナリファイルを直接、20000hにリンカで配置
できないかと思いまして質問してみました。
0104デフォルトの名無しさん2009/09/19(土) 22:35:43
>>103
リソース?
0105デフォルトの名無しさん2009/09/19(土) 22:37:24
>>99
それでも駄目だった
コンパイラ変えるしかないか
0106デフォルトの名無しさん2009/09/19(土) 22:46:17
そのコンパイラは標準に準拠していない
コンパイラ名とそのバージョンを教えてくれ、避けるようにするから
0107デフォルトの名無しさん2009/09/19(土) 22:47:20
while ( (a = b) != 0 )
0108デフォルトの名無しさん2009/09/19(土) 22:47:58
>>96
警告をエラーにするオプションつけてるんじゃないの?
0109デフォルトの名無しさん2009/09/19(土) 22:56:19
なんだかよく分からないけどコンパイラはBorland C++ Compiler5.5
あとウィンドウズ用のgccってMinGWってやつでいいの?
0110デフォルトの名無しさん2009/09/19(土) 23:03:34
VC++が無難
0111デフォルトの名無しさん2009/09/19(土) 23:25:41
いくらBCCでも()で括れば警告消えるはずだが。
0112デフォルトの名無しさん2009/09/19(土) 23:31:00
while (a = b, a)
でも良い。若干意味は変わるけど。
0113デフォルトの名無しさん2009/09/19(土) 23:32:09
>>109
確かにそうですね。。。
ありがとうございました。
0114デフォルトの名無しさん2009/09/19(土) 23:45:56
>>82
あれあれ、なんかしらんが1970年と勘違いしてた
訂正ありがとう
0115デフォルトの名無しさん2009/09/20(日) 00:01:57
すいません
ビルドはうまく行くんですけども入力が通らないんです
http://uproda.2ch-library.com/lib170895.c.shtml

試験の成績(ABCDF)を入力してください
入力を終了するには、EOF文字を入力してくださ
A
成績を表す文字が正しくありません
もう一度入力してください
成績を表す文字が正しくありません
もう一度入力してください
^Z

成績の集計結果
Aの数→0
Bの数→0
Cの数→0
Dの数→0
Fの数→0
続行するには何かキーを押してください . . .
このようになってしまいます
0116デフォルトの名無しさん2009/09/20(日) 00:04:16
すいません自己解決しました
0117デフォルトの名無しさん2009/09/20(日) 00:05:25
>>115
ふざけんな
ここに貼れ。
C code - 45 lines - codepad
ttp://codepad.org/ZQpaxLqh

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

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

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

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

printf("少数点第二位切り捨て後%f",p);
0145デフォルトの名無しさん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;
}
0146デフォルトの名無しさん2009/09/21(月) 03:22:31
>>145
ありがとうございます。
0147デフォルトの名無しさん2009/09/21(月) 03:25:45
もう一つ

#include <stdio.h>
#include <math.h>

int main(void){
float p = 123.456789, q;

q=p-fmodf(p, 0.01);
printf("小数点第二位切り捨て後%.2f",q);

return 0;
}
0148デフォルトの名無しさん2009/09/21(月) 09:39:15
sizeof(void*)とサイズが同じであることが保証された整数型って何かありますか?
0149デフォルトの名無しさん2009/09/21(月) 10:07:17
>>148
#include <inttypes.h>
intptr_t
uintptr_t
0150デフォルトの名無しさん2009/09/21(月) 10:16:49
int型の5をcharの5(x35)にするには?
0151デフォルトの名無しさん2009/09/21(月) 10:25:03
>>150
int n = 5;
char c = '0' + n;
0152デフォルトの名無しさん2009/09/21(月) 11:09:12
もしキャラ配列の3バイト以降が指定した文字列と一致したら〜
ってしたいときmemcpyで3つずらしたところから探すのとstrstrで検索するの
どっちのほうが早いの?
0153デフォルトの名無しさん2009/09/21(月) 11:18:17
>>152
環境による。速度や効率については実際に試すのが吉。
0154デフォルトの名無しさん2009/09/21(月) 12:10:25
>>152
1行目はmemcmp(キャラ配列の3バイト, 指定した文字列, strlen(指定した文字列))と読めるのだけど、
なんでmemcpy()が出てきたりstrstr()が出てきたりするのか判らん。
0155デフォルトの名無しさん2009/09/21(月) 12:19:07
一行目のその読みが違ってる可能性もあるわけだ。
0156デフォルトの名無しさん2009/09/21(月) 14:15:19
strstrは分かるでしょう
memcpyは3バイト以降をバッファにコピーして、それとあとでstrcmpなりmemcmpするんでしょう。もしくはtypo
0157デフォルトの名無しさん2009/09/21(月) 15:45:50
strstr()で3バイト分の検査がどの程度の時間かかるのか見積もりがわからないけど
気にしたら負けレベル
0158デフォルトの名無しさん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
コンパイルエラーになるんだけど
サンプル引用したものなのに
0159デフォルトの名無しさん2009/09/21(月) 16:37:11
>>158
#include <stdio.h>
を追加したら
0160デフォルトの名無しさん2009/09/21(月) 16:39:00
>>158
エラーメッセージくらい貼れよ
0161デフォルトの名無しさん2009/09/21(月) 16:50:03
環境によってはそれでコンパイルできるからなあ
0162デフォルトの名無しさん2009/09/21(月) 16:52:03
コマンドまたはファイル名が違います.
0163デフォルトの名無しさん2009/09/21(月) 16:53:47
-W
0164デフォルトの名無しさん2009/09/21(月) 16:58:38
パラメータ’hInst’は一度も使用されてないだとか
WinMainの引数全部に同じエラーが出る
あと外部シンボル’_main’が未解決 だって
0165デフォルトの名無しさん2009/09/21(月) 17:04:18
-Werrが付いてるんだ。殊勝な心がけだね
0166デフォルトの名無しさん2009/09/21(月) 17:33:15
>>164
上のはエラーじゃなくてウォーニンだろ。
下のはコンパイルエラーじゃなくてリンクエラーだ。
0167デフォルトの名無しさん2009/09/21(月) 17:45:37
それでどうやって解決するの?
0168デフォルトの名無しさん2009/09/21(月) 17:48:47
>>163 で既に答え出てるだろ。
0169デフォルトの名無しさん2009/09/21(月) 17:59:16
-Wって何のかわからん
これだけじゃ検索ヒットしない
0170デフォルトの名無しさん2009/09/21(月) 18:02:11
>>169
コンパイラのマニュアルをどうぞ
っても-Wだけだとまた困りそうだけど
0171デフォルトの名無しさん2009/09/21(月) 18:04:16
bcc32 [リターン]
0172デフォルトの名無しさん2009/09/21(月) 18:13:06
まったくもう、なぜ>>1に目を通さないかね?
>C言語の*入門者*向け解説スレッドです。
>初心者、初級者の方は他の質問スレのほうが良いかもしれません。
0173デフォルトの名無しさん2009/09/21(月) 18:29:05
ああやっとできた
回答者サンクス
>>172 スマソ
0174デフォルトの名無しさん2009/09/21(月) 19:35:10
>リターン
0175デフォルトの名無しさん2009/09/21(月) 21:42:34
-WだとWを検索対象から外す意味だぞ
0176デフォルトの名無しさん2009/09/21(月) 22:02:26
-w
0177デフォルトの名無しさん2009/09/21(月) 23:17:28
くだらない質問なんですが,
Sleep(0.9)って可能でしょうか?
0178デフォルトの名無しさん2009/09/21(月) 23:25:50
sleep(0.9)だったらコンパイラがエラーか警告吐くとおもうけど
Sleep(0.9)だとわからないなぁ
0179デフォルトの名無しさん2009/09/21(月) 23:36:52
その Sleep ってのが Win32API のことなら、引数は整数型だから、
その表記は単に
Sleep(0);
と見なされるだけだろ。
で、
Sleep(0) ってのは何も問題ないよ。
割り当てられた残り CPU 時間を打ち切ってシステムに制御を返すはず。
0180デフォルトの名無しさん2009/09/21(月) 23:40:41
Sleep を時間待ちに使おうとしてるなら止めたほうがいいよ。
精度は低いし、そもそも設定するのは休止する最低限の時間であって
戻ってくる時間を指定できるわけじゃない。
0181デフォルトの名無しさん2009/09/21(月) 23:44:29
じゃぁどうすればいい?
0182デフォルトの名無しさん2009/09/21(月) 23:46:37
DWORD t = GetTickCount();
while (GetTickCount() - t < 1000);
01831772009/09/21(月) 23:47:18
やはり0となるのですね.すっきりしました,ありがとうございます.
0184デフォルトの名無しさん2009/09/21(月) 23:49:30
>>182
それビジーループにならない?
0185デフォルトの名無しさん2009/09/21(月) 23:57:56
何か問題でも?
0186デフォルトの名無しさん2009/09/22(火) 00:05:54
>>182 だったらsleepのほうがいい。
0187デフォルトの名無しさん2009/09/22(火) 00:06:40
>>185
エコに反する、勿体ない。
0188デフォルトの名無しさん2009/09/22(火) 00:12:08
具体的に
0189デフォルトの名無しさん2009/09/22(火) 00:14:44
sleep(n)でn秒以上止まることは保障されてるけれど
n+1秒以内に復帰するとかって保障されてる?
必要だったら>>182もしょうがないと思うが
0190デフォルトの名無しさん2009/09/22(火) 00:24:20
>>182にしたって、他のタスクが忙しくて実行が止まってるかもしれないんで保証されないのは同じだし。
0191デフォルトの名無しさん2009/09/22(火) 00:29:26
作業用PCのHDD逝ったあああああああああああ
0192デフォルトの名無しさん2009/09/22(火) 00:32:52
1発のwaitを正確に行うのは難しいが、
複数回の平均なら容易く制御できる。
t = GetTickCount();
while(1) {
 何らかの処理;
 t += 900;
 Sleep(t - GetTickCount());
}
0193デフォルトの名無しさん2009/09/22(火) 01:27:08
まず1ミリ秒のsleep()が平均(もしくは最悪)の待ち時間 hを計算しておく
xミリ秒停止するなら,x-hミリ秒(もしくはx-2hミリ秒)程度のsleep()を入れて,そこから先はビジーループ

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

※といっても hは保障できる値ではないのでリアルタイム処理なんかはあきらめるしかない
0194デフォルトの名無しさん2009/09/22(火) 01:39:18
情報オリンピックの問題なんですが、
退勤時間 − 出勤時間で勤務時間を求めるプログラムです
一応出来たのですが、変数使いすぎだし、効率悪いような気がしてなりません。。。
もっと簡単に纏めれるやり方ってありますか?

#include<stdio.h>
int main(){
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;
while(a =! 000){
scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
scanf("%d %d %d %d %d %d",&g,&h,&i,&j,&k,&l);
scanf("%d %d %d %d %d %d",&m,&n,&o,&p,&q,&r);
if(f - c < 0){
f = f + 60;
e--;
}
if(e - b < 0){
e = e + 60;
d--;
}
if(l - i < 0){
l = l + 60;
k--;
}
if(k - h < 0){
k = k + 60;
j--;
}}
0195デフォルトの名無しさん2009/09/22(火) 01:40: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);
}
}
0196デフォルトの名無しさん2009/09/22(火) 01:41:33
>>194
データ構造と処理構造見直せ
おもにtime_tでdifftimeしたり
0197デフォルトの名無しさん2009/09/22(火) 06:18:21
文章をコピーする関数で

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

だと「不正な代入」と警告が出てしまう
プログラム自体は動くがこの書き方だとまずい?
0198デフォルトの名無しさん2009/09/22(火) 06:36:10
別に問題ないけど、気になるんだったら
while((*to++ = *from++))
とすると警告出さなくなるかもしれない。
01991972009/09/22(火) 06:47:06
>>198の通りにやっても警告が出てしまう・・・
本に書いてある通りの書き方だから多分大丈夫だと思うし深く考えなくていいかな
0200デフォルトの名無しさん2009/09/22(火) 06:49:30
つ
memcpy
0201デフォルトの名無しさん2009/09/22(火) 06:50:39
なんでマニアックな書き方すんだ _?
0202デフォルトの名無しさん2009/09/22(火) 07:03:40
マニアックでも何でもねーよ
K&R本にも「このような書き方はマスターすべきである」と書いてあるし
0203デフォルトの名無しさん2009/09/22(火) 07:20:17
memcpyつかったほうが速いし、その本みたことないが
不必要な場面でも使えとは書いてないだろ。 
0204デフォルトの名無しさん2009/09/22(火) 07:23:47
なんでmemcpyが出てくるんだ?
速いからったってstrcpyと比較しなきゃフェアじゃないだろ
0205デフォルトの名無しさん2009/09/22(火) 07:36:21
>>199
なら while((*to++ = *from++) != 0)
ってすればいい。
0206デフォルトの名無しさん2009/09/22(火) 07:37:25
>>203
もしかして、「K&R」の名前も知らないの?

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

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

この点は、K&Rの知名度よりはだいぶ劣るが
C FAQについても言える。
何かについて詳しく知ろうと調べていけば、普通はこの存在を知ることになるし
Cでまともなコードを書こうとしている人なら、存在自体は知っていなければおかしい。
そして、鵜呑みにする必要は無いが、どんなことが書いてあるか等は目を通しておくべき。
0212デフォルトの名無しさん2009/09/22(火) 08:06:39
■質問です。

↓のような txt ファイルを読み込んで
hoge = {67, 12, -23, 34, -45};
という配列を作りたいのですが、どのようにすれば良いでしょうか?

*** txt ファイル********
67
12 -23
34 -45
*********************

今のところ、とりあえず fgetc で取得した文字(数字や符号)を
文字型配列に入れてみたのですが、
整数への戻し方がわからない状況です。

◆例:-23 の場合

文字型配列 buf を作って buf = {-, 2, 3} と格納したが、
これを整数の -23 へ戻す方法がわからない……。
buf = {1, 2} ならば、10 * buf[0] + buf[1] で 12 が取得できるのだが……。

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

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

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

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

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

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

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

double func()
{
return 0.0;
}

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

double func()
{
}

↑エラーにならないってこと。
0283デフォルトの名無しさん2009/09/23(水) 14:52:14
>>282
iso標準のC言語の仕様としては、
 double func(){}
この返却値を使わない限りは大丈夫なの?(問題無く動作する?)
それともこれをコンパイルした時点で未定義の動作になる?
0284デフォルトの名無しさん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.

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ちなみに正解は
free(p)
で無効なのは*pであり、pはエラーではない。
0376デフォルトの名無しさん2009/09/25(金) 23:52:07
なんかまだいろいろありそ
0377デフォルトの名無しさん2009/09/26(土) 00:03:46
いろいろ?
03783662009/09/26(土) 00:11:19
ありがとうございます。

>>369
reallocで動作させられました。

>>372
Cは、始めに
hoge = malloc(sizeof(HOGE *) * youso);
で、その後、
for(i = 0; i < youso; i++)
hoge[i] = malloc(sizeof(HOGE));
と思ったのですが、始めのが違いますかね。

>>374
はい、4×32を始めから消費している形ですからね。
最大32個は、使うであろう最大分の数にしておいて、
4×32はもったいないのですが、少ししか要素を使わない時なら、
Aの16×32よりはマシになるという感じです。
0379デフォルトの名無しさん2009/09/26(土) 00:19: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と同じような判定をすることになる。
0380デフォルトの名無しさん2009/09/26(土) 00:26:36
>>378
ターゲットの環境はスタックサイズいくつなの?
03813662009/09/26(土) 00:54:42
ありがとうございます。

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

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

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

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

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

3
アホ
バカ
ドジっ子

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

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

同じ文字列を対象としてsscanfを2回実行するとのこってません?
どうやって捨てるんでしょうか。
0401デフォルトの名無しさん2009/09/26(土) 13:32:45
sscanf()なら残った文字列はfflush()も糞もないだろ
0402デフォルトの名無しさん2009/09/26(土) 13:34:17
>>400
…は?
scanf() じゃなく sscanf() なんだよな?
「残る」といえば元の配列にすべて残ってるし
正直、何を気にしてるのか解らないんだが。
0403デフォルトの名無しさん2009/09/26(土) 13:36:09
消費した分は捨てて残りをさらにスキャンしたいってことだろ
何バイト消費したか知る術を知りたいと
0404デフォルトの名無しさん2009/09/26(土) 13:39:17
それなら変換指定子使わずにstrcspn()使って面倒でも
自前でやるべきだろ
楽をしようとしてかえって苦労してる
0405デフォルトの名無しさん2009/09/26(土) 13:40:18
>>403
それなら %n が使える
0406デフォルトの名無しさん2009/09/26(土) 14:12:12
さっさとstdregex.hつけろって話ですよ
0407デフォルトの名無しさん2009/09/26(土) 14:13:12
それで整数オーバーフローの脆弱性を仕込むですね、わかります
0408デフォルトの名無しさん2009/09/26(土) 15:54:13
if文で条件式が(a || b)の場合
aとbどちらか先に評価されるかってコンパイラによって異なるのでしょうか?
0409デフォルトの名無しさん2009/09/26(土) 15:56:30
異なりません
0410デフォルトの名無しさん2009/09/26(土) 15:59:01
必ずaから評価され、aが真ならbは評価されません
0411デフォルトの名無しさん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
ここが分かりやすいだろう。;
0412デフォルトの名無しさん2009/09/26(土) 16:48:15
あれ?
デジャブかな。。病院行くよ
0413デフォルトの名無しさん2009/09/26(土) 16:50:38
if の代わりに使っても処理が速くなったりはしないし、
単に可読性が落ちるだけだから、
上級者きどって多用するようなことはするなよ。

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

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

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

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

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

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

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

0436デフォルトの名無しさん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で置換した結果を文字列化しているというほうが正確だけど。
0437デフォルトの名無しさん2009/09/26(土) 21:51:04
単純な置き換えコマンド使ったら?
0438デフォルトの名無しさん2009/09/26(土) 21:57:01
まあ、たぶん、だけど
>>435は>>436のような「プリプロセッサを駆使してなんとかしたい」ではなく
単に、「dTESTの文字列のファイル名を得たい」だと思うぞ。

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

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

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

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

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

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


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

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

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

まあ正確には
>>知ってた(ような気になってた)
だろうな。
0448デフォルトの名無しさん2009/09/27(日) 13:05:39
まあ入門篇なんだから
0449デフォルトの名無しさん2009/09/27(日) 13:10:01
>dTESTの定義は変えない方法でお願いします
じゃなかったのかと。
0450デフォルトの名無しさん2009/09/27(日) 13:15:33
>>448
そうだけど見栄を張るのはおかしいよな。
精神的にも入門編かwwww
0451デフォルトの名無しさん2009/09/27(日) 13:19:23
新入社員だってまずは精神教育だろ
0452デフォルトの名無しさん2009/09/27(日) 13:30:03
精神教育w餃子の王将ですか?
0453デフォルトの名無しさん2009/09/27(日) 13:30:20
サブルーチンの仕方を教えてください(´・ω・`)
何がダメか教えてください・・・。

#include<stdio.h>
#include<string.h>
int main(){
int heikin,max = 0,min = 999999999,goukei = 0,ken = 0;
char namae[20],maxn[20],minn[20];
sub 1();
while(strcmp(namae,"end")){
if(max < uriage){
max = uriage;
strcpy(maxn,namae);
}
if(min > uriage){
min = uriage;
strcpy(minn,namae);
}
goukei += uriage;
ken++;
sub 1();
}
heikin = goukei / ken;
printf("合計:%d\n 最多売上担当者:%s 金額:%d\n 最小売上担当者:%s 金額:%d\n 平均:%d\n ",goukei,maxn,max,minn,min,heikin);
return 0;
}
sub 1(){
printf("担当者名:");
scanf("%s",&namae);
printf("売上:");
scanf("%d",&uriage);
}
0454デフォルトの名無しさん2009/09/27(日) 13:34:49
宿題は宿題スレへ
0455デフォルトの名無しさん2009/09/27(日) 13:35:33
宿題じゃないです。
独学です。
0456デフォルトの名無しさん2009/09/27(日) 13:40:36
>何がダメか
「サブルーチンの仕方」などという謎の用法。
関数の正しい定義方法。
関数名として認められない例 (途中に空白がある等)。

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

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

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

int main() return 0;

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

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

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

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

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

その程度のレベルの低いお前が何を偉そうにwww
0523デフォルトの名無しさん2009/09/29(火) 07:30:09
www
052422009/09/29(火) 08:17:54
スレの流れが早すぎる
CよりEmacsの使い方を覚えなきゃいかんみたいだ orz
0525デフォルトの名無しさん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/
0526デフォルトの名無しさん2009/09/29(火) 12:37:00
emacsは変態キーバインドだからいやだ
ものすごい囲い込み戦法で他のエディタが使えなくなる
0527デフォルトの名無しさん2009/09/29(火) 12:39:10
スレタイ100回読んで消えろ
0528デフォルトの名無しさん2009/09/29(火) 13:44:30
現在時刻をファイルに出力したいのですが、
・現在時刻出力
・ファイル出力
は調べても別々ででてきて目的を果せません。。

サンプルおしえてください
0529デフォルトの名無しさん2009/09/29(火) 13:48:23
アホはやめてしまえ
0530片山博文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;
}
0531デフォルトの名無しさん2009/09/29(火) 14:09:17
>>528
#include <stdlib.h>
int main(){return system("time > filename.txt");}
0532デフォルトの名無しさん2009/09/29(火) 14:17:36
>>530
なんでstrftime()使わないの?
05335282009/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);
}
0534デフォルトの名無しさん2009/09/29(火) 19:30:35
円の面積を求めるプログラムを作ったのですが
コンパイルしても”警告 W8019”と出てうまくいきません
ググってみても実行されない行があるとなると書いてありましたが
プログラムを見る限りそんなはずはないと思うんです
しかし実際に指定された行をコメントアウトしてみるとうまくいきました
もうわけがわかりません助けて下さい
↓がソースです

/* circle.c */
#include <stdio.h>
#include <math.h>

#define PI 3,14

int main (void){
double r, S;
printf("半径:");
scanf("%lf", &r);
S = PI * pow(r,2.0);
printf("S=%f\n", S);
return 0;
}
0535デフォルトの名無しさん2009/09/29(火) 19:31:46
>>534
3,14 3.14
05365342009/09/29(火) 19:31:50
S = PI * pow(r,2.0);
のところが問題のようです
0537デフォルトの名無しさん2009/09/29(火) 19:32:05
3.14
0538デフォルトの名無しさん2009/09/29(火) 19:32:41
>>534
指定された行?
05395342009/09/29(火) 19:33:05
>>535
ありがとうございますできました!!
0540デフォルトの名無しさん2009/09/29(火) 20:08:38
3.14
0541デフォルトの名無しさん2009/09/29(火) 20:12:09
#defineの機能がわかっていないように見受けられる
0542デフォルトの名無しさん2009/09/29(火) 20:13:18
>541
#defineの機能ってなに
0543デフォルトの名無しさん2009/09/29(火) 20:20:02
>>542
コードを置き換えてコンパイルさせることでしょ?
0544デフォルトの名無しさん2009/09/29(火) 20:37:29
>>543
後半要らない。
0545デフォルトの名無しさん2009/09/29(火) 20:39:32
単なるカンマとピリオドの打ち間違いなのに、#defineの機能がわかっていないとかw
0546デフォルトの名無しさん2009/09/29(火) 20:42:50
>>545
まぁ、俺だったらまず置換後のコードを疑うからさ
0547デフォルトの名無しさん2009/09/29(火) 20:43:10
もまえら>541をいじめてやんなよwww
さらしあげ
0548デフォルトの名無しさん2009/09/29(火) 21:03:25
質問です
最近C言語を始めたのですがビットフィールドがわかりません
何に使うんですか
0549デフォルトの名無しさん2009/09/29(火) 21:05:35
bool値の格納
0550デフォルトの名無しさん2009/09/29(火) 21:05:56
いまどきの環境なら知る必要はないと思います。
0551デフォルトの名無しさん2009/09/29(火) 21:06:59
ビット単位でデータを扱いたいときに使います。
0552デフォルトの名無しさん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バイトの中に複数のフラグがたくさん詰まってるデータを操作する時に使ったりする
0553デフォルトの名無しさん2009/09/29(火) 21:12:13
ありがとうございました
やっぱり組込み?とかで使うんですね
必要になったときにまた勉強します
0554デフォルトの名無しさん2009/09/29(火) 21:17:55
>>553
最近C言語始めたなら
当分理解する必要はないと思う。

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

頑張ってね〜!
0555デフォルトの名無しさん2009/09/29(火) 21:32:33
やっぱりわかってなかったか
0556デフォルトの名無しさん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バイトで表現できるみたいな?
0557デフォルトの名無しさん2009/09/29(火) 22:58:57
>>554
節子、それビット演算や
0558デフォルトの名無しさん2009/09/29(火) 23:17:44
関数にしないほうが処理速度はやい?
0559デフォルトの名無しさん2009/09/29(火) 23:19:24
>>558
一般的にはそうだけど、そうならないことも多々ある。
0560デフォルトの名無しさん2009/09/29(火) 23:40:29
CPU、コンパイラが高度化複雑化し過ぎて古典的な高速化手法が常に通用するとは限らない。

Q. 〜やると速くなる?

A. 実際に計測して速くなったら速くなり、速くならなかったら速くならない。
0561デフォルトの名無しさん2009/09/29(火) 23:51:11
ビットフィールド - Wikipedia
ttp://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89
w
0562デフォルトの名無しさん2009/09/30(水) 00:15:59
質問です。

配列の変数一つ一つが構造体をもつことができますか?

配列A[3]があったとします。
この配列�bヘ0,1,2,3の4個のボックスになっていて

A[0].nenrei
A[0].sinntyou
A[0].taijyuu


A[1].nenrei
A[1].sinntyou
A[1].taijyuu


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

0567デフォルトの名無しさん2009/09/30(水) 00:31:07
なるほど、配列に入れられる物に制限があるかどうか気になったんだなぁ
0568デフォルトの名無しさん2009/09/30(水) 01:38:55
>この配列�bヘ0,1,2,3の4個のボックスになっていて
3個だぞw
0569デフォルトの名無しさん2009/09/30(水) 03:33:04
ファイルが大きくなってしまったので、一部のコードを別ファイルに移して、それをincludeする
形にしようと思うのですが、その際のファイルの拡張子って.hと.c、.cppどちらを使うのが
普通なのでしょうか?
0570デフォルトの名無しさん2009/09/30(水) 03:35:31
C言語なら.c
.cppはC++のコードを書くのに使う
0571デフォルトの名無しさん2009/09/30(水) 03:48:15
しかし通常は.cをincludeはしない
0572デフォルトの名無しさん2009/09/30(水) 04:43:53
俺は.txtにしてるけど
0573デフォルトの名無しさん2009/09/30(水) 04:59:14
コードのインクルードは通常.c
0574デフォルトの名無しさん2009/09/30(水) 05:09:18
includeにはずっと.hを使ってきたけど、いまのところ問題ないよ
0575デフォルトの名無しさん2009/09/30(水) 05:38:40
.hは通常ヘッダ
0576デフォルトの名無しさん2009/09/30(水) 07:17:16
>>569
ヘッダファイル、ソースファイル、分割コンパイル
という用語は知らない?
0577デフォルトの名無しさん2009/09/30(水) 07:58:39
そういやC入門書に #include <process.exe> とかあったっけw
不可能ではないが入門書に書くべきソースじゃないだろとw
0578デフォルトの名無しさん2009/09/30(水) 08:25:08
>>569
ヘッダとソースに分けて分割コンパイルがいいと思う。
0579デフォルトの名無しさん2009/09/30(水) 09:33:52
どうしてもインクルードしたい場合は、単純なテキスト(*.txt)でも単体で使えるソースファイル(*.c)でも
オブジェクトを持たないインクルードファイル(*.h)でもないという意味で*.iにしておくなぁ。
0580デフォルトの名無しさん2009/09/30(水) 10:12:36
.i より .inc をよく見る気がする
0581デフォルトの名無しさん2009/09/30(水) 10:47:03
.iや.incより.cをよく見る
0582デフォルトの名無しさん2009/09/30(水) 10:54:48
.iや.incも.cをよく見るよな
0583デフォルトの名無しさん2009/09/30(水) 10:55:39
あるんだよね、"*.c"をインクルードしたがるプロジェクト。
単体でデバッグできないし、インクルードするソースは一本だけだし、なんでわざわざ分けるのやら。
幾つか理由がはっきりしていたのはこんな感じ。
・インクルードされるソースには手をつけたくない。どうも、他からの流用らしい。
・マルチプラットフォームを意識していた。尤も、他のソースが意識していないので殆ど意味がない。
・インクルードされるソースを他のツールで生成していた。これこそ、拡張子を変えるべきだと思うのだけど。
0584デフォルトの名無しさん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)) );
}
0585デフォルトの名無しさん2009/09/30(水) 11:01:39
他の拡張子はともかく.cか.hのどちらかと言えば.cだな
0586デフォルトの名無しさん2009/09/30(水) 11:04:10
>>584
そりゃそうだ
0587デフォルトの名無しさん2009/09/30(水) 11:10:34
>>586
どうして?
0588デフォルトの名無しさん2009/09/30(水) 11:50:38
>>553
いつもの釣りにしちゃ丁寧だな<ビットフィールド
0589デフォルトの名無しさん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)));
}
// これなら通った。
0590デフォルトの名無しさん2009/09/30(水) 12:18:17
>>589
ああそういうことか。ありがとう。
結構簡単にできる割に全く使われないねこういうの。
0591デフォルトの名無しさん2009/09/30(水) 12:24:00
#define numberof(array) (sizeof(array)/sizeof((array)[0]))
みたいな、ありがち定型マクロとは違うし

↓のような
#define BEGIN {
#define END }
別言語を真似るようなマクロはやめれ というのは良く聞く話
0592デフォルトの名無しさん2009/09/30(水) 14:54:19
>>591
そんなクソコードあるの!?
初めて知ったよ。
0593デフォルトの名無しさん2009/09/30(水) 15:16:34
#define BEGIN {
#define END ;}
だろぼけ
0594デフォルトの名無しさん2009/09/30(水) 15:19:17
>>569
昔、ソースレベルリンクシステムとか言ってた奴いたよな。
0595デフォルトの名無しさん2009/09/30(水) 15:35:40
BEGIN〜ENDはBシェルのソースで使われてるよ
0596デフォルトの名無しさん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

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

普通に
hoge.cをgccでコンパイルして実行してください
で通じますか?
0600デフォルトの名無しさん2009/09/30(水) 17:16:42
>>598
module_a.h の存在意義は?
もし答えが、「module_a.c *のみ*で使う変数/関数/マクロ/typedefを別ファイルで定義した」
であれば、「バカな構造」だよ。
0601デフォルトの名無しさん2009/09/30(水) 17:17:48
>>599
ビルドしてくださいとかは?
てか何も言わなくてもソース+それなりのMakefileとか何か渡せばあとやることわかるんじゃない?
0602デフォルトの名無しさん2009/09/30(水) 17:19:14
>>599
相手によるけど俺には通じる
単一ファイルで標準ライブラリだけならgcc hoge.c だけで出来るし
-lm のリンクではまる人は何人か見たことはあるが
0603デフォルトの名無しさん2009/09/30(水) 17:21:56
>>600
この図だけじゃ繋がりの向きが不明だろ、
program.h の中で他の 3 つの *.h が #include されてるのかもしれん。
0604デフォルトの名無しさん2009/09/30(水) 17:28:55
program.hと.cが逆じゃね?
0605デフォルトの名無しさん2009/09/30(水) 17:33:16
includeの入れ子は、個人的にはあまりやりたくない
06065992009/09/30(水) 17:36:12
>>601-602
ありがとうございます。
単一ファイルで標準ライブラリだけです。
たいしたソースじゃなくて、単にサンプルコードの動作を見てもらいたい場合などです。

ありがとうございました。
0607デフォルトの名無しさん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
0608デフォルトの名無しさん2009/09/30(水) 19:03:07
>>607
columnsというシンボルについて調べる。
あと、スレ違い。
0609デフォルトの名無しさん2009/09/30(水) 19:05:04
リンクミスっているみたいだね
環境依存スレにいってそのソース(全部)をどこかに上げて聞けばいいよ
0610デフォルトの名無しさん2009/09/30(水) 19:06:22
Javaの場合、double型の値をint型にキャストすると余った分は切り捨てられるのですが
Cの場合は切り捨てられずに無関係の場所に書き込まれてしまうのですか?
0611デフォルトの名無しさん2009/09/30(水) 19:14:42
>>610
あなたの考える「Cの場合」のコードを見せてくれよ。
0612デフォルトの名無しさん2009/09/30(水) 19:18:47
double d=3.14;
int i = (int)d; // =3 な適切なキャスト
0613デフォルトの名無しさん2009/09/30(水) 19:36:06
「=3」が人を小ばかにするようながため息に見えたぜw
0614デフォルトの名無しさん2009/09/30(水) 19:46:27
|:3ミ
0615デフォルトの名無しさん2009/09/30(水) 20:51:15
バカボンのパパの鼻に見える。
0616デフォルトの名無しさん2009/09/30(水) 22:05:19
>>612
結果として i には 3 が格納されるだけ。
無関係の場所への書き込み、というのがよくわからない。
たとえば、このコードでは、i を格納しているメモリの隣接する番地に、
d を構成するバイトデータなどが書き込まれることはない。
0617デフォルトの名無しさん2009/09/30(水) 22:33:48
初コメです、大学からプログラムを始めたんけど全くわかりません
なので誰か解いてもらえないですか?
TY高速鉄道の運賃は、乗車する距離に応じて
値段が異なります。
 1− 3キロ  200円
 4− 5キロ  280円
 6− 7キロ  350円
 8− 9キロ  420円
10−11キロ  490円
12−14キロ  550円
15−17キロ  610円
(1キロ未満のは数は、1キロに切り上げます)
です
「引数」は「無し」
「戻り値」は「運賃」の関数
 keisan3()
により、関数keisan3()内で乗車距離を
キーボード入力させ、main()関数内で、
運賃をprintf表示するプログラムを作成せよ。
なお、17キロより大きい値や、0キロ以下の数値の
キーボード入力をした場合、もう一度、乗車距離の
キーボード入力をやり直しさせるようにプログラム
すること。
[注意事項]
・乗車距離は double でキーボード入力できるものとする。
・運賃は main() 関数 内でprintf表示してください。
・運賃は整数とします。
・乗車距離に対する運賃の計算は if, else if 文により実現すること。
・キーボード入力のやり直しの箇所は、自分の創意工夫により
 考えてみること。(ヒント:do while を使う)
お願いします
0618デフォルトの名無しさん2009/09/30(水) 22:34:54
ここはそんなスレじゃないよ
0619デフォルトの名無しさん2009/09/30(水) 22:36:56
失せろゴミ
06206172009/09/30(水) 22:39:58
自決しました。
0621デフォルトの名無しさん2009/09/30(水) 22:46:59
>>617 参考資料
http://pc12.2ch.net/test/read.cgi/tech/1242876647/717
0622デフォルトの名無しさん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
0623デフォルトの名無しさん2009/09/30(水) 23:55:33
スタック壊れてますよ
0624デフォルトの名無しさん2009/10/01(木) 00:06:27
>>622
何が裏技だアホか
0625デフォルトの名無しさん2009/10/01(木) 00:17:41
          ____
       / \  /\ キリッ
.     / (ー)  (ー)\    <「4バイトの変数に8バイトのデータを格納する裏ワザ」
    /   ⌒(__人__)⌒ \
    |      |r┬-|    |
     \     `ー’´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一””””~~``’ー?、   -一”””’ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

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

double d = ・・・;

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

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

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

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

>>670
すまん・・・
06746692009/10/02(金) 04:14:09
>>671
ほんとに雑にしか見てないけど-DUSE_ASYNCで非同期になるんでないのかね。
06756692009/10/02(金) 04:20:36
/*
* This is the function called by main() above to perform all the decoding.
* It instantiates a decoder object and configures it with the input,
* output, and error callback functions above. A single call to
* mad_decoder_run() continues until a callback function returns
* MAD_FLOW_STOP (to stop decoding) or MAD_FLOW_BREAK (to stop decoding and
* signal an error).
*/
とあるのでコールバック関数でMAD_FLOW_STOPを返せばいいんでない?
自前のMAD_FLOW_STOPが何かはわからんが。
0676デフォルトの名無しさん2009/10/02(金) 04:30:36
探し方が悪いのか、頭が悪いのか、このlibmadってドキュメントが
見つかんなくてさ。 とにかくoutputの中でキー入力を見張って
MAD_FLOW_STOPを送るような感じでやってみるよ。
アドバイスありがと。 またわかんなくなったら来るからよろしく。
0677デフォルトの名無しさん2009/10/02(金) 04:33:11
コールバック関数というのは、時間のかかる処理A(たとえばdecode関数)のようなものを実装するときに、
処理を取られっぱなしになると困るであろうということから、処理Aの中で定期的に呼び出す関数のこと

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

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

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

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

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

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

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

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

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

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

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

sizeof unary-expression
sizeof(type-name)

だったか
0701デフォルトの名無しさん2009/10/02(金) 17:19:06
入門スレといえど最低限の知識は見つけてから質問しろよ
ほんと最近ゆとりが万延してるな
0702デフォルトの名無しさん2009/10/02(金) 17:33:00
何が最低限かというのは人によって違うと思う
もうちょっと具体的に言うべき
0703デフォルトの名無しさん2009/10/02(金) 18:07:53
すでに質問者は納得したようだが
>>688を実践してみるのも良い勉強法だったかもしれん
0704デフォルトの名無しさん2009/10/02(金) 18:28:38
>>688の言ってる意味すら分からない俺は最下層プログラマー
0705デフォルトの名無しさん2009/10/02(金) 19:00:36
>>704
つまり、メモリ管理を自分でやれってこった。
例えば整数型が欲しいなら* (int *) (data + 0)、
実数型が欲しいなら* (double *) (data + 8)、
と言う具合だな。
0706デフォルトの名無しさん2009/10/02(金) 20:31:33
昔は64キロバイトの中でやりくりしたもんじゃった
0707デフォルトの名無しさん2009/10/02(金) 20:36:30
あっそう
0708デフォルトの名無しさん2009/10/02(金) 20:40:37
【政治】 麻生前首相 「鳩山政権、いずれ破綻する」(動画あり)★9
http://tsushima.2ch.net/test/read.cgi/newsplus/1254472455/
0709デフォルトの名無しさん2009/10/02(金) 21:15:40
自作関数に関する質問なんですが
#include<stdio.h>

int calc(int i, int j) {
   int r = i + j;
   return r;
の
   int r = i + j;
   return r;
という部分を
   return i + j
にするのとでは特に違いはないのでしょうか?
好きな方を使えばいいという感じなのでしょうか?
0710デフォルトの名無しさん2009/10/02(金) 21:17:07
>>709
特に違いはないよ。
どっちかというと無駄なオブジェクトrができなくて良い分、後者の方が効率はよい。
ただしコンパイラの最適化が働けば同じかな。
0711デフォルトの名無しさん2009/10/02(金) 21:48:36
>>710
ありがとうございます
特に気にしなくてもいいんですね
0712デフォルトの名無しさん2009/10/02(金) 22:16:32
変数 r を使う意味について考える習慣が大事という気がする。
その変数を使わなければ行数を節約できるだろう。
だが、変数として名前をつけて管理した方がソースが読みやすくなり、
またデバッガでその変化を追跡するのが容易になったりするかも知れない。
0713デフォルトの名無しさん2009/10/02(金) 22:51:39
関数内でconst int a = 0;と宣言すると
変数aはどこに確保されるのでしょうか?
0714デフォルトの名無しさん2009/10/02(金) 22:58:15
関数内で int a = 0; とした場合と同じような所に
確保される可能性が高いと思われます。
0715デフォルトの名無しさん2009/10/02(金) 22:58:19
>>713
静的領域
0716デフォルトの名無しさん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
0717デフォルトの名無しさん2009/10/02(金) 23:59:36
>>716
いや、const変数はアドレス演算子使うかどうかで最適化の結果が変わるんだけど
0718デフォルトの名無しさん2009/10/03(土) 00:01:50
constじゃなくても同じだと思うけど
0719デフォルトの名無しさん2009/10/03(土) 00:04:54
無知無知ギャルが多すぎて困る。
とりあえず貼ってみた。
 ttp://codepad.org/dev6lB77


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include<stdio.h>
int main(){
int h[30],a,b;
for(a = 0;a < 28;a++){
scanf("%d",&b);
h[b] = 1;
}
for(a = 0;a < 29;a++){
if(h[a] == 0){
putchar(h[a]);
}
}
}
0944デフォルトの名無しさん2009/10/06(火) 01:12:40
されるだろ。
0945デフォルトの名無しさん2009/10/06(火) 01:17:11
>>943
何がしたいのか分からん

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

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

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

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

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

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

C言語
 ↓
Cランゲージ
 ↓
シーランゲージ
 ↓
知らん刑事
0968デフォルトの名無しさん2009/10/06(火) 10:28:34
ないない
0969デフォルトの名無しさん2009/10/06(火) 10:49:36
>>967
そこまで頭良くなければCは出来ないって? あはは
0970デフォルトの名無しさん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件
0971デフォルトの名無しさん2009/10/06(火) 12:51:03
"C" で検索しろよ。
0972デフォルトの名無しさん2009/10/06(火) 16:09:35
オススメのエディタ教えてくれ
0973デフォルトの名無しさん2009/10/06(火) 16:11:31
notepad
0974デフォルトの名無しさん2009/10/06(火) 16:14:32
cat
0975デフォルトの名無しさん2009/10/06(火) 16:17:21
EDIT/LSE
0976デフォルトの名無しさん2009/10/06(火) 16:23:53
EDLIN
0977デフォルトの名無しさん2009/10/06(火) 16:53:30
wordmaster
0978デフォルトの名無しさん2009/10/06(火) 17:06:18
Turbo Pascal
0979デフォルトの名無しさん2009/10/06(火) 17:22:21
Visual C++
0980デフォルトの名無しさん2009/10/06(火) 17:44:05
今使ってるエディタの不満点を言わなきゃわからんよ
0981デフォルトの名無しさん2009/10/06(火) 18:33:48
linuxで自動インデント機能があるエディタある?
0982デフォルトの名無しさん2009/10/06(火) 18:34:46
>>981
vim とか
0983デフォルトの名無しさん2009/10/06(火) 18:38:41
>>981
wineでWindowsのソフトを動かすのもお薦め。
0984デフォルトの名無しさん2009/10/06(火) 18:44:59
たまにあるんだよな。
自動インデントする代わりにタブ入力できなくなってるとかのオレルール押し付けエディタが。
0985デフォルトの名無しさん2009/10/06(火) 18:46:57
気に入らないエディタは使わなければいいだけなので、そのようなエディタが世の中に存在していても特に害は無い
0986デフォルトの名無しさん2009/10/06(火) 18:47:34
>>985
> そのようなエディタが世の中に存在していても特に害は無い
誰も害があるなんて 言ってないだろwww
0987デフォルトの名無しさん2009/10/06(火) 18:50:13
ってゆーか、オレルール作らないとvimもemacsも使いづらいよね。

使いづらかったら使いやすいようにすればいい。そのためにカスタマイズできるようになっているんだから。
0988デフォルトの名無しさん2009/10/06(火) 19:08:00
>>984
そんなエディタがあるの?
0989デフォルトの名無しさん2009/10/06(火) 19:11:05
入力ミスを指摘してくれるようなエディタってある?
0990デフォルトの名無しさん2009/10/06(火) 19:22:16
>>988
TABキーをインデントに割り当てているからTABコードの入力はエスケープしないといけないエディタならあるね。
決して押し付けているわけではないだろうけれど、調べることもできない>984のような人には押し付けに感じるのかもしれない。
0991デフォルトの名無しさん2009/10/06(火) 19:23:38
http://yutori7.2ch.net/test/read.cgi/news4vip/1254738068/l50
支援求む!
0992デフォルトの名無しさん2009/10/06(火) 19:35:31
VIPでやれ
0993デフォルトの名無しさん2009/10/06(火) 19:37:49
0994デフォルトの名無しさん2009/10/06(火) 19:38:26
>>991
帰れ!
0995デフォルトの名無しさん2009/10/06(火) 19:46:58
>>989
求める物のレベルが分からないけど、まぁ、ある。
0996デフォルトの名無しさん2009/10/06(火) 19:49:18
知能が低いのはどうしようもないな
0997デフォルトの名無しさん2009/10/06(火) 19:51:24
あら、次立たないのか
まぁそれはそれで構わないけど
0998デフォルトの名無しさん2009/10/06(火) 20:17:03
>>981
emacs/mule はデフォではいっていませんかね
0999デフォルトの名無しさん2009/10/06(火) 20:27:11
>>1000に俺の童貞をプレゼント
1000デフォルトの名無しさん2009/10/06(火) 20:39:10
viでオートインデントできるよ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。