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

C言語なら俺に聞け(入門編)Part 79

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/02/15(火) 09:07:06
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 78
http://hibari.2ch.net/test/read.cgi/tech/1296984829/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 146代目
http://hibari.2ch.net/test/read.cgi/tech/1296387672/
★C++言語もOK、ガンガン質問してください。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん2011/02/15(火) 10:38:46
>>1
勝手にテンプレ変えんなクソったれが
C++はスレ違いだ
0003デフォルトの名無しさん2011/02/15(火) 12:02:31
スレ立て直後で申し訳有りませんが、加算演算子についてです。

#include <stdio.h>
main()
{
int i,j;
i = 3; j = 4;
i = i+ +j;
printf("%d\n\r",i);
}

とした場合、 + が二つあっても,あいだにスペースやtabなどのセパレータがあれば、
warningもなく、きちんと動作します。
i = i + j;
とした場合と同じになります。
もちろん、
i = i++j;
とした場合はエラーとなります。

10年以上cをいじってて、はじめて気が付きました。

gccの4.3.2でテストしました。gcc以外に組込系の環境がいくつかあるのですが、
どれもも同じ動作でした.。

上記の処理は、言語仕様としてはどのようになっているのでしょうか?
0004デフォルトの名無しさん2011/02/15(火) 12:11:59
プログラムはまずトークンに分割することになっています
トークンに分割する際は最も長いシーケンスを採用することになっています
つまり + よりも ++ の方が長いので、+ がいくつか連続していればそれは ++ というトークンとして切りだされます
トークンに分割した後に、そのプログラムの構文を解釈します
例えば x+++++y は x ++ ++ + y と分割されコンパイルエラーになるという例が仕様書にも記載されています
0005デフォルトの名無しさん2011/02/15(火) 12:14:52
それは、わかるんですが、
i=i+ +j;
の場合、どう処理されているのかが知りたいんです。
0006デフォルトの名無しさん2011/02/15(火) 12:22:11
それは単に i と +j を足して i に代入してるだけです
+j というのは単項演算子の + が j にくっついたものです
負の値を表すのに -j などと書けるように正の値をわざわざ + を付けて +j などと書いてもよいです
0007デフォルトの名無しさん2011/02/15(火) 12:30:49
なるほど、わかりました。大変スッキリしました。
加算演算子でなくて、単項演算子となるわけですね。

実際のコードでは、数行にわたる計算式で、+の後ろに関数やらマクロやら
あったので、発見が遅れたので、バグとして計上するかどうかに悩んでたのでした。
コンパイルされたアセンブラコードとしては問題なかったのですが。

ありがとうございました。
0008デフォルトの名無しさん2011/02/15(火) 18:02:00
914 :デフォルトの名無しさん:2011/02/06(日) 17:00:59
そんな話は聞いたことないけどしたいならそうすればいいんじゃない?
それより、 i * 10 + 9 + ( i == 9 ) は意図したとおりに動かないね。

920 :デフォルトの名無しさん:2011/02/06(日) 17:34:11
問題ないように思える人はもう一度Cの規格票をよく読むんだ^^

923 :デフォルトの名無しさん:2011/02/06(日) 17:38:32
…というのも不親切なので答えをいうと
i == 9の部分はtrueの時1になることを想定しているけど
(90-100の階級幅だけ11あるので、ここだけ特別処理にしている)
Cの規格上はtrueは0以外の整数であればなんでもいいことになっているので
実装にっては「90-100」のような表示にならない可能性があるってことなのよ^^;
ここは

printf( "%d-%d %d人\n", i * 10, i == 9 ? 100 : i * 10 + 9, cv[ i ] );

のようにすべきでした。

924 :デフォルトの名無しさん:2011/02/06(日) 17:41:11
って、答えを書いているうちに即レスするんじゃない貴様ら^^

ちなみに、この「trueは0以外の整数」というのは
Cではけっこう重要な落とし穴なので初学者は覚えておくといいよ^^

929 :デフォルトの名無しさん:2011/02/06(日) 17:44:46
あれ?そうだっけ?すまんすまん^^ワラ

935 :デフォルトの名無しさん:2011/02/06(日) 17:49:37
こうして人は成長していくのであった^^;
0009デフォルトの名無しさん2011/02/15(火) 18:05:28
663 :デフォルトの名無しさん:2011/02/12(土) 22:47:08
>>654
その 6.5.6 って意味がよく判らん記述だなぁ、解りやすく解説できる?

