10/08/23 18:28:37
>>10は本当に愚かだ、ダサいとか主観でしか感想を言えない精神レベルの低い
プログラミングの腕も低い未熟者
63:デフォルトの名無しさん
10/08/23 18:39:09
>>62
自己紹介かw
64:デフォルトの名無しさん
10/08/23 18:52:49
>>9 = >>10
お前の方が思いっきりダサい(プ
65:デフォルトの名無しさん
10/08/23 18:55:37
> #define swap(type, x, y) do {type t; t=x; x=y; y=t; } while (0)
このコードはとっくに、数年前にこの板、多分このスレで使われてたよ。
今さら過ぎて知らない奴は無知だろw
66:デフォルトの名無しさん
10/08/23 18:58:41
URLリンク(2chnull.info)
URLリンク(mimizun.com)
そう古くないログでさえ用いられているのに、今さら過ぎて話しにならん。
頼むから知ったか無知の夏厨は少し黙っていてくれないか?
>>10 とか >>9 とか、無駄にスレが伸びるからうぜぇ
67:デフォルトの名無しさん
10/08/23 19:00:00
>>65
というか C FAQ で述べられ済みですが。URLリンク(www.kouno.jp)
68:デフォルトの名無しさん
10/08/23 19:00:23
よく見たら、望月先生は C++ に対してもこのマクロ推奨してるじゃん。
駄目だこいつ。本書くだけで実務レベルのプログラムとか書けないんだろうな。
教祖が使えない奴だから、当然信者もそれ以下だわな。
69:デフォルトの名無しさん
10/08/23 19:03:10
>>66
お前がスレを伸ばしてる張本人だろう。
sageることも知らないお馬鹿さんよ。
70:デフォルトの名無しさん
10/08/23 19:25:24
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// a と b をいれかえる(どっちも同じサイズと仮定する)
// sz には a または b のサイズをかく(どっちも同じサイズという前提)
void nandemo_swap(void* a, void* b, const int sz) {
char t[sz];
memcpy((void*)t, a, sz);
memcpy(a, b, sz);
memcpy(b, (void*)t, sz);
}
void main() {
// 数字の入れ替え
int a=1; int b=2; printf("%d, %d\n",a,b);
nandemo_swap(&a, &b, sizeof(int)); printf("%d, %d\n",a,b);
//文字列の入れ替え(ただし、どっちも4文字)
char c[]="ABCD"; char d[]="EFGH"; printf("%s, %s\n",c,d);
nandemo_swap(c, d, sizeof(char)*(4+1)); printf("%s, %s\n",c,d);
// 任意の構造体の入れ替え
typedef struct tagA { char x; int y; float z; } A;
A e={'1',2,3}; A f={'4',5,6}; printf("[%c, %d, %f], [%c, %d, %f]\n", e.x, e.y, e.z, f.x, f.y, f.z);
nandemo_swap(&e, &f, sizeof(A)); printf("[%c, %d, %f], [%c, %d, %f]\n", e.x, e.y, e.z, f.x, f.y, f.z);
}
71:70
10/08/23 19:27:16
スワップの時って、普通は A も B も 交感に使うバッファーも、3つとも同じサイズなのが普通なんじゃないかなぁ? って思った。
あんまり A はイントで、Bはチャーで…みたいなことって珍しくて、ふつうはAもBもイントならイントだし、ちゃーならちゃーなことがおおいようなきがするー。
ので、
じゃぁ、スワップ関数に、交換するデータのサイズを渡してあげれば、具体的に char か? int か? なんてのは無関係でバッファーを定義できるんじゃないかな?って思った。
だから、バッファーが別に char でも int でもなんでもよくて、ただ純粋にバッファーに何バイト必要なのか?って情報さえあれば、型なんてどうでもいいんじゃないかな?って思った。
どんな型でもスワップできる ”何でもスワップ()”を試しに書いてみました。なんか思ったふうに動いてよかった。
1, 2
2, 1
ABCD, EFGH
EFGH, ABCD
[1, 2, 3.000000], [4, 5, 6.000000]
[4, 5, 6.000000], [1, 2, 3.000000]
72:デフォルトの名無しさん
10/08/23 19:35:12
C99専用って需要あるのかな
73:デフォルトの名無しさん
10/08/23 19:36:41
その「交換するデータのサイズ」というのが結局は「char か? int か?」で決まるんだから
無意味では?
74:デフォルトの名無しさん
10/08/23 22:02:51
チャーん!
75:デフォルトの名無しさん
10/08/23 22:09:12
実は自分の方がダサい、と指摘されつつあり、それをひしひしと感じて >>10 を繰り返し叩き、精神的バランスをかろうじて保っている >>64 であった。
76:デフォルトの名無しさん
10/08/23 22:10:27
どっちも人間性がダサいでFA
77:デフォルトの名無しさん
10/08/23 22:38:54
>>39
=と;で限られてる部分を()で閉じる必要は全く無いと思うが。
()が必要だと思うなら、>>39の場合に()がないと動作がおかしくなる場合を教えてくれないか?
78:デフォルトの名無しさん
10/08/23 22:41:15
>>77
マクロにはつけておいたほうがいいから統一してるんじゃね?
79:デフォルトの名無しさん
10/08/23 22:56:54
()とは直接関係ないが
char a[10], b[20];
swap(char[30], a, b);
とかで typedef が必要、なぜ? マクロですからとか、聴いてて耳腐る
80:デフォルトの名無しさん
10/08/23 23:12:50
日本語でおk
81:デフォルトの名無しさん
10/08/23 23:25:38
>>79
/' ! ━┓┃┃
-‐'―ニ二二二二ニ>ヽ、 ┃ ━━━━
ァ /,,ィ=-;;,,, , ,,_ ト-、 ) ┃ ┃┃┃
' Y ー==j 〈,,二,゙ ! ) 。 ┛
ゝ. {、 - ,. ヾ "^ } } ゚ 。
) ,. ‘-,,' ≦ 三
ゞ, ∧ヾ ゝ'゚ ≦ 三 ゚。 ゚
'=-/ ヽ゚ 。≧ 三 ==-
/ |ヽ \-ァ, ≧=- 。
! \ イレ,、 >三 。゚ ・ ゚
| >≦`Vヾ ヾ ≧
〉 ,く 。゚ /。・イハ 、、 `ミ 。 ゚ 。 ・
82:デフォルトの名無しさん
10/08/23 23:36:44
>>77
代入演算子より優先度が低いのはコンマ演算子しかないから、() は必要ないでしょうね。