C言語なら俺に聞け! Part 114

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

C言語なら俺に聞け! Part 113
http://pc8.2ch.net/test/read.cgi/tech/1125136478/

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
22:2005/09/17(土) 00:40:46
2
3デフォルトの名無しさん:2005/09/17(土) 00:41:22
関連スレ
うんこの汁の部分
http://ex11.2ch.net/test/read.cgi/news4vip/1126884499/
4デフォルトの名無しさん:2005/09/17(土) 00:51:06
>>1
乙!
5デフォルトの名無しさん:2005/09/17(土) 01:19:21
C++のSTLのListやMapといったものをCで書くとどういった風になりますか?
6デフォルトの名無しさん:2005/09/17(土) 01:19:59
無理矢理書くなら、マクロでテンプレートっぽいのを実現できなくもない。
7デフォルトの名無しさん:2005/09/17(土) 08:05:57
そういえば、昔のtemplateが無い頃のC++には
generic.hというものがあったそうな。
今でもTurboC++を落とせば手にはいるでしょう。
Cで使えるかはわからんけど。
8デフォルトの名無しさん:2005/09/17(土) 08:19:39
struct Node {
struct Node* prev;
struct Node* next;
FooType val;
};

って構造体を定義して、とか言うレベルの話でないの?
Mapはただの2分探索木(VC++の奴の場合)だから1次元配列でも実現できるし
9デフォルトの名無しさん:2005/09/17(土) 09:13:55
いや、set/mapは厳密に要件を満たすのは結構むずかしいよ。
単純な2分木だと、最悪条件ができる可能性があって、
STLのset/mapはそれを許さないから。

で、結局どの実装も赤黒木になってると思った。
10デフォルトの名無しさん:2005/09/17(土) 09:29:09
C!!!!!!!!!!
11デフォルトの名無しさん:2005/09/17(土) 10:36:40
>>9
べつにそれは、言語関係ないだろ。
Cで実現するためのテクニックの話じゃねーの?
12デフォルトの名無しさん:2005/09/17(土) 12:55:55
struct ListNode_ {
 struct ListNode_* prev;
 struct ListNode_* next;
 char value[1]; /* 可変長 */
};

として、リストの関数内ではこれで扱ってるフリをし、
外では

struct ListNodeInt {
 struct ListNodeInt* prev;
 struct ListNodeInt* next;
 int value;
};

とかを使うってのもできないこともない。
ただ、色々と型チェックできないのが欠点。
俺は、多少気持悪くても、テンプレート紛いのマクロの方が好きかな。
13デフォルトの名無しさん:2005/09/17(土) 13:03:52
前スレ1000は\nを入れ忘れ
14デフォルトの名無しさん:2005/09/17(土) 13:12:27
puts 使えよ。
15デフォルトの名無しさん:2005/09/17(土) 13:14:31
1000GET1001 名前: 1001 投稿日: Over 1000 Thread
16デフォルトの名無しさん:2005/09/17(土) 14:34:35
17デフォルトの名無しさん:2005/09/17(土) 14:37:08
へぇ、gcc で サイズ0の配列使えるのは知ってたが、これはしらんかった。
18デフォルトの名無しさん:2005/09/17(土) 15:57:24
>>16
んなもん知っとるわ。
C89 も考慮して 1 を書いたんじゃ。

あと、そのページでは 1 引いてるけど、

 offsetof(ListNode_, value) + sizeof (int) * num

のようにしたんでも構わない。
19デフォルトの名無しさん:2005/09/17(土) 16:55:06
大阪人は死ね
20デフォルトの名無しさん:2005/09/17(土) 17:00:37
>>16
んなもん知っとるわ。
C89 も考慮して 1 を書いたんじゃ。

あと、そのページでは 1 引いてるけど、

 offsetof(ListNode_, value) + sizeof (int) * num

のようにしたんでも構わない。
21デフォルトの名無しさん:2005/09/17(土) 17:11:23
しつこいようだが…
前スレの
>981
>realloc(0, size); realloc(p, 0); とかって書いてる奴は馬鹿。

それって結局名前と固定観念の問題だろうよ?
alloc(0,size);alloc(p,size);alloc(p,0);
と普通に書いてて、敢えてmallocやfreeなんて
余分な関数を使う奴が居るかねぇ?
22デフォルトの名無しさん:2005/09/17(土) 17:26:15
お前がめんどくさがりなのは分かったが、
reallocはreallocであってallocでは無い。

名前と固定観念と言うが、
文脈を考えたらそれぞれを利用するのは当然だろ。

とりあえず、お前の書いたソースは、
人に見せられるような物ではないことも分かったからいいや。
23デフォルトの名無しさん:2005/09/17(土) 17:28:25
何をイチャついておる
24デフォルトの名無しさん:2005/09/17(土) 17:52:49
俺こんな関数作った。

void god(void* info, void* res, ...);

info に何をしたいかに関する情報を入れて、
第3引数以降はそれに対応する引数を書けば、
res に答えが返ってくるんだ。
この関数1つで何でもできるように作ってあるから、
常にこの関数を使えばいいよね!
これ普通に使ってるから、
他の関数を使う奴なんていないよねぇ?


ってのがナンセンスなのと同じようなことだな。
25デフォルトの名無しさん:2005/09/17(土) 18:19:27
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student {
char number[20];
char name[20];
char shumi[20];
};

int main(int argc, char *argv[]){

int i, n=256, j=0, k=1;
FILE *fp;
char name[20];
char number[20];
char koumoku[20];
char s[201];
char word[200][200];
char *p1;
char *p;
struct student seito[100];


if(argc <= 1)
return 1;

if(strcmp(argv[1], "data")==0)
printf("file name:%s\n", argv[2]);
つづく。
26デフォルトの名無しさん:2005/09/17(土) 18:20:58
終わり
27デフォルトの名無しさん:2005/09/17(土) 18:21:13
fp = fopen(argv[2], "r");
if(fp==NULL)
return(0);

while(!(feof(fp))){
fgets(s, 20, fp);
p=s;
i=0;

while(1){
p1=word[i];

while(!(*p==','||*p=='.')){
*p1=*p;
p1++; p++;
}
i++;
*p1='\0';

if(*p=='.')
break;
p++;
}
strcpy(seito[j].number, word[0]);
strcpy(seito[j].name, word[1]);
strcpy(seito[j].shumi, word[2]);
j++;
}
fclose(fp);
つづく。
28デフォルトの名無しさん:2005/09/17(土) 18:21:56
uzeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
29デフォルトの名無しさん:2005/09/17(土) 18:22:26
while(k > 0){
printf("調べたい項目を入力して下さい(number or name or shumi or end):");
scanf("%s",koumoku);
if(strcmp(koumoku, "number")==0)
while (k > 0) {
printf("名前を入力して下さい。(終了はend入力)");
scanf("%s", name);
k = strcmp(name, "end");
if (k != 0) {
for (j = 0; j < n && k != 0; j++) {
k = strcmp(name, seito[j].name);
if (k == 0)
printf("学籍番号は %s\n", seito[j].number);
}

if (k != 0)
printf("見つかりません\n");
k = 1;
}
}

else if(strcmp(koumoku, "name")==0)
while (k > 0) {
printf("学籍番号を入力して下さい。(終了はend入力)");
scanf("%s", number);
k = strcmp(number, "end");
if (k != 0) {
つづく。
30デフォルトの名無しさん:2005/09/17(土) 18:23:29
本当に終わり
31デフォルトの名無しさん:2005/09/17(土) 18:25:58
for (j = 0; j < n && k != 0; j++) {
k = strcmp(number, seito[j].number);
if (k == 0)
printf("名前は %s\n", seito[j].name);
}

if (k != 0)
printf("見つかりません\n");
k = 1;
}
}
  else if(strcmp(koumoku, "shumi")==0)
while (k > 0) {
printf("名前を入力して下さい。(終了はend入力)");
scanf("%s", name);
k = strcmp(name, "end");
if (k != 0) {
for (j = 0; j < n && k != 0; j++){
k = strcmp(name, seito[j].name);
if (k == 0)
printf("趣味は %s\n", seito[j].shumi);
}
if (k != 0)
printf("見つかりません\n");
k = 1;
}
}
else if(strcmp(koumoku, "end")==0)
k = 0;
}return 0;
}
これってどうなの?
32デフォルトの名無しさん:2005/09/17(土) 18:28:41
>>31
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?で?
33デフォルトの名無しさん:2005/09/17(土) 18:28:56
>>24
極端に言えばそういうことだわな。
ってかオマエオモシロスwwwww
34デフォルトの名無しさん:2005/09/17(土) 18:32:34
引数を初心者にわかりやすく説明できる人いる?
35デフォルトの名無しさん:2005/09/17(土) 18:34:59
いらない。
36デフォルトの名無しさん:2005/09/17(土) 18:41:15
>>31
どうなんでしょうね? 分かりません。
37デフォルトの名無しさん:2005/09/17(土) 19:02:57
>24
>俺こんな関数作った。
>void god(void* info, void* res, ...);

reallocもmallocとfreeの関数ポインタを使って
定義可能だよね?
そういった意味では高階関数かもしれない。

>22
>お前がめんどくさがりなのは分かったが
Lazyじゃないとプログラマじゃないんだろう?

>文脈を考えたらそれぞれを利用するのは当然だろ。
それが頭が固いって言っている訳です。
常に既存文脈自体を疑わないと言語は進歩しない。

そんな頭が固い人が、えてして
「おい!おい!alloc一つで済んでる文脈に
なんでmallocとかfreeとかをわざわざ持ち込む
必要があるんだぁ???」
と叫ぶんじゃないでしょうか?
つまり何が効率的か?ではなくて
既存の文脈から「しか」判断出来ないように
なってはいないでしょうか?
38デフォルトの名無しさん:2005/09/17(土) 19:15:29
>>37
> Lazyじゃないとプログラマじゃないんだろう?
楽をするための努力は惜しまないのがプログラマ。
あらゆる点で怠惰なだけなのはタダのバカ。

> 常に既存文脈自体を疑わないと言語は進歩しない。
言語を進歩させるためにプログラム書いてるんじゃない。
ちゃんと動作して、動くものを作り、
また、場合によってはそのソースを
他人に引き渡すことも考えてプログラムを書くものだ。
自分世界に引きこもって自分言語で書いていいのは日用プログラマだけ。
39デフォルトの名無しさん:2005/09/17(土) 20:06:12
>>31
何がどうなんだよ
C勉強する前に日本語勉強してこい
40デフォルトの名無しさん:2005/09/17(土) 20:20:01
>>37
天才が故に既存の文脈を疑いすぎて、
自分しか理解できないコードを書くタイプ。

言語の進化自体は、意思を対象に分かりやすく伝える方向で、
進化するもんじゃないのかねぇ。
まぁ本人は分かり易いと思ってるのかもしれないけど。

俺みたいな低脳プログラマは可読性の高い方を支持させてもらうよ。
41 ◆IDemTl9KaI :2005/09/17(土) 20:48:39
test
42デフォルトの名無しさん:2005/09/17(土) 21:04:58
演習1-10
各タブを\tに、各バックスペースを\bに、各バックスラッシュを\\に置き換えながら、
入力を出力に複写するプログラムを書け。
こうすれば、タブとバックスペースははっきり目に見えるようになる。

K&Rの問題ですけど、\bをgetchar()で入力確認って出来るんですか?
もしかしてUNIXとかならOKってことですか?
43デフォルトの名無しさん:2005/09/17(土) 21:16:21
\rが前についてたりするんじゃねぇの?
44デフォルトの名無しさん:2005/09/17(土) 21:57:10
環境依存な悪寒。
45デフォルトの名無しさん:2005/09/17(土) 22:09:27
>>1
そのK&Rの演習問題の回答は何処にありますか?
46デフォルトの名無しさん:2005/09/17(土) 22:30:41
int c;
while ( (c = getchar) != EOF ) {
 switch( c ) {
  case '\b': printf("\\b"); break;
case '\t': printf("\\t"); break;
  default: putchar( c );
 }
}

実際の動作は別にして、騙し騙しコードを書く知恵も必要です。
47デフォルトの名無しさん:2005/09/17(土) 22:35:26
>>31
コメントも無い、インデントも入ってない、処理の説明すらない
そんなソースを出されて、ただ一言「これってどうなの?」
質問の意味がわからんし、ソース読む気にもならんし。

お前の頭の方こそ「どうなの?」って聞き返したくなるわい
48デフォルトの名無しさん:2005/09/17(土) 22:44:12
>>46

> 各バックスラッシュを\\に置き換えながら、

がないぞ。
49デフォルトの名無しさん:2005/09/17(土) 22:46:22
int c;
while ( (c = getchar) != EOF ) {
 switch( c ) {
  case '\b': printf("\\b"); break;
  case '\t': printf("\\t"); break;
  case '\\': printf("\\\\"); break;
  default: putchar( c );
 }
}

すまそ
50デフォルトの名無しさん:2005/09/17(土) 22:49:02
>>45
『プログラミング言語Cアンサー・ブック』
ttp://www.amazon.co.jp/exec/obidos/ASIN/4320027485/
51デフォルトの名無しさん:2005/09/17(土) 22:51:04
こういうコードを書くとメモリを無駄遣いした気になって幸せになります。

#include<stdio.h>
#include<string.h>
int main(){
    int i;
    char t[256][3];
    for(i=0;i<256;++i)sprintf(t[i],"%c",i);
    strcpy(t['\b'],"\\b");
    strcpy(t['\t'],"\\t");
    strcpy(t['\\'],"\\\\");
    while((i=getchar())!= EOF)
        fputs(t[i],stdout);
}
52マクロか?:2005/09/17(土) 22:51:58
>>49
それ以前に、getchar って何もんだ?
53デフォルトの名無しさん:2005/09/17(土) 22:53:31
>51
char が signed だと...
5453:2005/09/17(土) 22:55:10
...別にどうってことないか。
55デフォルトの名無しさん:2005/09/17(土) 22:58:07
おいおい!!
56デフォルトの名無しさん:2005/09/17(土) 23:04:07
>>52
ごめん、関数コールだったorz
Ruby厨だから違和感感じなかった
57デフォルトの名無しさん:2005/09/17(土) 23:06:55
>>51
なんかかっこええ。
実用的じゃないとはいえそういうのも思いついときたいな。
5851:2005/09/17(土) 23:17:26
本当に細かいことだけど、nul文字の表示ができんかった。
×fputs(t[i],stdout);
○fwrite(t[i],1,2-!t[i][1],stdout);

ま、コンソールに出すのには問題ないから別に良いか
59デフォルトの名無しさん:2005/09/17(土) 23:22:36
引数の具体的な例での説明などのあるサイト教えてください。
いろいろ回ったんですが、ぱっとしない内容ばかりで。。。

「プログラミング言語で関数やメソッドを呼び出す際に、その関数やメソッドを実行するために渡さなければならない値のこと。」
っていう答えばかり。
60デフォルトの名無しさん:2005/09/17(土) 23:23:41
具体例だろ?
んなら、

int main(int argc, char **argv)