そもオーバーフローとは加算・乗算によって桁あふれを起こす場合だろ
減算によって引き起こされるのはアンダーフローって呼ぶのでは?
0010デフォルトの名無しさん2011/02/15(火) 18:09:59
572 :当然未定義な。:2011/02/12(土) 20:27:07
>>561, >>564
マスターのレベルにもよるよね。
普通に配列使うだけなら、他の言語知ってりゃできて当然。

char *x;
char y
char a[] = "012345678";
*x = a - 1;
y = x[2];

で、x に何が入るかまでわかってるなら結構すごいと思う。
0011デフォルトの名無しさん2011/02/15(火) 18:23:00
>>3
printf("%d\n\r",i); // mac から windows の改行コードってネタ?
0012デフォルトの名無しさん2011/02/15(火) 18:27:24
>>8
Part77のコピペか
突っ込みも一緒にコピペしないと分かりにくいんじゃね?
0013デフォルトの名無しさん2011/02/15(火) 18:42:10
>>8
ひどいじゃなイカもコピペすれ
0014デフォルトの名無しさん2011/02/15(火) 19:04:11
940 :デフォルトの名無しさん :2011/02/06(日) 17:52:53
おまえら、おもしろいおもちゃを手にいれたみたいに。ひどいじゃなイカ^^;
0015Perl忍者 ◆M5ZWRnXOj6 2011/02/15(火) 21:05:45
俺さあ、ここのスレ俺が立てたって設定にしてんだよね

俺「2chでC言語なら俺に聞けっていうスレをはじめました あれぼくです」

みたいに おーすげえっていわれるけど
0016デフォルトの名無しさん2011/02/15(火) 21:08:00
そう・・・(無関心)
0017デフォルトの名無しさん2011/02/15(火) 21:19:07
SAW…(拷問系)
0018デフォルトの名無しさん2011/02/15(火) 21:46:23
爽…(氷菓子)
0019デフォルトの名無しさん2011/02/15(火) 22:16:30
前スレ
250 名前: デフォルトの名無しさん [sage] 投稿日: 2011/02/09(水) 01:01:41

void mem_cpy(void *dst,void *src,u_int size){
     char *p1 = *dst;
     char *p2 = *src;
     while(size--){
          *p1** = *p2++;
     }
}
基本的なソースはこういう形として,
こういう形で,エンディアンの問題を回避する方法ってある?


*p1** = *p2++;
これ、どんな動作なの?
0020デフォルトの名無しさん2011/02/15(火) 22:20:49
コンパイルエラー
0021デフォルトの名無しさん2011/02/15(火) 22:26:33
ス、スマソ
0022デフォルトの名無しさん2011/02/15(火) 22:34:58
エンディアン
うそつかない
0023デフォルトの名無しさん2011/02/15(火) 22:53:52
>>19
C言語でないものはスレ違い
0024デフォルトの名無しさん2011/02/15(火) 23:19:45
行列の取り扱いに関する質問なのですが

for(i=0;i<N=100;i++){
 for(j=0;j<N=100;j++){
  scanf("%d",&matrix[i][j]);
 }
}

このような手順で行列を作成した場合例えばi=j=4となる
i行j列の成分を除いた99*99の行列を作成するにはどう記述すべきですか?
0025デフォルトの名無しさん2011/02/15(火) 23:27:45
>>24
まず i<N=100 や j<N=100 がコンパイル通らないけど…
それから、i=j=4となるi行j列要素を除くと99*99行列じゃなくて100*100-1行列じゃね?
0026デフォルトの名無しさん2011/02/15(火) 23:40:28
比較演算子の方が優先順位高いから i<(N=100) としなきゃ
0027デフォルトの名無しさん2011/02/15(火) 23:44:59
>>25
すいません書き方が酷かった
i=4またはj=4となるような行と列除くという意味です
あと省略しましたがNもscanfで入力させたいです
0028デフォルトの名無しさん2011/02/15(火) 23:45:51
すみません。N=部分は削除お願いします
その通り、i=j=4となるi行j列要素を除く100*100-1行列です
0029デフォルトの名無しさん2011/02/15(火) 23:48:37
>>27
i=5,j=5のときはmatrix[4][4]?
それともmatrix[5][5]?
0030デフォルトの名無しさん2011/02/15(火) 23:52:40
>>27-28
意味が分からん…
0031デフォルトの名無しさん2011/02/15(火) 23:53:20
どうせ学校の宿題だろ
0032292011/02/15(火) 23:56:11
前者なら
for(i=0;i<N=100;i++){ if(i==4) continue;
 for(j=0;j<N=100;j++){ if(j==4) continue;
  scanf("%d",&matrix[i][j]);
 }
}

後者なら何をしたいのか分からないが
for(i=0;i<N=100;i++){
 for(j=0;j<N=100;j++){
 if(i!=4 && j!=4)
  scanf("%d",&matrix[i][j]);
 }
}
0033デフォルトの名無しさん2011/02/15(火) 23:57:39
>>32
scanfで読み込んだ行列に対して、指定した行と列を除く話だと思うよ
0034Perl忍者 ◆M5ZWRnXOj6 2011/02/15(火) 23:59:23
複雑なコード見慣れてるからさ
Cのコードが凄くカスにみえんだよね

はぁ・・・どうしよう 嫌味に聞こえたらごめんね
0035Perl忍者 ◆M5ZWRnXOj6 2011/02/16(水) 00:00:35
C言語なんて凄いやつたくさんいるしさあ^−^;
ユーザー多いから^−^;

俺TUEEEEEEEEEEEEEEEEEEEEE!!

できないよね^^; 馬鹿だね君たちも^^;

^−^;
0036デフォルトの名無しさん2011/02/16(水) 00:05:03
>>28
100*100-1行列だとしてさ、「除く」って具体的にどういう事?
100*100-1要素の2次元配列を作りたい、それとも100*100要素の2次元配列で
[4][4]には代入しない、のどっち?
0037デフォルトの名無しさん2011/02/16(水) 00:05:43
いいぞPerl忍者
もっとやれ
0038デフォルトの名無しさん2011/02/16(水) 00:08:06
人を上から目線にしか見れない上級者様()は来なくていいです
0039デフォルトの名無しさん2011/02/16(水) 00:08:38
◆QZaw55cn4c
0040デフォルトの名無しさん2011/02/16(水) 00:11:59
面白いことも書けねえんならコテ付けんなカス
0041C忍者 ◆Iw4kwU1lPo 2011/02/16(水) 00:13:03
Perl忍者はもう少し頭を使った方がいい
0042Python忍者 ◆/vgV4RIG3g 2011/02/16(水) 00:20:26
拙者はスネークしてるでござるよ。pythonだけに。
0043舐め忍者 ◆gHyRb0WDMU 2011/02/16(水) 00:23:23
ぺろぺろぺろぺろ
0044PHP忍者 ◆46cuXalB7s 2011/02/16(水) 00:24:49
忍者の里
0045デフォルトの名無しさん2011/02/16(水) 00:25:53
Perl忍者弱えw
0046デフォルトの名無しさん2011/02/16(水) 00:27:22
ここはC言語なら俺ことイカ娘に聞け(上級編)Part 79でゲソ

   ,.__y⌒'ー---┐          ,.____        _へ、_、__,.ヘ、___
  /         \        , '´        `丶、    r´
  }  (  聞 ど  l      / l   _, -―― -  ヽ、┌´      ナ丶
 f´   )  こ う  ヽ  n⌒l/  l ,. .´: : : : ハ: : : : :`.ヽ'ヽ  ├┬゛  tナ
 l   (  え も   }  l |l |n l / : :/ j:/ーヘl: : :|: : : : |  }.   ノ     /
 {   )  ん     〉 | {  j」_l /:l :/     |:/`}ノ!.:/  {   ヽ /  /へノ
 }   (  で      { _j  /ヘ/: :l  ミミ      l/}  〈   ノ  -‐ァ、、
. )   !  ゲ     (: :´メ、_,.メ、|: : |  , ,     ミミ./ :l .  }. ┌─┐ (,__
└-、     ソ    ,/ ヽ : : : : 丿」: : |、   /`¬ , , |: :|   )   ┌┘
    ゝ 、_,,,,,,,... -ゝ/ ̄/´,.__.|: : | >-| /_,ノ. : :\__l\ ・
.           ,/  / ̄ヽ l!: : :ヽ、l  丶イ |.|ト、:.\: : : : : : : :>-、-、 __,,.、
          (        ヾ \:_: :\__  ,‐//.| `l:\ ̄ ̄l/
            ̄  ̄ ̄ ̄ヽr―ァ' \: : /、 //  }/: : し\
               /: :,L,. く ___/::/ \'/   { ヽ┬┐/
               /: :/ /: ヾ¬ー'^ヽ     ヽ 丶__ _,-、
          __/: :/ /: :/ \          {、´   __ _l::::l⌒\
          |: : : : /   |: : i   /:\ `       >'´  \`-´^ヽJ
       /: : | ̄     |: : レ /: ://                  \
0047デフォルトの名無しさん2011/02/16(水) 00:28:01
 
0048デフォルトの名無しさん2011/02/16(水) 00:28:26
>>24
宿題スレへ号
0049Perl忍者 ◆M5ZWRnXOj6 2011/02/16(水) 00:30:07
わろwwwwwwwwwww
0050デフォルトの名無しさん2011/02/16(水) 00:30:22
【モリタポ有償】C/C++の問題を片付けます(2)
http://hibari.2ch.net/test/read.cgi/tech/1295273862/

あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。

・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
 ◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。

【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
 受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
 進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)

【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。

【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。

ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
0051Haskell忍者 ◆Lgxotu9vfE 2011/02/16(水) 00:31:47
Perl忍者もっと頑張れよ
0052デフォルトの名無しさん2011/02/16(水) 00:33:55
34 :Perl忍者 ◆M5ZWRnXOj6 :2011/02/15(火) 23:59:23
複雑なコード見慣れてるからさ
Cのコードが凄くカスにみえんだよね

はぁ・・・どうしよう 嫌味に聞こえたらごめんね


35 :Perl忍者 ◆M5ZWRnXOj6 :2011/02/16(水) 00:00:35
C言語なんて凄いやつたくさんいるしさあ^−^;
ユーザー多いから^−^;

俺TUEEEEEEEEEEEEEEEEEEEEE!!

できないよね^^; 馬鹿だね君たちも^^;

^−^;
0053デフォルトの名無しさん2011/02/16(水) 01:25:33
 
0054デフォルトの名無しさん2011/02/16(水) 01:40:19
100*100-1要素の2次元配列って何?
0055デフォルトの名無しさん2011/02/16(水) 02:09:10
やっぱ専門家以外には通じないか…
0056デフォルトの名無しさん2011/02/16(水) 02:10:16
#include<stdio.h>

int main(void)
{
....................int no;

....................printf("整数を入力してください。:"); scanf("%d", &no);

.....................while(no > 0){
....................................if(no % 2){
..........................................................--no;
..........................................................printf("%d ", no);
..........................................................no -= 2;
.........................................................}
.....................................else{
..........................................................printf("%d ", no);
..........................................................no -= 2;
...............................................}
.................................}
...........................return(0);
}
C言語の教本の演習問題で「入力した整数以下の正の偶数を降順に表示しろ」
って言うから思いついたように組み込んで行ったら出来たんだが、
後々、何でこれで間違ってないのか分からん。
偶数入れた時はifのelseが使われて偶数が表示されるのは分かるが、奇数(例えば9)入れた時は
8, 5, 2 が表示されるんじゃないの?
入門一週間目の俺に教えてくれ
0057デフォルトの名無しさん2011/02/16(水) 02:13:39
>>56
奇数を入れた1回目のループは
if(no % 2){} の中身が実行されるが
その時noが偶数になるので2回目以降のループは
else{}の中身が実行される
0058デフォルトの名無しさん2011/02/16(水) 02:17:01
>>57
ああ、そっか
しょーもない読み違いで長文レスしてしまってすまんなありがとう
0059デフォルトの名無しさん2011/02/16(水) 02:20:37
>>58
1を入力したときに
正の偶数ではない0が出力されちゃうから
修正した方がいいよ
0060デフォルトの名無しさん2011/02/16(水) 02:28:22
んで、100*100-1行列って何?
0061デフォルトの名無しさん2011/02/16(水) 02:36:26
arr[100][100]の1要素が不定ってところじゃないかなぺろ
0062デフォルトの名無しさん2011/02/16(水) 02:38:13
>>59
whileの複合文の上に
..................if(no == 1){
..................printf(" ");
..................--no;
......................................}
と、whileの複合文の下に
.................putchar(' ');
入れれば良い感じか
0063デフォルトの名無しさん2011/02/16(水) 02:39:54
>>61
>>36を見ると単純にそうとは言えないんじゃかいかぺろ
0064デフォルトの名無しさん2011/02/16(水) 02:41:55
【モリタポ有償】C/C++の問題を片付けます(2)
http://hibari.2ch.net/test/read.cgi/tech/1295273862/

あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。

・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
 ◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。

【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
 受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
 進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)

【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。

【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。

ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
0065デフォルトの名無しさん2011/02/16(水) 02:42:53
no > 1
って突っ込み待ちか?
0066デフォルトの名無しさん2011/02/16(水) 02:43:25
【質問の際】
質問の際は以下の条件に従ってください。
従わない投稿の問題に対しては、回答を差し上げられない可能性が高くなります。
・トリップを使用してください。トリップがない場合、受諾レスも回答も差し上げられません。
・質問は【質問テンプレート】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、内容について説明をつけてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。

【質問テンプレート】
[1] 問題文(含コード&リンク):
[2] 環境
 [2.1] OS: (Windows/Linux/等々)
 [2.2] コンパイラ名とバージョン: (gcc 3.4, VisualC++2010 Express, Borland C++ 5.5 等)
 [2.3] 言語: (C/C++/どちらでも可 のいずれか)
[3] 回答希望期限:([yyyy年mm月dd日hh:mm])なお ◆QZaw55cn4c は回答希望期限を最大限尊重しますが、かならずしも希望にそえるとは限りません。
[4] その他の制限: (どこまで習っているか、<****.h>は使ってはいけない等々)

【過去スレ】
【◆QZaw55cn4c 隔離】C/C++の問題を片付けます
http://hibari.2ch.net/test/read.cgi/tech/1289715349/

【関連スレ】
C/C++の宿題片付けます 145代目
http://hibari.2ch.net/test/read.cgi/tech/1294061094/
0067デフォルトの名無しさん2011/02/16(水) 03:09:21
お
0068デフォルトの名無しさん2011/02/16(水) 03:39:08


      唸れ、俺の左手――!



                  宿りし力を今こそ解き放つ――!!
0069デフォルトの名無しさん2011/02/16(水) 04:22:46
酒粕で作った甘酒が飲みたい・・・
0070デフォルトの名無しさん2011/02/16(水) 04:46:11
Perl忍者
0071デフォルトの名無しさん2011/02/16(水) 06:00:52
計算したい
0072デフォルトの名無しさん2011/02/16(水) 09:00:48
includeファイルの優先順位とかって、指定できますか?
コンパイルはvisual studio 2008 Expressでやってます。
先にvarargs.hをincludeして、
va_start(引数)の形でコンパイルを通したいんですが、
va_start(引数1,引数2)が先に読まれてしまいエラーになってしまって・・・。
0073デフォルトの名無しさん2011/02/16(水) 09:39:09
ほうほうそれでそれで?
0074デフォルトの名無しさん2011/02/16(水) 09:51:27
>>72
理屈の上では、
#include <varargs.h>
va_start(引数)
#undef va_start
#include <stdarg.h>
va_start(引数1,引数2)
で少なくともコンパイルは通りそうな気がするけど
0075デフォルトの名無しさん2011/02/16(水) 09:56:24
>>72 釣る
>>74 釣られる

ぺろぺろの予感!!!
0076デフォルトの名無しさん2011/02/16(水) 10:30:16
>>72
僕も先ほどそれでエラーは回避できました。

#include <stdarg.h>
#undef va_start
#include <varargs.h>
va_start(引数)

実際はこーゆー流れでしたが。

これでやろうと思ってるんですが、
Visual studio 6.0と2008ではvarargs.hが変わってますよね?
2008はva_argが定義されてるかどうかが聞かれてるようになってますが。
なにか理由があって変わったってことは、
安易にそのようにすると6.0と挙動が変わってくるのかな。。。
とか不安なんですが、何かわからないでしょうか?
0077デフォルトの名無しさん2011/02/16(水) 10:48:36
>>76
そのあたりの挙動を吸収してくれるのがstdな訳です
俺は規格外だ、アドホックに行くぜ
というならその理由を明確に提示してもらわないと
回答しようがないですし
そもそもそれが明確ならここより適したスレがあると思います
0078デフォルトの名無しさん2011/02/16(水) 10:59:06
>>76
6.0では
#include <stdarg.h>
#include <varargs.h>
va_start(引数)
の流れでやってたのを2008に移行したいがための質問でした。
stdarg.hをincludeした後にva_argをundefした時に
著しく挙動が変わるような事がなければ問題ないです。
実際にログにはva_startとva_endしか再定義されないみたいで、
個人的には大丈夫かなとは思ってるんですが。

>俺は規格外だ、アドホックに行くぜ
そこらへんは良くわかってないです・・・。
すいません。。。

丁寧に答えていただきありがとうございました。
0079デフォルトの名無しさん2011/02/16(水) 11:01:57
va_start(引数)にするメリットってあるの?
0080デフォルトの名無しさん2011/02/16(水) 11:45:29
>>79
メリットというか・・・。
現行がそーゆー記述
(とゆーか、varargs.hで定義している形)になってたんで。
としか言えないです。
ソースは極力触りたくないんで。
0081デフォルトの名無しさん2011/02/16(水) 11:45:51
fprintfとかfwriteなどは、内部でバッファリングしてて、ある程度たまったら
実際にディスクに書き込むようですが、
そのバッファのサイズはどこで定義されていますか?
また変更することはできるのでしょうか
ちなみにコンパイラはgcc 4.3.2です
0082デフォルトの名無しさん2011/02/16(水) 12:07:47
特に定義されてないと思います
setvbufで変更できます
0083デフォルトの名無しさん2011/02/16(水) 15:23:38
#include <stdio.h>
#define NUM 5
int main(void)
{
int test[NUM];
int tmp;
int i,j,s,t;
printf("%d人の点数を入力してください。\n",NUM);
for(i=0;i<NUM;i++){
scanf("%d",&test[i]);
}
for(s=0;s<NUM-1;s++){
for(t=s+1;t<NUM;t++){
if(test[t]>test[s]){
tmp=test[t];
test[t]=test[s];
test[s]=tmp;
}}}
for(j=0;j<NUM;j++){
printf("%d番目の人の点数は%dです。\n",j+1,test[j]);
}
return 0;
}
配列の要素を大きい順にソートするコード?らしいんですが意味がわかりません
どうして大きい順にちゃんと並び変わるんですか教えてください;;
0084デフォルトの名無しさん2011/02/16(水) 15:29:03
>>83
if 文のところ
test[t] が test[s] よりも大きい場合に test[t] と test[s] を入れ替えて大きい順に並び変えている
0085デフォルトの名無しさん2011/02/16(水) 15:36:44
>>84
>がありますしそれは分かるんですが
tmp=test[t];
test[t]=test[s];
test[s]=tmp;
のところがよく分からないんです・・・
22,80,57,60,50 5人の点数はこれです
0086デフォルトの名無しさん2011/02/16(水) 15:40:35
excel使った方が早いよ
0087デフォルトの名無しさん2011/02/16(水) 16:00:40
あ
0088デフォルトの名無しさん2011/02/16(水) 16:13:01
>>85
それは test[t] と test[s] を入れ替えている
最初 test[t] が 80 で test[s] が 22 だったとすると
tmp = test[t]; // tmp に 80 を代入
test[t] = test[s]; // test[t] に 22 を代入
test[s] = tmp; // test[s] に 80 を代入
最後 test[t] が 22 で test[s] が 80 となり入れ替わっている
0089デフォルトの名無しさん2011/02/16(水) 18:08:08
return 0 と return 1 の違いを初心者でもわかるように教えて
0090デフォルトの名無しさん2011/02/16(水) 18:16:20
関数の呼び出し元が受け取る戻り値が違う
0091デフォルトの名無しさん2011/02/16(水) 18:20:00
受け取らなかったとしたら?
0092デフォルトの名無しさん2011/02/16(水) 18:21:43
意味不明
0093デフォルトの名無しさん2011/02/16(水) 19:27:01
コンパイルエラー

はい次
0094デフォルトの名無しさん2011/02/16(水) 19:52:03
釣れたw
0095デフォルトの名無しさん2011/02/16(水) 19:54:23
えらくしょぼい釣果だったな
0096デフォルトの名無しさん2011/02/16(水) 19:59:51
いえいえ
0097デフォルトの名無しさん2011/02/16(水) 20:27:12
>>82
BUFSIZ @stdio.h
0098デフォルトの名無しさん2011/02/16(水) 22:00:31
関数宣言の時にvoid型にするとreturn値には何も書いちゃいけないの?
0099Perl忍者 ◆M5ZWRnXOj6 2011/02/16(水) 22:00:42
ひゅひゅだよ
0100デフォルトの名無しさん2011/02/16(水) 22:03:48
>>98
いけないでござるよ。
0101デフォルトの名無しさん2011/02/16(水) 22:15:26
>>98
書いていいとして、何を書くつもりだ?
■ このスレッドは過去ログ倉庫に格納されています