はい、具体例。
61デフォルトの名無しさん:2005/09/17(土) 23:27:58
引数を渡す、返す、などのイメージがわかなくて困っています。
62デフォルトの名無しさん:2005/09/17(土) 23:30:21
void func(int hikisuu) {
    printf("%d\n", hikisuu);
}
int main(void) {
    func(10);
}
6359:2005/09/17(土) 23:36:13
>>62
なるほど、
int main(void) {
func(10);
っていうのが、引数を返すって事なんですか?
で、
引数を設定してるのが、
void func(int hikisuu) {
printf("%d\n", hikisuu);
}
って事ですかね。
64デフォルトの名無しさん:2005/09/17(土) 23:43:50
設定なんて俺様用語使うなよ。
6559:2005/09/17(土) 23:45:13
あれ、逆かな。
混乱してきた。
66デフォルトの名無しさん:2005/09/17(土) 23:46:48
引数を返すという言葉は少し語弊がありませんか。
function (arg1, arg2) ;
などと呼び出していることが引数を渡していて、貴方方の言っている引数を返すという行為は
関数内部におけるreturn文の実行のことではないですか?
int function {
...
return [値] ;
}
67デフォルトの名無しさん:2005/09/17(土) 23:53:53
引数って言葉に騙されているだけだな。
関数に渡す変数の値、て覚えときゃ十分。

また、関数は通常は1つの値しか返せないので、2つ以上返す場合は
ポインタ変数で渡す必要がある。

a = 4; b = 7;
x = sum(a,b); // x = 7

int sum(int a,int b) { return a+b; }

swap(&a,&b); // aとbの値を交換する。
void swap(int *p,int *q) { int tmp = *p; *p = *q; *q = tmp; }

うえの2つの違いが分かったらポインタも同時にばっちしです。
68デフォルトの名無しさん:2005/09/18(日) 00:00:04
#include <iostream>

using namespace int main std;
()
[ cout<

 
69デフォルトの名無しさん:2005/09/18(日) 00:00:44
ごめん まちがえた。すまそ。↑
7059:2005/09/18(日) 00:02:26
>>66
なるほど、確かにそうですね。
って事は、
void func(int hikisuu)
int main(void) {
func(10);
}

void func1(int hikisuu) {
printf("%d\n", hikisuu);
}

ってやると引数の関係がわかりやすいですね。
こうなると、なんで"hikisuu"が引数の意味になるんですかね?
なんとなく、"10"っていう数字が引数に見えちゃう。



71デフォルトの名無しさん:2005/09/18(日) 00:04:16
「引数の関係」てなんだよ。
勝手な用語を作るなよ。
7259:2005/09/18(日) 00:07:12
>>67
値を返すっていうのはなぜ必要なのでしょうか?
返さないとなにか不都合が生じてしまうんですかね。
73デフォルトの名無しさん:2005/09/18(日) 00:08:44
>>72
返さなきゃならないときにそういう方法をとるって意味だ、ボケ。
返さなくてもいいし、返さなきゃ不都合が起きるときに返すんだよ。アホか。
7459:2005/09/18(日) 00:09:42
>>64>>71
ごめんなさい、そういう事はあんまりわかってないです。
7559:2005/09/18(日) 00:10:41
>>72
なるほどー、すごいわかりやすいです。
76デフォルトの名無しさん:2005/09/18(日) 00:11:54
今日は変な粘着がいるので明日またおいで。
ちゃんと初心者の本でも読み返した後で、だけど。

言葉なんてどうでもいいから、自分で足し算ゲームでも作って見るのが
一番の上達の近道だ。
7759:2005/09/18(日) 00:15:32
>>76
まだまだ初心者だけど、今も本見ながら頑張ってるんで、よろしくお願いします。
もうすぐ、Cでコンパイラを開発しないといけないんですが、どんな事するんですかねー。
コンパイラとか開発された方いますか?
78デフォルトの名無しさん:2005/09/18(日) 00:27:28
>>77
コンパイラ・スクリプトエンジンのスレを一度見れ。
79引数とはこういうもの:2005/09/18(日) 01:10:42
*基本・・・関数(第1引数、第2引数、・・・・);
   例・・・ strcmp( str, "aaa");  この場合第1引数がstr 第2引数が文字列"aaa"

戻り値・・・ return (戻り値); 
  例・・・ return (0); この場合戻り値は0

*実例
int main(void);  //引数がvoidの場合は引数なしと同じ
{
    char str[255];
    int  rc;   //エラー判定用の変数
    
    scanf("%s",str);   //配列strに文字を入れる
    if ((rc = strcmp( str, "aaa")) == 0 ) {   //配列strの値がaaaかどうかを判断して、戻り値をrcに格納
        printf("aaaを入力しやがったなテメー!!!\n");  //↑の戻り値が0の場合はこの処理をする
    } else {
        printf("aaaを入力しろよボケ!!!\n");
    }

    return 0;  //returnは()を省略できる
}

strcmpは実際以下の処理をしている
   渡された第1引数と第2引数の値を比べる
   等しい場合はreturn 0;で戻り値を0で返す、すると↑のソースで rc に0が入ることになる
   等しくない場合は大きさを見て0以外の負の値もしくは正の値をreturnで返している
80デフォルトの名無しさん:2005/09/18(日) 01:14:56
returnは()を省略できる

よくこうゆう嘘を見かけるんだが
"(つけても意味がないが)つける事ができる" が正解
81デフォルトの名無しさん:2005/09/18(日) 01:16:46
>80

そんな事より

>引数がvoidの場合は引数なしと同じ

どーよw
82デフォルトの名無しさん:2005/09/18(日) 01:22:14
void *p ;
void f (void) ;
さんしゅるいのぼいどおー
83デフォルトの名無しさん:2005/09/18(日) 01:23:49
>>80>>81
returnに関しては初耳だな、てか今まで気にしてもいなかったが、考えてみると納得
まあ初心者に説明してるんだから、ざっくりでいいかなって
細かく説明しすぎるとまたこんがらがるし
84デフォルトの名無しさん:2005/09/18(日) 01:25:37
Windosで共有されたフォルダに対してFindFirstFile()使ったら
時々「指定されたネットワーク名は利用できません」が出るんですが・・・

一応エクスプローラーでは認識してるし、DirもOK。
(ネットワーク系のエラーは・・・多分無いはず)
ただそのフォルダには10万以上のファイルが存在してるんだけど・・・
(ローカルだと問題なし)
このファイル数が影響してるんですかね?
OSはWin2000Serv同士です。

もし原因知ってる方がいましたら教えてください。
85デフォルトの名無しさん:2005/09/18(日) 01:25:39
だったらウソ説明しないほうがマシだ
86デフォルトの名無しさん:2005/09/18(日) 01:26:51
>>84
原因はスレも選べぬお前の頭
8784:2005/09/18(日) 01:28:16
いやC言語として使っているので・・・
88デフォルトの名無しさん:2005/09/18(日) 01:28:56
>>85
では初心者にも分かりやすいように簡素に説明してくださいよ、お代官様
89デフォルトの名無しさん:2005/09/18(日) 01:29:21
>>87
馬鹿につける薬は無いな。去れ。
90デフォルトの名無しさん:2005/09/18(日) 01:30:27
>>88
何を?
9184:2005/09/18(日) 01:30:57
>>89
知らないなら無理にレス付けなくてもいいよ。
92デフォルトの名無しさん:2005/09/18(日) 01:31:06
>>90
まあいいや
つかvoidを引数として使う場合って引数なしと同じでいいんじゃん
93デフォルトの名無しさん:2005/09/18(日) 01:33:59
void は引数としてつかえない。
94デフォルトの名無しさん:2005/09/18(日) 01:34:15
急速にスレの質が低下してまいりました
95猛勉強中(59):2005/09/18(日) 01:34:33
>>79
すっごいわかりやすいです!
ありがとうございます、テキストファイルに保存しておきましたw

こうみると、引数って言葉をしらなくても、知らない間にプログラム組む時に
使ってるんですねー。

けど、これでよりプログラムを組みやすくなったと思います。
ありがとうございます。

>>80
なるほどって感じです。
96デフォルトの名無しさん:2005/09/18(日) 01:35:38
鵜呑みにするな!!!
97猛勉強中(59):2005/09/18(日) 01:37:18
voidってのは引数として使ってるんじゃなくて、引数としては使えないんですよね?
と言う事は、voidとすることの意味は何なんですか?
98デフォルトの名無しさん:2005/09/18(日) 01:37:33
>>93
それこそウソじゃん?
使えんわけないじゃんか

※ 関数は一般に引数によって値を受け取り、returnで返却値を返すものですが、
中には引数が必要無い関数や返却値の無い関数も存在します。
そのような場合、「引数が無い」ことや「return値が無い」ことを
明示するために「void」は用いられます。

ぐぐったぞ
99猛勉強中(59):2005/09/18(日) 01:39:14
>>98
これまたすごいわかりやすい。
100デフォルトの名無しさん:2005/09/18(日) 01:39:27
>>97
main(void) == main()
101デフォルトの名無しさん:2005/09/18(日) 01:45:48
aaaaaaa
解釈の違いだ
voidが引数として使えないって言ってるのって、
呼ばれたほうの関数に引数として渡らないってことだな?
俺は記述として引数と同じ記述のことを言ってたわ
まあいいや
どうでもいいよ
電池キレタ
送ってくれよ
102デフォルトの名無しさん:2005/09/18(日) 01:48:14
>>101
気にするな
馬鹿には慣れてる
103デフォルトの名無しさん:2005/09/18(日) 01:50:19
>>102
別に気にしてない
プログラムはおまえのほうが上でも
俺のほうがイケメンだから気にしない
104デフォルトの名無しさん:2005/09/18(日) 01:52:11
y = sin(x)

引数に 60゚ を入れると 1/2 が戻り値として返ってくる
これでいいんじゃまいか
最初の理解は
105猛勉強中(59):2005/09/18(日) 01:52:28
「Cの掟」
っていう本すごいいいっすね。
106デフォルトの名無しさん:2005/09/18(日) 01:52:43
(√3)/2 でした^^^^^^^^
107デフォルトの名無しさん:2005/09/18(日) 02:16:22
だから、使うとかあいまいな言い方するから荒れるんだよ。
宣言とか定義とか、正しく用語は使え。
108デフォルトの名無しさん:2005/09/18(日) 02:21:20
c言語ってどうやって作ればいいのでしょうか。。。。
109デフォルトの名無しさん:2005/09/18(日) 02:22:15
もうできるから。
新規格の策定になら参加できるかもしれないけどな。
110デフォルトの名無しさん:2005/09/18(日) 02:26:13
>>107
すんません伍長殿
自分独学っすから宣言と定義以外で正しい用語とか知りません
111デフォルトの名無しさん:2005/09/18(日) 02:27:23
>>110
そういうやつは、他人に教えようとするな。
112デフォルトの名無しさん:2005/09/18(日) 02:27:34
>>108
教えたじゃねえか
無視しやがって
113デフォルトの名無しさん:2005/09/18(日) 02:36:13
>>108
パソコンと2チャンを用意する
聞きたい事を2チャンに書く
返事を待つ
114デフォルトの名無しさん:2005/09/18(日) 02:54:35
>>59
C言語の規格なんて長い時間かけてあちこち変更されて
きたものなので「何故どうして」を考えても無駄。
そういうものだと暗記しろ。
115デフォルトの名無しさん:2005/09/18(日) 06:19:59
>>104
sinの引数ってラジアン単位だろ?
116トラックバック ★:2005/09/18(日) 07:03:33
【トラックバック来たよ】 (ver. 0.11)
[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1126994613/l50
117トラックバック ★:2005/09/18(日) 07:05:30
【トラックバック来たよ】 (ver. 0.11)
[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1126994730/l50
118デフォルトの名無しさん:2005/09/18(日) 07:52:50
test
119デフォルトの名無しさん:2005/09/18(日) 07:55:46
testだぁ?
このスレッドで「test」って何だ、「test」って。
おいおいおいおいおい
120デフォルトの名無しさん:2005/09/18(日) 08:43:08
D&Dしたファイルの名前を取得するにはどうしたらいいでしょうか?
121デフォルトの名無しさん:2005/09/18(日) 08:55:22
>>120
argv[]
122デフォルトの名無しさん:2005/09/18(日) 08:57:38
>>121
d
123デフォルトの名無しさん:2005/09/18(日) 10:03:03
初心者ですみません。
コンパイルしようとしたら
can't open:stdio.h :No such file or directory
とでます。
いままでコンパイルできたファイルもこれでできまくなりました。
もしかしたら環境変数を下手にいじくりまわしたせいなのでしょうか。
もしよかったら教えてください。
124デフォルトの名無しさん:2005/09/18(日) 10:14:17
> もしかしたら環境変数を下手にいじくりまわしたせいなのでしょうか。
そうかもね。

>もしよかったら教えてください。
個々のコンパイラや開発環境の話はスレ違いです。
もちろん>>120などもスレ違いです。
125120:2005/09/18(日) 10:54:30
えっと、argv[1]での取得はディレクトリも含まれるんですけど、ファイル名だけってのは取得方法あるんでしょうか?
126デフォルトの名無しさん:2005/09/18(日) 10:56:56
>>125
自分でぶった切れ。
127120:2005/09/18(日) 11:09:09
"ディレクトリ名\あいうえお.txt"
ってファイルをstrlenで文字数取得して、拡張子とピリオドの分減らして
strlen(argv[1]) - 4 ってやったらファイル名が文字化けしちゃって・・
ドコが間違ってるのかわかんない
128デフォルトの名無しさん:2005/09/18(日) 11:23:17
>>127
スレ違いと言われても尚居座っているお前が判らない。
初心者スレ辺りでコードを晒せば誰か答えてくれるんでない?
129デフォルトの名無しさん:2005/09/18(日) 11:23:22
>>127
ポインタと変数が分かってないでしょ。
先頭アドレス(ポインタ)+文字列の長さ(拡張子分差し引き)
ってやってる?
130デフォルトの名無しさん:2005/09/18(日) 11:42:38
>>120
はきだめC/C++下級者の質問箱
http://pc8.2ch.net/test/read.cgi/tech/1124256027/l50
131デフォルトの名無しさん:2005/09/18(日) 11:54:17
>>127
この質問の仕方を見るに Windows 使いと判断する。

このスレ的には strcpy, strtok, strrchr, strncpy あたりを駆使としか言えないが、
環境依存でいいなら _splitpath という選択肢もある。

ただ、Windows で D&D して得られるファイル名は
短縮形(例えば あほばかまぬけ.txt → あほば~1.txt)な点に注意。
これ以上の話は自分で調べて、
分かんなかったら Win32API質問箱 スレで聞け。
132デフォルトの名無しさん:2005/09/18(日) 11:57:24
>>131
相手にするから居座るんだろボケ
133120:2005/09/18(日) 12:06:03
>>128
ごめん、慌ててログみたがスレ違いとは言われてないような・・いわれてたらすぐ去ってました(汗

とりあえず去ります、失礼しました
134デフォルトの名無しさん:2005/09/18(日) 12:07:25
>>132
お前は相手にされなくても居座ってるようだけどなwww
135120:2005/09/18(日) 12:07:30
ぉ、いわれてた・・・orz
136デフォルトの名無しさん:2005/09/18(日) 12:16:17
>>124 てめぇじゃわかんねーってことか。
わかんねーくせに下手にでしゃべってんじゃねぞぼけ
137デフォルトの名無しさん:2005/09/18(日) 12:16:52
>>131
>ただ、Windows で D&D して得られるファイル名は短縮形

95、98はそうだったと思うけど、
NT、XPでは長いファイル名そのまま。
138デフォルトの名無しさん:2005/09/18(日) 12:23:59
こんにちは、教えてください。
テキストファイルの1行だけを削除することは、できるのでしょうか。
139デフォルトの名無しさん:2005/09/18(日) 12:27:11
できる
140デフォルトの名無しさん:2005/09/18(日) 12:39:09
どうすれば
141デフォルトの名無しさん:2005/09/18(日) 12:45:08
1.ファイル開く。
2.テンポラリファイルも開く。
3.ファイルから、テンポラリファイルへデータをコピーする。
4.削除したい行はコピーせずに飛ばす。
5.残りを全部コピーする。
6.両方ファイルをクローズ。
7.テンポラリから、元のファイルへ、ファイル全体を上書き。
おわり。
142デフォルトの名無しさん:2005/09/18(日) 12:47:50
1.ファイル開く。
2.ファイルないデータを全部メモリ上へ読み込み。
3.ファイル閉じる。
4.同じファイルを上書きモードでオープン。
5.削除したい行以外を全部書き込む。
6.ファイル閉じる。

こうすればテンポラリいらんわ。
143デフォルトの名無しさん:2005/09/18(日) 12:57:26
まあ乱暴ね。
メモリに全部読み込めないテキストファイルなんてない
ならばそれでも良いのかしら
144デフォルトの名無しさん:2005/09/18(日) 13:02:10
>>105
あー自分もそれで成績伸びたよー。良い本ですよね。
その後は先生が良書だって言ってたポインタ本で勉強してる。
いま猛勉強中なんですか?
頑張って下さい、お互い頑張りましょう。^^
145デフォルトの名無しさん:2005/09/18(日) 13:13:38
C言語の成績・・・専門学校か???
146デフォルトの名無しさん:2005/09/18(日) 13:14:15
>>136
質問者ですか?
まだまだ夏ですね。
147デフォルトの名無しさん:2005/09/18(日) 13:22:34
構造体のリストを出力する関数を書くとします

(1)最初はこう書いてた
void get_foolist(int *count, struct foo **list);

(2)なんか汚いなあと思い始めて、こうしてみた
struct foolist {
 int nelem;
 struct foo **list;
};
struct foolist *get_foolist(void);

(3)しばらくして、あれ?これでいいんじゃないの?と思った
struct foo get_foolist(void);

私の少ない経験では(3)の方法を使っているプログラムを
見たことがないのですが、何か致命的な欠点でも
あるんでしょうか?
148デフォルトの名無しさん:2005/09/18(日) 13:31:34
>>147
別に何も
149デフォルトの名無しさん:2005/09/18(日) 13:33:27
>>142
ディスクがいっぱいの時にあぼーん
150猛勉強中(59):2005/09/18(日) 13:44:56
>>114
そうですね、そういう感じがします。
とりあえず、俺は興味のある事に対して、どうしてそうなるのかっていう
考えを必ずしてしますので、覚えるべき所とそうでない所を割り切って、
勉強してりこうと思います。

>>144
ですよねー、基本中の基本っていいながら、スルーされがちな所をしっ
かりおさえてるから、自分に足りなかったとこと補える感じでいいです。
ポインタの本というのは、「C言語ポインタ完全制覇 」ってやつですか?
俺もこれよさそうとおもってたんですが、内容はポインタの事だけなん
ですかね?
151デフォルトの名無しさん:2005/09/18(日) 13:46:46
>>149
上書きでオープンするとサイズ0でしょ?

>>147
まず関数内でソースを開き、取得データも領域を準備しておかなければならなくなる。
3の戻りが関数内でアロケートしたメモリのアドレスを返すならそれでいけるが、
いろいろ制限がある。
すべて決めうちになるのは関数の再利用性がない。
もちろん、レジストリとか共通で利用するデータを使うならそれでいいが。

それかグローバル変数とかに格納すれば決めうちにはならなくなるが、
それだと関数の独立性がなくなり、複雑になると管理できなくなる。
152デフォルトの名無しさん:2005/09/18(日) 13:50:23
>>151
ディスク使ってるのが自分だけと思うな
エラー出たから消えました、と、エラー出たから更新できませんでしたじゃあ
被害の度合いが全然違うだろ
153デフォルトの名無しさん:2005/09/18(日) 13:56:32
誰だ俺のディスクを使ってるのは!
154デフォルトの名無しさん:2005/09/18(日) 14:00:22
俺俺、俺だよ俺。
155デフォルトの名無しさん:2005/09/18(日) 14:12:24
if文とかの条件式の型って、何でもいいの?
よく本には「0が偽で、0以外が真」と説明されてるけど、
int型とか、unsined型とか、ポインタ型とか、float型とか、
特に変換とかかからず、個別の型ごとに判別されてるのですか?

C++みたいに、bool型に変換されてから判別されるみたいな
感じとは違うの?
156デフォルトの名無しさん:2005/09/18(日) 14:12:47
>>152
自分だけだとしても、途中でエラーになったら
トランザクションを復帰できない >142 は
危険ですな。
まあ >>141 も、折角だから
7. 元ファイルを一時的な別の名前に変更
8. 新ファイルを元ファイルの名前に変更
9. 元ファイルを削除。
までやって欲しいところ。
(システムによっては unlink/link が適切か)
157デフォルトの名無しさん:2005/09/18(日) 14:13:14
>>152
そうか。
ポインタだけ先頭に戻して、最後は消せばいいんだな。
消し方知らないけど。
158デフォルトの名無しさん:2005/09/18(日) 14:17:10
>>156
そのやり方はファイルをロックしておかないと。

>>155
実際なんでもいい。
ただfloatはだめだろ。
159デフォルトの名無しさん:2005/09/18(日) 14:21:30
>>147
戻り値はポインタじゃないと、リストの先頭部分が解放できなくなる。

あと、リストを作るなら、リストサイズも返して欲しいところ。
戻り値が0なら失敗、それ以外なら成功という感じで成否判定にも使えるし。
(ポインタがNULLかどうかを見てもいいんだけどね)
160デフォルトの名無しさん:2005/09/18(日) 14:32:15
>>159
もしかして最初の一件を値で返し、2件目以降はそのつどメモリ割り当てなわけですか?
それだと最初の一件目は開放しなくていいわけですが、
そんな非効率なことするんですか?

そういうやり方するならC++でも使ったらどうかと思うんですがね。

メモリサイズが大きくなると、オーバーヘッドの大きい
Windowsのメモリアロケートを使うことになるからめちゃめちゃ遅いよ

ヒープだけで済む小さいのならC標準ので1件ずつアロケートしても使えるが、
そもそも開放がめちゃめちゃ大変だ。
データが壊されたらそっから先は開放できなくなるし。
161どりーむ:2005/09/18(日) 15:08:39
今ファイルの読み込みを試みようとしようとしてるんですが、
うまい事いきません。
もし足りない所があれば助言よろしくおねがいします。
コード

struct MovieItem{
long callNo;
char title[50];
bool status;
int frequency;
MovieItem *next;
};


162どりーむ:2005/09/18(日) 15:09:58
すいません。
貼り付ける場所間違えました^−^;
当方はC++ですので。
ではw
163デフォルトの名無しさん:2005/09/18(日) 16:06:04
>>138です。
>>141さん以下いろいろ教えてくださった皆様。
ありがとうございます。
実は、その場で、一行だけ削除する関数かなんかあればいい名と考えていましたが、
ないようで、
メモリを沢山食いそうで落ちてしまいそうな感じもあり、
テキストファイルの分割も考えに入れ、
教えていただいた方法で、やっていこうと思います。
ありがとうございました。
164デフォルトの名無しさん:2005/09/18(日) 16:32:49
>38,40
いつまでも、こだわるようで申し訳ありませんが、
例えば下記プログラムなんかreallocだけでスッキリ
と分かりやすい、と思われませんか?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{

char *jo;
jo = realloc(NULL,30 );
strcpy( jo, "Nissyは馬鹿じゃない、" );

jo = realloc( jo, 60 );
strcat( jo, "しかし、頭が固い!\n" );

printf( jo );

realloc( jo,0 );

return 0;
}
165デフォルトの名無しさん:2005/09/18(日) 16:33:54
>>164
思わない。最初のNULLをタイプするだけ無駄。
166デフォルトの名無しさん:2005/09/18(日) 16:39:14
>>164
jo=NULL;
とやってからループ内で1回だけ
jo = realloc( jo, size * i );
と書くんなら意味があるけどね。

size が0の時は開放のみなんだろうか?
167デフォルトの名無しさん:2005/09/18(日) 16:48:26
>166
>size が0の時は開放のみなんだろうか?

C言語辞典にはそう書いてありました。
別の本にもmallocやfreeの代わりに使える。
が、
それは好ましくない…とは。

168デフォルトの名無しさん:2005/09/18(日) 16:52:28
領域確保にはmallocなりcallocといったのがあるし
解放にはその名の通りfreeがあるんだから
それ使った方がすっきりするしわかりやすい
169デフォルトの名無しさん:2005/09/18(日) 16:53:51
アロケートしたものを全部開放してくれるsuperfreeが欲しい。
170デフォルトの名無しさん:2005/09/18(日) 16:54:07
>164
どう、こっちの方がもっとスッキリしない?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
char *po;

po = malloc( 30 );
strcpy( po, "確かに常識的ではない、" );

po = realloc( po, 60 );
strcat( po, "さらに、その上、馬鹿だ!\n" );

printf( po );

free( po );

return 0;
}
171デフォルトの名無しさん:2005/09/18(日) 17:13:25
struct vec { char *data, int capacity, int size };

void expand(struct vec *v, int n)
{
  if (v->capacity < n)
    v->data = realloc(v->data, v->capacity = n);
}

みたいのがあって、expand()はv->dataが0の場合にも呼ばれ得る、
みたいなケースなら、わざわざif()で分けるよりは
realloc()一本のほうがすっきりする、かも知れない。
172デフォルトの名無しさん:2005/09/18(日) 17:20:01
>>164
お前ならそう言い出すと思ったから、
おまえは俺ら常人とは違い、天才だと教えてやったろう。
天才は天才の集まる所でやっててくれ。何時までもウザイから。
173デフォルトの名無しさん:2005/09/18(日) 17:26:39
>>164
センスゼロ。
いいたい・やりたいことをいかにクリアに表現するか、そのためだけに
現在に至る言語の進歩があったと言っても過言じゃない。

「可能」「不可能」だけで言ったら、高水準言語なんてものはこの世に
いらなくなるんだよ。

「メモリを解放したい」んなら単にfree()と言え。それがそのものズバリ
であって、一番クリアだから。

realloc()は一般には「メモリを再確保する」するための関数だから、
そうしたいときに使え。realloc()をfree()やmalloc()の代わりに
使っているコードを見た人は、プログラマの真意をまず疑う必要が
出てくる。バグなのか、アホなのか、etc...
余計な手間がここで生じる。
174デフォルトの名無しさん:2005/09/18(日) 17:26:42
>>166>>171のようなケースなら、そう書く人いるだろうね。

>>164の場合は同じ関数使ってるから、
文字の関係で綺麗にかかれているように見える”のかもしれない”けど、
>>170のソースの方が自然に理解できると思う。

>>164のソースは正直コメント無しでぱっと見たら、一瞬???と思うよ。
175デフォルトの名無しさん:2005/09/18(日) 17:38:56
天才は放置で。
176デフォルトの名無しさん:2005/09/18(日) 17:41:17
>>164
ふつう、そういうのをしたかったら
そういう機能を持ったラッパー関数を作るんですよ
ライブラリの仕様変更にも追従できるし
177デフォルトの名無しさん:2005/09/18(日) 17:43:34
>>97
ソースを見渡したときに引数がないことが明示されていてわかりやすい。
178デフォルトの名無しさん:2005/09/18(日) 17:53:16
>>97
ANSI/ISO以前のいわゆるK&R Cにはプロトタイプが存在せず、
関数は
char *foo();
のように仮引数無しで宣言された。

ANSI規格においても、後方互換性の点からこのスタイルでの
宣言が認められ、その場合は(C++のように)「引数無し」
ではなく、古いC同様に「引数は任意であり型チェックはしない」
という意味とされた。そのため、「引数無し」を明示するために
別途voidが導入された訳だ。

179デフォルトの名無しさん:2005/09/18(日) 17:53:20
>>164の作るライブラリの関数プロトタイプって纏まってそうだなw
引数がこれの時はこうなって云々...
180デフォルトの名無しさん:2005/09/18(日) 17:56:32
>>164はgrep, tail, headなどのユーティリティを認めず
なんでもsedやawkでやる人。

で、
head -10よりsed 10qの方が美しくわかりやすいと信じて疑わない。
181デフォルトの名無しさん:2005/09/18(日) 18:09:52
もしくは赤ん坊
全ての会話が"ダァ"で成り立つと理解している
182デフォルトの名無しさん:2005/09/18(日) 18:14:23
1,2,3,ダァ!!!
183デフォルトの名無しさん:2005/09/18(日) 18:15:44
兵卒だろ
「イエスサー」以外の言葉を話せないw
184猛勉強中(59):2005/09/18(日) 18:25:48
>>177>>178
なるほどです!
わざわざ返事くれてありがとうございます。
今日は、「ポインタ完全制覇」っていう本がいい感じだったんで、
読んでますー。

・配列の中身を参照する時に、a[i]とかするけど、この[]は配列とは全く無関係だ。
・Cには多次元配列は存在しない。

この二つはなかなか知られてないみたいですね。
185デフォルトの名無しさん:2005/09/18(日) 18:31:41
>>184
なんか、誤解を招く表現だな。
気をつけろよ。へんな理解の仕方すると、混乱するぞ。
186デフォルトの名無しさん:2005/09/18(日) 18:32:19
>・配列の中身を参照する時に、a[i]とかするけど、この[]は配列とは全く無関係だ。
意味ワカンネ
a[i]が*(a+i)のシンタックスシュガーである つうこと?
>・Cには多次元配列は存在しない。
Cを書く人間なら全員知っているのでは?
・・・ああ。配列の配列を使ったことのない人もいるか
187猛勉強中(59):2005/09/18(日) 18:33:54
>>185
これに対する説明が書いてないんですが、これってどういう事なんですかね?
多次元配列は存在しないなら、

word[256][256]

とかは何なんでしょう・・・
188デフォルトの名無しさん:2005/09/18(日) 18:37:58
>>187
多次元配列、これは二次元配列。
189デフォルトの名無しさん:2005/09/18(日) 18:41:04
配列の配列、だろが
190デフォルトの名無しさん:2005/09/18(日) 18:41:27
>>187
説明もなくそんなわけわからん主張してるのか、その本?
結構有名だから、マトモな本かとおもっていたが、大丈夫かそれ?
ちなみに、俺は読んだことない。

>・配列の中身を参照する時に、a[i]とかするけど、この[]は配列とは全く無関係だ

無関係ってことはない。メモリ上の連続したエリアを配列として使用するときに[]を使う。
ちなみにこれは演算子です。

プログラミング言語には、同じものを表現するのに複数の異なる方法がある場合があり、
これをシンタックスシュガー(構文糖)という。
特に、Cでは、本来異なる概念である「ポインタ」と「配列」が、表現上同じように見えたり、
暗黙に変換されたりするシンタックスシュガーがある。
わかりやすいところでは、関数の引数で、

void foo(int a[])

こういう宣言方法があるが、これは配列を表していない。見た目は配列に似ているがこれは

void foo(int *a)

の別の記述法なだけ。

だからといって、a[] と *a が常に同じわけではないことに注意。
関数の引数の表現時にのみ発生するシンタックスシュガーがあり、いわばこれは特例だとい
うことをゆめゆめわするるべからず。
191デフォルトの名無しさん:2005/09/18(日) 18:43:40
俺は、a[i]が、i[a]とも書ける、ってことを、「ポインタ完全制覇」を
読んで初めて知ったな。それ以外で驚いたことはなかった。
192デフォルトの名無しさん:2005/09/18(日) 18:45:52
俺は、a+iが、i+aとも書ける、ってことを、「たしざん完全制覇」を
読んで初めて知ったな。それ以外で驚いたことはなかった。
193デフォルトの名無しさん:2005/09/18(日) 18:48:08
>>191
それ、ちゃんと理由も書かれていたか?
かかれていなけりゃ、そりゃ糞本かもだな。
194猛勉強中(59):2005/09/18(日) 18:48:18
>>188>>189
二次元配列以上のものを多次元配列っていうんじゃないんですか?
本によっては、「Cでは多次元配列を定義できる」ってなってるし
いまいち理解に困ります。
配列の配列ってのはわかりますが、それは多次元配列(2次元配列)
とはいわないんですかね?

>>190
すっごいわかりやすいです。
テキストファイルに保存しときますw
いやー、まじでこのスレ良すぎる。
すごい人達全員にカテキョしてもらってるみたいだ。
195デフォルトの名無しさん:2005/09/18(日) 18:48:58
>166
どうなんでしょう?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
//必ずポインタをNULLで初期化する安全第一のプログラマにとっては

char *jo=NULL;

jo = realloc(jo,30 );//と統一した書き方が出来る。
strcpy( jo, "Nissyは馬鹿じゃない、" );

//さらに、誤ってもう一度
jo = realloc(jo,30 );

//と、やっても悪影響はない。
//jo = malloc( 30 );と2回やると中味が消えてしまうけど。

jo = realloc( jo, 60 );
strcat( jo, "しかし、頭が固い!\n" );

printf( jo );

realloc( jo,0 );
//但し、これをもう一度やったらOUT!だけどね。freeも同じだけど。
return 0;
}
196デフォルトの名無しさん:2005/09/18(日) 18:50:23
先ず、「多次元配列」の定義を言ってくれ。
197デフォルトの名無しさん:2005/09/18(日) 18:53:29
>>197
うん君が正しいよ。目から鱗だ有難う。
198デフォルトの名無しさん:2005/09/18(日) 18:54:02
やっちまったぜwwwwwww
>>197>>195宛な
199デフォルトの名無しさん:2005/09/18(日) 18:58:57
>>187
>・Cには多次元配列は存在しない。

ある意味では正しいが、ある意味では正しくない。
プログラミング言語(の実装)が多次元配列をどうあつかっているかは、いろいろあるが、
多次元配列の実装は2つに分類される。

(1)まとまったメモリエリアを一次元配列として確保し、それは次元の数だけ分割して多次元配列として使う。
Cはこの方法をとっていて、
 int a[10][10];
 int data = a[y][x]; 
は内部的には、
 int a[100];
 int data = a[ y * 10 + x]:
と実装されているかもしれないということ。
見方によってはこれはあくまでも一次元配列であり、「多次元配列は存在しない」といえるかもしれない。

(2)配列への配列をつかった表現。
 int a[10], b[10];
 int *p[2];
 p[0] = &a[0]; p[1] = &b[0];
こうすることで、data = p[y][x] というアクセス方法が取れる。
この場合、a, と bは必ずしも、連続したメモリ上にある必要はなく、またサイズも同じである必要がない。
可変長配列をサポートする言語では、たいていこれに似た方法がとられている。

どっちも、結果的に多次元配列を扱うことはできている。
あとは何を基準に判断するかの問題。
200デフォルトの名無しさん:2005/09/18(日) 18:59:12
Cには無いんだけど dat[a,b]といった表現をするのが2次元配列

dat[a][b]ってのが配列の配列
dat[a]ってだけで意味があるところ(使う事ができる)なのがミソ
201199:2005/09/18(日) 19:00:22
× それは次元の数だけ分割して多次元配列として使う。
○ それを次元の数だけ等分割して多次元配列として使う。
202デフォルトの名無しさん:2005/09/18(日) 19:10:11
>>195
コテハン名乗ってくれ。あぼーんするから。
203猛勉強中(59):2005/09/18(日) 19:11:10
>>199
また保存行きですw
なるほどー、Cでは(1)の方を使うから、解釈の仕方で両方の意味に考えられると。
で、(2)の方なんですが、これは確実の多次元配列として扱えてますよね?
これがCで使えるなら、多次元配列としていいような気がします。

>>200
呼び方の問題なんですかねー、多次元配列として扱う>>199の(2)のようにできるなら
多次元配列は存在するといってもいい気がしますが、dat[a,b]っていう書き方ができ
ない以上、多次元配列は存在しないと言わざるを得ないって事なのかな。
204デフォルトの名無しさん:2005/09/18(日) 19:11:23
>>195
> realloc( jo,0 );
> //但し、これをもう一度やったらOUT!だけどね。freeも同じだけど。

freeの代わりに使うとしても、
jo = realloc( jo,0 );
と、常に戻り値を入れておけば事故もないんじゃないかな。

free したいのかどうかはコードなめないと分からないと思うけど。
205デフォルトの名無しさん:2005/09/18(日) 19:11:25
>>200
FORTRAN77 は dat(a, b) とか書けるけど、
dat(1, b) というのを関数に渡して、
その関数内部では列行列であるかのように扱うことができるぞ。
206猛勉強中(59):2005/09/18(日) 19:31:48
今日夜バイトいったら、一週間くらいでかけるんで、しばらく書き込めないです。

けど、ノーパソと「Cの掟」と「ポインター完全制覇」もって、勉強はするんで、
質問したい事とかめっちゃたまるっぽいですが、そん時はよろしくお願いします。
207猛勉強中(59):2005/09/18(日) 19:35:39
てか、この掲示板て携帯からみれるんですか?
208デフォルトの名無しさん:2005/09/18(日) 19:36:49
>>207
ウザいからもうこないでくれ
209猛勉強中(59):2005/09/18(日) 19:40:22
すいません、いけました。
おふぉな質問して申し訳ない。
210デフォルトの名無しさん:2005/09/18(日) 19:50:09
ファイル入出力でつまずいてます。 なにかいい本ありますか?
初歩的なことからわからないんです。

できれば、ファイル入出力だけでなく、C全般についてのいい本もお願いします
211デフォルトの名無しさん:2005/09/18(日) 19:52:30
Cの場合は、配列の配列(敢えて言うなら多重配列)を多次元配列のように扱えると解釈するべきではないかな。

>必ずポインタをNULLで初期化する安全第一のプログラマにとっては
安全第一というより、安直第一というべきだろう。
そういう、「0フィルしておけば安全」という間違った考えがバグを生みデバッグを困難にすることに繋がることも理解すべきだ。
212デフォルトの名無しさん:2005/09/18(日) 19:55:45
すいません。C言語で立方体のさいころをつくりたいのですが
これは、展開図に直して連結リストで作ってみると考えたのですがどうでしょうか?


213デフォルトの名無しさん:2005/09/18(日) 19:57:00
>>212
> C言語で立方体のさいころをつくりたい

立方体さいころ組立工作機械の制御でもやるのかね?
214デフォルトの名無しさん:2005/09/18(日) 19:58:08
>>212
それはCの質問なのか?
アルゴリズムの質問のように読めるのだが。
#そうだとしても、言葉足らずではあるが。
215デフォルトの名無しさん:2005/09/18(日) 20:00:42
>>212
稜線のリストか何かを作りたいのか?
216デフォルトの名無しさん:2005/09/18(日) 20:03:03
たぶん宿題だろ
217デフォルトの名無しさん:2005/09/18(日) 20:06:32
>>213
以前就職活動で受けてた会社の入社テストに、さいころの展開図の問題があったんです。
内容はさいころをこの角度から見て(3面だけ見えてました)
展開図に直すと次のいずれになりますか?というものだったんですけども、、、。

それをC言語でつくってみようと思ったんです。
218デフォルトの名無しさん:2005/09/18(日) 20:09:11
でプログラムでなにがどうなるのがつくりたいんだ?
219212:2005/09/18(日) 20:12:32
皆さんレスありがとうございます。すいません、言葉足らずでした。
今からアルゴリズムの本の「連結リスト」の部分をわからないなりに読んでみようと思います。
また、行き詰まったらすいませんが知恵を貸して下さい。
220デフォルトの名無しさん:2005/09/18(日) 20:12:34
つーか、スレ違いを相手にするのは鬼違い。
221デフォルトの名無しさん:2005/09/18(日) 20:25:06
「多次元配列がない」という言葉が意味したいことは、
int x[A][B]; の時に x[a][B-1] と x[a+1][0] のメモリが
連続してることが規格上保証されている、
ということを言いたいわけなのだろうか?
離してもいいものも作ろうと思えば作れるが、
言語的にパッと書けるものでもない、と。

もしくは、内部的には x[a][b] は (*x)[a * B + b] のように
一次元的なインデックスに直され、B という値が再利用されるので、
配列へのポインタで int(*)[B] のように
サイズが必要になってしまうというようなことを言いたいのか。
x を int** へ代入できないよ、全くの別物だよ、
というようなことが言いたいのか。
222デフォルトの名無しさん:2005/09/18(日) 20:40:32
Cでは単に配列の配列を多次元配列の替わりにしてるから
サポートレベルが低いってことじゃまいか。

実際ただの(一次元)配列に比べて不便で扱いづらいでしょ、
例えばサイズの不定な多次元配列を扱ったりする場合に。
223デフォルトの名無しさん:2005/09/18(日) 20:43:22
なるほどね。それが一番的確な回答に思える。
224デフォルトの名無しさん:2005/09/18(日) 20:44:47
多次元配列って、普通サイズ固定じゃないのかな。
行列にしたって、行や列が可変サイズじゃ意味がないし。
225デフォルトの名無しさん:2005/09/18(日) 20:47:40
>>224
サイズを問わない汎用的な関数を書きたい
というケースなら珍しくないでしょ?
226デフォルトの名無しさん:2005/09/18(日) 20:53:02
どのみちCでは静的に確保しない限りサイズは知りようがないんだが
227デフォルトの名無しさん:2005/09/18(日) 20:55:41
そのへん、C99ならある程度の可能性がある。
どこまでで限界が来るか、一度試してみたいな。
228デフォルトの名無しさん:2005/09/18(日) 22:15:43
>>226
分かってて言ってるんだろうが

ただの1次元配列の場合は
void vector_fn(int array[], int size)
のようにすればよい。

2次元配列の場合は
void matrix_fn(int array[], int m, int n)
のようにして、キャストを使い1次元配列の「ふり」をして渡すしかない。
で、関数内では1次元配列上で明示的にオフセット計算をする羽目になる。
マクロを使えば多少は楽になるとは言え、これは醜いし、不便だろう。
少なくとも、Cが多次元配列に対して良きサポートを提供しているとは
お世辞にもいえない。
229デフォルトの名無しさん:2005/09/18(日) 22:24:28
それは多次元というより、配列そのもののサポート状況じゃないか?
一次元配列でも、サイズ情報は別に渡さなきゃならないわけだし。
230デフォルトの名無しさん:2005/09/18(日) 22:47:04
そういう時は動的に確保するか
ポインタテーブル作れってことだけど、面倒っちいわな。
void foo(int array[][B]) のようなこともできはするけど、サイズ固定だしな。
231デフォルトの名無しさん:2005/09/19(月) 01:24:25
初歩的な質問なんですが、
char buf[128];

char *buffer = malloc(128);

ってどっちがいいんですか?
232デフォルトの名無しさん:2005/09/19(月) 01:28:29
用途を言え
233デフォルトの名無しさん:2005/09/19(月) 01:30:05
>>231
ケースバイケースです。以上。
234デフォルトの名無しさん:2005/09/19(月) 01:30:47
>>231
普通は
 ・確保したバッファを呼び出し元の関数に返したい場合
 ・途中でバッファのサイズを拡張する可能性がある場合
 ・サイズが128ではなくてデカ過ぎる場合
はmallocを使う。それ以外なら上で良いでしょう。
235デフォルトの名無しさん:2005/09/19(月) 01:48:56
>>232
デバッグ用にprintfっぽく使えるメッセージボックスを作ろうと思ったんですが・・・
しょっちゅう呼び出す関数は確保→開放ってやると遅くなるかと思って・・・

>>234
ありがとうございます。
236デフォルトの名無しさん:2005/09/19(月) 02:05:02
>>235
デバッグでパフォーマンスは気にしない。
237デフォルトの名無しさん:2005/09/19(月) 02:29:41
デバッグでなくても、
メッセージボックスの表示のオーバーヘッドで
全く気にならないはずだ。
238デフォルトの名無しさん:2005/09/19(月) 02:31:56
>>211
メモリを保持してないポインタはNULLにしておくべきだろ
アロケート目的に使わないならfreeしないから関係ないけど。

>、「0フィルしておけば安全」という間違った考えがバグを生みデバッグを困難にする
それはどんな状況ですか?
そういう経験はしたことないんですけど。
239デフォルトの名無しさん:2005/09/19(月) 02:59:03
×0フィルしておけば安全
○NULL フィルしておけば、NULL フィルしないよりは安全

NULL フィルしたからといってバグがなくなるわけではないが、バグ検出に役に立つ。
NULL へのアクセスは大抵の環境で実行時エラーが出る。
NULL フィルしなかった場合は、偶然どこかの正常なアドレスを指してる可能性がある。
例えば、昔ポインタとして使われたスタック領域と同じところに
そのポインタが割り当てられたときなどは、可能性としては十分あり得る。

代入が直後にある場合などは必要ないと思うかもしれないし、
実際入れなくても現時点では何も問題はないが、
後の拡張やコードの移動により問題が発生する可能性はある。
NULL フィルのオーバーヘッドが気になるような状況でもない限り、
NULL フィルしといた方が安全ってのは正しい。
240デフォルトの名無しさん:2005/09/19(月) 03:07:09
わざわざデバッグビルドで固定値を突っ込んでくれるコンパイラもあるというのに……
241デフォルトの名無しさん:2005/09/19(月) 03:12:14
0とNULLの区別がつかない人って、初心者に良くいるよね。
242デフォルトの名無しさん:2005/09/19(月) 04:01:36
>>241
詳しく
243デフォルトの名無しさん:2005/09/19(月) 04:23:47
>>241
それは紛らわしい書き方なんだが、
かといって正確に書こうとするとややこしい。

>>242
http://www.kouno.jp/home/c_faq/c5.html#0
244デフォルトの名無しさん:2005/09/19(月) 04:54:06
>>240
それはコンパイラに依存すると言うことですよね?
いちいちコンパイラの仕様を確認しなければならず、
違っていればやり方を変えなければならないと言うことですよね?

デバッグビルドとリリースビルドで動作が違ってくるって事ですよね?
デバッグビルドで取り除けるバグを、リリースビルドで見つけなければならないと言うことで、
デバッグが大変になりますよね?
245デフォルトの名無しさん:2005/09/19(月) 04:57:23
阿呆はだまってろよ
246デフォルトの名無しさん:2005/09/19(月) 05:07:28
でも、ぶっちゃけリリース版でしか再現しないバグってのがあるから困りもんだ。
247デフォルトの名無しさん:2005/09/19(月) 05:09:44
>>245
自分の主張と、間違ってると思われる発言を書けよ

自分のアホは指摘されたくないってか?
248デフォルトの名無しさん:2005/09/19(月) 05:20:59
>>240
もしかしてコンパイラに固定値突っ込ませてデバッグ後、
固定値突っ込むのをOFFにするオプションつけたデバッグビルドでもデバッグするのかな?

少しでもコードを取り除きたいならそれもいいかもね。
めんどくさ。
249デフォルトの名無しさん:2005/09/19(月) 05:22:12
>>246
ねーよwwwwwwwwwwww
250デフォルトの名無しさん:2005/09/19(月) 05:25:00
>>247が何故かものすごく必死な件に付いて
251デフォルトの名無しさん:2005/09/19(月) 05:33:59
悔しかったらCYGWINの/usr/bin/share/docと/usr/bin/share/manを
間違って上書きしちゃったどうしようdocだけ最インストできそうだけど
manはどうしようってなってる俺をどうにかしてみろよおめーら
252251:2005/09/19(月) 05:36:21
ワワワワワ
激しく誤爆しちまったじゃねえか
ついでにすれ違い覚悟で聞いてみるけど
どうしたら一番効率よくもどにもどせれる?
253デフォルトの名無しさん:2005/09/19(月) 05:36:34
>>249
VC5のコンパイラのバグでlongdoubleの演算最適化ができなかった。
リリースビルドでしか再現しなかった。
MSにコード渡してチェックしてもらったけど、コーディングの問題はないと言われた。

プラグマでその部分の最適化を外して対応した。

>>250
実務未経験プログラマから見れば必死に見えるのか。
254デフォルトの名無しさん:2005/09/19(月) 05:40:57
>>251
コピー元ファイル一覧をつくり、
delコマンドのバッチファイルにし、実行する。
255デフォルトの名無しさん:2005/09/19(月) 05:49:50
あ、ユニックスだっけ?
DOSでもいいけど
ファイル一覧をパイプでdelコマンドに渡すのが一番早いかな。
でも僕は使い慣れてないからテストしてからじゃないと実行しない。
テストするならバッチに書いたほうが確実で早いと。

VZエディタからのキーボードマクロにはお世話になった。
256デフォルトの名無しさん:2005/09/19(月) 10:11:11
100げと
257デフォルトの名無しさん:2005/09/19(月) 11:16:07
>>256
ヘキサかよw
258デフォルトの名無しさん:2005/09/19(月) 11:44:07
このスレのまとめサイト作りました
ttp://aferieito.gozaru.jp/
259デフォルトの名無しさん:2005/09/19(月) 11:50:56
華麗にスルー
260デフォルトの名無しさん:2005/09/19(月) 11:56:05
アフィリエートの綴は、aferieitoじゃなくて、affiliate
261デフォルトの名無しさん:2005/09/19(月) 13:44:52
>>249
私は一回ありましたよ。
詳細は忘れてしまいましたが法線を求めた時にデバッグビルドだと0、
リリースビルドだとINFになりました。
数学関数の挙動に違いがあったとかそんな感じです。
262デフォルトの名無しさん:2005/09/19(月) 14:02:44
マクロについて質問です。
メモリリークを調べるため、
自作のアロケーターでmalloc関数群を隠そうと思います。

void *chk_malloc(size_t size, file, line) {

}
#define malloc(size) chk_malloc(size, __FILE__,__LINE__)

こんな感じです。

この場合、

int (*f)() = malloc;

の様に値として代入が発生した場合は関数マクロは効力が発揮できませんが、
この場合でもchk_mallocを代入するように細工する方法はないでしょうか。

#define malloc chk_malloc
とすると fileとlineの情報が欠落してしまいます。
263デフォルトの名無しさん:2005/09/19(月) 14:16:24
>>262
グローバル変数へパラメータを追い出してみるのはどうだろう

const char*chk_malloc_file;int chk_malloc_line;
void* chk_malloc_(size_t sz){

}
void*(*chk_malloc(const char*file,int line))(size_t){
    chk_malloc_file = file;chk_malloc_line = line;
    return chk_malloc_;
}
#define malloc chk_malloc(__FILE__,__LINE__)

まぁこの実装だと同時に2箇所以上で使うと破綻するけど
264デフォルトの名無しさん:2005/09/19(月) 14:17:13
>>263
ありがとうございます。
面白いですね。
試してみます。
265デフォルトの名無しさん:2005/09/19(月) 14:21:11
>>262
そりゃ、関数ポインタ自体に file と line 用の引数がない限り、どうしようもないわな。

#ifdef NDEBUG

typedef void* (*malloc_fp_t)(size_t size);
#define MALLOC_FP malloc
#define MALLOC_CALL(fp, size) fp(size)

#else

void* chk_malloc(size_t size, const char* file, int line);

typedef void* (*malloc_fp_t)(size_t size, const char* file, int line);
#define MALLOC_FP chk_malloc
#define MALLOC_CALL(fp, size) fp(size, __FILE__, __LINE__)

#define malloc(size) chk_malloc(size, __FILE__, __LINE)

#endif

malloc_fp_t fp = MALLOC_FP;
char* buf = MALLOC_CALL(fp, size);

こんなところだと思うが・・・。
266263:2005/09/19(月) 14:21:22
よく考えると2段の関数にしなくてもこれで充分だった

const char*chk_malloc_file;int chk_malloc_line;
void* chk_malloc(size_t sz){
    return malloc(sz);
}
#define malloc (chk_malloc_file = __FILE__ , chk_malloc_line = __LINE__ , chk_malloc)
267デフォルトの名無しさん:2005/09/19(月) 14:24:24
>>263
それだと、関数ポインタを使ったとき(メモリを確保したとき)の情報じゃなくて、
関数ポインタに代入したときの情報が表示されてしまうと思うのだが。
発想の面白さは買うけど。
268デフォルトの名無しさん:2005/09/19(月) 14:28:37
>>265-267
大変勉強になります。
ありがとうございます。
269デフォルトの名無しさん:2005/09/19(月) 14:32:10
#define MALLOC_CALL(fp, size) (fp)((size))
#define MALLOC_CALL(fp, size) (fp)((size), __FILE__, __LINE__)
#define malloc(size) chk_malloc((size), __FILE__, __LINE)

こうしといた方が安全か。
270デフォルトの名無しさん:2005/09/19(月) 15:03:21
mallocなんてキチガイじみたものを使わないのが正解。
271デフォルトの名無しさん:2005/09/19(月) 15:05:57
>>270
C++ならともかく、Cでmalloc無しってどうすればいいんだよ。(calloc realloc をつかえとか言うなよ)
272デフォルトの名無しさん:2005/09/19(月) 15:09:40
>>271
API使えって句とかと。
273デフォルトの名無しさん:2005/09/19(月) 15:10:30
は?
274デフォルトの名無しさん:2005/09/19(月) 15:10:43

 ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
          ______
         /:::::::::::::::::::::\
       /::::::::::::::::::::::::::::::::\
       |::::::::::::::::       |
       |::::::::::::::: ∪ \,, ,,/)
       |::( 6::ー──◎─◎|
        ノ::: (∵∴∪ ( ・ ・))
     /      ∵    3 丿    ブフィ
    /\    U   ___ノ
  /   .\      ____ノ\
        \______ノ  .\
275デフォルトの名無しさん:2005/09/19(月) 15:16:53
>>271
realloc じゃないか? 上のアレ。
276デフォルトの名無しさん:2005/09/19(月) 15:30:21
過去スレに居たな malloc() なんて必要無いって言ってたの。
スタックに予め大きく取って分ければ良いとか言ってたっけな。
そいつもかなり鬱陶しかった。
277デフォルトの名無しさん:2005/09/19(月) 15:42:56
スタックじゃなくてヒープだろw
278デフォルトの名無しさん:2005/09/19(月) 15:47:27
0で初期化が必要って状況じゃない限りmalloc使うわな
279デフォルトの名無しさん:2005/09/19(月) 16:11:57
それよりcallocの2つの引数の使い方が、謎。
280デフォルトの名無しさん:2005/09/19(月) 16:36:14
>>279
お好きなように。プロジェクト単位で使い方のルールが統一されていると読み易くて宜しいかと。
281デフォルトの名無しさん:2005/09/19(月) 16:47:54
calloc()とfread()はセンスねーなと思うな
282デフォルトの名無しさん:2005/09/19(月) 16:55:19
fread は別に構わんと思う。
エラー時に、中途半端にデータが埋められるってのがないから。
でも、calloc はよく分からん。
何か、環境依存で問題があったりするんだろうか。
283デフォルトの名無しさん:2005/09/19(月) 17:05:28
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html
デフォルトでは、Linux は楽観的メモリ配置戦略を用いている。
つまり、 malloc() が NULL でない値を返しても、そのメモリが
実際に利用可能であることが保証されない。これは本当にまずいバグである。


Linuxてこわいな。
284デフォルトの名無しさん:2005/09/19(月) 17:10:29
え、Linuxってそんなにも糞だったの?
285デフォルトの名無しさん:2005/09/19(月) 17:11:21
Linux >>>>>>>>>> Windows Seriese
286デフォルトの名無しさん:2005/09/19(月) 17:21:43
カーネルのバージョンが十分に最近のものであれば、
このメモリを割り当て過ぎる動作を以下のコマンドで無効にできる。

# echo 2 > /proc/sys/vm/overcommit_memory
287デフォルトの名無しさん:2005/09/19(月) 17:30:15
>>286
だから、ソフトウェアが普通に組まれてても、
コマンド発行するまで危険な動作をする可能性があるということでしょ。

素人がLinux構築するとバグだしまくりなのは、
素人が使うことを前提としたWindowsとはやはり違うということで。

ま、Linux単体で使う人もあまりいないでしょうけど、
Linuxを盲目的に信奉すると危険てことですね。
288デフォルトの名無しさん:2005/09/19(月) 18:11:52
そんなレベルの話じゃないような気がする。
はやくバグフィクスしろよ。
289デフォルトの名無しさん:2005/09/19(月) 18:38:09
それってマニュアルのバージョンが古いだけちゃうんかと
290デフォルトの名無しさん:2005/09/19(月) 19:04:10
古いとしても12年も更新されてないのか。
やる気0だなw
291デフォルトの名無しさん:2005/09/19(月) 19:11:58
今更だが上の配列の方の話で…
今まで1次元配列の方が早いだろうと思って多次元配列を1次元で書いてたんだが、>>199見る限り速度的にそんなに差はないってこと?
292デフォルトの名無しさん:2005/09/19(月) 19:14:16
>>291
あんま変なことしてると、
最適化がうまく効いてくれないかもしれないぞ。
293デフォルトの名無しさん:2005/09/19(月) 19:16:59
>>291
んなことが気になるぐらいならasmのソースでも比較すりゃいいじゃねえか
294デフォルトの名無しさん:2005/09/19(月) 19:24:27
僕の人生も最適化できたらなァ
295デフォルトの名無しさん:2005/09/19(月) 19:28:17
>>294
人生が環境依存になりますがよろしいでしょうか?
296デフォルトの名無しさん:2005/09/19(月) 19:54:15
配列へのポインターを返す関数を作りたいと思います

int   ReturnValue[5][5];と宣言して
return ReturnValue;としたいのですが,

関数宣言の仕方が分かりません<m(__)m>

int** ThisFunction();これではだめでした!
このint**がエラーのようですが,正しくはどのように宣言するのでしょうか?
297デフォルトの名無しさん:2005/09/19(月) 19:56:05
俺の人生、最適化の前の構文解析あたりでつまずく・・・
298デフォルトの名無しさん:2005/09/19(月) 20:20:53
誰か人生をデバッグしてください。
299デフォルトの名無しさん:2005/09/19(月) 20:31:11
>>296
一応型だけを見れば

int (*ThisFunction())[5];



typedef int ArrayType[5];
ArrayType* ThisFunction();



typedef int (*ReturnType)[5];
ReturnType ThisFunction();

で、int** がダメな理由は >>221

ただ、配列を内部変数として取ってるのに
そうやって返すことはできないぜ。
300デフォルトの名無しさん:2005/09/19(月) 20:40:52
>>299
int (*ThisFunction())[5];でできました!
ありがとうございます

全く予想付かない形でした

>>ただ、配列を内部変数として取ってるのに
>>そうやって返すことはできないぜ。
実際はクラスの中の変数を,Public関数から返します
301デフォルトの名無しさん:2005/09/19(月) 21:08:29
C++ ジャン!
まあ、C++ 関係ない話だったからいいけどさ。
302デフォルトの名無しさん:2005/09/19(月) 21:25:13
memsetを使うとchar型の配列を高速で初期化できます
ところでint型の配列を高速で初期化する方法はないのでしょうか?

int BigArray[100][100];
for(int x=0;x<100;x++){
for(int y=0;y<100;y++)
BigArray[x][y]=10;
}
↑これを高速化したいのです!
303デフォルトの名無しさん:2005/09/19(月) 21:31:04
>>302
memset使えばいいじゃないか
304デフォルトの名無しさん:2005/09/19(月) 21:39:05
memsetのほうが高速という保証はどこにも無いと思うんだが
305デフォルトの名無しさん:2005/09/19(月) 21:42:19
>>303
memset はバイト単位じゃねぇか
306デフォルトの名無しさん:2005/09/19(月) 21:43:01
>>302
for(int i = 0; i < 10000; i++) {
 BigArray[0][i] = 10;
}
で少しくらいは速くならないかな?
307デフォルトの名無しさん:2005/09/19(月) 21:44:13
>>302=305

int もバイト単位でアクセスできますが?
308デフォルトの名無しさん:2005/09/19(月) 21:48:22
>>307のレスの意味が分からない
309デフォルトの名無しさん:2005/09/19(月) 21:50:15
int BigArray[100][100] = {0};

これがはやいんじゃねーの?
310デフォルトの名無しさん:2005/09/19(月) 21:52:17
>>307 >>309
よく見ろ。0 じゃなくて 10 で埋めるんだぞ?
311デフォルトの名無しさん:2005/09/19(月) 21:59:54
memsetの定義は
void *memset(void *s, int c, size_t n);
で。
速度云々は別としてmemsetで問題ないと思う。
312デフォルトの名無しさん:2005/09/19(月) 22:00:54
>>310
313デフォルトの名無しさん:2005/09/19(月) 22:02:36
>>311
てことは、逆にキャラ配列で10 padding するには、0x0a0a0a0a で生めにゃならんのか?
そういう使い方したことないから、気づかんかった。
314デフォルトの名無しさん:2005/09/19(月) 22:04:42
>>311-312
何を言っとるんだw

c の型は int だけど、実際に使われるのは下位1バイトだけだぞ!
c の型が int なのは、標準関数の引数には char を使わないから(ポインタ除く)。
315デフォルトの名無しさん:2005/09/19(月) 22:08:14
>>314
memsetは0で初期化する場合はintにも使えますが,10では無理です
316デフォルトの名無しさん:2005/09/19(月) 22:10:00
>>315
だから、さっきからそう言ってるじゃないか。
317デフォルトの名無しさん:2005/09/19(月) 22:13:18
初期化部で
int BigArrayBuf[100][100];
for(int x=0;x<100;x++){
for(int y=0;y<100;y++)
BigArrayBuf[x][y]=10;
}
ってしといて、使うとこで
int BigArray[100][100];
memcpy(BigArray,BigArrayBif,sizeof(BigArray));
ってすりゃええやん
318デフォルトの名無しさん:2005/09/19(月) 22:16:57
高速化したら幸せになるのか?
319デフォルトの名無しさん:2005/09/19(月) 22:18:07
いつもの自己満足
320デフォルトの名無しさん:2005/09/19(月) 22:19:41
大量のバッファ(メモリ)にアクセスするのと、代入していくのとだと、
代入の方が速い気がするけど、実測してみないと結論は出せぬ。
321デフォルトの名無しさん:2005/09/19(月) 22:20:34
int BigArrayBuf[100][100] = {10,10,10....10};
でいいじゃん
10000個の要素はawkなりPerlなり前処理で
自動生成すればいい
322デフォルトの名無しさん:2005/09/19(月) 22:25:16
memsetで初期化とか言わないでほすぃ
初期化は宣言と同時に行うものだよ









うざがれそうだが…
323デフォルトの名無しさん:2005/09/19(月) 22:31:03
プログラム中に初期化したい時もない?
324デフォルトの名無しさん:2005/09/19(月) 22:37:57
文法における初期化とは別の話だぞ?
作業としての初期化だ。
325デフォルトの名無しさん:2005/09/19(月) 22:44:41
混乱するから混同すんなって言ってんじゃないの?w
326SSE2依存:2005/09/20(火) 02:49:10
#include <emmintrin.h>

void foo()
{
  __declspec(align(16)) int BigArray[100][100];
  int i;
  const __m128i v = { 10, 10, 10, 10 };

  for ( i = 0; i < 100 * 100; i += 4 ) {
    _mm_store_si128( (__m128i*)&(BigArray[0][i]) , v);
  }
}
327デフォルトの名無しさん:2005/09/20(火) 02:51:02
>>321
約40KBバイナリファイルサイズが増えます
328デフォルトの名無しさん:2005/09/20(火) 06:08:46
VC++6.0でやってます
scanfで数値を一文で横に入力するようにするにはどのようにプログラムすればいいでしょうか?
100 200 300 と入力する感じにしたいのです
よくわからなかったので
scanf("%d %d %d",&a,&b,&c)みたいにやってみたのですが
これだと縦に
100
200
300
と入力するようになってしまいます
やりかた教えてください

あと小数点つき123.45とか入力した場合
途中で終わってしまいます
小数点入り数値を入力しても大丈夫なやり方も教えてほしいです
329デフォルトの名無しさん:2005/09/20(火) 06:24:07
>>328
VC++スレの人だな
変換指定子が%d %d %dなら、「100 200 300」だろうと
「100[ret]200 300」でも「100[ret]200[ret]300」でも読み込めた希ガス

小数の場合は放り込む変数をfloatなりdoubleで用意して
変換指定子を%f
330デフォルトの名無しさん:2005/09/20(火) 06:50:45
>>329
ありがとうございます
とりあえず数値を入力して出力だけ出来るように今やってるんですが、現在こんな感じ
#include <stdio.h>
int main (void)
{
       float a;
int b,c,d;
scanf("%f",&a);
scanf("%d %d %d",&b,&c,&d);
printf("%f %d %d %d",a,b,c,d);
return 0;
}
入力するのはa=123.45 b=100 c=200 d=300って感じです
出力すると123.45が123.449997になってしまいます
あと[ret]入れるのは数値を入力するときでしょうか?入れてみたらすごい数値がでちゃったり
できれば[ret]なしで横に入力させるようにしたいです
連投が返事がおそく(´・ω・`)
331300:2005/09/20(火) 06:56:06
あ、↑のなんか勘違いしまくってた
横に入力まではできてました
あと残る問題は123.45を入れると123.49997って出るだけです
そのまま123.45って出したい
332デフォルトの名無しさん:2005/09/20(火) 06:58:26
"%.2f"
333デフォルトの名無しさん:2005/09/20(火) 07:02:17
>>332
ありがとう
これでスキーリできました
334デフォルトの名無しさん:2005/09/20(火) 07:48:40
>>330
floatの精度はそんなもん。もっと精度が必要ならdoubleを使え。
335デフォルトの名無しさん:2005/09/20(火) 07:58:32
プログラム始めるならCからと聞いたのでここにやってきたわけだが
まず何を始めたらいいか、この俺様におまえら愚民ども、
丁寧かつ迅速に教えろや!
336デフォルトの名無しさん:2005/09/20(火) 08:20:57
>>335
スレ違い。初心者スレへでもどうぞ。
http://pc8.2ch.net/test/read.cgi/tech/1124511889/
337デフォルトの名無しさん:2005/09/20(火) 08:38:22
>>336
俺のお気に入りスレに誘導すんなよw
338トラックバック ★:2005/09/20(火) 10:23:22
【トラックバック来たよ】 (ver. 0.11)
[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1127179402/l50
339トラックバック ★:2005/09/20(火) 10:25:13
【トラックバック来たよ】 (ver. 0.11)
[発ブログ] superfree
http://2chplus.2ch.net/test/read.cgi/superfree/1127179513/l50
340デフォルトの名無しさん:2005/09/20(火) 12:37:16
>>335
回線切って首吊る
341デフォルトの名無しさん:2005/09/20(火) 12:39:14
335ワラタ
342デフォルトの名無しさん:2005/09/20(火) 14:02:09
関数の戻り値を設定したら、
必ず戻り値を受け取らなければならないのでしょうか。

例えば、int foo();という関数を定義した場合、

int test;
test = foo();

のように使用しますが

もし戻り値を受け取っていなかったら
不都合とかあるのでしょうか。
343デフォルトの名無しさん:2005/09/20(火) 14:02:38
>不都合
ない
344デフォルトの名無しさん:2005/09/20(火) 14:20:14
返値を受け取らない事そのものに不都合は無い
その返値でエラー処理やリソース開放などが必要だとしても、
Cの知った事ではない
345デフォルトの名無しさん:2005/09/20(火) 14:22:48
printfはintを返すが、戻り値は受け取ったことはないぞ。
346デフォルトの名無しさん:2005/09/20(火) 14:23:24
は?
347デフォルトの名無しさん:2005/09/20(火) 14:30:40
printfでの出力が成功したかどうかを確認する必要、意義があんま無いからでは
348342:2005/09/20(火) 14:54:09
>>343
>>344
ありがとうございます。
なんか気になったもので…。
349デフォルトの名無しさん:2005/09/20(火) 14:54:15
printf 系の戻り値は全く使わんな。
scanf 系のは使うこともあるが。
350デフォルトの名無しさん:2005/09/20(火) 15:04:02
×scanf()系のは使うこともある
○scanf()系の戻り値は見なきゃダメ
351デフォルトの名無しさん:2005/09/20(火) 15:18:04
ヒント:書き捨てプログラム、デフォルト値
352デフォルトの名無しさん:2005/09/20(火) 16:00:22
そもそも scanf が書き捨て
353デフォルトの名無しさん:2005/09/20(火) 16:04:27
scanfの戻り値ってなんだっけ?
354デフォルトの名無しさん:2005/09/20(火) 16:05:30
355デフォルトの名無しさん:2005/09/20(火) 16:05:49
入力データの個数。
356デフォルトの名無しさん:2005/09/20(火) 17:08:54
文字列の一部を取り出すのってどうやる?
たとえば
Hello World
っていう文字列が変数に入っていて
スペースまでを別の変数に取り出す
357デフォルトの名無しさん:2005/09/20(火) 17:12:23
俺ならスペースまでを別の変数に取り出す。
358デフォルトの名無しさん:2005/09/20(火) 17:13:48
特に状況や動作環境の指定、制約無いからstrtok使っとく
359デフォルトの名無しさん:2005/09/20(火) 17:14:58
男は黙ってsscanf()
360デフォルトの名無しさん:2005/09/20(火) 17:22:18
普通に1文字ずつ転写していって、スペースが出た時点でヌル終端つける
けどstrtokって手もあったな
361デフォルトの名無しさん:2005/09/20(火) 17:27:52
・元文字列を保存
・元文字列が長いのでコピーしたくない

という場合なら、strchr でスペース検索して、
そこまでを strncpy で抜き出してヌル終端付ける。
362デフォルトの名無しさん:2005/09/20(火) 19:03:00
ポインタを動かしてスペースを探す
最初からそこまで取り出す
363デフォルトの名無しさん:2005/09/20(火) 19:23:13
>>361
それどうやるの?
関数の使い方がわからん
364デフォルトの名無しさん:2005/09/20(火) 19:27:39
態度でかいな、この馬鹿は
365デフォルトの名無しさん:2005/09/20(火) 19:42:08
>>364
俺は態度でかいよ
strtokで出来たからもういいよ
366デフォルトの名無しさん:2005/09/20(火) 19:42:42
367デフォルトの名無しさん:2005/09/20(火) 20:05:05
つまり世の中の「初期化関数」はすべてうそつきだと。
368デフォルトの名無しさん:2005/09/20(火) 20:27:09
>>361
に加えて

・最大文字数制限

を加えるなら >>360 で終了。
369デフォルトの名無しさん:2005/09/20(火) 20:51:23
C言語の勉強をしたいと思っています。
C++が大学の研究室にあるのですが、Cの本でも勉強できますか?
C++というくらいですし、Cのプログラムは普通にできますよね?
370デフォルトの名無しさん:2005/09/20(火) 20:53:21
>>369
ガタガタ言ってねえでまずはやってみろ
371デフォルトの名無しさん:2005/09/20(火) 21:34:15
>>369
一応C++のコンパイラがあればまともなCを動かすことは出来る。
ANSI以前の古いCやプロトタイプ宣言のないなどの変なCは動かない可能性はある。
372369:2005/09/20(火) 21:36:20
>>370
>>371
ありがとうございます。
Cの本は最近発売されたもので、初心者向けのやさしいものなので
大丈夫だと思います。
373デフォルトの名無しさん:2005/09/20(火) 22:04:16
普通のCが使えないC++処理系ってあったっけ?ないよな。
374369:2005/09/20(火) 22:07:08
>>373
目標はポインタを理解することなので、大丈夫じゃないでしょうか?
組込みエンジニア目指してます!
375デフォルトの名無しさん:2005/09/20(火) 22:09:05
「C++が大学の研究室にあるのですが」という斬新な表現に感動した
376Addicted to C++ ◆nrBjarne.g :2005/09/20(火) 22:15:15
C++ is everywhere.
377デフォルトの名無しさん:2005/09/20(火) 22:20:23
C のを C++ でコンパイルする際、若干仕様が違う点もある。
しかし、C++ コンパイラは同時に C コンパイラもついてることが多いから、
C のプログラムをそのまま C としてコンパイルできるはずだと思う。
C++ 専用のもあるだろうけど。
378デフォルトの名無しさん:2005/09/20(火) 22:53:15
Cだと思ったら、たいていC++
379デフォルトの名無しさん:2005/09/20(火) 22:54:16
C言語理解しない純粋のC++コンパイラなんて俺知らないぞ
どっかにあんのか?
380デフォルトの名無しさん:2005/09/20(火) 23:00:21
今となっては、純粋なCコンパイラを探すほうが難しい
381デフォルトの名無しさん:2005/09/20(火) 23:06:02
>>380
いやだからC++コンパイラもくっついてるだろうけど
CとC++ではあくまで別モンだろ?

int main() { int class = 0; return class; }

はCソースとしては正当だがC++ソースとしては不当な訳で。
で、これを食えねえ純粋のC++コンパイラしかついてねーような
やつがあるかってこと。
382デフォルトの名無しさん:2005/09/20(火) 23:43:17
あと、mainの再帰コールができないとか。
383デフォルトの名無しさん:2005/09/20(火) 23:51:44
まあ、C言語として正当だがC++として不当な例なんぞいくらでもあるだろう

K&Rスタイルを拒否るCコンパイラも、俺は見たことが無いぞ
384デフォルトの名無しさん:2005/09/20(火) 23:58:26
いまどき組み込みやりたがる学生っているのな。たしかに需要過多ではあるが
地獄だぞ。

まあへたなオープン系SIよりはマシか。
385369:2005/09/21(水) 00:01:56
みなさん、ありがとうございます!

>>384
詳しくお願いします(汗)
あまりやりたがるヒトがいない、というのを聞いていて、
がんばれば将来食いっぱぐれることがないかなぁ、と思っているのですが・・・
地味というのは聞きましたが、地獄なんでしょうか??
携帯はしんどいので避けるつもりですが・・・
ハードとソフトの両方に接することができる組込みに魅力を感じています!
386デフォルトの名無しさん:2005/09/21(水) 00:02:18
教えてください。
xが1〜9の整数の時、

#include <math.h>

int sisu(int x)
{
return (int)pow(2, x-1);
}

と、

int sisu(int x)
{
switch (x){
case 1: return 1;
case 2: return 2;
case 3: return 4
case 4: return 8
case 5: return 16
case 6: return 32
case 7: return 64
case 8: return 128
case 9: return 256;
}
return 0;
}

とでは、どちらを使ったほうがイイのでしょうか?


387デフォルトの名無しさん:2005/09/21(水) 00:05:13
>>386
俺ならこうする。
int sisu(int x)
{
  return 1 << --x;
}
388デフォルトの名無しさん:2005/09/21(水) 00:10:50
int t[]={1,1,2,4,8,16,32,64,128,256};
return t[x];

書いてて一寸、馬鹿らしく(ry
389デフォルトの名無しさん:2005/09/21(水) 00:18:51
質問です。

sscanf関数の戻り値をチェックする時って

if(sscanf(何とかかんとか)!=1){
と書くのと
if((sscanf(何とかかんとか))!=1){
と書くのとではどちらの方がいいんでしょうか。

別にsscanf関数に限らず、他の関数の戻り値のチェックの時もなんですけど……。
390デフォルトの名無しさん:2005/09/21(水) 00:23:22
>>389
別にどうでもいいが、後者は冗長だろう

手前そんなにカッコが好きならカッコウとでも結婚してlisperでも産みやがれ!
ぐらいのことは言われるかもしれない
391デフォルトの名無しさん:2005/09/21(水) 00:25:53
>>390
どうもありがとうございました。
超高速レスで助かりました。ふんとに。
392デフォルトの名無しさん:2005/09/21(水) 00:28:50
いえいえどういたしまして。
ふんとに。
393デフォルトの名無しさん:2005/09/21(水) 00:32:37
>>386
俺ならこうする。
#define SISU(n) (1u << ((n) - 1))
394デフォルトの名無しさん:2005/09/21(水) 00:56:03
漏れならこうする
#define SISU(puri) (1<<((puri)-1))
395デフォルトの名無しさん:2005/09/21(水) 02:11:35
>>394の場合、
Xの範囲を1〜12に拡張しないとコンパイルが通りません

と、お兄ちゃんが言ってました。
396デフォルトの名無しさん:2005/09/21(水) 02:12:43
眞深派の場合はどうすればいいんですか?
397デフォルトの名無しさん:2005/09/21(水) 02:36:07
>>385
忙しいときは土日出勤で家に帰れないこともあたりまえかな。
基本的に派遣に近い勤務形態になるからプロパーと仲良くしなきゃかなり気まずくなるし。
俺なんかは初っ端から同じ会社の人間一人もいないような状況で仕事することが
結構あったりして、軽く欝になりかけた。

今はWeb系に転向してASPとかServletとかやってる。これでもまだ20代前半だ。
俺もCは大学からはじめた。まあ頑張りたまえ。

あと、PGの話題は板違いになるのでマ板か情シスで。
398デフォルトの名無しさん:2005/09/21(水) 06:17:20
>387
>388
>393
>394
ありがとうございました。
399369:2005/09/21(水) 07:22:39
>>397
ありがとうございます。
そんなにたいへんなんですか・・・
お勤めごくろうさまです。
よく調べますね・・・
400デフォルトの名無しさん:2005/09/21(水) 07:41:41
制御系やりたいなら我が社へ是非。修飾フェアでお待ちしております。
401369:2005/09/21(水) 07:43:40
>>400
大手電機・精密またはその子会社を検討しているのですが、
御社のことも調べてみます。
402デフォルトの名無しさん:2005/09/21(水) 13:12:07
著作権がからんでくるページで印刷や右クリックができない所があるのですが、
それらを印刷したり保存したりする方法はないでしょうか?
403デフォルトの名無しさん:2005/09/21(水) 13:14:08
スレタイを読み直せばいいと思うよ
404デフォルトの名無しさん:2005/09/21(水) 13:14:58
>>402
それをCで実装する方法が知りたいのか?
ならば環境依存だ。
405デフォルトの名無しさん:2005/09/21(水) 17:14:03
上司って意外とって言うか滅茶苦茶丁寧に教えてくれるよな
大学の教授より教えるのうまいし
406デフォルトの名無しさん:2005/09/21(水) 17:16:59
運が良かったな
407デフォルトの名無しさん:2005/09/21(水) 19:31:30
今晩は,構造体について、教えてください。
struct S{
int a;
int c;
};
S *s;
s->a = 2;
s->b = 3;
s++;
で、
s->a = 4;
s->b = 5;
のように配列のようにできるのでしょうか。
408デフォルトの名無しさん:2005/09/21(水) 19:36:49
激しく文法が違っています。
409デフォルトの名無しさん:2005/09/21(水) 19:38:14
質問箇所以前で激しく間違ってます
410デフォルトの名無しさん:2005/09/21(水) 19:40:30
>>407
変数などの宣言時にSと書けるのはC++。Cではできない。
sはポインタ型の変数を宣言しただけで、まだどこも指していないのに->でアクセスしている。
411デフォルトの名無しさん:2005/09/21(水) 20:16:14
すみません、このようにしていますが、
間違っているのでしょうか

struct Skakidasi {
int member;
int sasizu;
};

呼び出し側
Skakidasi skakidasi;
visibe(&skakidasi);

関数
void visibe(Skakidasi *skakidasi){
skakidasi->member = 4;
skakidasi->sasizu = 9;
skakidasi++;
skakidasi->mamber = 8;
skakidasi->sasizu = 12;
}
412デフォルトの名無しさん:2005/09/21(水) 20:20:55
struct Skakidasi skakidasi ; にしてください。
^^^^^^
413412:2005/09/21(水) 20:22:28
元の構造体が配列になってませんヨ
414デフォルトの名無しさん:2005/09/21(水) 20:27:40
struct Skakidasi skakidasi[2];
visibe(skakidasi);
こうだろ
415デフォルトの名無しさん:2005/09/21(水) 20:33:44
>>412さんありがとうございます。すべて直しました。
>>413さん
配列数が決まっていないので、ポインタにしたいのですが、
どうすればよいのでしょう。
416デフォルトの名無しさん:2005/09/21(水) 20:39:44
>>414さんすみません。みていませんでした。
配列数が最初に分からないのです。
417デフォルトの名無しさん:2005/09/21(水) 20:40:28
>>415
あのなー
ポインタにしたから配列の縛りが無くなったと思うのは間違い。
malloc/freeで適宜メモリを割り当ててやらないといけない。

その調子だと全然わかってなさそうだから、とりあえず配列を大きめにとって使ったら
どうですか?
418デフォルトの名無しさん:2005/09/21(水) 20:45:21
417が書いてるようにmallocで割り当てて、途中で変更が必要なら
reallocで増減するのがいいだろうな
もしくは線形リストとか
419デフォルトの名無しさん:2005/09/21(水) 20:46:28
>>417さんありがとうございます。
そうです。つかったことないです。malloc/free
配列大きめにして使います。
すみませんでした。
420デフォルトの名無しさん:2005/09/21(水) 20:48:55
>>418さん。ありがとうございます。
そうですね、やはりメモリ管理ちゃんとして他方がいいのでしょうね。
その、malloc がんばって、勉強してみます。
線形リストですか、名前だけは聞いたことあります。
また、調べないと、思い出しそうもないです。
ありがとうございます。
421デフォルトの名無しさん:2005/09/21(水) 21:01:37
realloc乱発はメモリが歯抜けだらけになるからあまりお勧めできない
422デフォルトの名無しさん:2005/09/21(水) 21:16:21
>>407
ポインタにする意味あるわけ?
423デフォルトの名無しさん:2005/09/21(水) 21:18:33
>>405
俺の糞上司と交換してくれ
いらなかったら生ゴミの日に出すなりトイレに流すなり好きにしていいから
424デフォルトの名無しさん:2005/09/21(水) 21:33:14
typedef struct S {
 int a;
 int b;
} S[1];

void S_init(S s) {
 s->a = 0;
 s->b = 0;
}

S s;
S_init(s);

こういうテクニックもあるのぅ。
425デフォルトの名無しさん:2005/09/21(水) 22:05:26
可読性を下げる悪習のことをテクニックと呼ばないでほしい
426デフォルトの名無しさん:2005/09/21(水) 22:08:58
最強はif文の中に大量の条件を詰め込みまくる奴だろ
カッコが30とかもう見る気も失せる
当然コメントなし
427デフォルトの名無しさん:2005/09/21(水) 22:10:18
もうそんな怒らないでください
428デフォルトの名無しさん:2005/09/21(水) 22:34:05
if (a) {
if (b) {
if (c) {
hoge();
}
}
}

if (a && b && c) {
hoge();
}

どっちがいい?
429デフォルトの名無しさん:2005/09/21(水) 22:37:21
マゾな俺は上
430デフォルトの名無しさん:2005/09/21(水) 22:45:17
if文のすぐ次にまたif文が来る場合は
中括弧略せないの?
431デフォルトの名無しさん:2005/09/21(水) 22:47:34
全組み合わせごとに処理が違ったりするのが一番厄介だわな。
仕事じゃともかく趣味じゃこーやってる。

foo = (a ? 4 : 0) | (b? 2 : 0) | (c ? 1 : 0);
switch ( foo ) {
 ・・・
}
432デフォルトの名無しさん:2005/09/21(水) 22:47:36
elseがないなら上がいいな
433デフォルトの名無しさん:2005/09/21(水) 22:50:49
if(hogehoge!=a || hogehoge!=b)
こんな感じに書いて、何で常に実行されるんだぁああああああああああ!!!
と悩んだ馬鹿な俺が来ましたよ
434デフォルトの名無しさん:2005/09/21(水) 22:54:51
>>433
a==bが真なら実行されない場合あるじゃん
435デフォルトの名無しさん:2005/09/21(水) 23:05:26
if(hogehoge!=a || hogehoge==a)
こう書く勇気がなかった>>433
436369:2005/09/22(木) 00:06:39
さっそく始めてみました!・・・が、早速詰まってしまいました・・・

エラー内容

エラー E2209 hello.c 1: インクルードファイル 'stdio.h' をオープンできない

です。
stdio.hファイルはたしかにあるんですが・・・
437デフォルトの名無しさん:2005/09/22(木) 00:09:17
>>436
ディレクトリ指定は?
パス通してる?
438デフォルトの名無しさん:2005/09/22(木) 00:10:38
>>436
まずどんな環境でやってるかいえよはげ
439デフォルトの名無しさん:2005/09/22(木) 00:12:55
つーか、スレ違いだがね。
440369:2005/09/22(木) 00:18:47
>>437
ディレクトリは絶対パス指定で、
dirコマンドでディレクトリを開き、対象ファイルを確認した上で行っているので、
大丈夫です。
>>438
すみません・・・
環境は
OS : WindowsXP SP2
エディタ : サクラエディタ
コンパイラ : Borland C++ Compiler 5.5
です。
441デフォルトの名無しさん:2005/09/22(木) 00:21:53
>>440
>ディレクトリは絶対パス指定で、
>dirコマンドでディレクトリを開き、対象ファイルを確認した上で行っているので、
>大丈夫です。

言ってることの意味がよく分かりませんね。
環境設定でヘッダファイルの置き場所を・・・
まあデフォルトで入ってるとは思いますが。

あとはソースコードでどう指定したのか。

442デフォルトの名無しさん:2005/09/22(木) 00:24:21
>>440
Borland C++ Compiler 5.5使ってるなら
http://pc8.2ch.net/test/read.cgi/tech/1091066805/10
のCpadというソフト使うと楽ですよ
443デフォルトの名無しさん:2005/09/22(木) 00:26:16
>>440
腐るほど出てる質問のはずだから過去スレ検索汁!
444デフォルトの名無しさん:2005/09/22(木) 00:29:36
char *hoge(char*s char*t)
{
char *p;
p=s;

while(*s++);
for(--s;*s++=*t++;);
return p;
}
これによって文字列の結合が出来るのですが、for(--s;*s++=*t++;);この部分が
どういった処理をしているのか判りませんご教授ください。
445369:2005/09/22(木) 00:37:21
>>441
>>443
解決しました!
本をよく読んでなくて、cfgファイルの作成をしていませんでした(汗)
ありがとうございました!
>>442
ご助言ありがとうございます!
446デフォルトの名無しさん:2005/09/22(木) 00:48:34
>>>444
> これによって文字列の結合が出来るのですが

出来ないだろ。











コンパイル位通せや
447デフォルトの名無しさん:2005/09/22(木) 01:00:24
>>444
for文中に各ポインタの中身を見ればいいと思うよ
448デフォルトの名無しさん:2005/09/22(木) 01:07:19
>>444
while(*s++);      /* sのケツ探し
for(--s;*s++=*t++;); /* sのポインタをひとつ戻し('\0'の前)
              *tを*sにコピー
              sとtのポインタをそれぞれインクリメント
              コピーしたものが0じゃなければループ */
449デフォルトの名無しさん:2005/09/22(木) 01:21:47
>>446
この関数によって文字列の結合の処理を行うのですがと書いた方が良かったですね。
釣りかと思いました。

>>447>>448
おかげさまで解決しました!本当にありがとうございます!!
450デフォルトの名無しさん:2005/09/22(木) 01:30:32
>>449
引数の,が抜けてることを指摘してるのかと
451デフォルトの名無しさん:2005/09/22(木) 01:32:08
452デフォルトの名無しさん:2005/09/22(木) 05:49:52
配列に数値を8個入れていって
最後に合計をだすプログラム
#include <stdio.h>
int main (void)
{
int a=1,c=0;
int dt[8];
for (a;a<=8;a++){
printf("数値?");
scanf("%d",&dt[a]);
c = c + dt[a];
}
printf("合計%d\n",c);
return 0;
}

まったく違う答えが・・・
どこが間違ってるかわからなす(´・ω・`)
教えてください
453デフォルトの名無しさん:2005/09/22(木) 05:59:56
> 452

6行目を

for ( a = 0; a < 8; a++ ) {

に変更すべし
454デフォルトの名無しさん:2005/09/22(木) 06:02:36
>>453
でけたー
ありがとう〜
455デフォルトの名無しさん:2005/09/22(木) 06:32:27
また詰まってしまったので質問です
さっきのちょっと進化した型なのですが
今度は合計のあとに
[番号]”数値=”配列に入れた数値 その数値は全体のなん% って感じにしたいのです
[番号]”数値=”配列に入れた数値 まではたぶんできたと思うのですが
その後に入れる全体のなん%かと表示するやり方がわかりません
しかも8桁にしないといけないらしくて10.000000%みたいな
お願いします

#include <stdio.h>
int main (void)
{
int a,c=0;
int dt[8];
for ( a = 0; a < 8; a++ ) {
printf("数値?");
scanf("%d",&dt[a]);
c = c + dt[a];
}
d = c;
printf("合計%d\n",c);
for(a = 0; a < 8 ; a++){
printf("[%d]数値=%d\n",a+1,dt[a]); ←ここが不明(;´Д`)
}
return 0;
}
456デフォルトの名無しさん:2005/09/22(木) 07:29:12
>>455
printf("[%d]数値=%d これは全体の%.8f%%\n",a+1,dt[a], ((double)dt[a]/(double)c)*100.0)
寝ぼけてるからコンパイルが通らないor通ってもおかしいor不要なのがあるかも
457printf("%.8g", dt[a] * 100 / c):2005/09/22(木) 07:33:49
>>455
宿題スレか初心者スレに行けよ。
458デフォルトの名無しさん:2005/09/22(木) 09:27:50
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
459デフォルトの名無しさん:2005/09/22(木) 09:40:28
>>458
何の役にも立ちません
460デフォルトの名無しさん:2005/09/22(木) 09:47:46
>>458
NASAのコンピュータをハッキングするときに役立ちます。
461デフォルトの名無しさん:2005/09/22(木) 09:53:12
>>458
パズルのようなプログラムを組むことができます。
462デフォルトの名無しさん:2005/09/22(木) 09:56:39
ぬるぽするのに役立ちます。
463ビタミンC初心者:2005/09/22(木) 10:10:07
#include<stdio.h>

void func(int *a){

(*a)++;
}

void func2(int a){
a++;
}

main( ){
int i;
i = 5;
printf("%d",i);
func(&i);
printf("\n%d\n", i );
func2(i);
printf("%d",i);

return 0;
}
464ビタミンC初心者:2005/09/22(木) 10:11:57
463のプログラムをコンパイルしたら、aに代入した値は使われていない
というエラーがでました。どこがおかしいんでしょうか?
どなたかおしえてください。おねがいします。
(初心者なので、基本的なことですいません)
465デフォルトの名無しさん:2005/09/22(木) 10:13:42
とりあえず、こっちのほうがみやすい。

#include<stdio.h> 
void func(int *a){ (*a)++; } 
void func2(int a){  a++; } 
int main()

  int i = 5;   printf("%d\n",i); 
  func(&i);    printf("%d\n",i); 
  func2(i);    printf("%d\n",i); 
  return 0;
}
466デフォルトの名無しさん:2005/09/22(木) 10:23:21
>>464
本当にエラーか?ワーニングじゃなくて?
func2内のaは関数から出たら消滅するので、a++は意味がない
467デフォルトの名無しさん:2005/09/22(木) 10:24:20
>>464
a に対して入力しかないんでしょ。
なんのために入れてるのかと。

エラーチェックならif文で使えと。
それか
return a;
とでもしろよと。
468デフォルトの名無しさん:2005/09/22(木) 10:27:53
問題はこれだろ

void func2(int a){ a++; }

a を受け取って a++ してるが、関数が終了して捨てられる。
469デフォルトの名無しさん:2005/09/22(木) 11:20:58
あのC言語はじめたばっかりで質問なんですが
int *a = 5;
のような式って意味ありますか?このとき右辺に
なにを代入するんですか?
おしえてください、よろしくです。
470デフォルトの名無しさん:2005/09/22(木) 11:21:56
ちなみにint *a;
a = &b;のような形ならわかります・・
471デフォルトの名無しさん:2005/09/22(木) 11:28:34
>>469
charと同じ感覚で考えれば、5という数値が格納されたintの空間を参照するんじゃねーの?
どっちにしろそんなことする必要もないし、したこともないんで詳しいことはシラネ
472デフォルトの名無しさん:2005/09/22(木) 11:35:19
>>471
んなわけねーだろ。
とにかくここ数日分の奴ら初心者スレに逝ってやれよ。sigh.
473デフォルトの名無しさん:2005/09/22(木) 11:40:30
>>472
同一人物なんじゃないのか?
この短期間にバカが大増殖するなんて不自然だし
474デフォルトの名無しさん:2005/09/22(木) 12:00:15
>>469
ポインタaにアドレス5を代入している
475デフォルトの名無しさん:2005/09/22(木) 12:02:50
>>469
でもそれ、コンパイルエラーになると思うけど。
476デフォルトの名無しさん:2005/09/22(木) 12:28:26
>>469
char str[] = "hello !";
char *p = str;

for ( ; *p; p++ )
{

}

strの文字をpで一文字ずつ操作
477デフォルトの名無しさん:2005/09/22(木) 12:37:46
>>475
そんなのをエラーにしてたら、直接メモリ弄る時に不便なんじゃないか?
478デフォルトの名無しさん:2005/09/22(木) 12:52:49
変数p     
┌──┐   ┌───┐
│    │─→ │整数 │
└──┘   └───┘
この図に対するC言語コードってなんですか?
structを使うらしいですがわかんないんです
479デフォルトの名無しさん:2005/09/22(木) 12:58:27
>>478
ドット演算子?
480デフォルトの名無しさん:2005/09/22(木) 13:16:07
せめてエラーか警告かぐらい区別できる人になってから喋ろう。
で、レッドカード。初心者スレかこっちで
http://pc8.2ch.net/test/read.cgi/tech/1124511889/
(もうどうせかぶってるんだろうけど sigh.)
481デフォルトの名無しさん:2005/09/22(木) 13:16:16
質問です

char a[1] = {0xff};
char *b;
unsigned char c, d;

b = a;
c = *(unsigned char *)b;
d = (unsigned char)*b;

cとdはどちらも0xffになることが保証されているんでしょうか?
482デフォルトの名無しさん:2005/09/22(木) 13:41:24
>>479
ドット演算子じゃなくて普通のプログラムです
483デフォルトの名無しさん:2005/09/22(木) 13:50:13
>>481
保証されています。
というか、汚いです。
484デフォルトの名無しさん:2005/09/22(木) 13:53:22
>>482
それから読み取れるのはドット演算子程度しかありません。どれも普通のプログラムです。
struct {
  int i ;
} test ;
test.i = 2 ;
485デフォルトの名無しさん:2005/09/22(木) 16:50:54
zをchar型の変数として定義して、
後の実行文で、scanf("%c",&zz); と書いているのはどういう命令になるでしょうか?
Enterキーを押せという命令でしょうか?
486デフォルトの名無しさん:2005/09/22(木) 16:53:20
一文字入力
て言うかscanfは暴走の申し子だから使わん方が
487デフォルトの名無しさん:2005/09/22(木) 16:59:04
DWORD a;
unsigned long a;
これは両方とも同じ意味ですか?
488デフォルトの名無しさん:2005/09/22(木) 17:01:02
>>487
DWORDは標準のキーワードではないから、環境によって答えが変わる。
インクルードしているファイルにも関係ある。
489デフォルトの名無しさん:2005/09/22(木) 17:01:15
>>485=>>487
少しは自分でだな(ry
490デフォルトの名無しさん:2005/09/22(木) 17:08:22
>>488
どうもです。
timeGetTime();の値を代入するので、unsigned long の方を使います。
491デフォルトの名無しさん:2005/09/22(木) 17:12:02
>>490
MSDNを見る事をお勧めする。
492デフォルトの名無しさん:2005/09/22(木) 17:16:21
>>490
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
Win32API質問箱 Build35
http://pc8.2ch.net/test/read.cgi/tech/1125850096/l50

> timeGetTime();の値を代入するので
DWORD timeGetTime(VOID);
493デフォルトの名無しさん:2005/09/22(木) 17:27:02
>>491-492
はーい
494デフォルトの名無しさん:2005/09/22(木) 17:58:28
scanfを暴走させるのはスキル不足
getsを使うのは知識不足
strtokでハマルのは理解力不足

よって、馬鹿はscanf, gets, strtokは使わない方が良い。
495デフォルトの名無しさん:2005/09/22(木) 17:59:18
へー
496デフォルトの名無しさん:2005/09/22(木) 18:08:54
業務でscanf()を正しく使って喜んでる奴は協調性不足
497デフォルトの名無しさん:2005/09/22(木) 18:13:59
数字入力にscanf→文字入れて無限ループ
1度はこれで遊ぶ
498デフォルトの名無しさん:2005/09/22(木) 18:15:08
>>494
scanfの暴走は作る側がどうにかできる物じゃねーだろ
499デフォルトの名無しさん:2005/09/22(木) 18:18:49
>>498
ヒント:返り値
500デフォルトの名無しさん:2005/09/22(木) 18:25:28
相手を刺すと服が真っ赤っ赤になるあれか
501デフォルトの名無しさん:2005/09/22(木) 18:27:19
>>499

 3.整数データのキー入力
   〜ちゃんと整数データを入力するまで繰り返す〜
scanfは取り込めたデータ数を返すから、
整数データが読み込まれたことをチェックし、
誤った入力なら再入力を要求すれば!...ところが...
/* scanf */
#include <stdio.h>

main()
{
charbuf[256];
inti;

do
{
printf("終了は Ctrl+C \n");
printf("Input number: ");
} while( scanf("%d", &i ) != 1 );
printf("%d\n", i );
}

/* scanfd1.c */
整数データを入力すれば大丈夫だが、
それ以外のデータを入力するとどうなる?!
scanfは空白文字までを目処に、整数とパターンマッチさせていく
それ以外の文字が入力されていると、パターンにマッチしないので、
マッチングの候補として残ったままになる→だから暴走する!
502デフォルトの名無しさん:2005/09/22(木) 18:27:25
setbuf系列の関数でなんとかなった、希ガス
503アホか:2005/09/22(木) 18:30:05
>>501
} while( scanf("%d", &i ) != 1 && (fgets(tmp), 1) );
504訂正:2005/09/22(木) 18:31:11
} while( scanf("%d", &i ) != 1 && (fgets(tmp, sizeof tmp, stdin), 1) );
505デフォルトの名無しさん:2005/09/22(木) 18:33:34
そこまでするなら普通にscanf使わない方法で行った方がいいと思うがどうか
506デフォルトの名無しさん:2005/09/22(木) 18:37:29
>>503
どこでそんな奥義を教えられたのかが気になる。
507こっちのほうが綺麗かもな:2005/09/22(木) 18:47:19
} while( scanf("%d", &i ) != 1 && (scanf("%*[\n]"), getchar(), 1) );

508デフォルトの名無しさん:2005/09/22(木) 18:56:57
>>496
というより今時業務でコンソール入力とか有り得ない
509マジレス:2005/09/22(木) 19:02:41
>>506
scanfを使うと必ず改行か終端コード、拾い損ないの文字が入力バッファに残る。
だからscanf使用後にgetcharとかgets系使うと、scanfの成功可否に関わらず必ずゴミが入る。
scanf系で統一するならともかく(scanfは改行をただの区切り文字同様に読み飛ばす)、必ず後始末は必要。


俺はC言語見習い1年目で解決法を編み出した。大学の講義よりも2chを見ながら育った。
今は・・・廃人orz
510デフォルトの名無しさん:2005/09/22(木) 19:39:05
>>508
scanfはコンソールから入力するなんて誰がそんな嘘を教えたんだ?
scanfは標準入力から入力するんだよ
511デフォルトの名無しさん:2005/09/22(木) 19:43:42
昔、fj.comp.lang.cで安全なscanfの使い方のバトルをやっていたはずだが過去ログはどこに逝ったんだ?
Queenがいつの間にか無くなってるし...
512デフォルトの名無しさん:2005/09/22(木) 19:46:53
>>510
今話題になってるのは「scanf()からのエラー回復と再入力の方法」であって、
それはインタラクティブな利用が前提でしょ。
でもその前提そのものが有り得ない、と言ってるの。
513デフォルトの名無しさん:2005/09/22(木) 19:51:28
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
>それはインタラクティブな利用が前提でしょ。
514デフォルトの名無しさん:2005/09/22(木) 19:52:56
>>513
インタラクティブな利用以外で、「単に行末まで読み捨てて再入力を求める」
形式のエラー回復を求める例って何があるの?
515デフォルトの名無しさん:2005/09/22(木) 19:57:12
そうか、電算機時代の人がいないのか・・・
516デフォルトの名無しさん:2005/09/22(木) 20:00:40
>>515
今時カードとかテレタイプとかの話をしてもナンセンスでしょ
scanf()のインタラクティブな利用における典型的な問題を議論しても
これまたナンセンス。

(暗黙にインタラクティブな利用を前提とした)下らないエラー回復方法が
不要であれば、単に

while (scanf("%d", &n) == 1) {
  /* do something */
}
if (ferror(stdin)) {
  /* なんかエラーがあった */
}
のように書けばよいだけの話。
517デフォルトの名無しさん:2005/09/22(木) 20:01:00
ひどい逆切れだ。みっともない。
518デフォルトの名無しさん:2005/09/22(木) 20:02:25
>>517
俺に言ってるの?
なら、>>512 >>514 >>516の「どこが」間違ってるのか
具体的に指摘してみ?
519デフォルトの名無しさん:2005/09/22(木) 20:04:31
都合の悪い事は無視か。みっともない。
520デフォルトの名無しさん:2005/09/22(木) 20:05:18
>>519
誰のどのレスのどこが都合が悪いんだかちゃんと言えよ
521デフォルトの名無しさん:2005/09/22(木) 20:06:06
馬鹿ですね。
522デフォルトの名無しさん:2005/09/22(木) 20:07:51
要するに
>>512 >>514 >>516に具体的に反論できる人間は居ないということだね
にもかかわらず前時代的で手垢のついたどころじゃない
scanf()のエラー回復と再入力の問題を未だにやってるという訳だ

バカばっかだな
523デフォルトの名無しさん:2005/09/22(木) 20:11:14
なんだ?ホームラン級のバカの登場?

524デフォルトの名無しさん:2005/09/22(木) 20:12:18
さらしあge
525デフォルトの名無しさん:2005/09/22(木) 20:12:22
>>516
>カードとかテレタイプ
違うって。そのころはCそのものがまだなかったよ。
電算機を使える時間は限られてるし、プログラムは多くを使いまわしてたから、
自然とキーボードから入力するようにプログラムを組んで、実際に走らせる時は
リダイレクトを使ってファイルから読み込ませて結果を吐かせるわけで、
しかもそのファイルの一部にミスがあったとしてもある程度の結果がないと
飯が食えなくなるわけだから、そういう場合のエラー回避等々が非常に重要になってくる。
526デフォルトの名無しさん:2005/09/22(木) 20:14:58
今帰った俺にも。とりあえず、scanfは標準入力からの入力だということはわかった。
527デフォルトの名無しさん:2005/09/22(木) 20:16:00
>>525
テレタイプの時代にはあるでしょ。UNIXのttyはその名残なんだから。

そういう利用を行うテキストアプリケーション
(と呼ぶべきかどうかは微妙だが)
に対してユーザ入力をさせる、そういう「業務」形態はもう有り得ないでしょ?
と言ってるの。

で、「有る」としても、そのようなものを作る場合、エラー個所を示すために
普通は行番号が欲しいから、どのみちscanf()なんてものを使うことは
業務では絶対にありえないの。
だから、scanf()でインタラクティブな入力をさせてエラー回復を試みる、
といった想定そのものがナンセンスなの。
528デフォルトの名無しさん:2005/09/22(木) 20:18:31
基地害がいらっしゃるようです
529デフォルトの名無しさん:2005/09/22(木) 20:19:06
だから煽ってるだけの奴はちゃんと内容に対して反論してみせろってw
530デフォルトの名無しさん:2005/09/22(木) 20:20:54
ナンセンスなのは確かだけど。
「業務であり得ない事は話題にして悪いのか否か」は決まっているの?
531デフォルトの名無しさん:2005/09/22(木) 20:21:23
scanfなんかどうでもいいよ。
そんなくだらないことよりビットシフトの使い道を教えろよ。
532デフォルトの名無しさん:2005/09/22(木) 20:22:34
基地害というか、場違いだな
533デフォルトの名無しさん:2005/09/22(木) 20:24:25
ちなみに、CのCGIは、通常何を使って標準入力から読み込むの?
fgets ?
534デフォルトの名無しさん:2005/09/22(木) 20:24:31
>>530
単に>>516のような方法を教えればよい。「scanf()なんかを使う」ケースでは
事実上それで十分なんだから。

それ以上の議論は無駄でしかない。
535デフォルトの名無しさん:2005/09/22(木) 20:27:06
>>527
> そういう利用を行うテキストアプリケーション
> (と呼ぶべきかどうかは微妙だが)
> に対してユーザ入力をさせる、そういう「業務」形態はもう有り得ないでしょ?

> 普通は行番号が欲しいから、どのみちscanf()なんてものを使うことは
> 業務では絶対にありえないの。

君の言う『業務』ならありえないだろうな。
研究職じゃまだあるよ。
欲しいのが行番号というのは扱うものの違いもあるだろうね。
修正は行番号で行うのは結構大変だよ?
正規表現でやった方がいいからマーカー挟めばいいんだし。
最近じゃ時間単位じゃなくて年契約だったり(並列処理ってすばらしい)、
プロジェクトの審査とかで割り当てられたりで状況はある程度変わってるけどね。

#しかしあのころのCをCだと主張してほしくなかったな。
536デフォルトの名無しさん:2005/09/22(木) 20:28:08
>>535
> 修正は行番号で行うのは結構大変だよ?

viならnGで一発ですが。
行番号指定して移動できないエディタのがめずらしかろう。
537デフォルトの名無しさん:2005/09/22(木) 20:30:10
>>533
んなもん色々だろ
Content-Length信じてガバっとmalloc()してfread()の場合もあるだろうし
538デフォルトの名無しさん:2005/09/22(木) 20:31:05
>>536
つうか、もともとラインエディタをスクリーン表示に対応させただけの代物だから
行指定できないほうがおかしい罠。

漏れは禿丸でスクラッチしてFTPで転送したり、小物ならcatで垂れ流したりする罠。
539デフォルトの名無しさん:2005/09/22(木) 20:32:30
>>536
あなたが想定するファイルは何行あるんです?
まさか一行一行移動して手で添削するんじゃないでしょうね?
それに数値解析系の入力データのミスは似たり寄ったりなものが多くて
正規表現で一括置き換えやんないと間に合いませんよ。
540デフォルトの名無しさん:2005/09/22(木) 20:32:31
んーーー
ここはやはりed
541デフォルトの名無しさん:2005/09/22(木) 20:33:10
この不能め
542デフォルトの名無しさん:2005/09/22(木) 20:35:11
すいませんvi使えません
543デフォルトの名無しさん:2005/09/22(木) 20:37:05
>>539
無論「エラー情報をどう出すのが適切か」ってのは
扱うデータやプログラムの性質に依存するよ。んなの当たり前。

「行番号」はもっとも典型的で汎用的な伝達手段であるから
示したに過ぎない。コンパイラやインタプリタの類なども
普通はそれを示すしな。

あんたの言うケースのように、もっと別のもの(例えば正規表現
パターンとして利用可能なエラー行のリスト)のようなものが欲しい場合は、
エラー行そのものをstderrなどに流し、それをそのまま再利用する
のが一番単純で確実。
そして、いずれにせよそうするなら、行志向でないscanf()は
ふさわしくないわけだ。
544503=504=507=509の廃人だが:2005/09/22(木) 20:37:23
俺もvi嫌いだ
545emacs党員:2005/09/22(木) 20:37:23
このスレは我らemacs党が占領した。
大人しく降伏したまえ
546デフォルトの名無しさん:2005/09/22(木) 20:38:14
なんかキモイ!

キモイだめしですか?
547emacs党xyzzy派:2005/09/22(木) 20:39:07
Meadowなんか重くて使う気にならん。
548503=504=507=509の廃人だが:2005/09/22(木) 20:40:01
Visual Studio.NEET
549デフォルトの名無しさん:2005/09/22(木) 20:40:41
大学入学当初からMeadowを使わされました
もうめろめろです
550デフォルトの名無しさん:2005/09/22(木) 20:49:21
>>543
普通は普通はってそれしか言えないんですかね?

失礼。

なぜ行志向にこだわるんです?
キーボードから入力する時の利便性と、リダイレクトする時の整合性とを考えれば
行志向そのものがあまり重要ではなくなりませんか?

#エラー行そのものを吐いた時、そのデータ分の金は天引きですよ?

#と書いていてそろそろC言語そのものから遠ざかっているような気が
551デフォルトの名無しさん:2005/09/22(木) 20:53:58
>>550
課金が五月蝿いメインフレームorスパコン系の人?

行志向に拘るのは、あんたの想定してるようなテキストアプリケーション
主体の環境において、それがもっとも自然な形態だから、だよ。
システムお仕着せのレコード区切りの無いUNIXのようなシステムでは
多くの場合行がレコードの代わりであって、
事実UNIXの多くのコマンドラインツールは行志向だ。

すまんがメインフレームやスパコンの話はよく知らん。
データセットからscanf()で読むのが自然か?といわれると
俺はうーむ、と思ってしまうが、まあよく知らんのでなんとも言えない。
552デフォルトの名無しさん:2005/09/22(木) 20:59:34
viの存在意義がいまいち分からない
このスレにいる奴らも頭いいのか悪いのか分かんない
553デフォルトの名無しさん:2005/09/22(木) 21:00:57
>>552
viは現存するUNIXなら普通は入ってる。
emacsは入ってはいないものと思わなければならない。
554デフォルトの名無しさん:2005/09/22(木) 21:01:16
>>552
頭が悪い人間は来なくていいですよ
555デフォルトの名無しさん:2005/09/22(木) 21:02:21
>>552
真面目につっかかってきてくれる人が約一名いるけど
他にただ煽ってただけの奴等は、まあバカだな

まともに反論もできない、煽るしか能のない奴等だ
556503=504=507=509の廃人だが:2005/09/22(木) 21:04:09
viは小さくて大抵の環境に入ってるからね。
Emacsはデカイからコンパクトなシステムには向かない。

telnetさえ使えればWindows上で好きなエディタを使うよ俺は。
557デフォルトの名無しさん:2005/09/22(木) 21:04:18
>>555
ここまで読んだ。
お前が一番バカだと自覚してる?
558デフォルトの名無しさん:2005/09/22(木) 21:05:54
>>556
telnetでファイル転送するのはつらくないか?
ssh, scpの間違いだろ?
559デフォルトの名無しさん:2005/09/22(木) 21:06:53
>>557
反論できない以上、お前は煽るしか能の無い馬鹿
560デフォルトの名無しさん:2005/09/22(木) 21:07:00
よくviしか入ってないような環境って言うけど
今までそんな切実な現場に立ち会ったことがないです
561503=504=507=509の廃人だが:2005/09/22(木) 21:07:01
>>558
だから俺は廃人なのさ('A`)
562デフォルトの名無しさん:2005/09/22(木) 21:08:03
>>559
おまえが無視してるだけじゃんwww
563デフォルトの名無しさん:2005/09/22(木) 21:08:35
>>560
そーか?
仕事で使うUNIX鯖とか、いちいちemacs入れないぞ?
不要なものは入れない、これ基本

まあ、他でエディットしてファイル転送すりゃいいから、
困らないっちゃ困らないかもしれないけどな
564デフォルトの名無しさん:2005/09/22(木) 21:09:15
>>562
だから、俺が何を無視してるんだか言ってみろって。
565デフォルトの名無しさん:2005/09/22(木) 21:11:05
プログラムしてたら,

error: tow types specified in one empty declaration

というエラーが出てきたのですが,これの原因ってどんなことが考えられますか?
また,簡単な事例はありませんか?

よろしくお願いします
566デフォルトの名無しさん:2005/09/22(木) 21:11:12
>>564
自分でスレ読めよwww
567デフォルトの名無しさん:2005/09/22(木) 21:11:56
>>566
要するに何も指摘できない馬鹿かw
568503=504=507=509の廃人だが:2005/09/22(木) 21:13:21
>>565
ソースコードを適当なうpろだにうp
569デフォルトの名無しさん:2005/09/22(木) 21:14:12
>>551
すみません。ようやく認識のずれが分かりましたよ。
>あんたの想定してるようなテキストアプリケーション
ここですね。自然と思うものが違うのだから言い合いになるのは当然でした。
私は君の言う『業務』なら(ryってところで伝わったと思い込んでましたしね。
私が想定しているのはテキストアプリケーションではなく、数値解析や有限要素法等の物理シミュです。
シミュレーションとかでモデルデータを叩き込む場合、自分の所の環境では手で小規模のを入力して試し、
課金が五月蝿い(w)メインフレームorスパコンで走らせる時にリコンパイルだけで済ます
ためにリダイレクトでそのままやるわけですが、質量分布の指定等を手入力する時に
行志向だと大勢くたばりますので。
ある意味好き勝手に入力できるscanfの方が使い勝手がいいんです。
よって、そのエラー回避が非常に重要になるわけです。
570デフォルトの名無しさん:2005/09/22(木) 21:19:59
研究職と言う名の税金泥棒コレキタ
ろくな研究やってないくせにww
571デフォルトの名無しさん:2005/09/22(木) 21:20:12
>>569
了解。
572デフォルトの名無しさん:2005/09/22(木) 21:48:26
ニートに税金泥棒って言われたらおしまいだな
573デフォルトの名無しさん:2005/09/22(木) 21:53:31
質問です

struct Chip
{
 int m_nNumber;
 BYTE m_byImage;
};

↑の構造体を
cout << sizeof(Chip) << endl;
とやってみたらサイズは8と出たんですが、
int + BYTE = 5 ではないんでしょうか?

どういう計算で8と出るのでしょうか
どなたかお願いします m(__)m
574デフォルトの名無しさん:2005/09/22(木) 21:56:40
>>573
>>1を嫁。
で、終わらしてもいいんだが

ttp://www.kouno.jp/home/c_faq/c2.html#13
でも見ろ。
575デフォルトの名無しさん:2005/09/22(木) 22:05:35
>>484
ありがとうございます
576デフォルトの名無しさん:2005/09/22(木) 22:05:56
>>574
感謝です!
コンパイラによって変わるのか orz
577デフォルトの名無しさん:2005/09/22(木) 22:23:41
なあ、scanfがらみ周辺でよたってた君ら、今度からコテハンつけてくれ。
そのほうが少しは他の迷惑にならないから。sigh.
578デフォルトの名無しさん:2005/09/22(木) 22:26:46
>>577
まずはオマエから名乗れ
579デフォルトの名無しさん:2005/09/22(木) 22:46:35
独学でC言語を1から勉強したいんですけど、
おすすめの書籍やサイト等を教えてほしいです。
よろしくお願いします。
580デフォルトの名無しさん:2005/09/22(木) 22:51:21
>>579
>>1の過去ログのHPを参照。
581デフォルトの名無しさん:2005/09/22(木) 23:35:20
>>579
おまえ、ここに来た時点で独学じゃない。
582デフォルトの名無しさん:2005/09/22(木) 23:38:14
  ∧_∧
 ( ´∀`) おまえ
 /,   つ   おちけつ
(_(_, )
  しし'
583デフォルトの名無しさん:2005/09/23(金) 00:40:41
独学ってのはなぁ、俺みたいにヘルプを見るだけで試行錯誤して覚えるようなもんなんだよ。
本を読んだ時点で独学失格!

でも、独学失格した方が絶対いい。
584デフォルトの名無しさん:2005/09/23(金) 01:42:39
>>583
教えてもらえる人がいて
その人が素直に教えるかが問題

俺の場合は ヘソ曲がりだったので独学だった
つーか 他人アテにしたらなんにもミニつかん
効率はいいけどな 多分
585デフォルトの名無しさん:2005/09/23(金) 01:53:18
アテにするだけは身につかんね。
やっぱり教えてもらうにしろ、
自分でいろいろ試行錯誤しないと身につかん。
ただ、全くの独学は効率悪すぎると感じた。
586デフォルトの名無しさん:2005/09/23(金) 01:54:19
ほとんど2ちゃんねらが先生だな、俺・・・
587デフォルトの名無しさん:2005/09/23(金) 04:01:07
2ちゃんが無くて、ネットも気軽に使えないような頃に学んだ俺は、
雑誌に連載されるC言語講座だったなぁ
588デフォルトの名無しさん:2005/09/23(金) 05:06:15
有識者の人へ。
Windows上のC言語でお勧めの環境はどれですか?
いろんな前提要件抜きでバシッとマジレス希望。
或いは、各々の特徴を述べ立てて比較検討希望。
よろしくお願いします。マジでお願いします。
589503=504=507=509の廃人だが:2005/09/23(金) 05:11:28
純粋にC言語をやりたいなら、俺はあえてCygwin&GCCを推してみる。
CはUNIX系OSでやるものだ。

あとMacOS Xかな。
590デフォルトの名無しさん:2005/09/23(金) 05:15:37
問題はエディタ
591503=504=507=509の廃人だが:2005/09/23(金) 05:21:30
xyzzyとか。
学生なら禿丸使っとけ。タダだ。
592デフォルトの名無しさん:2005/09/23(金) 05:56:25
はげ丸?
593デフォルトの名無しさん:2005/09/23(金) 05:59:11
>>589
>CはUNIX系OSでやるものだ。

早朝から馬鹿はっけん!
594デフォルトの名無しさん:2005/09/23(金) 05:59:50
#define Str(x) #x
#define Xstr(x) Str(x)
#define OP plus
char *opname = Xstr(OP);

main() {
printf("%s\n", opname);
}

これで
plus
が出力される理屈を教えてください。

OP -> plusはいつ変換されるんですか?
595デフォルトの名無しさん:2005/09/23(金) 06:03:17
>いつ
んなもんはコンパイル時だろ
596デフォルトの名無しさん:2005/09/23(金) 06:05:03
うわ、馬鹿がきた・・
誰かお願いします
597503=504=507=509の廃人だが:2005/09/23(金) 06:16:32
>>593
ごめんw 軽くボケてみた。

つか、Windowsだと、かえって実行環境整えるのが面倒だろ。
コマンドラインシェルとかフルセット揃ってる環境から入るのが一番いいかと。

文部科学省の方針で大学の情報系学科ではUNIX環境を使うことを推奨している
いちおうCygwinもその範疇に入っているはずだが。
598デフォルトの名無しさん:2005/09/23(金) 06:49:19
knoppix2win
599デフォルトの名無しさん:2005/09/23(金) 06:56:28

#define Str(x) #x
#define Xstr(x) Str(x)
#define OP plus
#define plus minus
char *opname = Xstr(OP);
char *opname2 = Str(OP);

main() {
printf("%s %s\n", opname, opname2);
}


の結果は
minus OP
でした。
2つはどこで変わったのでしょうか
600デフォルトの名無しさん:2005/09/23(金) 07:03:19
あ、もういいです

それと
氏ね>595
601デフォルトの名無しさん:2005/09/23(金) 07:17:03
>>592
はげ丸は秀丸の間違いじゃないか?
602デフォルトの名無しさん:2005/09/23(金) 07:17:45
ちょっとワロタ、というか和んだ。
603503=504=507=509の廃人だが:2005/09/23(金) 07:24:40
>>601
ただの2ちゃん語のノリで言ってみたのだが
(参考)http://www.google.co.jp/search?hl=ja&c2coff=1&rls=GGLG%2CGGLG%3A2005-37%2CGGLG%3Aja&q=%22%E7%A6%BF%E4%B8%B8%22+site%3A2ch.net&lr=

ぶっちゃけこんな反応されたのは想定外だ。
吊ってくる。
604デフォルトの名無しさん:2005/09/23(金) 10:53:35
>>594
ツリに見えるがマジレスしておくと、(unixの処理系に限った話かも知れないが)
コンパイル以前のプリプロセシングフェーズ(cpp)において
char *opname = Xstr(OP);

char *opname ="plus";
に変換される。
605デフォルトの名無しさん:2005/09/23(金) 12:21:04
unix の処理系に限った話ではない。
606デフォルトの名無しさん:2005/09/23(金) 13:20:12
Str(OP) => "OP"
XStr(OP) => Str(plus) => "plus"

一回目の展開でOPも展開させて、二回目の展開でstringizeする。

これって、C FAQ の 11.17だよね。
ttp://www.kouno.jp/home/c_faq/c11.html#17
607デフォルトの名無しさん:2005/09/23(金) 14:51:26
builderの無償版があるときいたのですが拙いですか
608デフォルトの名無しさん:2005/09/23(金) 15:36:21
609デフォルトの名無しさん:2005/09/23(金) 15:39:53
スレ違いです。
610588:2005/09/23(金) 16:14:05
議論が発散してるのでもう一度、質問を書く。

『有識者の人へ。
Windows上のC言語でお勧めの環境はどれですか?
いろんな前提要件抜きでバシッとマジレス希望。
或いは、各々の特徴を述べ立てて比較検討希望。
よろしくお願いします。マジでお願いします。 』
611デフォルトの名無しさん:2005/09/23(金) 16:19:03
>610
前提要件抜きでバシッとマジレス
LSI-C86
おまいには、これで十分。
612デフォルトの名無しさん:2005/09/23(金) 16:42:22
>>610
んじゃ、マズレス。
Windows上で今更Cを使うメリットは皆無であり、せめてC++を使え。
以上。
613:2005/09/23(金) 17:10:54
>>610
有識者に意見を求めるのなら、分別ある言動をとってください。
3つのスレでその書き込みを確認しましたが、マルチと呼ばれる行為です。
荒らしにもなりかねず、嫌われる行為です。
議論が発散しているなんてことでは全然ないんですよ。
頭の悪さを露呈する言動は止めるべきです。出直しなさい。
「いい加減目覚めなさい」
”運が良ければ”誰かが教えてくれますよw
614デフォルトの名無しさん:2005/09/23(金) 17:19:56
>>610
前提要件抜きで決められるわけないだろボケ
討論はスレ違いだボケ
615デフォルトの名無しさん:2005/09/23(金) 18:00:14
ニートは黙ってろww
616デフォルトの名無しさん:2005/09/23(金) 18:08:03
cygwinとかmingwだとぐちゃぐちゃになる
のが嫌な場合、

SFUじゃないかな
無料版あるし
コンパイラはgccと、cl(あれば)が使える
617釣られてみる:2005/09/23(金) 18:14:17
>>616
スレ違いにレスせんで宜しい。
618デフォルトの名無しさん:2005/09/23(金) 18:17:52
>613
結局のところ、オマイ自身は588に対してなんの回答もしてないくせに
エラそうだな
イバりたかったらまず回答しろ
それでオマイの力量がわかるw
619デフォルトの名無しさん:2005/09/23(金) 18:27:30
Windowsなんてクソ小汚い環境でプログラミングするなんてキチガイ
620:2005/09/23(金) 18:29:44
確かにWindowsのCの環境って、GUIとCLIの違いとか
ライブラリの違いとか、正直何がいいかようわからん。
621デフォルトの名無しさん:2005/09/23(金) 18:33:17
討論すると奴の思う壺だぞ。
622デフォルトの名無しさん:2005/09/23(金) 18:35:59
基本的にコンパイラはどれ使っても出来ることに大差はない。
VC++ MinGW gcc Boland あたりがメジャーどころ。

差が出るのはコンパイラじゃなく開発環境の方。
VC++ は統合開発環境がついててとっつきやすいかも。
Boland にはフリーソフトで統合開発環境がある。
gcc と MinGW は純粋にコンパイラだけ。コンソールでコンパイル。

あと、boost と STLport は使っといて損はないと思う。

いじょ、マジレス。
623:2005/09/23(金) 18:36:00
連続カキコすまそ。
Windows用のものを開発するって決まっているんであれば、
なんだかんだVS.netがいいのか?それともBorlandとか?
評判も賛否両論だし、ようわからん。詳しいやついねーか?
CLIだったらUnix系のCygwin+GCCあわせ技とかがいいのかなぁ。
UNIXに乗り換えも簡単そうだし。。
誰か結論をまとめてくれ。
624デフォルトの名無しさん:2005/09/23(金) 18:50:49
 
 
さ ぁ 熱 く な っ て ま い り ま し た 。
 
 
625デフォルトの名無しさん:2005/09/23(金) 18:53:13
626メーカー勤務:2005/09/23(金) 19:03:46
SFUもCygwinもいらね。
・LinuxとWindowsのデュアルブート。
・LinuxでGCC+GDB。
・WindowsでVS.net(有償の場合)、Borland(無償の場合)。
・当然Windows上にはTeraterm、X必須(Win ClientからのUnix Server
 remote accessのため)。あとTeratermにSSH仕込むの忘れないで。
これでほとんどパーペキな環境。あとはプログラマのポテンシャルだなw
627デフォルトの名無しさん:2005/09/23(金) 19:07:13
アドレス渡しを使った関数の利用で初歩的なんですが
void in(int *a,int *b)
{
scanf("%d %d",a,b);
}

int main(void)
{
int a,b;
in(&a,&b);
printf("%d %d",a,b);
}

というのができますよね?
これと同じことを構造体の場合でもやりたいのですがうまくいきません
とりあえず今わかる知識でソースを書いて見ましたがエラーが出ます
やりたいことは構造体のメンバreとimがあり、関数inで数値を入力しメイン関数で表示
したいんです
struct comp{
int re,im;
};

void in(int a.re,int a.im){
scanf("%d %d",a.re,a.im);
}

int main(void)
{
struct *a;
in(a->re,a->im);
printf("%d %d",a.re,a.im);
}
628デフォルトの名無しさん:2005/09/23(金) 19:18:29
>>627
struct comp {
int re, im;
};

void in(struct comp *c)
{
scanf("%d %d", &c->re, &c->im);
}

int main()
{
struct comp a;
in(&a);
printf("%d %d", a.re, a.im);
}
629デフォルトの名無しさん:2005/09/23(金) 19:19:58
突っ込みどころ満載だな。

>struct *a;

structだけじゃだめだろうに。
しかもこれだけじゃ実体がないじゃないか。

>void in(int a.re,int a.im){
意味不明。関数にaは関係ない。
void in(int *re, int *im)

void in(struct comp *a)
にしろ。

>in(a->re,a->im);
これは値渡し
630デフォルトの名無しさん:2005/09/23(金) 19:20:13
>>627
やりたいことは分かるが、まず宣言が違う
structだけじゃ意味がない。構造体変数の宣言はstruct タグ名 変数名;
それにポインタだけを宣言しても意味がない
mallocなりcalloc、allocで別途領域を作ってやる必要がある
それとin()の仮引数名もおかしい
631デフォルトの名無しさん:2005/09/23(金) 19:28:43
>>626
・・・で、VSとBorlandどっちがいいんだ?
または他のIDEとの差異(長短)は?
論点は「Windows上のC」だろ。そこが問題なのでは?
632デフォルトの名無しさん:2005/09/23(金) 19:32:53
つまりあんな質問になに薦めても無駄なのでみなレスやめるよろし。
633デフォルトの名無しさん:2005/09/23(金) 19:40:27
そもそもどの程度の規模のCを使うつもりなのか
勉強やそれに毛の生えた程度ならVSとかのIDE使うのは冗長
Cygwinが一番手っ取り早い+扱いやすい
逆に有る程度の規模のを作るならIDE必須

要は場合に依りけりだろ
634世話焼き暇人:2005/09/23(金) 19:57:04
>>628 の人のソースに加え・・・
#include <stdio.h>
#include <stdlib.h>
struct comp{
int re,im;
};
void in( int *re, int *im ) {
scanf("%d %d",re,im);
}
int main(void)
{
struct comp *a,b;
a = &b; // ミソ [a = (struct comp*)malloc(sizeof(struct comp));]でもいい
in( &a->re, &(*a).im ); // &a->re つまりは &b.re に同じ reのアドレスを渡す (*a).im もまた同様の解釈
printf("%d %d\n",a->re, b.im);
}
色々改造してポインタを理解するよろし
635デフォルトの名無しさん:2005/09/23(金) 20:08:18
>>633
Cygwinってそんなに手軽か?

お絵かきソフトとかちょろっとしたCOMサーバ、
COMのホスティングとか簡単に出来る?
Windowsプログラミングの典型的な例だが

俺は何も考えずVisualStudio.NET推奨
BoostとATL/WTLで逝け
Cは使い物にならんから捨てろ

ただしVS.NET2003を「今」買うのはタイミング的にアレなのでやめとけ
636デフォルトの名無しさん:2005/09/23(金) 20:11:32
個人的にゃ2005のインターフェースはアレだけどな
637デフォルトの名無しさん:2005/09/23(金) 20:17:15
そういえばPlatformSDKにATL/MFCの(かなり古めの)ソースついてるけど
あれってコンパイルして他環境で使えるの?
638廃人:2005/09/23(金) 20:26:05
>>635
俺もC覚えた手のときそう言われてMFCを嫌ってWTLからWindowsプログラミング始めますた
639デフォルトの名無しさん:2005/09/23(金) 20:29:07
>>638
「わたしはコレで廃人になりますた」
とでも言いたいのか、チミは!
640デフォルトの名無しさん:2005/09/23(金) 21:21:36
教えください
if( 0==abc( x, y) )

みたいに、if文の条件を慣習的に書いてるのですが
if( abc( x, y)==0 )

と書くよりも何か利点があったような覚えがあるのですが
忘れてしまいました。
ご存知の方、教えてください。
641デフォルトの名無しさん:2005/09/23(金) 21:26:15
>>640
=を一個打ちそびれて
a = 1 これはコンパイル通る
1 = a これ書き間違えたらエラーとなるけど、これの場合は・・・
642デフォルトの名無しさん:2005/09/23(金) 21:27:12
>>640
abc()がポインタを返す場合等、
if(abc(x,y)=0)と間違った場合、コンパイル時にエラーとして発見できない
643デフォルトの名無しさん:2005/09/23(金) 21:28:06
>>640
それfjとかではヒンシュク買ってたテクだな
644デフォルトの名無しさん:2005/09/23(金) 21:30:32
if (1 == x)
とは書かないが

if ("0".equals(str))
とは書くな、Javaとかで。strがnullでも大丈夫だから。
645640:2005/09/23(金) 21:32:17
>>641,642 dクス!!そうでしたね!!
もやもやが晴れますた。
社内にクソなmyコーディング規約を押し付ける厨がいるので
これで反論できます。

>>643
なぜ、ヒンシュクなんでしょう?

>>644 Javaは関係ないです
646デフォルトの名無しさん:2005/09/23(金) 21:33:10
>>640
初心者っぽい書き方をしておけば、注意深くソースを見てもらえる。
647デフォルトの名無しさん:2005/09/23(金) 21:33:40
>>645
反対派から言えば「直感的じゃない。」
それに最近のコンパイラは警告出してくれるしね
648デフォルトの名無しさん:2005/09/23(金) 21:35:26
>>645
if 内で代入文書いたら、普通コンパイラが警告を吐く。
読みにくくなるだけで、大した効果はないオナニーテクだから。
649デフォルトの名無しさん:2005/09/23(金) 21:36:44
全てのプロジェクトが最新のコンパイラを使ってるとは限らん。
改修なんか昔のだったりする。
650デフォルトの名無しさん:2005/09/23(金) 21:37:44
= と == を打ち間違えるような、三流派遣プログラマのまねをすることはない。

自然に読めるように「if (abc(x, y) == 0)」と書きなさい。

日本語にすればわかるでしょ?
「もしゼロがabc(x,y)ならば」と「もしabc(x,y)がゼロならば」と
どちらがわかりやすいか。

タイピングミスを怖がって、不細工なコーディングをするものではありません。
651デフォルトの名無しさん:2005/09/23(金) 21:38:01
if (p = strchr(s, '\n'))
  *p = '\0';

のようなコードを良く書く俺にとっては
警告も余計なお世話なんだが、まあ広い目で見たら
しょーがないやね
652デフォルトの名無しさん:2005/09/23(金) 21:40:00
>>649
コードをチェックする方法として、コンパイラしか知らないってのは
プロとしてどうかと思う。
653デフォルトの名無しさん:2005/09/23(金) 21:40:32
だれか、 >>642 の釣りにかかってやれよ。
654デフォルトの名無しさん:2005/09/23(金) 21:41:22
コンピュータ言語と日本語を同一化するのが信じられん。
普通英語で考えろよ。
おまえ、クソコーディング規約厨だろ。
655デフォルトの名無しさん:2005/09/23(金) 21:42:36
不思議なのはそんなクソな理由さえわからずにそんなクソコードを
書いてる厨が、人をクソなmyコーディング規約が押し付けで反論の
余地と必要があると思っている点だなあ。どっちもクソ厨だからやめれ。
656デフォルトの名無しさん:2005/09/23(金) 21:43:22
昔のCRTは性能が悪くて = と == の区別がし辛かったんだよ
657デフォルトの名無しさん:2005/09/23(金) 21:43:31
>>654
英語でも同じだけどな。
if abc(x,y) equals to zero, ....
658デフォルトの名無しさん:2005/09/23(金) 21:44:18
神経質な人がいっぱいですね
659デフォルトの名無しさん:2005/09/23(金) 21:45:17
>>656
昔の端末なら80x24程度で24ポイントのフォントだったりするから
全然見づらくない気がするんだが

いずれにせよ気になるんならlintを使え、が昔のやり方。
昔のコンパイラは今ほど親切でもお節介でもなかったからな。
660デフォルトの名無しさん:2005/09/23(金) 21:46:00
>>653
なにが?
661デフォルトの名無しさん:2005/09/23(金) 21:46:27
>>656
昔はソースリストを打ち出して、チーム全員で赤ペン持ちながらコードチェックだ。
662デフォルトの名無しさん:2005/09/23(金) 21:46:42
>>656
昔は、プロポーショナルフォントでコーディングすることなんてなかったから、
= と == は、幅だけで十分に区別できます。
663デフォルトの名無しさん:2005/09/23(金) 21:48:03
え?今でもプロポーショナルフォントではコーディングしないだろ?
少なくともC界隈では。

やってる奴がいるとしたら、信じられない
664デフォルトの名無しさん:2005/09/23(金) 21:48:07
>>660
if (*abc(x,y) = 0) じゃないんだよ。 アンダスタン?
665デフォルトの名無しさん:2005/09/23(金) 21:49:20
区別できるとか言ってる人は、現物見たこと無いんですねぇ。
年寄りの昔話スレじゃないのでこのへんでやめときますけど。
666デフォルトの名無しさん:2005/09/23(金) 21:51:19
>>664
int* abc(x, y){
   static int p;

   return &p;
}
のつもりだったんだけど

 

   
667デフォルトの名無しさん:2005/09/23(金) 21:58:08
おまえらどうでもいいことですぐムキに(ry
668デフォルトの名無しさん:2005/09/23(金) 22:04:30
つーか0と比較するやつが馬鹿
669デフォルトの名無しさん:2005/09/23(金) 22:08:17
falseと比較するやつは馬鹿と思うが、
0との比較は構わんと思う。
670デフォルトの名無しさん:2005/09/23(金) 22:10:27
つーか、
全角と半角の区別ができないやつとか、
大文字と小文字の区別ができないやつとか
ー と − の区別ができないやつとか
= と == の区別ができないやつとか
注意力が不足しているやつはプログラムしなくていいよ。
671デフォルトの名無しさん:2005/09/23(金) 22:13:59
0は例えだろ。
falseでも明示的にif文の条件に書けと規約厨は言う。
672デフォルトの名無しさん:2005/09/23(金) 22:19:03
唐突ですが、実務家(金融系)はC++を使うらしいんですよ。

んで、Cはある程度知ってるんですがC++はまるで知らないわけでして
何で勉強するのがお勧めでしょう?

質問スレで推薦図書池言われましたが、にぎわってないみたいなんで、
できればよろしくお願いします
673デフォルトの名無しさん:2005/09/23(金) 22:21:16
>>672
推薦図書池
大丈夫、あそこは質問を投げかければ自然と人が集まってくる。
674デフォルトの名無しさん:2005/09/23(金) 22:21:29
スレ違いがわからないようなやつに、答える筋合いはない。
675デフォルトの名無しさん:2005/09/23(金) 22:23:30
なんでプログラムするヒトは高圧的なヒトが多いんですか??
676デフォルトの名無しさん:2005/09/23(金) 22:23:35
必死だな!www
677デフォルトの名無しさん:2005/09/23(金) 22:25:54
>>673
ほーい、いってみます。
678デフォルトの名無しさん:2005/09/23(金) 22:36:52
>>675
愛の鞭
679675:2005/09/23(金) 22:44:25
>>678
なるほど。
熱いヒトたちなんですね^^
これからもIT業界、電機業界を支えてくださいね!
680デフォルトの名無しさん:2005/09/23(金) 22:44:41
経験やテクの無いやつが反対するんだよな
例のif文
681デフォルトの名無しさん:2005/09/23(金) 22:48:15
三流派遣プログラマとしての経験かね?
682デフォルトの名無しさん:2005/09/23(金) 22:55:25
>>675
プログラマの心理をまじめに分析すると、
普段プログラムで概ね思い通りの物を作ってるからじゃないかな。
うまくいかない事象に対面すると、どうしていいか判断できなくて、
癇癪を起こしたり、普段行っているプログラムを書くように
高圧的になったりする。
683デフォルトの名無しさん:2005/09/23(金) 22:55:40
白熱しているところ、話の腰を折って申し訳ありませんが、
C言語をはじめたばかりであまりわからないのです。
ビットシフトはなんの役に立つのでしょうか? 
684デフォルトの名無しさん:2005/09/23(金) 22:57:06
定番のコピペを張るときにネタとして使う。
685デフォルトの名無しさん:2005/09/23(金) 22:57:08
>>683
何の役にも立ちません
686675:2005/09/23(金) 22:59:46
>>682
なるほど・・・
純粋なかんじですねw
でも、気難しいヒトほど、プログラムやその他創作活動に優れているような印象を受けます。
環境に馴染むことでなく、創作対象によりエネルギーを注がれているからかもしれませんね。
687デフォルトの名無しさん:2005/09/23(金) 22:59:51
プログラマの心理としては、普段のプログラムでうまくいってる事を、
現実にも写像したがる。
現実を眺める時間よりも、プログラムを読み書きしている時間の方が
長かったりするとこういった症状が出やすくなる。
つまりプログラマは人付き合いが下手糞なんだよね。
688デフォルトの名無しさん:2005/09/23(金) 23:00:36
過度の反復による虚無感を伴った笑いを取れる可能性がある。
ツマンネェヨ
689デフォルトの名無しさん:2005/09/23(金) 23:04:58
処方としては、やはり現実と向き合う時間を多くとる事かな。
例えば症状が重い人の場合プログラムを読み書きすること自体が
現実逃避の手段になってるわけだから、その人からパソコンを
取り上げてしまえば、自殺するかもしれないね。
690デフォルトの名無しさん:2005/09/23(金) 23:08:44
プログラムかわいいよプログラム
犬なんかより、よっぽど忠実に働く
691デフォルトの名無しさん:2005/09/23(金) 23:10:26
プログラムで動いてるAIBOはかわいくないけどな
692select:2005/09/23(金) 23:10:58
select() システムコールで待機中のプログラムに対して gdb で attach したところ、select() の呼び出しフレームが __DTOR_END__ となってしまい、呼び出し元の関数名が取得できませんでした。

呼び出し元の関数名を取得するにはどうしたらよいのでしょうか?
どなたかご教授願います。

(続く)
693select:2005/09/23(金) 23:11:51
【attach 時の bt 出力】
----------------------------------------------
(gdb) bt
#0 0x400f5a92 in select () at regexec.c:1576
#1 0x40155968 in __DTOR_END__ () from /lib/i686/libc.so.6
#2 0x40034c1f in __libc_start_main (main=0x8048348 <main>, argc=1, ubp_av=0x0,
init=0x80483b0 <__libc_csu_init>, fini=0x80483f8 <__libc_csu_fini>, rtld_fini=0, stack_end=0x0)
at ../sysdeps/generic/libc-start.c:225

【環境】
----------------------------------------------
OS : Vine Linux 3.1
kernel: kernel-2.4.27
libc : glibc-2.3.3
gcc : gcc-3.3.2
gdb : gdb-5.2.1

【ソース】
----------------------------------------------
int
main(void)
{
fd_set readfd;

FD_ZERO(&readfd);
FD_SET(0, &readfd);

select(1, &readfd, NULL, NULL, NULL);

return 0;
}
694デフォルトの名無しさん:2005/09/23(金) 23:15:17
>692
たぶんthunkが噛んでいるので、その一つ上(下?)が呼びだし関数。
695select:2005/09/23(金) 23:23:05
ご回答ありがとうございます。> 694

thunk ですか・・。
ググッってみたのですが、thunk というものが何なのか分かりませんでした^^;
もしよかったらお教え願います。

あと追加情報ですが、待ち状態に入る直前までは、次のように main() から select() が呼び出されていることが分かります。
------------------------------------------------------------
#0 0x400f5a60 in select () at regexec.c:1576
#1 0x080483a2 in main () at a.c:11
#2 0x40034c1f in __libc_start_main (main=0x8048348 <main>, argc=1, ubp_av=0x1,
init=0x80483b0 <__libc_csu_init>, fini=0x80483f8 <__libc_csu_fini>,
rtld_fini=0x400144a0 <_rtld_local>, stack_end=0x0) at ../sysdeps/generic/libc-start.c:225
696デフォルトの名無しさん:2005/09/23(金) 23:33:59
派遣のほうが社員より収入高いよ。
俺なんかフリーランス月収60マソ@26歳
697デフォルトの名無しさん:2005/09/23(金) 23:37:05
>>696
フリーで1人月60って別に高くないような・・・。
698デフォルトの名無しさん:2005/09/23(金) 23:37:48
目先の金しか見えない人だろ
699デフォルトの名無しさん:2005/09/23(金) 23:39:29
26歳で月60も稼ぐんだ。すげえ
700デフォルトの名無しさん:2005/09/23(金) 23:39:41
稼働時間にもよるな。
701デフォルトの名無しさん:2005/09/23(金) 23:42:14
>>695
【名-2】 《コ》サンク◆16ビットのメモリアドレスを32ビットに変換すること。
またはその逆。転じて別アーキテクチャのコードを読み出すこと。
16ビットと32ビットのプログラムではメモリアドレスの振り方が異なるので、アドレスの変換をして呼び出す必要がある。
702デフォルトの名無しさん:2005/09/23(金) 23:54:39
>>696
中間マージンなど諸経費は?
703select:2005/09/23(金) 23:58:20
ありがとうございます。>695

thunk の意味はなんとなく理解できましたが、
この現象とどのように関わっているのかが正直分かりません。

難しいです・・・;;
704デフォルトの名無しさん:2005/09/24(土) 00:06:39
>>690
バグまで忠実に再現するがな。
705デフォルトの名無しさん:2005/09/24(土) 00:54:10
関数名の最初が _(アンダーバー)で始まる名前を
つけたがる人がいるんですけど
これってどうよ。
706デフォルトの名無しさん:2005/09/24(土) 00:55:06
見づらい
そんだけ
707デフォルトの名無しさん:2005/09/24(土) 00:56:01
>>706
カーネルやライブラリのコード追ってりゃ嫌でも慣れる罠
708廃人:2005/09/24(土) 00:56:38
C++で踏み台として使うprivateなメンバ関数に使うかな。
709デフォルトの名無しさん:2005/09/24(土) 01:01:39
なぜC++の話が出てくる?
710廃人:2005/09/24(土) 01:04:50
逆にそれ以外じゃ自分で命名しない。
処理系依存でデフォで用意されてる関数に使うものだろ。
711デフォルトの名無しさん:2005/09/24(土) 01:05:20
まだ日本語を勉強中だから
712デフォルトの名無しさん:2005/09/24(土) 01:15:48
>>710
答えになってない
なぜC++の話がでてくるんだ?
713デフォルトの名無しさん:2005/09/24(土) 01:20:28
まったく関係無い事を、さも正しいかのように語る、詐欺師の手法です。
714デフォルトの名無しさん:2005/09/24(土) 01:28:32
borlandのフリーの統合何ちゃらって
builderX personalでいいの?
これって十分使えるの?
715デフォルトの名無しさん:2005/09/24(土) 01:29:58
>>714
はいそうです
716デフォルトの名無しさん:2005/09/24(土) 01:48:24
有償のbuilderと比べてどうなの
717デフォルトの名無しさん:2005/09/24(土) 02:02:56
>>716
製品版との機能差ならBoland行って自分で調べて来い。
そんな事より、自分で試してみたらどうだ?
お前にとって使えるものかどうか。
718デフォルトの名無しさん:2005/09/24(土) 02:57:18
初心者だから決めかねてるんだろが
だいたい試すったって初心者にはよく分からんだろが
いろいろ聞いてやってみるかどうか考えてんだろ
だいたいこのスレはこういうことを聞くスレじゃないのかよ
自分で試したらどうだ?って・・・
719デフォルトの名無しさん:2005/09/24(土) 03:07:33
>>718
自作自演乙
720釣られてみる:2005/09/24(土) 03:17:46
>>718
>だいたいこのスレはこういうことを聞くスレじゃないのかよ
違う。
721デフォルトの名無しさん:2005/09/24(土) 03:18:37
>>712
>>705-707 >>710 という流れじゃないのか?
正確に言うと、

(1) 下線に続き大文字か下線で始まる識別子は予約識別子である。
(2) 一般識別子とタグがファイル有効範囲で使われる場合については、
  下線で始まる識別氏は予約識別子である。

つまりは、ファイルスコープでなければ、
下線に続き小文字か数字で始まる識別子は予約識別子ではない。
まあ、普通は使わないけど。
下線使いたければ、最後につけるべし。
722釣られてみる:2005/09/24(土) 03:22:53
>>721
いやだから、何故このスレでC++の話題が>708で出るかって話でしょ。
723デフォルトの名無しさん:2005/09/24(土) 03:26:04
釣りでも何でもないじゃないか・・・。
724デフォルトの名無しさん:2005/09/24(土) 11:53:13
名前欄やメール欄に「釣られてみる」とか書いてる奴は最強のヘタレ
725デフォルトの名無しさん:2005/09/24(土) 12:03:16
それに反応してる香具師もなw
726デフォルトの名無しさん:2005/09/24(土) 12:26:27
なんでこんなにムキになる人間が多いのか
それもくだらんことで
727デフォルトの名無しさん:2005/09/24(土) 12:48:06
>>722-727がくだらない人間
728デフォルトの名無しさん:2005/09/24(土) 12:50:59
師匠お慈悲を〜

729722=720:2005/09/24(土) 12:59:59
>722の方は消し忘れ。
730デフォルトの名無しさん:2005/09/24(土) 13:03:50
mallocしたあとfree忘れるようなやつだな
最低だ
731デフォルトの名無しさん:2005/09/24(土) 13:10:27
>>730
だってreallocしたときにアドレス変わってたんだもん
とかいうやついるよね。
732デフォルトの名無しさん:2005/09/24(土) 13:20:58
無条件に「自分で調べろ」って言うヤツは、要はソイツも知らないってコト
これ以上自分の不得意分野での議論が始まることを避けたいという深層心理に
よる言動ナリ

ダセ
733デフォルトの名無しさん:2005/09/24(土) 13:24:03
ttp://www5b.biglobe.ne.jp/~hedy/image/
これでも遊んで気を落ち着けろ
734デフォルトの名無しさん:2005/09/24(土) 13:36:45
>>733
びっくりしたじゃないか
735デフォルトの名無しさん:2005/09/24(土) 14:01:19
>>733
どこにいるのか分からない…
突然出てきた奴がウォーリーでつか?
736デフォルトの名無しさん:2005/09/24(土) 14:50:20
昔はこんなのに一生懸命になってたんだよな。本まで買って。
ひさしぶりにやってみたけど、これほどつまんないものだとは思わなかった。
737デフォルトの名無しさん:2005/09/24(土) 15:18:10
テキストファイルを一行ずつbufに読んで出力する処理なんだけど、

while (!fgets(buf, sizeof(buf), fp))
printf(buf);
だと問題ないけど、

while (!feof(fp)) {
fgets(buf, sizeof(buf), fp);
printf(buf);
}

だと、最後の行が二度表示されるんだ。どうしてなんだ?
738デフォルトの名無しさん:2005/09/24(土) 15:22:24
>>737
fgetsは最後まで読み取った段階でEOFをセットするわけじゃなく
最後まで読んで、なお読み込もうとした時にEOFをセットするから。
739デフォルトの名無しさん:2005/09/24(土) 15:23:48
おまい、feof() の意味わかってんのか?
"今eofかどうか"を調べんだぞ?
fgets()とかしてからでないとeofに達しないじゃないか
740デフォルトの名無しさん:2005/09/24(土) 15:28:52
>最後の行が二度表示

ちなみにこっちは、fgets()が失敗してもバッファクリアしないからたまたま表示されるんだな
気になるならfgets()する前にバッファクリアしとけ(多少は気にならなくなるだろw)
741デフォルトの名無しさん:2005/09/24(土) 15:30:10
2分木のファイル書き込み、ファイル読み込みってどうやるの?
742デフォルトの名無しさん:2005/09/24(土) 15:33:37
どうって?
ツリー順に書き出し
読み込み時は読みながらツリーにしていく
ってことでなくて?
743デフォルトの名無しさん:2005/09/24(土) 15:35:39
アドレスのリンク張り直ししないといけないから、ただの読み出しじゃぁーできなくない?
744737:2005/09/24(土) 15:37:17
dowhileをつかえばいいっちゅうことだな。
ありがとよ。
745デフォルトの名無しさん:2005/09/24(土) 15:39:42
>744
いきなりfgets()が失敗するケースにもちういしる!
746737:2005/09/24(土) 15:41:25
って、dowhileでうまくいくのは錯覚だった
747デフォルトの名無しさん:2005/09/24(土) 15:43:21
というか意図的にループの中にfgetsを使う場合はifで結果をチェックしてbreakしる
748デフォルトの名無しさん:2005/09/24(土) 15:46:00
while (!fgets(buf, sizeof(buf), fp))
printf(buf);
だと問題ない

ならそれでいいやん?
749デフォルトの名無しさん:2005/09/24(土) 15:49:47
突然ですが、教えて下さい。
scanfはバッファに\nが残って時々悪さを
しますよね?
そこで下記マクロを考えてみました。
これで防げない不具合や何か問題あれば教えて下さい。
#define prl(x) (printf(x"\n"))//これはオマケ。
#define scanpoi(i) (prl("整数を入力しEnterを押す。"),\
scanf("%d",&i),\
rewind(stdin))
#define scanpos(s) (prl("文字列を入力しEnterを押す"),\
scanf("%s",s),\
rewind(stdin))
750デフォルトの名無しさん:2005/09/24(土) 15:51:31
int mono=123;
int situ=1.23;
printf("mono1:%1d\n",mono);
printf("mono2:%2d\n",mono);
printf("mono3:%3d\n",mono);
printf("situ1:%1d\n",situ);
printf("situ2:%2d\n",situ);
printf("situ3:%3d\n",situ);

などのように%dの記述を変える意味を教えてください。
また、"%5.2lf ",a[i]; という記述の意味も教えてください
751デフォルトの名無しさん:2005/09/24(土) 15:53:01
>>749
どうしてもscanfが使いたいなら
scanf("%d%*c", &i);
でいいやん

>>750
ttp://www.bohyoh.com/CandCPP/C/Library/fprintf.html
752デフォルトの名無しさん:2005/09/24(土) 15:53:41
非seekable deviceに対するrewind()の挙動って保証されてたんだっけ?
753750:2005/09/24(土) 16:02:21
>>751
指定されたサイト見てもよく分からないのですが。
簡単に説明していただけませんか。すみません。。
754デフォルトの名無しさん:2005/09/24(土) 16:16:26
>>753
簡単も何もそこに書いてあるのが全てだろ
つーか、あれが理解できないなら向いてない
755デフォルトの名無しさん:2005/09/24(土) 16:21:57
それって2度読み法使うんじゃないよね
756セェンロン ◆89nOjCFiLI :2005/09/24(土) 16:45:53
http://firepro.circle.ne.jp/
ここの作者がなかなか更新してくれないから、自分で同じようなの作ることにしたんだけど、、、

最初の画面の、エクセルっぽい(ぽくないかもw)一覧ってどうやって作るの?
ソートしてくれるのがすっごい便利で、是非使いたい。
リソースのダイアログの中にあるんかなぁ〜と思ってたら、無くて困ってます。

エロイ人教えてください。おねげーしますだ。
757デフォルトの名無しさん:2005/09/24(土) 16:56:27
>>756
馬鹿すぎ
758デフォルトの名無しさん:2005/09/24(土) 17:07:27
realloc Returns!
安全第一のプログラマ用にさらに進化した
reallocです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){

char *jo=(char *)NULL;//処理系によってNULLにもキャスト。
if(jo==NULL) //初回判定
jo = realloc(jo,60 );
if(jo==NULL){
jo= realloc(jo,0); return 1;
}//エラー処理、さすがにエラー処理のエラー処理はしない。
//誤って
jo = realloc(jo,60);
//とやっても全然問題はない。
strcpy( jo, "Nissyはどんな時でもサンダルを愛用する、" );
if(jo!=NULL)//2回目判定
jo = realloc( jo, 120 );
strcat( jo, "という事は、水虫じゃないか!\n" );
if(jo==NULL){
jo= realloc(jo,0); return 1;
}//エラー処理。
printf( jo );
jo=realloc( jo,0 );//メモリーの始末
jo=realloc(jo,0);
//2回やっても問題はない。
return 0;
}
759デフォルトの名無しさん:2005/09/24(土) 17:07:57
全ての構文がjo=realloc( jo,size )と条件文
if(jo==NULL)で統一されました。かつ安全性も極めて?高い。
但しこの統一性と安全性にはコストがともなう。
最後のjo=realloc( jo,0 );の左辺のjo(NULLポインタ?)
はいつ消えるのであろうか?
760デフォルトの名無しさん:2005/09/24(土) 17:08:48
ふと思ったけど最新Cドラフトのセキュアライブラリってどうよ
761デフォルトの名無しさん:2005/09/24(土) 17:10:28
malloc,freeでいいじゃん
762デフォルトの名無しさん:2005/09/24(土) 17:16:50
ASROC
763セェンロン ◆89nOjCFiLI :2005/09/24(土) 17:23:53
>>762
ASROCでググったら、ListViewってのが出てきました。
これです!やりたかったのは。
ありがとー♪
764デフォルトの名無しさん:2005/09/24(土) 17:26:32
工工工エエエエエエェェェ(゚Д゚;)ェェェエエエエエエ工工工
765デフォルトの名無しさん:2005/09/24(土) 18:23:38
>751
>scanf("%d%*c", &i);
>でいいやん
%*cって…キモイやん。
rewindの方がまだマシでっせぇ。

>752
VC++では問題なく動いてます。
保証と言われても困るが…
766デフォルトの名無しさん:2005/09/24(土) 18:25:44
つーかさ、scanfはエラー処理とか考えるならfgets+sscanfでそ?
767デフォルトの名無しさん:2005/09/24(土) 18:36:22
某サイト、scanf対策を偉そうに書いときながら
配列より入力された文字の方が多かったときの事考えてなくてワロタ
768デフォルトの名無しさん:2005/09/24(土) 18:36:55
scanf("%*[^\n]%*c");
769デフォルトの名無しさん:2005/09/24(土) 18:51:11
正規表現使えるんだっけ?
770デフォルトの名無しさん:2005/09/24(土) 18:55:35
768程度のものなら使える
771デフォルトの名無しさん:2005/09/24(土) 19:01:08
>769
一回ぐらいは、きちんとprintfのマニュアルを読んだほうが良い。
772デフォルトの名無しさん:2005/09/24(土) 19:02:05
s/printf/scanf/
773デフォルトの名無しさん:2005/09/24(土) 19:11:15
つまり、みんなPerlを使え、ってこと?
774デフォルトの名無しさん:2005/09/24(土) 20:21:05
いい加減スレ違いだがね。
最低限、マニュアルくらい読んでから書けよな。
775デフォルトの名無しさん:2005/09/24(土) 21:17:11
   cell              cell
  ┌──┐┌──┐    ┌──┐┌──┐       
  │整数││     │─→ │整数││     │─→ ・・・
  └──┘└──┘    └──┘└──┘    
欄名 data   next       data    next   

この図はC言語の構造体cellの内部構造なんですけど
cellの定義ってなんですか
776デフォルトの名無しさん:2005/09/24(土) 21:19:23
struct cell{
  int data;
  struct cell*next;
};
多分こんな感じ
777デフォルトの名無しさん:2005/09/24(土) 21:20:37
>>775
宿題すれへ池。

と言ってもいいが答えておこう。
struct cell
{
  int data
  struct cell *next;
};
778デフォルトの名無しさん:2005/09/24(土) 21:25:19
構造体の中に同じ構造体のポインタを配置するのってどんなところで有用なんでしょうか?
779デフォルトの名無しさん:2005/09/24(土) 21:27:59
>>778
この場合のは(片方向の)リスト構造って言って頭から順に処理していくときに便利
780デフォルトの名無しさん:2005/09/24(土) 21:32:36
演算子の?ってどういう意味ですか?
俺の持ってる本に載ってないうえに、あまりに短いキーワードで
ぜんぜん検索にひっかからんです。
781780:2005/09/24(土) 21:33:52
ごめ、検索かかった
782デフォルトの名無しさん:2005/09/24(土) 21:33:58
>>779
フォローどうもです。データ構造について勉強してみます。
783デフォルトの名無しさん:2005/09/24(土) 22:53:24
>>776-777
ありがとうございます。
今度からは宿題スレに行きます。
784デフォルトの名無しさん:2005/09/24(土) 23:12:34
C言語のプログラムの見本となるような、ソースが落ちている場所をご存じないでしょうか。

785デフォルトの名無しさん:2005/09/24(土) 23:13:09
そりゃもうそこらじゅうに落ちてるよ。
786デフォルトの名無しさん:2005/09/24(土) 23:15:03
とりあえず悪い見本ならここからどうぞ
http://www.gnu.org/
787784:2005/09/24(土) 23:17:16
ありがとうございます
参考にさせていただきます
788デフォルトの名無しさん:2005/09/24(土) 23:22:19
まぁ、今まで腐るほど仕事でCのプログラムを見てきたが、
感動して涙が出てくるようなマネしたくなるようなスゴイ
ソースを見たことは、一度もないな。
789廃人:2005/09/24(土) 23:29:54
GNUスタイルの整形法は確かに吐き気がする。
あんまりコードは読んだことはないんだが、奴らネストの深い条件分岐やループ書きまくってんだろ。

Linuxのソースもインデントはタブだしな。なんとなくだが、いい仕事してるなってのはわかる。
790デフォルトの名無しさん:2005/09/24(土) 23:56:44
まあ現実世界では

  動くソース>>>>>>>>>>>>綺麗なソース

なわけだが
791デフォルトの名無しさん:2005/09/25(日) 00:03:26
ここだって現実ですよ
792デフォルトの名無しさん:2005/09/25(日) 00:15:43
2chは、現実じゃない。
現実で、ぬるぽ、って言ったら殴られるか?
793デフォルトの名無しさん:2005/09/25(日) 00:19:30
>>792
いや、殴られるし
794デフォルトの名無しさん:2005/09/25(日) 00:19:44
ガッって言われたことあるぞ。
795デフォルトの名無しさん:2005/09/25(日) 00:27:57
てゆーか2chで言っても殴られてるAA貼られるだけで実際に殴られないし
796デフォルトの名無しさん:2005/09/25(日) 00:41:40
>>795
精神を殴られてるんだよ。
ハートで感じろ。
797デフォルトの名無しさん:2005/09/25(日) 01:50:50
以前も質問した者です。

あるソースがあり、main関数で
int main( int argc, int **argv)
と仮引数宣言されているとします。
また、このソースをコンパイルした実行ファイルをa.exeとします。
質問の意図がわかりにくいと思うのですが、
このとき下のような順番で処理されていると考えていいのでしょうか?

1.>a.exe b cと実行
2."a.exe","b","c"がそれぞれメモリのどこかの配置される
3."a","b","c"のアドレスを代入されたポインタがこの順でメモリのどこかに配置される
4.main関数に3.の"a"のアドレスを代入されたポインタのアドレスが渡される
798デフォルトの名無しさん:2005/09/25(日) 01:59:41
>>797
その処理は半ばOSの仕事であり半ばスタートアップルーチンの仕事だ。
後者はコンパイラにソースがついているだろうからそれを読んでみるといい。
ここでは個別の実装については語れないので必要なら適宜該当スレへ。
799デフォルトの名無しさん:2005/09/25(日) 02:07:59
>>798
ありがとうございます。C言語解説のサイト、テキストを見ても判然としないので困っていました。
少し調べてみたいと思います。
800デフォルトの名無しさん:2005/09/25(日) 02:21:47
ぬるぽはスレ違いだろ
801デフォルトの名無しさん:2005/09/25(日) 02:59:53
ぬるぽ
802デフォルトの名無しさん:2005/09/25(日) 03:01:57
さぁ、どうしたものか・・・
803デフォルトの名無しさん:2005/09/25(日) 03:27:58
nn
804デフォルトの名無しさん:2005/09/25(日) 04:50:40
決してスレ違いでは無いと確信しているのでここに
書くけど、void氏がmixiを強制退会になってたんだってw

http://d.hatena.ne.jp/mixi_love/20050811

古い話題ですまん
805デフォルトの名無しさん:2005/09/25(日) 05:11:25
おいおい、古すぎるだろw
806デフォルトの名無しさん:2005/09/25(日) 05:20:55
>>804
それに、専用スレがあるんだ。だから充分スレ違いだ。
807デフォルトの名無しさん:2005/09/25(日) 09:39:51
年と月と日付から曜日を調べる方法ってないっすか?
あったら教えて。
808デフォルトの名無しさん:2005/09/25(日) 09:44:40
>>807
time.hの中にtime_tからstruct tmを生成する関数やその逆を行なう関数がある。
struct tmには曜日のメンバもあるので、struct tm → time_t → struct tmで曜日が得られる。
809デフォルトの名無しさん:2005/09/25(日) 10:11:19
つ【Zellarの公式】
810807:2005/09/25(日) 10:36:21
自己解決しました。
int getwday(int y, int m, int d){
return y -= m < 3, (y + y / 4 - y / 100 + y / 400 + "032503514624"[m - 1] - '0' + d) % 7;
}
811デフォルトの名無しさん:2005/09/25(日) 11:11:46
ちょwwwまっwwwwww
Zeller の公式まで教えてやったのにそれかw
812デフォルトの名無しさん:2005/09/25(日) 13:19:22
>>810
工エエェェ(´д`)ェェエエ工工
813デフォルトの名無しさん:2005/09/25(日) 13:59:43
今日からCを始めようと思って、Borland C++ 5.5 を導入してみたんんだけど、
ttp://www9.plala.or.jp/sgwr-t/detail/EnvSet.html
(↑少し詳しい開発環境設定の説明のページです)
の「4」のコンパイルとリンクをコマンドプロンプトでやると以下のようになるんですけど何が悪いんですかね?
教えてください〜

C:\cwork>bcc32 hello.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
hello.c:
エラー E2209 hello.c 1: インクルードファイル 'stdio.h' をオープンできない
警告 W8065 hello.c 5: プロトタイプ宣言のない関数 'puts' の呼び出し(関数 main )
*** 1 errors in Compile ***
814デフォルトの名無しさん:2005/09/25(日) 14:04:00
>>813
4.コンパイルオプションの設定のbcc32.cfgの設定が不味いな

-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"

↑の"c:\Borland\Bcc55\include"はちゃんと存在するフォルダを指してるか?
あと、bcc32.cfgはbcc32.exeがあるのと同じフォルダに保存しなきゃダメだぞ
815デフォルトの名無しさん:2005/09/25(日) 14:17:58
>>814 ありがとうございます。
"c:\Borland\Bcc55\include"はちゃんと存在してました。
あと、bcc32.exeがC:\borland\bcc55\BinにあったのでC:\lsic330c\BINにあったbcc32.cfgを移しました。

ちょっともう一度試してみます。
816デフォルトの名無しさん:2005/09/25(日) 14:21:46
C:\cwork>bcc32 sample.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

がきました!!
ご指摘とおりbcc32.cfgはbcc32.exeがあるのと同じフォルダに保存してなかったのが原因でした。
ありがとうございます!これからいろいろCやってみます。
817デフォルトの名無しさん:2005/09/25(日) 14:58:21
なんかZellerの公式って1月か2月ができなんじゃなかった?
818デフォルトの名無しさん:2005/09/25(日) 15:02:33
>>817
誤爆か?できる。
819デフォルトの名無しさん:2005/09/25(日) 16:29:00
・1月、2月は前年の13月、14月として計算する

というのを間違って覚えたという感じだな。
まあ、月を扱う部分は配列使ってもいいとは思うけど。
それが >>810 ではあるのだが、文字列を使わんでも int 配列でいいじゃん・・・。
820デフォルトの名無しさん:2005/09/25(日) 17:17:45
C言語で、%dや、%lfと書く代わりに、
%1dや、%5.2lf と書く意味やメリットを教えてください。
821デフォルトの名無しさん:2005/09/25(日) 17:22:46
いや、どんな本にも初登場のときに説明書いてあるだろ……
822デフォルトの名無しさん:2005/09/25(日) 17:30:57
>メリット
なんとなく指定の形に揃えたい場合に役立つ
823デフォルトの名無しさん:2005/09/25(日) 18:06:27
まぁ、普通は%5.2fと書くがな。
824デフォルトの名無しさん:2005/09/25(日) 19:23:36
lf は scanf 用 (double)

printf は、可変個引数の引渡し時に float → double 変換が暗黙に行われるので
f と lf で区別する必要がないので、f のみ。
825デフォルトの名無しさん:2005/09/25(日) 20:25:28
>>824
C99ではlfが追加されている。
826デフォルトの名無しさん:2005/09/25(日) 21:03:34
俺は制限の強い方に合わせてる
827デフォルトの名無しさん:2005/09/25(日) 21:05:23
改悪だよな
828デフォルトの名無しさん:2005/09/25(日) 21:11:03
void SetDifference(Set *s1, const Set *s2, const Set *s3)
{
    if (s2->set[i] = s3->set[j])
    // ホニャララ
}

==とするべきところを上のように間違えててもコンパイルエラーになりませんでした。
s2はconstで修飾されているけど正常なんですか?
コンパイラはVC2003です。
829デフォルトの名無しさん:2005/09/25(日) 21:14:55
>>828
代入されるだけだからコンパイルエラーなどになるはずはないだろ
830デフォルトの名無しさん:2005/09/25(日) 21:15:51
set[i]がconst修飾型じゃなければ問題ない
言い換えるとsetがconst修飾されてない型へのポインタなら問題ない
問題があってもコンパイラにはエラーにする義務はない
831デフォルトの名無しさん:2005/09/25(日) 21:16:05
>>828
set がポインタで、const 修飾されていなければ、正しい挙動。
set が配列ならおかしな挙動。
832デフォルトの名無しさん:2005/09/25(日) 21:18:31
>>828
Setのメンバのsetはポインタ型だよな。
const Set *s2ってことはs2->set自体はconstだけど、s2->setの指す先まではconstにならない。
元の構造体の宣言時にsetがconstなポインタであるかそうでないかを見ている。
833デフォルトの名無しさん:2005/09/25(日) 21:24:25
>>829-832
setはconstでないポインタです。
構造体をconstで宣言すれば各メンバもconstになると勘違いしてました。
どうもありがとうございました。
834デフォルトの名無しさん:2005/09/25(日) 21:26:00
>>833
メンバはconstになるよ。
ただ、ポインタの指す先がconstにならないだけ。
835828,833:2005/09/25(日) 21:37:26
>>834
きちんと読めばそう書いてましたね・・・
ポインタの理解がまだ甘いみたいなのでもうちょっと勉強してきます。
836デフォルトの名無しさん:2005/09/25(日) 21:38:41
const char const *p;
837デフォルトの名無しさん:2005/09/25(日) 21:40:30
const char*const p;
の間違いじゃね?
838デフォルトの名無しさん:2005/09/26(月) 03:21:45
しつもーんでーすっ!!
C言語って標準でスタック用意してないの?
839デフォルトの名無しさん:2005/09/26(月) 03:28:21
>>838
C標準ではコンテナは一切用意されてない。
用意されてるのは配列だけ。

あと、スレタイはちゃんと確かめてからレス投げような。
840デフォルトの名無しさん:2005/09/26(月) 03:32:37
>>839
はい、ありがとうございます
これから気をつけます
841デフォルトの名無しさん:2005/09/26(月) 13:27:32
>>838
ささ、C++へおいで。
842デフォルトの名無しさん:2005/09/26(月) 14:04:22
2バイトのサンプルデータを格納したchar配列をshortのように2バイトで1単位のデータ配列に変換したいのですが、cast演算がうまくいきません。
言い方方ないですかね?
843デフォルトの名無しさん:2005/09/26(月) 14:08:03
>>842
shortが2バイトでchar a[N];とすれば単にshort *p = (short *)a;でいけるはずだが、お前のコードはどうなっているのか?
844デフォルトの名無しさん:2005/09/26(月) 14:08:40
初めからshortに格納しとくか
shortの配列にmemcpyするとか...
845デフォルトの名無しさん:2005/09/26(月) 14:09:10
C言語で、%dや、%lfと書く代わりに、
%1dや、%5.2lf と書く意味やメリットを教えてください。
コンパイル・実行してみて数値が変わるのは分かるのですが、いまいちどう変わっているのかよく分からなくて。。。
何故、5.2といって中途半端な数にするのでしょうか?
846デフォルトの名無しさん:2005/09/26(月) 14:12:19
>>845
その質問はもう飽きた。
847デフォルトの名無しさん:2005/09/26(月) 14:19:29
>>845
printfのマニュアル参照。

> 何故、5.2といって中途半端な数にするのでしょうか?
そういうフォーマットで出力したいからじゃないの?
848デフォルトの名無しさん:2005/09/26(月) 14:24:10
>>844>>855
参考にします
ありがとうございました
849デフォルトの名無しさん:2005/09/26(月) 14:24:46
b[1][1] = 1.0; b[n+1][n+1] = 1.0;
for(i=2; i<=n; i++) {
b[i][i-1] = 1.0;
b[i][i] = -p;
b[i][i+1] = 1.0;

これの意味って、行列bの、b(1,1)と、b(n+1,n+1)には1を代入して、
b(i,i-1) に 1.0、 b(i,i)に -p、 b(i,i+1) に 1.0 を代入するってことですよね?
指定されてないところ(例えば、b(1,2)とか)には 0 が代入されるのでしょうか?
後、これはn+1 * n+1 のマトリクスですよね?

初心者質問ですみません。。。
850デフォルトの名無しさん:2005/09/26(月) 14:27:56
> 指定されてないところ(例えば、b(1,2)とか)には 0 が代入されるのでしょうか?
されない。
851デフォルトの名無しさん:2005/09/26(月) 14:28:28
料理の本に、醤油や出汁と書く代わりに、
醤油小さじ1杯、出汁520mlと書く意味やメリットを教えてください。
作ってみて味が変わるのは分かるのですが、いまいちどう変わっているのかよく分からなくて。。。
何故、520mlといって中途半端な分量にするのでしょうか?
852845:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
853デフォルトの名無しさん:2005/09/26(月) 14:33:35
>>849
> これの意味って、行列bの、b(1,1)と、b(n+1,n+1)には1を代入して、
> b(i,i-1) に 1.0、 b(i,i)に -p、 b(i,i+1) に 1.0 を代入するってことですよね?
そうだけど、i は 2 から n までね。

何をするものか分からないから見当違いの質問になるかもしれんが、
b(1,2) と b(n+1,n) に入れないのは問題ないのね?

> 指定されてないところ(例えば、b(1,2)とか)には 0 が代入されるのでしょうか?
されない。
こういう場合は事前に 0 で埋めておけばいい。

> 後、これはn+1 * n+1 のマトリクスですよね?
n+1 * n+1 のマトリクスを表現しようとはしているだろうけど、
この配列自体のサイズは n+2 * n+2 以上のサイズな筈だ(でなかったら、バグ)。
C の配列の添え字は 1 ではなく 0 から始まるからな。
添え字の最大値は、配列のサイズ - 1 だ。
添え字を 1 から始めたいのだろうが、0 から始めないとメモリが無駄になる。
既にあるプログラムを利用するのであれば仕方がないが、
そういうプログラムと無関係に自分で新しく書くときは、
添え字を 0 から始める癖をつけた方がいい。
854デフォルトの名無しさん:2005/09/26(月) 14:44:12
キモいの!
855デフォルトの名無しさん:2005/09/26(月) 14:46:57
>>852
>>851 はあながちバカにしてるだけじゃないと思うぞ。
これはこれで十分な解答だと思うんだが。
856デフォルトの名無しさん:2005/09/26(月) 15:00:53
というか、>>845>>820 と同一人物で、
>>821-822 では納得できなかったということなのか?
857デフォルトの名無しさん:2005/09/26(月) 15:35:21
あるファイルの先頭行に、文字列を挿入したいのですが
どのようにすればいいのでしょうか?
単純に、ファイルポインタを先頭に、移動しfwriteで書き込めばいいのかと思いましたが
最終行に文字列が追加されてしまいました...

大変申し訳ありませんが、どなたかご教授願います。
858デフォルトの名無しさん:2005/09/26(月) 15:40:55
>>857
fopen(..., "a")などでない限り、先頭に移動して書けば先頭に書かれると思うが。
いずれにしろ、挿入はされないから別ファイルに0から書き出してあとでファイル名変更などすることになる。
859デフォルトの名無しさん:2005/09/26(月) 15:44:50
>>857
>>1嫁、スレ違いだ。でも理解力無いだろうから、初心者スレ逝け。
それといいかげん、半可通の低脳厨が自己顕示欲レスつけるの、やめろ。
860857:2005/09/26(月) 15:49:56
>> 858
ありがとうございます。
ご指摘の通り(...,"a")で開いていました。
別ファイルに書き出して、リネームの方法でやる事にします。

>>859
誠に申し訳ありません。
今後、このような事を起こさないように気をつけます。
861デフォルトの名無しさん:2005/09/26(月) 16:22:50
>>859
威張るだけのお前さんよりはどっちもマシだろうよ
862デフォルトの名無しさん:2005/09/26(月) 16:31:33
>>851
キモいのっ! 人の質問バカにしたような言いかたしないでよん!
おねがいだから、無職なのだから
863デフォルトの名無しさん:2005/09/26(月) 16:31:52
何がスレ違いなのか分からん。
864デフォルトの名無しさん:2005/09/26(月) 16:32:25
>>861
お前よりはマシ
865デフォルトの名無しさん:2005/09/26(月) 16:33:07
わからない = スレ違い
866デフォルトの名無しさん:2005/09/26(月) 16:34:32
>>859=864
オウム返しなレスしかできない奴って哀れだな
867デフォルトの名無しさん:2005/09/26(月) 16:36:19
>>866
こいつ狂ってる
868866:2005/09/26(月) 16:38:09
ありがとうございます。
ご指摘の通り

狂ってます^^
869デフォルトの名無しさん:2005/09/26(月) 16:38:54
>>859必死杉
870デフォルトの名無しさん:2005/09/26(月) 16:41:31
>>859
お前のレスが一番自己顕示欲に溢れてるよ。
871デフォルトの名無しさん:2005/09/26(月) 16:45:08
俺だよ俺俺!!
872デフォルトの名無しさん:2005/09/26(月) 16:46:14
>>869は言語ひとつ覚えられない奴。必死すぎww
873デフォルトの名無しさん:2005/09/26(月) 16:47:35
>>870
Mr.アワレ 乙。
874デフォルトの名無しさん:2005/09/26(月) 16:49:52
なんで859がここまで必死になるのか分からん
大体スレ違いじゃないだろ
875デフォルトの名無しさん:2005/09/26(月) 16:50:22
>>866
さて^^ もうじき17:00です。無職が表を出歩ける時間はここまでですよw
876デフォルトの名無しさん:2005/09/26(月) 16:52:31
>>859>>861が延々と名無しで互いを叩き続けるスレはここですか?
877デフォルトの名無しさん:2005/09/26(月) 16:52:52
デスクトップ違いなスレを甘受する度量が2ちゃんねるにあったとは驚きですね。
878デフォルトの名無しさん:2005/09/26(月) 16:54:29
プログラマーがどんな生物か、良く分かるスレだな。
879デフォルトの名無しさん:2005/09/26(月) 16:54:57
>>876
printf();ごときで偉そうに
880デフォルトの名無しさん:2005/09/26(月) 16:58:03
( ´,_ゝ`)プッ
881デフォルトの名無しさん:2005/09/26(月) 16:59:12
ъ( ゚ー^) 気にするな、馬鹿の言うことは
882デフォルトの名無しさん:2005/09/26(月) 16:59:30
そろそろ誰が誰を煽っているのかすら分からなくなって参りました
883デフォルトの名無しさん:2005/09/26(月) 17:00:11
                  ,,、.
                /ィ/
  .._ .......、.__      /:/l!/
   :~""''..)  ゙゙"''─‐'''"  (;;;,l 
  ゙、'、::::::ノ              ゙ヽ
   ``、/  \     /   ゙ヽ ぷっ
    / ,,..._   ト─‐イ   _,,, ,,/
     ヽ,,.    ヽ,_ノ      ,,/
      ヾ、,,         ,/
       /゙ "       ヽ 
      /          i!  
    (⌒i ヽ    〈 i   / ,i
    γ´ ^゙ヽ.  l l γ´ ^ ゙ヽ
     i     i,__,,ノ ヽ_i,    i
     ヽ,_,,ノ"~´ ̄``゙ヽ,_,,ノ
884デフォルトの名無しさん:2005/09/26(月) 17:01:42
885デフォルトの名無しさん:2005/09/26(月) 17:05:21
886デフォルトの名無しさん:2005/09/26(月) 17:06:23
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
852 名前:845[] 投稿日:2005/09/26(月) 14:30:12
>>851
キモいの! 人の質問バカにしたような言いかたすんなや!
おもんないし。
887デフォルトの名無しさん:2005/09/26(月) 17:07:38
まぁいつもの関西人ってことで
888デフォルトの名無しさん:2005/09/26(月) 17:09:28

 ま た 大 阪 か
889デフォルトの名無しさん:2005/09/26(月) 17:09:46
へーちょ
890859:2005/09/26(月) 17:10:43
>>860-884 ……アホ過ぎ。ニヤニヤ。859はここまで発言していない。
891デフォルトの名無しさん:2005/09/26(月) 17:11:42
( ´_ゝ`)
892デフォルトの名無しさん:2005/09/26(月) 17:12:09
こんなにスレが荒れて、全く嵐の思う壷だな。
893デフォルトの名無しさん:2005/09/26(月) 17:13:33
>>859
気持ち悪い、哀れなおっさんだな。
894デフォルトの名無しさん:2005/09/26(月) 17:15:22
890 名前:859[sage] 投稿日:2005/09/26(月) 17:10:43
>>860-884 ……アホ過ぎ。ニヤニヤ。ここまで全部俺の自演だ。
895デフォルトの名無しさん:2005/09/26(月) 17:15:54
( ´_ゝ`)  ひとりで楽しそう
896デフォルトの名無しさん:2005/09/26(月) 17:16:29
だって僕ひとりでしか遊んだことないから・・・
897デフォルトの名無しさん:2005/09/26(月) 17:17:48
>>859=894
( ´_ゝ`)  ならもう満足したでしょ 哀れなおっさん
898デフォルトの名無しさん:2005/09/26(月) 17:24:08
          ィニ三≡ヽ           /  ̄   ̄ \
         /jj7  \ミt          /、          ヽ はぁ?黙ってろデブ
        彡jj_r==i_r=tiミ         |・ |―-、       |
     >>859彡l.  ̄・・ ̄ ミ        q -´ 二 ヽ      |
         _lt  '=t  /__        ノ_ ー  |     |
      _, -t"lt__    j l ^゙''ー 、     \. ̄`  |      /
    /     ヽ ̄ 丿7     \     O===== |
   /       `-‐''゙         ヽ   /          |

899デフォルトの名無しさん:2005/09/26(月) 17:25:18
          ィニ三≡ヽ           /  ̄   ̄ \
         /jj7  \ミt あ?潰すぞ  /、          ヽ ご、ごめんなさい
        彡jj_r==i_r=tiミ         |ヽ |―-、       |
         彡l.  ̄・・ ̄ ミ        q -´ 二 ヽ      |
         _lt  '=t  /__        ノ_ ー  |     |
      _, -t"lt__    j l ^゙''ー 、     \. ̄`  |      /
    /     ヽ ̄ 丿7     \     O===== |
   /       `-‐''゙         ヽ   /          |

900デフォルトの名無しさん:2005/09/26(月) 17:25:22
>>898
黙れprintf
901デフォルトの名無しさん:2005/09/26(月) 17:28:12
でももうちょっと遊んでもいい?
902デフォルトの名無しさん:2005/09/26(月) 17:30:12
こんばんわよろしくお願いします

#include<stdio.h>

struct pai
{
int otl;
char moji[5];
}

main()
{
//

エラー:main関数の構文がおかしい

と出るのですが、何が原因と考えられるでしょうか?
903デフォルトの名無しさん:2005/09/26(月) 17:31:05
>>902
お前の頭

終了
904デフォルトの名無しさん:2005/09/26(月) 17:31:36
まず死んだほうがいい
905デフォルトの名無しさん:2005/09/26(月) 17:35:33
>>903-904 のラインで削除依頼出してきましたので
906902:2005/09/26(月) 17:38:29
>>903-904
分からない人は黙ってて下さいね^^
無理にレスしなくていいから^^
907デフォルトの名無しさん:2005/09/26(月) 17:46:50
>>906
{
で開いて
}
で閉じてない
908デフォルトの名無しさん:2005/09/26(月) 17:47:42
ワラタ
909デフォルトの名無しさん:2005/09/26(月) 17:50:02
実は「{」、「}」が全角
910デフォルトの名無しさん:2005/09/26(月) 17:50:54
>>906
structって}の前にセミコロンがいるだろ。
911859:2005/09/26(月) 17:51:55
>>902-910
>>1嫁。初心者スレにでも逝けよ。荒らしにしてもアホ過ぎ。
アホ回答者が居着くとこういうのばっか沸いてくるから…
912デフォルトの名無しさん:2005/09/26(月) 17:57:08
>>911
え?また、君が偉っらそうに答えてやるんじゃないの?w
913デフォルトの名無しさん:2005/09/26(月) 17:59:58
自作自演する香具師が言っても、説得力ない
914デフォルトの名無しさん:2005/09/26(月) 18:02:51
>>902
structの書き方が C++か? セミコロンが無いのはともかくとして
915デフォルトの名無しさん:2005/09/26(月) 18:04:14
香ばしきことこの上なし。
916デフォルトの名無しさん:2005/09/26(月) 18:05:15
printfぐらいで馬鹿にするな
917902:2005/09/26(月) 18:20:11
レスありがとうございます。
構造体のメンバを一度もmain関数で呼び出してないの原因なのかなぁと、、、。
918デフォルトの名無しさん:2005/09/26(月) 18:23:51
>>917
ぜんぜん聞いてないし
919デフォルトの名無しさん:2005/09/26(月) 18:24:03
アホ回答者・アホ質問者>>>(人間の壁)>>>常に偉そう&自演しまくりの>>911
920デフォルトの名無しさん:2005/09/26(月) 18:27:50
>>917
既にこのスレ内に答えがあるんだから少しはレスを読め
921902:2005/09/26(月) 18:30:33
>>918
すいません。ちょっと、すみませんがソースを見て下さい
922デフォルトの名無しさん:2005/09/26(月) 18:33:11
>>921
すいません。ちょっと、すみませんがレスを見て下さい

いやマジでもう答えてくれてる人いるからさ
923デフォルトの名無しさん:2005/09/26(月) 18:36:50
まるまる一スレあるっスよ OTL 今100まで読みました
924デフォルトの名無しさん:2005/09/26(月) 18:38:11
>>923
いやそうじゃなくって、お前に対するレスの中に答えがあるんだってば
何も上から全部読まなくても
925デフォルトの名無しさん:2005/09/26(月) 18:38:27
>>922
それは、何番目のレスでしょうか?
926デフォルトの名無しさん:2005/09/26(月) 18:44:13
>>925
とりあえずでているのは>>907

それ以外にも
main関数の宣言自体がよろしくない
structの宣言の終端の;が抜けている
927902:2005/09/26(月) 18:45:11
structの後のセミコロンを直して、全角半角の確認をしてるのにエラーが出るので、

毎回main()の行で、エラーが出てます。

エラー E2141 stable9.c 92: 宣言の構文エラー

2ちゃんに書き写してるときにコロンを書き忘れてしまったんス
ごめんなさい
928デフォルトの名無しさん:2005/09/26(月) 18:47:14
main は 92 行目なの?
929デフォルトの名無しさん:2005/09/26(月) 18:48:39
92行目って何が書いてあるんだよ
930902:2005/09/26(月) 18:49:23
>>926
main()の部分なんですけど、

main(){
/***省略***/

return 0;
}

とやってですね。mainの部分でエラーが出るんです
931デフォルトの名無しさん:2005/09/26(月) 18:51:12
>>902
>>910の言ってるのは間違いだぞ
;は}の後に必要
932902:2005/09/26(月) 18:52:47
>>928
>>929
そうっス。mainの前に、グローバル変数と関数が書いてあるんス。
main関数の外でstructを使い出してから、main()の部分でエラーが出てしまって、
先に進まなくて困ってしまっているんです
933デフォルトの名無しさん:2005/09/26(月) 18:54:01
どうせstructの最後の}の後にセミコロンが抜けてるとかいうオチだろ
934902:2005/09/26(月) 18:54:34
>>931

大丈夫っス。

struct{

};

すいませんが、ちょっと助けて下さい
935デフォルトの名無しさん:2005/09/26(月) 18:56:06
関係ないだろうがmainの宣言をちゃんとしてみろ

つーか、もうどっかにソースうpしろ
936デフォルトの名無しさん:2005/09/26(月) 18:56:12
とりあえずmainの前後5行を載せろ
937デフォルトの名無しさん:2005/09/26(月) 18:58:05
>>934
ソースコードの天辺から「{」と「}」の数を検索して数えろ
そしてそのうちからコメントアウトされてる分を差し引いた数を教えろ
938デフォルトの名無しさん:2005/09/26(月) 19:00:20
取り敢えずソースをうpするのが一番早いんジャマイカ?
このままだと埒が明かんぞ
939デフォルトの名無しさん:2005/09/26(月) 19:01:01
>935−937
};路線が消えてしまったからって、そんなにいきり立たなくてもいいだろう。
main(){
/***省略***/

return 0m(^^)プギャってされちゃうよ。
void mainで返り値0って・・・
940902:2005/09/26(月) 19:02:22
>>935
>>936
ありがとうございます。
休憩した後、upしますので
941デフォルトの名無しさん:2005/09/26(月) 19:05:40
>>939
だって気になるじゃないか
このまま夜をむかえたら夢の中でデバッグしちゃうよ
942デフォルトの名無しさん:2005/09/26(月) 19:11:24
このスレってギャグも詰まってるから面白い。
943デフォルトの名無しさん:2005/09/26(月) 19:21:55
>>942
return 0m(^^)プギャ
944902:2005/09/26(月) 19:34:49
皆さん、お疲れさまですです。upしてきました。
http://49uper.com/up-s/index.php?mode=list

ma-jyan8.c の内容を stable.c に書き換えてるんですけれども
いつもドラは、南しか積もらないし関数をまたぐオバーヘッドが起こってるのかな?と思うのですが

それで今最初から書き直してます。
945859:2005/09/26(月) 19:36:57
だからみんなはじめから初心者スレでやれよ。
不完全な質問にアホ回答者が答えたつもりになっても無駄なんだって。
946デフォルトの名無しさん:2005/09/26(月) 19:39:54
>>944
char *kanji[34]={
...
} ←ここにセミコロンがない
947902:2005/09/26(月) 19:45:19
>>946
直りましたよ(^^)ノ
有難うございます。助かりました。 
948デフォルトの名無しさん:2005/09/26(月) 19:47:22
>>943
いや、そういうのじゃなくて大人げないやり取り自体がツボだと。
949デフォルトの名無しさん:2005/09/26(月) 19:48:09
でもその後のstruct pai_sabaki{ は}; で閉じてるけど影響ないんだ?
950デフォルトの名無しさん:2005/09/26(月) 19:53:29
すまん。オバーヘッドで本気でワロタ
951デフォルトの名無しさん:2005/09/26(月) 19:54:54
>>949
はい、bccでは、エラーが何故かmain()のところでした。
デバックのやり方がわかりません^^;
952デフォルトの名無しさん:2005/09/26(月) 19:56:08
>>950
デバックのやり方を教えて下さい。w
953デフォルトの名無しさん:2005/09/26(月) 20:22:06
>>952
ヤメロ。ハライタスwwwwwwww
954デフォルトの名無しさん:2005/09/26(月) 20:36:45
>>953
ぼくにギジュツを叩き込んでください
955デフォルトの名無しさん:2005/09/26(月) 20:42:14
やたらに伸びてると思いきや……一体この香ばしさはどういうことなんだ

もとからか
956デフォルトの名無しさん:2005/09/26(月) 20:48:53
>>954
一気に冷めた・・・アバヨ
957デフォルトの名無しさん:2005/09/26(月) 20:57:33
そう本当は、人生はつまらないものなのだ
958デフォルトの名無しさん:2005/09/26(月) 21:02:45
>>902
C言語のセンスは感じんが
ボケのセンスは神の領域と保障する
959デフォルトの名無しさん:2005/09/26(月) 21:12:39
入門書のポインタ終わってやっと今構造体だよ
960デフォルトの名無しさん:2005/09/26(月) 21:13:37
パソコン買ってもうじき一年だよ
961デフォルトの名無しさん:2005/09/26(月) 21:24:44
Linux入れたら全部英語だよ
962デフォルトの名無しさん:2005/09/26(月) 21:25:49
C言語なら俺に聞け! Part 115
http://pc8.2ch.net/test/read.cgi/tech/1127737437/
963デフォルトの名無しさん:2005/09/26(月) 21:38:10
ポインタのポインタのポインタのポインタのポインタのポインタのポインタの
ポインタのポインタのポインタテラウザス('A`)

ppppppppppELEMENTってなんだよ氏ね
964デフォルトの名無しさん:2005/09/26(月) 21:43:40
>>958
さすが。吐き捨てる言葉が違う
965デフォルトの名無しさん:2005/09/26(月) 21:50:54
そういえば昔、ギター弾きの先輩で同じことを言う奴がいたな
966デフォルトの名無しさん:2005/09/26(月) 21:57:55
香ばしい顔してたw
967デフォルトの名無しさん:2005/09/26(月) 22:07:57
10次元配列を動的に確保するのならあり得るが、
そういう状況がありうるのかどうかは知らんな。
968デフォルトの名無しさん:2005/09/26(月) 22:30:53
10次元配列を動的に確保ってこういうこと?
#include<stdio.h>
#include<stdlib.h>
main(){
  int i,j,ii,num,*p;
  
  num=3;
  p=(int *)malloc(sizeof(int)*10*10*num);
  for(ii=0;ii<num;ii++){
    for(i=0;i<10;i++){
      for(j=0;j<10;j++){
        p[100*ii+i*10+j]=100*ii+i*10+j;
      }
    }
  }
  for(ii=0;ii<num;ii++){
    for(i=0;i<10;i++){
      for(j=0;j<10;j++){
        printf("%d ",p[100*ii+i*10+j]);
      }
      printf("\n");
    }
    printf("\n");
  }
  free(p);
  return 0;
}
969デフォルトの名無しさん:2005/09/26(月) 22:33:52
ぬるぽってJAVAなんじゃないの
970デフォルトの名無しさん:2005/09/26(月) 22:38:44
JAVAですか・・・
つか、ここはC言語スレだ。
971デフォルトの名無しさん:2005/09/26(月) 22:44:18
>>968
それは普通は3次元配列と言うな
972デフォルトの名無しさん:2005/09/26(月) 23:17:17
だから>>800って言ったの
973廃人:2005/09/26(月) 23:22:24
>>971
何言ってんだどう見ても一次元配列じゃないか
974デフォルトの名無しさん:2005/09/26(月) 23:29:51
>>973
1次元配列で3次元配列をシミュレートしてるんだろ
975デフォルトの名無しさん:2005/09/26(月) 23:31:00
エミュレートだろ
976廃人:2005/09/26(月) 23:57:53
n次元配列は全部1次元で賄えるなら pointer of pointer of ...... は不要だな

俺はリスト構造かなんかで非常にマズーなコード書いたんじゃないかとオモタ
977デフォルトの名無しさん:2005/09/27(火) 00:07:55
(⊃д⊂)コンバン・・・∩・д・∩ ワァー★
978デフォルトの名無しさん:2005/09/27(火) 00:17:51
なんだなんだ
979デフォルトの名無しさん:2005/09/27(火) 00:19:25
そういや、10 次元配列を 10 階ポインタ使ってあれこれしようとすると、
ポインタテーブルだけでものっそい量になってしまうな。
アクセスしやすいというメリットが、
ポインタテーブルがかさばるというデメリットに
完全に押しつぶされるな。
980デフォルトの名無しさん:2005/09/27(火) 00:26:18
>>979
>10階ポインタ

モーゼ?
981デフォルトの名無しさん:2005/09/27(火) 01:07:24
>>979
で、10次元配列の各辺の長さはどれくらい?
982デフォルトの名無しさん:2005/09/27(火) 01:10:17
巨大な配列とか、高次元の配列って、ほとんどの場合スパースなものになるから、
専用のアクセスルーチンつきで、解くべき問題に即した特別なデータ構造にする
と思うのだが・・・

まさか、何も考えないで教科書どおりの2次元配列の作り方をそのまま借用して
10次元配列を宣言する?
983廃人:2005/09/27(火) 01:24:24
C++やJavaならともかく少なくともCじゃやらないな。
そもそも超多重配列が必要になるケースに遭遇したことが無い。

アルゴリズム見直したほうがいい。
984デフォルトの名無しさん:2005/09/27(火) 01:26:31
突然の質問ですが、
printfの\f(改ページ)ってどういう時使うんですか?
985デフォルトの名無しさん:2005/09/27(火) 01:28:07
>>984
プリンタに出力するといいんじゃね?
986廃人:2005/09/27(火) 01:31:45
移植性の高い(似非)画面クリア。

UNIX/Linux前提ならsystem("clear")呼んだほうが綺麗だな。
987廃人:2005/09/27(火) 01:33:43
>>985
ソレダ!

紙が勿体無いからpsに吐いて実験してみるかな
988デフォルトの名無しさん:2005/09/27(火) 02:44:24
>>982
問題は10次元配列をどう扱うかじゃなくて、
10重ポインタを使う状況とはいかなるものか、だ。
989デフォルトの名無しさん:2005/09/27(火) 11:41:53
普通3次元までで事足りるよな。
990デフォルトの名無しさん:2005/09/27(火) 13:14:25
>>989
場の3次元空間に対して時間変化をとるのに4次元必要
991デフォルトの名無しさん:2005/09/27(火) 13:15:16
はいはいワロスワロス
992デフォルトの名無しさん:2005/09/27(火) 13:40:37
(゚д゚)ウメー
993デフォルトの名無しさん:2005/09/27(火) 13:41:07
(゚д゚)ウメー
994デフォルトの名無しさん:2005/09/27(火) 14:04:45
(゚д゚)ウメー
995デフォルトの名無しさん:2005/09/27(火) 14:05:20
(゚д゚)ウメー
996デフォルトの名無しさん:2005/09/27(火) 14:13:28
(゚д゚)ウメー
997デフォルトの名無しさん:2005/09/27(火) 14:14:46
(゚д゚)ウメー
998デフォルトの名無しさん:2005/09/27(火) 14:15:51
(゚д゚)ウメー
999デフォルトの名無しさん:2005/09/27(火) 14:16:32
(゚д゚)ハァ?
1000デフォルトの名無しさん:2005/09/27(火) 14:16:42
0x3e8なんてキリバンじゃないよな
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。