C言語のポインタの文法はおかしい

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
int *p ; // intの値へのポインタ変数の宣言
p ; // intの値の変数へのポインタ
*p ; // int の値

int n ; // intの値の変数の宣言
n ; // intの値
&n ; // intの値の変数へのポインタ

↑これって不自然じゃない?
どうして↓のようにしなかったの?

int $p ; // intの値へのポインタ変数の宣言
$p ; // intの値の変数へのポインタ
p ; // int の値

int n ; // intの値の変数の宣言
n ; // intの値
$n ; // intの値の変数へのポインタ

2デフォルトの名無しさん:2005/05/07(土) 07:44:22
int *p ; // intの値へのポインタ変数の宣言
int n ; // intの値の変数の宣言

p = &n ; // intの値へのポインタの代入
*p = n ; // intの値の代入

というよりも、

int $p ; // intの値へのポインタ変数の宣言
int n ; // intの値の変数の宣言

$p = $n ; // intの値へのポインタの代入
p = n ; // intの値の代入

のほうが、すっきりすると思うのだけど。
3デフォルトの名無しさん:2005/05/07(土) 07:47:42


























終了
4デフォルトの名無しさん:2005/05/07(土) 08:01:33
>>1-2
根本的に誤解
5デフォルトの名無しさん:2005/05/07(土) 08:05:28
根源的に無能
6デフォルトの名無しさん:2005/05/07(土) 08:10:23
http://YahooBB219180178006.bbtec.net/
wwwwwwwwwwwwwうぇwwwwwwっうぇおkwww

wwwおkwwwwwwwwwwwwwwww
wwwwwおkwwwwwwwwwwwwwww
7デフォルトの名無しさん:2005/05/07(土) 08:11:49
&n はポインタじゃなくて、int nのアドレスでしょ。
Perl風に$でアドレス表すことにするなら、
int $p;
っていう宣言はおかしい。pは使うときは普通に$つけずに普通にpで使うんだから、宣言は
int p;
でしょ。ということは、普通のintと同じことになるから、型に厳しいCとしては、ポインタ型っていうのを別に作ったんじゃないの、たぶん
8デフォルトの名無しさん:2005/05/07(土) 08:19:44
そこで Pascal 風文法
9デフォルトの名無しさん:2005/05/07(土) 08:21:29
#define S(v) &v

int p; // intの値の変数の宣言
S(p); // intの値の変数へのポインタ
p; // int の値

int n; // intの値の変数の宣言
n; // intの値
S(n); // intの値の変数へのポインタ
10デフォルトの名無しさん:2005/05/07(土) 08:24:11
仮引数とか左辺値の時に困らんか?
11デフォルトの名無しさん:2005/05/07(土) 08:27:57
参照(References)

参照とはある変数の別名を持った変数であり,次の構文で宣言される.


データ型& 参照する名前 = 変数名;


と記述する.例えば,

int n = 44;
int& rn = n;


と宣言すると,rnはnの参照である.素人の言葉で説明すると,参照とは芸名みたいなもので, 名前は違うけれど,名前が指している人は同じ人ということである.
12デフォルトの名無しさん:2005/05/07(土) 08:29:12
おっと間違い
13デフォルトの名無しさん:2005/05/07(土) 08:34:54
http://ntgnma054253.gnma.nt.ftth.ppp.infoweb.ne.jp/

うはっwwwwwwwwwwwwwwwwwwwっw
wおkwww
うはっwww
wwwwwwうはっwww

wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
14デフォルトの名無しさん:2005/05/07(土) 08:38:17
アドレス演算とかどうすんのさ
15きそちしきだから、ほかのひとにじまんしちゃだめだよ:2005/05/07(土) 08:54:01
int *P; // intの値へのポインタ変数の宣言
int& p = *P; // intの値の変数の宣言
S(p); // intの値の変数へのポインタ
p; // int の値

int n; // intの値の変数の宣言
n; // intの値
S(n); // intの値の変数へのポインタ

S(p) = S(n) ; // intの値へのポインタへ、intの値へのポインタを代入
        // &p=&n つまり P = &n と同じ
p = n ;    // intの値の代入
        // *P = n と同じ
16デフォルトの名無しさん:2005/05/07(土) 08:54:41
>>13 IPアドレスにマーキングしても、だめだよ
17デフォルトの名無しさん:2005/05/07(土) 09:11:51




                            ■■■■ スレ終焉 ■■■■





18デフォルトの名無しさん:2005/05/07(土) 09:24:16
元々アセンブラで一般的なレジスタによるアドレッシングの方法がポインタの概念だよ。
だから、そういう観点からいうとCのポインタは極自然。

例えば、
int* m = pDest;
int* n = pSrc;
*m++ = *n++;

を86でかけば、
mov edi, dword ptr [pDest] ;アドレスを ediレジスタにロード
mov esi, dword ptr [pSrc] ;アドレスを esiレジスタにロード
mov eax, dword ptr [esi] ; *m を eax にロード
mov dword ptr [edi], eax ; *n にeax をストア
inc esi ;m++
inc edi ;n++

みたいな。
19デフォルトの名無しさん:2005/05/07(土) 10:49:15
>inc esi ;m++
>inc edi ;n++

??
add esi,4 ; sizeof int
add edi,4
20デフォルトの名無しさん:2005/05/07(土) 11:48:28
既存の言語の仕様が気に食わなければ、自分で言語を作れ!

・・・って、perlの作者の人が言ってなかったか?
21デフォルトの名無しさん:2005/05/07(土) 11:55:00
>>20
まったくそういうことだな。
今の政治が気に食わないなら自分が総理大臣になれっていう
捨て台詞を吐く友人がむかつく。
22デフォルトの名無しさん:2005/05/07(土) 12:02:38
>>15
S(p) = S(n) ; // pのアドレスをnのアドレスで上書き
配列をポインタみたく扱うようなもの。
pがリファレンスじゃなかったら、メモリー回収できなくなるでしょ。

23デフォルトの名無しさん:2005/05/07(土) 12:45:35
うん、最初っから判ってる。
変な拘束ゲーム始めた >>1
気付かなかったみたいだけどw

24ウンコ:2005/05/07(土) 13:51:53
/** Sample.cpp
*  コンパイル方法:
*      gcc -E Sample.cpp | sed -e 's!&\*!!g' > Sample.i.cpp
*                          ~~~~~~~~~~~~~~~~~外部プリプロセス処理
*      gcc -o Sample.exe Sample.i.cpp
*/
#include <stdio.h>
#define S(v)    &v
// 下記置換はC pre processorでは不可能なので、外部プリプロセスで処理する
//#define &*

int main(int argc, char*argv[], char*envp) {
  int v = 1;    // intの変数宣言
  int *P;       // intへのポインタ変数宣言
  P = &v;       // intのポインタ変数へ、intの変数のアドレスを代入
#define p  *P
  //S(p);       // intの変数へのポインタ
  //p;          // intの値

  int n = 2;    // intの変数宣言
  //n;          // intの値
  //S(n);       // intの変数へのポインタ

  S(p) = S(n);  // intのポインタ変数に、intの変数のアドレスを代入
                // 外部プリプロセス処理の結果、
                // &*P = &n は P = &n と同じ
  p = n ;       // intの値の代入
                // *P = n つまり v = n と同じ
  return 0;
}
25デフォルトの名無しさん:2005/05/07(土) 13:55:57
つか、どうでもいいが int main(); でいいよな
26デフォルトの名無しさん:2005/05/07(土) 14:52:49
つかCだっつってんだからC++出すな。
27デフォルトの名無しさん:2005/05/07(土) 15:43:15
28デフォルトの名無しさん:2005/05/07(土) 17:15:10
よく見る間違ったmainの数々

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

正式な形式はこうだ。

int main(int argc, char **argv, char **envp)
29デフォルトの名無しさん:2005/05/07(土) 17:21:56
>>28
職業的プログラマーの俺に言わせれば、
動けば良いのだよ、なんであっても・・・
30デフォルトの名無しさん:2005/05/07(土) 17:27:38
つーか間違ってないし
31デフォルトの名無しさん:2005/05/07(土) 17:28:57
コンパイル後はスタートアップルーチンからのmain()の呼び出し方法が変わるだけ
32デフォルトの名無しさん:2005/05/07(土) 17:34:56
>>28
どうでもいい。
俺は逆に、コマンドラインパラメータを使わなかったり、戻り値チェックしないなら、
void main( void )
で明示してる(していた)。

33ウンコ:2005/05/07(土) 17:39:26
>>1
答え出したぞ。早くどっちがいいか確認しろ
34デフォルトの名無しさん:2005/05/07(土) 17:48:29
>>28
初心者はそう書きたがるんだけど、
必要ないものは省略するのがCの慣習なのだよ。
35ウンコ:2005/05/07(土) 17:54:05
誰もそんなとこ気にしねぇ〜よ。
Cのスタートアップルーチンは、
単に _mainラベルを C言語呼び出し規約で呼び出すだけだからな。

C++と違って、なんでもいいんだよ。
残念
36デフォルトの名無しさん:2005/05/07(土) 17:55:30
void 姪(void)
37デフォルトの名無しさん:2005/05/07(土) 18:08:19
リンカ/ローダは _main識別子を捜すから、
C言語上は main 識別子を必ず使えよアフォ。

マクロ定義してからヤレ。

#define 姪    main
#define 切腹   exit
381:2005/05/07(土) 18:19:24
色々釣れたわけだが、

C言語のポインタは、変数の型の一つに過ぎない

というまっとうなことを言えたのは、誰もいないな。

int *p ;
のように書くからいけないのであって、
typdef int* ptr_int ;
ptr_int p
と書けばいい。
int* p, q ;
なんて罠があるから、typedefすべし。
ついでにマクロも
#define REF(x) (*x)
#define PTR(x) (&x)

で、↓のようになるわけだ。
ptr_int p ; // int値へのポインタ値の変数の宣言
p ; // int値の変数へのポインタ値
REF(p) ; // int値の変数へのポインタ値が指す先のint値

int n ; // int値の変数の宣言
n ; // int値
PTR(n) ; // int値の変数へのポインタ値

どうだ、スッキリしたろ。
391:2005/05/07(土) 18:20:40
すまん。括弧が足りなかった。

#define REF(x) (*(x))
#define PTR(x) (&(x))

40デフォルトの名無しさん:2005/05/07(土) 18:26:51
プリキュアの白いほうって彼氏いるのかな?
当方28歳なんだけど、告ったらふられるかな??
どう思う???
41デフォルトの名無しさん:2005/05/07(土) 18:28:31
あたってくだけろ
42デフォルトの名無しさん:2005/05/07(土) 18:49:20
バカじゃねぇの?
>>1-2見て、池沼だと思った。
やっとポインタ覚えたのねw

で、プログラムはいつ書けるようになる予定?
43デフォルトの名無しさん:2005/05/07(土) 18:50:54
じゃ、
>>24が正解、
>>38-39はルール変更で失格


てことで。
===============終了===============
44デフォルトの名無しさん:2005/05/07(土) 19:10:13
>>38
typedefすりゃいいって、そういう問題じゃないだろ。
45デフォルトの名無しさん:2005/05/07(土) 19:14:46
まあ記号の使いまわしはやめてほしいよな

+と++の違い程度ならまだ許せるけど
a*b の*は掛け算で、 *bとなったらポインタってのは
納得できないと思うよ

そういう仕様 の一言で片付けるには納得しがたい
なぜ*という記号をポインタに選んだのか
その理由を答えろ!カーニハン!
46デフォルトの名無しさん:2005/05/07(土) 19:15:58
>>38-39
・演算子をマクロに置き換えて、あと
・typedef やっと覚えた、
だけだろう。

>typedef int *inp_ptr;

>#define REF(x) (*(x))
ポインタ演算子 '*' → マクロ REF(x)

>#define PTR(x) (&(x))
ポインタ演算子 '&' → マクロ PTR(x)

47デフォルトの名無しさん:2005/05/07(土) 19:20:11
しかし確かに言われてみればそうだよな。
*である必然性はないわな。
#でも$でも@でもいいだろうし。
なぜあえて掛け算記号と重複させたのか?というのは疑問だ。
48デフォルトの名無しさん:2005/05/07(土) 19:25:05
http://ntfksm039250.fksm.nt.ftth.ppp.infoweb.ne.jp/
うぇwwwうはっwwwうぇwwwwwwwwwうはっwww
wwwwwwwwwwwwっうぇっwww
wwwwwwwwwwww
っっうぇ

っうぇうはっwww
49デフォルトの名無しさん:2005/05/07(土) 19:26:06
C++/CLIでは、マネージポインタの識別子として^を使うわけだが。

XORかよ!
50Cだけじゃねぇ〜よ:2005/05/07(土) 19:40:01
・ビジネス分野で最も普及した関数型言語APLの演算子は、
 普通のKBとフォントじゃ書けないw
・昔の非ASCII文字コードを使ったマシンでは、
 演算子にできる文字が極めて少ない
 (現在の半分くらい。どうしても書けない記号はトライコード(K&R)で書く)
・Smalltalkの演算子もかなり変。
 AltoPC上:  ↑値 
 現在:     return 値
51デフォルトの名無しさん:2005/05/07(土) 20:13:45

func1( int *a )
{
}

func2( int a )
{
}

hoge()
{
int *a, b;
a = *b;
b = &a;
func1( *b );
func2( &a );
}
のほうが自然だよなあと思う。
52デフォルトの名無しさん:2005/05/07(土) 20:19:08
まじか
53デフォルトの名無しさん:2005/05/07(土) 20:21:33
>>45
英語キーボードの*の位置をよく観察すれば答えがわかるはず
っていうか、記号の使いまわしは仕方が無いと思うけどな
とりあえず、C言語では一通りの記号を使いきっているわけだし
しいて言うなら「_」が演算子としては余っているけど、ねぇ?
54デフォルトの名無しさん:2005/05/07(土) 20:25:40
それは英数字の一部扱いでは。
55デフォルトの名無しさん:2005/05/07(土) 20:28:42
Cで演算子として使われてない記号は@と$と~と`
56デフォルトの名無しさん:2005/05/07(土) 20:38:07
>>53
おまえ、カーニハンか? 元気だった?

ところで、&と*が並んでるからとか、そういう理由なのか?
答えろ!カーニハン!

@とかあまってたジャンよ
57デフォルトの名無しさん:2005/05/07(土) 20:45:43
蟹飯の贋者ですが、

pdp11のアセンブラの
アドレッシングモードの
間接参照の文法からきている...そうです。

The syntax of the address forms is
identical to that in \s8DEC\s10 assemblers, except that ``*'' has
been substituted for ``@''
and ``$'' for ``#''; the \s8UNIX\s10 typing conventions make ``@'' and ``#''
rather inconvenient.
.PP

ttp://cm.bell-labs.com/7thEdMan/vol2/assembler
58デフォルトの名無しさん:2005/05/07(土) 20:47:05
>>55
_も演算子なのか?
59デフォルトの名無しさん:2005/05/07(土) 20:47:54
@は、メールアドレスと座標表示用にリザーブ。
~は、AWK (Aho-Wainberg-Kernighan)で、パターンマッチ用に使用済。
ちゅぅか、'>>'演算子, '<<'演算子の優先順位の設計ミスをなんとかしてほしい。
60デフォルトの名無しさん:2005/05/07(土) 20:49:45
あと、演算子を議論したい場合は、
最低限「演算子順位文法」とそのパース方法をマスターする
努力をすることw
61デフォルトの名無しさん:2005/05/07(土) 20:53:23
努力だけでいいのかw
62デフォルトの名無しさん:2005/05/07(土) 21:01:59
Turbo C 2.0の時に~は塩山市として使った覚えがある…
63デフォルトの名無しさん:2005/05/07(土) 21:33:23
~はビット反転。
64デフォルトの名無しさん:2005/05/07(土) 21:37:37
>>63
今思い出したーよ。
皆がその役目を忘れてる
'~'タン、カワイソ
65デフォルトの名無しさん:2005/05/07(土) 22:57:30
~ を使わないCプログラマって…
66デフォルトの名無しさん:2005/05/07(土) 22:59:18
@は演算子として使われているわけじゃないから問題ないよ。
67デフォルトの名無しさん:2005/05/07(土) 23:01:00
低スキルPGが大はしゃぎだな
68デフォルトの名無しさん:2005/05/07(土) 23:06:24
>>67-68>>1-66より低レベルなPG
69デフォルトの名無しさん:2005/05/07(土) 23:09:35
>>68
自虐的だな
70デフォルトの名無しさん:2005/05/07(土) 23:11:34
a+=b;
a-=b;
a|=b;
a&=b;
a==b;//これこそ、真の代入ではなかろうか…
71デフォルトの名無しさん:2005/05/07(土) 23:27:22
デストラクタの~はどんな扱い?
72デフォルトの名無しさん:2005/05/07(土) 23:28:24
>>70
a=bの結果をaに代入するってことか。

つまりa=bと同じだな。
73デフォルトの名無しさん:2005/05/07(土) 23:35:30
>71
C言語にデストラクタなどないw
74デフォルトの名無しさん:2005/05/07(土) 23:47:55
typedef struct {
int i ;
} St ;

St s, *sp ;
sp = &s ;

s.i=1 ;
sp->i=2 ;
(*sp).i=3 ;
sp[0].i=4 ;
75デフォルトの名無しさん:2005/05/08(日) 00:32:39
まぁ、現場ではバグの含有率が一番多いのが、
C言語で書かれたプログラムだ。

いろいろな意味で、一番タチが悪い。
76デフォルトの名無しさん:2005/05/08(日) 00:36:23
>>75
Source Please !!

VB だって、COBOL だって負けてはないと思うが。
77デフォルトの名無しさん:2005/05/08(日) 04:01:11
>>75
そうか、むしろJavaとかの方が多い気がする、適当に書いてもそれなりに動くから、かなりフィックスされないバグが多い気がする。
78デフォルトの名無しさん:2005/05/08(日) 14:21:05
>>40-41ワロス
79デフォルトの名無しさん:2005/05/08(日) 16:57:48
オマエラ変な風に考えすぎ。
int a, *p, **pp;
int f();
これで a も *p も **pp も f() もみんな int型。
シンプルだろ。

int *p; は p が intポインタ型という意味じゃなくて *p が int型と読むんだよ。
だから、
int* p; なんてキモい表記はするなよ。
80デフォルトの名無しさん:2005/05/08(日) 16:58:40
C++はダメでC言語しか語れないキモイ方なんですね
81デフォルトの名無しさん:2005/05/08(日) 17:03:37
(*printf)("これだけはキモイ");
82デフォルトの名無しさん:2005/05/08(日) 18:09:34
(*0)[a]
83デフォルトの名無しさん:2005/05/08(日) 19:05:18
Dだとどうなんかなあ?
84デフォルトの名無しさん:2005/05/08(日) 19:07:21
>>82
似たようなので、構造体の任意のメンバの
先頭からのオフセットをコンパイル時に数値で得る方法

typedef struct{
  short m1;
  char m2;
  int m3;
} Foo;

printf("Offset of Foo::m2: %d Foo::m3: %d\n", &((Foo*)0)->m2, &((Foo*)0)->m3);
85デフォルトの名無しさん:2005/05/08(日) 22:22:23
>>84
んなことしなくても規格にちゃんとマクロ offsetofがある。
offsetofが何をしているかということを考える意味では84のコードも役立たずではないが。
86デフォルトの名無しさん:2005/05/09(月) 12:13:41
>>84で大抵大丈夫だと思うけどoffsetofを使った方がいい。
空ポインタがアドレス0の位置を指すという保証はないからね。
87デフォルトの名無しさん:2005/05/09(月) 14:43:30
>>79
それは一見、一理あるが・・・

int a, *p, **pp ;
と宣言した時に、メモリ上に確保されるのは、
a、*p、**pp
ではなく、
a、p、pp
なんだよね。

*pや**ppがint型と読むのなら、
*pや**ppのメモリが確保されるべきじゃない?
88デフォルトの名無しさん:2005/05/09(月) 14:45:31
>>86
ちがう。

*(何か)NULL
ならば、NULLポインタが0番地という保証はないかもしれないが、
*(何か)0
ならば、0番地という保証があるでしょう。

というかNULL == 0って言語仕様で決まってたような・・・。
89デフォルトの名無しさん:2005/05/09(月) 15:04:26
>>88
「空ポインタ」と「空ポインタ定数」の違い。わかるかな?
0をポインタに変換したときに、0番地に変換される保証はないの。
90デフォルトの名無しさん:2005/05/09(月) 15:44:34
>>89
そうだっけ
近年は保証するように変わった記憶があったけど
91デフォルトの名無しさん:2005/05/09(月) 16:03:54
>>90
0番地にアクセスできなくなるから、有り得ない。
92デフォルトの名無しさん:2005/05/09(月) 16:10:30
>>90
規格読んだけど見あたらない。

古い資料だけどこういう主張もある。
ttp://www.kouno.jp/home/c_faq/c5.html#16
93デフォルトの名無しさん:2005/05/09(月) 17:15:52
>>92
でもおかしいよね
アドレス0にアクセスする方法が無いのが根拠だとしたら
特別なビットパターンであらわされるアドレスにアクセスする方法も無いよね
94デフォルトの名無しさん:2005/05/09(月) 17:31:50
>>93
何の話だ? 藪から棒に。
95デフォルトの名無しさん:2005/05/09(月) 17:43:41
ああ、そういうことか。
「特別なビットパターンであらわされるアドレス」は、普通はもともと(仮想)メモリの外にある。
空ポインタにアドレス0を割り当ててる場合でも事情は同じ。
96デフォルトの名無しさん:2005/05/09(月) 20:03:56
>>86
stddef.hに定義されているoffsetofマクロも>>84
同じじゃん。
貴方の主張が正しいなら

#define offsetof(s,m) (size_t)&(((s *)0)->m) - (size_t)&((s *)0)

こんな感じにしなきゃいけないと思うが。
本来の意味からすれば相対的な位置を知りたいんだから
自分はこっちが正しい気がする。
97デフォルトの名無しさん:2005/05/09(月) 20:51:42
まぁ、あれだ。
ポインタ使わずに済むなら、使わない方が良い、ってことだ。
バグのもとだし、後から見て分かり難いプログラムになるからな。

キチガイみたいにポインタのポインタのポインタのポインタとか
使って書かれてるプログラムを見せて、自慢げに講釈たれてる
自称スーパープログラマーが昔会社にいたなぁ・・・
98デフォルトの名無しさん:2005/05/09(月) 20:56:14
( д ) ゚ ゚
99デフォルトの名無しさん:2005/05/09(月) 20:59:48
やね○らおのことか
100デフォルトの名無しさん:2005/05/09(月) 21:02:43
うん、ポインタは使わないほうがいい。再帰でなければmain関数以外なくなって良い。
101デフォルトの名無しさん:2005/05/09(月) 23:51:06
>キチガイみたいにポインタのポインタのポインタのポインタとか
>使って書かれてるプログラムを見せて、自慢げに講釈たれてる
>自称スーパープログラマーが昔会社にいたなぁ・・・

俺の最高記録は * 4つだが、
* 5つ以上を使った事のある奴
(もちろん意味のあるコードで)
っている?
102デフォルトの名無しさん:2005/05/10(火) 00:21:35
>>101
構造体も一種のポインタと考えて良いなら、5個まで
103デフォルトの名無しさん:2005/05/10(火) 09:26:23
int*********i;
104デフォルトの名無しさん:2005/05/10(火) 10:18:06
>>91
じゃぁどうやって0番地にアクセスするの。

そもそも、ポインタの値 = アドレスとは限らないよね。
メモリの特定のアドレスへのハンドルだと思ったほうがいいのかな。


ポインタのポインタって無意識のうちに使わない?

a->b->c->d->e
なんていうのも、そうなんだしさ。
105デフォルトの名無しさん:2005/05/10(火) 12:36:17
>>104
> じゃぁどうやって0番地にアクセスするの。
Cから直接アクセスできればそれを使えばいいし、できなければアセンブラでも使えばいい。
アドレス指定でアクセスするという行為自体が環境に強く依存するんだから、
移植性は気にする必要はないだろう。
106デフォルトの名無しさん:2005/05/10(火) 12:45:58
>>88
C のソース上、ポインタとして定数「0」が記述された場合、
それは NULL ポインタとして判断される。

NULL ポインタ値の実装値が、
All 0 のビットパターンであるかどうかは環境依存。
107デフォルトの名無しさん:2005/05/10(火) 12:59:12
ポインタのポインタのポインタ・・・みたいなのは、とにかくtypedefして使うのが他の人に対する礼儀。

LispでもCでも、明示的なデータ構造なり型を定義せず書くのは、
デッサン画のようなもの
108デフォルトの名無しさん:2005/05/10(火) 13:20:06
でもさ、typedefはなるべく使いたくないわけよ
あれは型を隠蔽してしまうから、もちろんそのために使うんだけど
たとえば time_t
こう書かれちゃうと、一瞬「これって比較していいんだっけ?」と
躊躇してしまうよ。結局一度はtypedefの定義元を必ず参照する。
ポインタとは関係ない話だけど
109デフォルトの名無しさん:2005/05/10(火) 13:27:39
>でもさ、typedefはなるべく使いたくないわけよ
>あれは型を隠蔽してしまうから、もちろんそのために使うんだけど


型を隠蔽?はぁ?
110デフォルトの名無しさん:2005/05/10(火) 13:29:16
typedefは
実装を抽象して、
抽象データ型に近づけるためのもの。

アセンブラで16進コード弄り倒す人間には、関係ないけどなw
111デフォルトの名無しさん:2005/05/10(火) 13:34:16
>>109
隠蔽するじゃん
112デフォルトの名無しさん:2005/05/10(火) 13:41:57
>>106
ガッ
ガッ
113デフォルトの名無しさん:2005/05/10(火) 13:43:11
http://61-26-231-161.rev.home.ne.jp/
wwwwwwwwwwwwうぇwwwっっうぇっwwwwww
wwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwうはっwww
114デフォルトの名無しさん:2005/05/10(火) 13:50:40
>>111
typedefは、型を定義するもの。
データ構造の実装を抽象=隠蔽して、
宣言的なデータ構造に近づけるのが目的。

もちろん、16進ダンプおっかけるような仕事には無関係だけどなw
115デフォルトの名無しさん:2005/05/10(火) 23:21:52
アホか?>>114 >>110
116デフォルトの名無しさん:2005/05/10(火) 23:45:10
ほっとけ
117デフォルトの名無しさん:2005/05/11(水) 00:06:54
>>115
おまえが本当に馬鹿なのはよくわかった。消滅しろ
118デフォルトの名無しさん:2005/05/11(水) 00:10:25
あぁ、またやってる、やってるw

ここに常駐してるバカは、
概念と単語の結びつきが特殊だからな。

"int *p"の"int *"が「型定義」と妄想しているのだろうな(ぷ
119デフォルトの名無しさん:2005/05/11(水) 00:12:04
つ http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=typedef+%E5%9E%8B%E5%AE%9A%E7%BE%A9&num=50
  typedef 型定義 の検索結果のうち 日本語のページ 約 15,600 件中 1 - 50 件目 (0.15 秒)
120デフォルトの名無しさん:2005/05/11(水) 00:15:43
>>115-116 カコイイ
121デフォルトの名無しさん:2005/05/11(水) 00:18:19
>>117-119
素人イジメ倒すの(・Λ・)イクナイ。

もっと、お母さんみたいに優しく教えなきゃ、かわいそうだよ
122115-116:2005/05/11(水) 00:19:31
スマソ、首吊ってきます・・・
123デフォルトの名無しさん:2005/05/11(水) 00:22:01
>>122
むしろ逝`
124デフォルトの名無しさん:2005/05/11(水) 00:25:28
てst
125デフォルトの名無しさん:2005/05/11(水) 00:26:44
http://127.0.0.1/
wwwwwwwwwwwwうぇwwwっっうぇっwwwwww
wwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwうはっwww
126デフォルトの名無しさん:2005/05/11(水) 00:31:23
http://192.168.0.1/
wwwwwwwwwwwwうぇwwwっっうぇっwwwwww
wwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwうはっwww
127デフォルトの名無しさん:2005/05/11(水) 03:35:59
128デフォルトの名無しさん:2005/05/11(水) 08:37:04
むしろで逝`
129デフォルトの名無しさん:2005/05/11(水) 09:52:53
>>96
それはあなたの持っているコンパイラのstddef.hがそうなってるってだけでしょ?
規格でそう実装しろといってる訳じゃない。

空ポインタがアドレス0の環境なら>>84で十分。
違う環境なら違うように書くでしょ。
130デフォルトの名無しさん:2005/05/11(水) 23:06:43
char mozi[] ="unkounkounko";
int sum;

for(int i=0; i < 12; i++) { sum = sum + mozi[i]; }

このようにすれば変数moziの1バイトごとの合計値は求めれると思うのですが
2バイトごとに求めるにはどうしたらいいでしょうか?教えてくださいお願いします。
131130:2005/05/11(水) 23:08:37
すいません聞く場所間違えました
132デフォルトの名無しさん:2005/05/12(木) 00:47:55
おまえらに聞いた私がバカでした
133デフォルトの名無しさん:2005/05/12(木) 01:29:30
>>132
>>130のこと?
かわいそうなので解答。

for(int i=0; i < sizeof(mozi)/sizeof(short); i++) { sum = sum + ((short*)mozi)[i]; }
134130:2005/05/12(木) 10:45:42
>>133
すいません、4バイトの場合も教えてくれませんか?
135130:2005/05/12(木) 10:53:36
すいません解決しました
136130:2005/05/12(木) 13:07:39
いいえ解決しました
137130:2005/05/12(木) 13:10:01
こんな板で聞いた俺がバカでした。
138デフォルトの名無しさん:2005/06/10(金) 11:01:27
まとめ
一、型修飾子と間接参照演算子がカブっている。
宣言系と演算系の性質の全く違う記号がカブっている上に
型修飾子を型につけても変数名につけてもいいという
無意味な自由度のせいで
余計に見にくくなっている。

二、積の算術演算子とカブッている。
性質がまるで違っていて
他に使える記号があるのになんでわざわざ
算術演算子とカブらせるのか。無意味に見にくい。
139デフォルトの名無しさん:2005/06/10(金) 23:51:35
文句をいうだけなら誰でもできる
140デフォルトの名無しさん:2005/06/11(土) 03:45:02
開発者が何でも"*"を使いたくて仕方がなかったんだろう。
そこでオーバーロードですよ。
141デフォルトの名無しさん:2005/06/11(土) 03:54:02
* はアセンブラ由来じゃなかったっけ?
もともと参照の意味で使ってたとか
142デフォルトの名無しさん:2005/06/11(土) 04:04:55
スマソ
上で既出だった…
143デフォルトの名無しさん:2005/06/11(土) 14:01:16
p(hoge)
144デフォルトの名無しさん:2005/06/11(土) 22:26:34
無理に記号じゃなくてモナー
point( )とか
refer( )とかでよかったんでは。
145デフォルトの名無しさん:2005/06/11(土) 22:47:00
point()とかrefer()とか、それじゃ関数じゃねぇか
146デフォルトの名無しさん:2005/06/11(土) 22:50:15
ついでに add() とか sub() とか call_function() とかもよろしくな。
147デフォルトの名無しさん:2005/06/12(日) 00:02:29
マンドクセ
148デフォルトの名無しさん:2005/06/12(日) 13:06:46
型付きポインタ型変数と、非ポインタ型変数の 
記述上の区別がないのは煩雑だと思わないか?

int型ポインタ型の変数と、ただのint型変数を
記述上で全く区別しなくていいわけだ。

どっちも "a" だとか "b" っていう名前だけで定義できてしまう。
記述を見ただけじゃ型付きポインタ型変数か普通の変数だかもわからないし
指し型もわからない。

$でも何でもいいから
せめてポインタ型かそうでないかの区別くらいあったほうがいいんじゃなかろか
149デフォルトの名無しさん:2005/06/12(日) 13:14:40
ポインタ変数の宣言方法を変えればいい。

pointer<int> pi;
150デフォルトの名無しさん:2005/06/12(日) 14:19:40
悪くないけど、頻繁に使われる分字数が気になるな…
ここは例外として
*<int> ptr;

でOKとか。*は型名って事で。
ptr->deref, ptr = var->ref ...
151デフォルトの名無しさん:2005/06/12(日) 14:22:07
ミスっち。アロウ演算子じゃなくて.だった。
152提案:2005/06/12(日) 14:43:18
[宣言]
// ※ ポインタ型変数は、変数名の先頭に
//  "p" または "p_" を付けなければ宣言エラーとする(宣言させない)
ptr<int> p_int_Count; // OK
ptr<int> p_Count // OK
ptr<int> pCount // OK

ptr<int> Count; // Error!! invalid PointerVarName

[間接参照]
"*" は算術記号とカブるので使わない。
"指す"(at)という意味で "@" を使う

@(p_i_Count)
@pCount

153デフォルトの名無しさん:2005/06/12(日) 14:49:26
算術記号としての * を廃止します。
今後、掛け算には新たに x を使用します。
変数名としての1文字単独の x は禁止します。
154デフォルトの名無しさん:2005/06/12(日) 14:52:36
>>153
文字だと単項演算子と、くっつけて書く場合に問題が出る。
Count*=3;

Countx=3; にしたら意味が変わってしまうし

記号だと iA*iA といったくっつけた書き方ができるが
文字のxだと
iAxiA で違う名前になってしまう。
155デフォルトの名無しさん:2005/06/12(日) 15:06:45
二分探索木にNODEを挿入する。

NODE *insert(KEY key)
{
NODE **p, *new;

p = &root;
while(*p) {
if(key == (*p)->data) return NULL;
else if(key < (*p)->data) p=&(*p)->left;
else p=&(*p)->right;
}

if( (new=(NODE *)malloc(sizeof(NODE))) != NULL )
new->data = key;
new->left = new->right = NULL;
return *p=new;
}

↑本に載ってた
156デフォルトの名無しさん:2005/06/12(日) 15:08:49
こうするのとなにがちがうんですか?

NODE *insert(KEY key)
{
NODE *p, *new;

p = root;
while(p) {
if(key == (p)->data) return NULL;
else if(key < (p)->data) p=(p)->left;
else p=(p)->right;
}

if( (new=(NODE *)malloc(sizeof(NODE))) != NULL )
new->data = key;
new->left = new->right = NULL;
return p=new;
}

if文のかっこがぬけてるかも。
157デフォルトの名無しさん:2005/06/12(日) 15:17:27
この方がわかりやすいな
// p<Type> : ポインタ型変数宣言
// @ :(at) 間接参照

p<NODE> insert(KEY key)
{
p<p<NODE>> ppR,
p<NODE> pNew;

ppR = &root;
while(@ppR) {
if(key == (@ppR)->data) return NULL;
else if(key < (@ppR)->data) ppR=&(@ppR)->left;
else ppR=&(@ppR)->right;
}

if( (pNew=(p<NODE>)malloc(sizeof(NODE))) != NULL )
pNew->data = key;
pNew->left = pNew->right = NULL;
return @ppR=pNew;
}
158デフォルトの名無しさん:2005/06/12(日) 15:18:27
>>154
離して書けよバカ
159デフォルトの名無しさん:2005/06/12(日) 15:24:17
>>158
既存のコードも全部そうするのかよ。
そんなクソ文法を考えるセンスが素晴らしいな。
160デフォルトの名無しさん:2005/06/12(日) 18:09:44
Javaみたいにコンパイルオプションつけとけばいい
161デフォルトの名無しさん:2005/06/12(日) 18:30:04
演算子はくっ付けて書きたい俺様が来ましたよ
162デフォルトの名無しさん:2005/06/12(日) 19:18:23
接頭辞にpをつけなきゃエラーにするってのはすぐにできそうだな。
163デフォルトの名無しさん:2005/06/13(月) 01:38:27
>>161
演算子をなんでもくっつけられると思ってんじゃねーぞ
ポインタ同士の割り算は離して書くだろうが
括弧をつけるとか言い訳すんじゃねーぞ
ホントお前は知恵足りんだな
164デフォルトの名無しさん:2005/06/13(月) 01:45:19
なんだこの馬鹿は
165デフォルトの名無しさん:2005/06/13(月) 01:53:24
>>164
悔しかったら煽りじゃなくて反論をしてみせろ
166デフォルトの名無しさん:2005/06/13(月) 02:11:41
第三者から言わせてもらうと
悔しがってるのはお前だろw

ちょっと批判されたくらいで熱くなり過ぎ。
お前がいいと思うんなら勝手にそう思ってりゃいいよ。
167デフォルトの名無しさん:2005/06/13(月) 04:06:42
>>162
ハンガリアンのごとく嫌われそうな希ガス
168デフォルトの名無しさん:2005/06/13(月) 07:43:49
>>166
第三者からみるとどうでもいい
169デフォルトの名無しさん:2005/06/13(月) 09:58:16
つーか、pで始まる識別子を使いにくくなるという時点で却下。
170デフォルトの名無しさん:2005/06/13(月) 15:07:45
>>163
まず
>ポインタ同士の割り算は
「頭悪いなー」と気付かないと。
171デフォルトの名無しさん:2005/06/13(月) 16:00:50
ポインタにpをつけるのを義務にしちゃうと
ポインタのポインタはppに
ポインタのポインタのポインタはpppに
となっちゃうんですかねやっぱり
172デフォルトの名無しさん:2005/06/13(月) 16:12:57
int****ppppX;
イヤニナルナ・・・
173デフォルトの名無しさん:2005/06/13(月) 16:19:58
しかしそこまで*が並ぶこともないだろう。
174デフォルトの名無しさん:2005/06/13(月) 16:45:09
>>172
*の代わりにpを使うんじゃね?
175デフォルトの名無しさん:2005/06/13(月) 20:01:02
〜型のポインタのポインタのポインタのポインタの…
などという
ひとりよがりの型を作るやつは
スパゲッティと同じで嫌われそう
176デフォルトの名無しさん:2005/06/13(月) 20:36:42
>>148
宣言時が違う
177デフォルトの名無しさん:2005/06/13(月) 22:39:34
>>175
ポインタのポインタのポインタぐらいまでは普通に必要。
178デフォルトの名無しさん:2005/06/14(火) 09:09:36
>>146
>call_function()
()演算子を廃止して、関数を呼び出す関数を作るとすると
関数を呼び出す関数をで呼び出すわけだから、それを呼び出す演算子はcall_functionで…
call_function call_function call_function call_function call_function call_function...
こんなかんじか?
179デフォルトの名無しさん:2005/06/18(土) 21:37:45
お前ら意味が無いこと考えるのがホント好きだな
180デフォルトの名無しさん:2005/06/19(日) 05:22:45
意味あるよ〜。
ポインタの糞なところを指摘し
改良しようという立派な意味が。
181デフォルトの名無しさん:2005/06/19(日) 06:47:44
int a;
ptr<int> p; //int型ポインタの宣言
p = ptr_of(a); // ptr_of演算子
182デフォルトの名無しさん:2005/06/19(日) 07:31:24
>>180
ポインタの糞と思うとこを指摘して、誰かがが改良するのを待つという意味だろ
それとも、オマエが改良できるのか?(´,_ゝ`)
183デフォルトの名無しさん:2005/06/19(日) 07:37:26
>>182
意味わからんな。
改良なんて誰がしたっていいだろ。
こうしてみんなで意見を出し合えば、
やってくれる香具師も出てくるってもんだ。
グダグダ言ってないで君も何か案を出しなさいよ。
もしかしたら開発言語界の寵児になれるかも知れんよ。
184デフォルトの名無しさん:2005/06/19(日) 08:22:16
うはwwwwwwww他力本願全開wwwwwwww
185デフォルトの名無しさん:2005/06/19(日) 09:18:38
2ちゃんで他力本願とか指摘されてもなw
186デフォルトの名無しさん:2005/06/19(日) 19:00:56
Javaみたいに、本当はポインタなんだけど
ポインタであるということを意識させないのは
すごい画期的なアイデアだと思うんだが
>>183はきっと気づいていないんだろうな
187デフォルトの名無しさん:2005/06/19(日) 19:15:52
その件に関して、Java に新規性はない
C 以前から参照渡しの言語はあったが、C はそれを選択しなかっただけ

アイデアを出した所で、実装が出来る人間はそんな事には確実に興味が無い
何で今更互換性を無視してまで C を改良しなくちゃいけないのか…
188デフォルトの名無しさん:2005/06/19(日) 20:53:02
>>187
これだけ多くの人がつまづき、バグの元になっている現状を見なさい。
ポインタという欠点を放置しておくことはC言語業界の損失だよ。
解決できれば、互換性を捨ててでも乗り換える価値がある。
189デフォルトの名無しさん:2005/06/19(日) 21:15:05
>>188
C++でもポインタを生のまま使いたがる人の存在はどう説明する?
190デフォルトの名無しさん:2005/06/19(日) 21:34:12
>>189
それは単に保守的なだけと思うが。
無理にC++を使わされてるCプログラマと思う。
彼らは被害者なのだから、いたわりなさい。
191デフォルトの名無しさん:2005/06/19(日) 21:41:55
>>186
ポインタであることを意識しないと非常に不安なんだが…。
つーか、意識しない人間がCのポインタで色々やらかしてる気がする。
意識したくないなら、他言語に移ればいいだけだと思うよ。
192デフォルトの名無しさん:2005/06/19(日) 21:44:31
昔は「配列よりポインタで記述した方が早いコードを出力する」という
信仰があったが、今は高性能なコンパイラの最適化により、
同じ処理をポインタ使うもの/使わないもの、2つ書いても
両方ともほとんど同じアセンブラコード出力すっどえ。
これは実験してみれば簡単に目で確かめることができる。
C#の選択は正しいど。
193デフォルトの名無しさん:2005/06/19(日) 21:49:18
>>191
CわかってるやつにJavaを教えるときは
「あれ全部ポインタだから」と言うようにしてる。
何の言語でアレ、わかってないやつは
なにをやってもだめだし、すぐ理解するやつは
なにやってもそつなくこなす。だからどうでもいい
194デフォルトの名無しさん:2005/06/20(月) 00:19:05
>>188
で、int *p を ptr <int> p と書けば、多くの人は躓かなくなるのか?
195デフォルトの名無しさん:2005/06/20(月) 02:44:17
なんで * ばっかり使ったのかなぁ。

$と#を使えばよかったのに

int# pA = pB ;
$pA = 10 ;
とかにすれば・・・。


>>189
C++でポインタを生のまま使わない方法ってどんなの?

196デフォルトの名無しさん:2005/06/20(月) 03:17:18
>>188
ポインタなんて嵩が知れてると思うが…
自分のレベルでしか物事を判断出来ないようね。
197デフォルトの名無しさん:2005/06/20(月) 03:24:38
個人で把握できる程度の小さいプログラムしか書いたことのない人がそういうことをよく言う
198デフォルトの名無しさん:2005/06/20(月) 03:32:08
>>197
デバッグとかテストとか、禁じられてる国から来た人ですか?
199デフォルトの名無しさん:2005/06/20(月) 03:45:20
>>195
参照を使ったり、vectorなどのコンテナを使ったりってことだろ。
200デフォルトの名無しさん:2005/06/20(月) 04:05:39
>>196
君こそ自分の視野だけで物事を計ってるだろ。
君は書店に糞ほどポインタの解説本・攻略本が
並んでる現状をどう見る?
難解だからという以外の評価があるかね。
ポインタはCの恥部でありガンなんだよ。
201デフォルトの名無しさん:2005/06/20(月) 04:45:01
>>200
ポインタがなければ C は価値を失う。
理解出来ないなら、そうまで必死に C を使おうなどとしなければ
幸せになれるのに。
202デフォルトの名無しさん:2005/06/20(月) 05:35:01
>>199
サンクス

参照やSTLはポインタよりも使うのが難しいと思う。

>>198
規模が大きくなればなるほど、
デバッグやテストでバグをゼロにすることはできません。
203デフォルトの名無しさん:2005/06/20(月) 05:50:48
>>200
それって入り口でつまずいた人の為に用意されている物でしょ。
自分で解決の糸口を見つけられない人の補助教材。

入り口を抜けられた後にも当然 C の問題はある訳でしょう。
メモリマネージメントとか、他の言語ではカバーされていても
C では環境依存になる様な処理とか。そういうのを含めると、
ポインタの記法は些末な事と言っても良いと思うんだよね。
スレタイにある様に、C のポインタの記法はクセがあると思う
けど、今から仕様を変更するだけの労力に見合う物じゃないと
思う訳。STL が難しい人に、皆に受け入れられる提案が出来る
とは思えないよ。
204デフォルトの名無しさん:2005/06/20(月) 07:08:18
>>202
バグを0にできると信じてる方ですか?
205デフォルトの名無しさん:2005/06/20(月) 07:20:39
>>202
>参照やSTLはポインタよりも使うのが難しいと思う。
Javaについてはどう思う? 一般的にはCより難しくないと言われているが。
#あれは私にとってはポインタを生で触れなくて使い難く感じるのだが。
206デフォルトの名無しさん:2005/06/20(月) 10:25:24
> 一般的にはCより難しくないと言われているが。
あれはガベコレあってのことだからなあ。
207202:2005/06/20(月) 16:15:39
>>204
まさか。

でも規模が小さければバグがゼロということもありうるよ。
たとえば
int add(int a, int b) {
return a+b ;
}
とかになると、仕様の書き方しだいでバグがゼロになってしまう。
って、そんな非現実的な話はどーでもいいっすね。

>>205
Javaは常に参照なので難しくないと思います。
使い方を間違えにくいですから。

C++は参照とそうではないものが混在して、
使い方を間違うと混乱のもとになるので難しいです。
208デフォルトの名無しさん:2005/06/29(水) 10:21:49
char** ppsz;
const char** ppsz;
char const** ppsz;
char * const* ppsz;
char const* const* ppsz;
char const** const ppsz;
char * const* const ppsz;
char const* const* const ppsz;
209デフォルトの名無しさん:2005/06/29(水) 11:41:16
char ** const ppsz;
がねぇぞ!w
先頭constは仲間外れな気はするな。
210デフォルトの名無しさん:2005/06/29(水) 11:43:57
tmp.c:2: error: conflicting types for `const char**ppsz'
tmp.c:1: error: previous declaration as `char**ppsz'
tmp.c:3: error: redefinition of `const char**ppsz'
tmp.c:2: error: `const char**ppsz' previously declared here
tmp.c:4: error: conflicting types for `char* const*ppsz'
tmp.c:3: error: previous declaration as `const char**ppsz'
tmp.c:5: error: conflicting types for `const char* const*ppsz'
tmp.c:4: error: previous declaration as `char* const*ppsz'
tmp.c:6: error: conflicting types for `const char** const ppsz'
tmp.c:5: error: previous declaration as `const char* const*ppsz'
tmp.c:7: error: conflicting types for `char* const* const ppsz'
tmp.c:6: error: previous declaration as `const char** const ppsz'
tmp.c:8: error: conflicting types for `const char* const* const ppsz'
tmp.c:7: error: previous declaration as `char* const* const ppsz'
211デフォルトの名無しさん:2005/06/29(水) 13:00:04
エラーが出ることなど一目でわかるだろ。
ホレ
void main( void )
{
const char** ppsz = ( const char** )0;
char** ppsz0 = ( char** )0;
char const** ppsz1 = ( char const** )0;
char * const* ppsz2 = ( char * const* ) 0;
char const* const* ppsz3 = ( char const* const* )0;
char ** const ppsz4 = ( char ** const )0;
char const** const ppsz5 = ( char const** const )0;
char * const* const ppsz6 = ( char * const* const )0;
char const* const* const ppsz7 = ( char const* const* const )0;
( void )ppsz;
( void )ppsz0;
( void )ppsz1;
( void )ppsz2;
( void )ppsz3;
( void )ppsz4;
( void )ppsz5;
( void )ppsz6;
( void )ppsz7;
}
212デフォルトの名無しさん:2005/06/29(水) 13:01:34
×
char const** const ppsz5 = ( char const** const )0;
char * const* const ppsz6 = ( char * const* const )0;
char const* const* const ppsz7 = ( char const* const* const )0;

char const** const ppsz5 = ( char const** )0;
char * const* const ppsz6 = ( char * const* )0;
char const* const* const ppsz7 = ( char const* const* )0;
213連投スマソ:2005/06/29(水) 13:02:23
ppsz4 もだった orz
214デフォルトの名無しさん:2005/06/30(木) 03:21:59
*でめがちかちかするですつ
215デフォルトの名無しさん:2005/06/30(木) 06:22:51
匂いでですか?!
216デフォルトの名無しさん:2005/06/30(木) 15:58:04
ウホッ
217デフォルトの名無しさん:2005/07/01(金) 12:34:55
どなたか、C/C++のポインタとC++の参照について、JAVAの参照と関連付けて教えてください。
むずかしいです。
218デフォルトの名無しさん:2005/07/01(金) 13:08:44
>>217
難しいと思うのは邪念がある所為。
心眼を持ってすれば同じものであることが判る筈。
219デフォルトの名無しさん:2005/07/01(金) 13:25:23
>>218
なんだか徐々にわかってきました。
でもまだ難しいです。
220デフォルトの名無しさん:2005/07/02(土) 00:11:51
自分の周りに円を描き、そこから出ないようにするのがCのポインタ
フラフープを手に持って走り回るのがJavaの参照
221デフォルトの名無しさん:2005/07/02(土) 02:26:44
こんがらがりますた
222デフォルトの名無しさん:2005/07/02(土) 02:31:14
>>220
JAVAはヤリたい放題だけどCは窮屈ってことでしょうか?
223デフォルトの名無しさん:2005/07/02(土) 02:32:06
すみません。ヤリがカタカナになってますが深い意味はないです。
224デフォルトの名無しさん:2005/07/02(土) 09:20:16
220はその気になれば簡単に円の外へ出れるけど、フラフープからは脱出できない(しづらい)と言いたいのだろう。
225デフォルトの名無しさん:2005/07/02(土) 10:14:45
Cが相撲レスラーで
JAVAが子供ってことじゃないの?
226デフォルトの名無しさん:2005/07/02(土) 17:48:11
Cのポインタの必要性って何ですか?
C++だとポインタより参照の方が早くて、constをつけるともっと早いと聞きました。
JAVAの参照も早いですか?
227デフォルトの名無しさん:2005/07/02(土) 17:51:47
俺はポインタが好きだ。だから必要だ。
228デフォルトの名無しさん:2005/07/02(土) 17:58:57
>>226
「早い」かどうかは知らんが、const参照はより「速く」なる可能性がある。
229デフォルトの名無しさん:2005/07/02(土) 18:15:15
参照はNULLができんし
230デフォルトの名無しさん:2005/07/02(土) 18:47:26
ポインタ = 参照 + イタレータ + NULL;
Cではどれにも使える魔法のような存在。

C++では参照がほしいなら参照を、イタレータがほしければイタレータを使えばいいし、NULLかもしれないというのはboost::optionalがある。
イタレータを使うとは言ってもstd::vectorやboost::arrayでは結局ポインタ型に帰着するだろうけどそこは気にしない。
231デフォルトの名無しさん:2005/07/02(土) 18:50:39
>>226
Cからポインタとったら何も残らない希ガス・・・
C++のポインタと参照ならびにconst修飾子をつけた
場合の差異については、コンパイラにアセンブラ
ソースを吐かせて比べてみてはどう?
232デフォルトの名無しさん:2005/07/02(土) 20:12:47
const参照が早いというのはどうせクラス・構造体の値渡しより早いということだろ。
それなら別にconstのありなし・参照かポインタかということは無関係。
その中でもconst参照だけが値渡しとまったく同じように使えるというだけの話。
233デフォルトの名無しさん:2005/07/02(土) 21:10:27
山椒の場合アドレスのコピーすら作られないって話じゃなくて?
234デフォルトの名無しさん:2005/07/03(日) 01:51:13
メモリへのライトアクセスが発生しないという前提のコードを
吐いてよいというのもあるかと。
235デフォルトの名無しさん:2005/07/03(日) 13:45:25
Cのconstについて、いまいち理解できない

void hoge( const char *hoge ) と書いたときは
hogeを変更しないよ という宣言? それとも
*hogeを変更しないよ という宣言?

void hoge( char const *hoge ) と書いたときは
*hogeは保護されるとして、hoge[1]以降は?
236デフォルトの名無しさん:2005/07/03(日) 14:35:06
>>235
http://kmaebashi.com/programmer/pointer.html#const

const char *hogeはhogeの指す先(*hoge)を変更しないという意味。char const* hogeと同じ。
hoge自体を変更しないというのはchar *const hogeになる。

hoge[1]は*(hoge + 1)と書くのと同じ意味。
+演算子はどちらかにポインタ型の場合、結果は元と同じポインタ型になる。
つまりhoge + 1もconst char *型になるので、それを*で参照剥がしした先は変更できないのでhoge[1]も変更できない。
237デフォルトの名無しさん:2005/07/03(日) 14:38:16
>>236
ありがとう
お礼に グーグルで「ポインタ」で検索してみて
238デフォルトの名無しさん:2005/07/03(日) 14:38:38
イメージ検索で
239デフォルトの名無しさん:2005/07/04(月) 01:35:07
犬がひっかかりますた!
240デフォルトの名無しさん:2005/07/04(月) 03:47:15
241デフォルトの名無しさん:2005/07/09(土) 01:05:51
本則では先頭const禁止ってなことになれば少しは混乱が減ると思ふ。
当然、互換性の観点から、デフォルトでは先頭constは警告なし。

が、イィと思うんだけどなぁ・・・
242デフォルトの名無しさん:2005/07/09(土) 19:45:44
一つのことをやるのにいろんな記述方法があることがポインタの問題点だ。
そんなんでは人によりコード記述の流儀が違いすぎて
バグの元だし保守しづらくなる。
やはりCOBOLのように、誰が書いても同じコードになることが
業務系開発言語には最重要に思う。
てか、システム記述言語であるCを業務系に使うことが誤りなんだよな。
243デフォルトの名無しさん:2005/07/09(土) 20:30:34
業務なら決めておけばいいだけ
244デフォルトの名無しさん:2005/07/09(土) 20:55:39
>人によりコード記述の流儀が違いすぎて
>バグの元
流儀の違いがバグの元になるわけね〜。
解釈する能力が足りないからだろ。
245デフォルトの名無しさん:2005/07/09(土) 21:41:05
>>242
>やはりCOBOLのように、誰が書いても同じコードになることが
ほほぉ?
246デフォルトの名無しさん:2005/07/09(土) 22:51:55
誰が書いても同じコードになるプログラムなんかねーよ・・・
247デフォルトの名無しさん:2005/07/09(土) 23:07:53
Cのポインタだけでなく、自由度が高いと複数人でコードを書いたときに
わけがわからんことになりやすいって話だろ。

コーディング規約レベルでは守らないやつも出てくるし
言語である程度自由度を下げておくというアプローチもありでしょ。
248デフォルトの名無しさん:2005/07/09(土) 23:16:28
>>247
それは判るが、COBOLを引き合いに出した>242は問題の本質を判っていない気がする。
249デフォルトの名無しさん:2005/07/09(土) 23:40:43
人の流儀にはしたがわねーって流儀の奴が多い業界だからね。
あ、その業界でもそうかな?
250ビル・ジョブス:2005/07/10(日) 00:38:47
>>45
’$’(ドル記号)は通貨記号なのでソースの可読性を下げると考えられたから。
だた、**p***n;ってソースを見るとゲギョ!っと思うのはごもっとも。

以降、こちらでお願いしますです。<(_ _)>
C言語なら俺に聞け! Part 110
http://pc8.2ch.net/test/read.cgi/tech/1120596481/l50
251デフォルトの名無しさん:2005/07/10(日) 00:40:06
>>1
通常の変数のポインタは不自然じゃない。
それよか、関数ポインタの方が不自然。

int (*pproc)(void); // 関数ポインタ定義
int proc(void); // 関数プロトタイプ

pproc = proc; // ポインタコピーして
pproc(); // ポインタから実行

宣言としては、 (*pproc)() と proc() はint型を示すものとして理解できる。
ならば、 *pproc と proc はintを返す関数として理解できる。
なら、

pproc = &proc; // ポインタコピーして
(*pproc)(); // ポインタから実行

の方が自然じゃないのか???
252デフォルトの名無しさん:2005/07/10(日) 01:07:19
>>250
へっぴりジョブスは引っ込んでろ!
253ビル・ジョブス:2005/07/10(日) 01:24:20
>>252
sageてるから今回だけ許したる・・
254デフォルトの名無しさん:2005/07/10(日) 13:33:50
>>251
昔は後者のようにしないと駄目だったようだが、
自然だということ以外メリットがないということで、
前者のルールになった。

ちなみにこんなこともできる。
(*******************printf)("hoge");
255デフォルトの名無しさん:2005/07/10(日) 15:36:34
ポインタ参照を@とか使われていない記号にして、かつ後置にすれば問題が無かった予感。
ついでにアドレス参照演算は@前置とかにすれば統一感がとれて矛盾も生じないと思うが。

int p@; // ポインタ宣言
@int p1, p2; // これでもポインタ宣言としてOK
int n; // 普通の変数
p = @n; // ポインタコピー
p@ = 10; // ポインタ参照で変数を変更

アロー演算子なんて取ってつけたようなふざけた演算子も要らなくなるし。
不必要な括弧の連発もしなくてすむし。

int pproc@(void); // intを返す関数ポインタ宣言
[email protected] = 20; // アロー演算子不要

Pascalがそうか。
256デフォルトの名無しさん:2005/07/11(月) 21:18:26
てか間接参照は[0]でいいじゃん。
C++の純粋仮想関数だって=0みたいな気色悪いことやってるんだし。
257デフォルトの名無しさん:2005/07/11(月) 22:16:38
>>256
>C++の純粋仮想関数だって=0みたいな気色悪いことやってるんだし。
確かにあれはテラキモス。
258デフォルトの名無しさん:2005/07/11(月) 22:22:27
D&Eにはキーワードを導入しようとしても反発が強くてできそうになかったと書いてある。
259デフォルトの名無しさん:2005/07/11(月) 22:44:52
>>1
ポインタというものを変数の裏の顔というより、
ポインタ型という型として認めてやってからは矛盾を感じなくなった。
D言語ならint* foo,bar;でどっちもポインタ型にできるみたいで能動的。
260デフォルトの名無しさん:2005/07/11(月) 22:57:44
C++は「型*」でポインタ型という一つの型として扱いたがってたはずだが、
int* foo,bar;としてもポインタになるのはfooだけなんだよなぁ
261デフォルトの名無しさん:2005/07/11(月) 23:05:45
C言語を切り捨てれば、C++も、もっと良くなるのにね!
・・・あっ、そうしたのがJavaか・・・
262デフォルトの名無しさん:2005/07/11(月) 23:12:02
しかしJavaはすべての面においてC++より良くなったとは思えない。
263デフォルトの名無しさん:2005/07/12(火) 04:30:02
ところで、今更なんだけど、>>18だとなんでCが極自然だって
ことになるんだ?
264デフォルトの名無しさん:2005/07/12(火) 15:52:29
Cは高級アセンブラだから
265デフォルトの名無しさん:2005/07/12(火) 17:32:23
そうじゃなくて、>>1の書き方よりもC言語のポインタの書き方の方が
自然だとする根拠を、なぜ>>18で説明出来るのか?
ということなのだが。
266デフォルトの名無しさん:2005/07/12(火) 18:15:53
そんな昔のこと言われてもなあ あははははははははは
267デフォルトの名無しさん:2005/07/12(火) 18:16:47
>>265
リファレンスとでリファレンスがちゃんとマップされてるから
268デフォルトの名無しさん:2005/07/12(火) 18:47:05
>>265
リニア(配列の類)なデータを渡されてそれをアセンブリで操作することをやったことがある?
無ければ直感的にはわからないかも。
269デフォルトの名無しさん:2005/07/13(水) 02:20:47
言語仕様でそう決めたんだから>>1が幾ら文句言っても何も変わらない。
以上


以下、このスレは新言語原案募集スレになりました。(w
270デフォルトの名無しさん:2005/07/13(水) 19:20:44
C言語のポインタ部分だけを改変した自慰言語の開発に取り掛かろうと思います。
271デフォルトの名無しさん:2005/07/13(水) 20:07:55
>>269
なんでそう決めたのかの経緯を知ることも重要だろ
272デフォルトの名無しさん:2005/07/13(水) 20:46:08
どうせK&Rやコンパイラ製作者のエゴだろ
273デフォルトの名無しさん:2005/07/13(水) 20:57:28
Cの謎仕様はいくつもあるけど>>1のはおかしいとは思わないし
代案の方がよっぽど変。
274デフォルトの名無しさん:2005/07/13(水) 21:12:28
>>270
E言語とF言語は欠番ですか?
275デフォルトの名無しさん:2005/07/13(水) 22:32:15
>>274
→H→愛→自衛
276デフォルトの名無しさん:2005/07/14(木) 01:52:08
自慰→H
277デフォルトの名無しさん:2005/07/14(木) 14:52:45
現在、goto文の使用を禁じるコーディング規約が一般的であるように、近い将来、ポインタの使用を禁ずるコーディング規約が一般的になると思われるが
どうよ。例えば次のように↓↓
<< xxx社yyy部コーディング規約 >>
●規約第x.y.z章: goto文の使用禁止

その当時としては、goto文がCPUの動作を制御するもっともプリミティブな命令で
かつスマートで分かりやすい記述であった。
その後、プログラミング言語の発達によって、より抽象度の高い記述方法で、goto文を使わなくてもCPU動作の制御をできるようになったため、
goto文の必然性は小さくなった。
(もちろん、その抽象度の高い記述をコンパイルした結果(=機械語レベル)では、
それらの処理は、goto文(=jump命令) によって実現されている。
なぜなら、jump系命令は、CPUの動作にプリミティブなもので、
これなしでCPUを制御しようとすると、非常に回りくどい方法となってしまうためだ。
つまり、goto文(=jump系命令)は、見かけ上は消えていても、その裏では必ず使われている。)

最近では、
1.可読性を損ないやすい、
2.バグの温床となりやすい
3.高級言語ではgoto文を使わない方が制御をスマートに記述できる
との理由のため、goto文の使用を禁止しているコーディング規約が多い。

●規約第a.b.c章: ポインタの使用禁止
C言語全盛時、ポインタがデータ構造を制御するもっともプリミティブでかつスマートで分かりやすい記述であった。
その後、プログラミング言語の発達によって、より抽象度の高い記述方法で、ポインタを使わなくてもデータ操作を効率よくできるようになったため、ポインタの必然性は小さくなった。

最近では、
1.可読性を損ないやすい、
2.バグの温床となりやすい
3.高級言語ではポインタを使わない方がデータ操作をスマートに記述できる
との理由のため、ポインタの使用を禁止しているコーディング規約が多い。
278デフォルトの名無しさん:2005/07/14(木) 14:57:12
おれの予想では、5年後には、ポインタの使用は禁じ手になると思うな。
>277 ようなコーディング規約が各社で運営されて
"それでもポインタ使う派"と、"新しい記述を推進する派"で、2chで終わりのない論争を
続けているだろう、と予想した。

さあ、だれか、 >277 を否定してみてよ!

さあ!さあ!!さあ!!!
279デフォルトの名無しさん:2005/07/14(木) 14:59:05
オレがその会社のプログラマなら、そのコーディング規約に従う。
goto文やポインタを使わなくても きれいなコードはそれなりに書ける。
この程度の下駄なんてたいした問題じゃない。

本当にひどいコーディング規約になると
構造体はいつでも必ず実体で扱うこと とか
C++なら継承禁止 とか枚挙にいとまがない
280デフォルトの名無しさん:2005/07/14(木) 16:08:25
それよりも、未だに一行80バイト、コメントは41カラムから、変数名は20文字以内、
などの戯けたコーディング規約に早く消え去って欲しいと思う恭子の頃。
281デフォルトの名無しさん:2005/07/14(木) 17:55:25
おまえら、Java使いだろ?
282デフォルトの名無しさん:2005/07/14(木) 17:58:10
>>277
std::vector<T>::iteratorは?
283デフォルトの名無しさん:2005/07/14(木) 19:26:17
ポインタがだめなら
std::string str = "abc";
もダメなんだよな?
284デフォルトの名無しさん:2005/07/14(木) 19:53:26
>>280
いや、それはなるべく守ろうよ
コメントはどうでもいいとして
285デフォルトの名無しさん:2005/07/14(木) 20:01:38
>>283
そんなもんでポインタポインタ騒ぐヤツ居ないと思うが・・・
286デフォルトの名無しさん:2005/07/14(木) 20:22:23
>>277以降のはコピペだね。
どっかで見たよ。

一行80バイトは馬鹿馬鹿しいね。
行を折り返すことで発生するトラブルもあるんだしさ。
287デフォルトの名無しさん:2005/07/14(木) 22:07:25
>>286
でも、80バイト以内に収まるよう「心がける」ことは
決して悪いことではないと思う。

多少はみ出たって気にはしないけど
288デフォルトの名無しさん:2005/07/14(木) 22:12:23
やり過ぎは良くないが、こだわり過ぎて雁字搦めになるのも良い物ではないってことか
289デフォルトの名無しさん:2005/07/14(木) 22:15:06
規約というのは常に最下位レベルに合わせて作成される
290デフォルトの名無しさん:2005/07/14(木) 22:16:54
タブストップが8でない場合、インデントはスペース使ってくれ。
何も入っていない人様のWindowsでEUCの入ったソースを見ようと
思ってIEに食わせたら眩暈がした。
291280:2005/07/14(木) 23:14:40
>>287
甘いな、1行80バイト以内じゃない、1行80バイトなんだ。
292デフォルトの名無しさん:2005/07/14(木) 23:21:43
甘いとか甘く無いかとかいう問題か?(爆笑)
293280:2005/07/14(木) 23:31:18
>>292
そのプロジェクトに参加して初めに組んだプログラムは、ソース整形ツールだった。
294デフォルトの名無しさん:2005/07/15(金) 00:15:26
一行が長くなる原因・・・

10個近くの引数を取る関数・・・それ自体がそもそも間違った存在なのではあるけれど、
そういうのがある以上、一行80バイトを越えてしまうのは仕方ない。
一行一引数での書き方もあるが、それはケースバイケースで使い分けるべきで、
なんでもかんでも、どちらか片方の書き方に統一しろというのはナンセンス。

中カッコのネストが深くて行頭にタブが10個以上入っている・・・
それは関数が大きいからなのだが、時には大きいほうが良い場合もあるからなぁ。

>>290
インデントにスペースを使うのは勘弁してくれ。
もっと最悪なのは、インデントにタブとスペースを混ぜて使ってることだが。

タブにしておけば、見る人が好きな文字数にして見ることができるじゃないか。
スペースを入れた瞬間に、そのソースのタブのサイズは固定になり死ぬ。
295デフォルトの名無しさん:2005/07/15(金) 00:19:18
>>294
好き好んで混ぜるというよりIDEのエディタがタコで混ざるパターンが多いかも
改行したときの自動インデントとタブ入力の扱いが違ってたりとか
296デフォルトの名無しさん:2005/07/15(金) 00:50:09
>294
そういったビューアでもツールでも標準でついていれば文句は言わん。
IEにタブ ストップの文字数設定する項目あるか?
劣悪な環境下でもなるべく可読性をそこねないコードを吐けって話だ。
タブ ストップ 文字数を自由に変えれる環境にentab、detab追加する
くらい簡単だろ?
297デフォルトの名無しさん:2005/07/15(金) 00:54:32
そもそも何でIEで見ようとするの?
IEにそういう項目がないからって噛み付く意味がわからない。
298デフォルトの名無しさん:2005/07/15(金) 01:00:11
(´Д⊂ウワーン
だから劣悪な環境だと・・・
299酔っ払ってきた:2005/07/15(金) 01:18:53
インデントはタブであって欲しい人がいるようだが、Delphiなんかは
デフォルトのインデントは2だがタブ ストップは8文字だったかと。
んでIDEが吐いたテキストを便利なエヂタで開いてタブ文字数
変えると・・・
300デフォルトの名無しさん:2005/07/15(金) 01:20:41
>>295
そのIDEは余りにゴミだな。

劣化unix使いで、viを動かしている端末エミュレータ間でコピペする阿呆がいる。
その場合、XWindow上だと空白でコピペされるんだよね。
よって、インデントがタブか空白かでオリジナルかどうか判る罠。
301デフォルトの名無しさん:2005/07/15(金) 01:30:56
>>297
EUC→MS-Kanji変換を何もしなくてもやってくれるからだよ。
302デフォルトの名無しさん:2005/07/15(金) 01:58:38
何もしなくても変換してくれるとして何でIEでなければならないのか不明。
303デフォルトの名無しさん:2005/07/15(金) 02:02:04
>>1
ごめん
304デフォルトの名無しさん:2005/07/15(金) 02:02:55
危険な無料ウェアを勝手にインストールする事が禁じられているから
305デフォルトの名無しさん:2005/07/15(金) 02:07:12
セットアップ終わったばかりのWindowsでソースを見る必要が生じることもあるでしょ。
実際客先であったんだけど。
306マリー:2005/07/15(金) 02:08:40
危険な無料ウェアがダメなら市販ソフトを買えばいいじゃない。
307デフォルトの名無しさん:2005/07/15(金) 02:15:24
市販でも、怪しげな怪社の祖父とは禁止されているかと。
ソース次とか・・・
308デフォルトの名無しさん:2005/07/15(金) 02:24:55
思ったが>>304は上の馬鹿さ加減に嫌気がさしている・・・んでは?

M$だって補償してくれる訳ではないんだけどねぇ。
309デフォルトの名無しさん:2005/07/15(金) 02:31:36
そんなくだらないことのために、
ソースの保守性を下げるのかよ。

馬鹿じゃないの?

っていうか、なんでWindows環境なのにEUCなんだよ。
そのソースをWindows環境に持ってくる前にEUCから変換しろよ。
310デフォルトの名無しさん:2005/07/15(金) 02:32:45
そうだね
UNICODEにすべき
311デフォルトの名無しさん:2005/07/15(金) 02:37:17
構築、稼働はLinuxだけどクライアントへの説明などはWinってぇのは普通かと。
nkfとか入ってないのは前レスを。
312デフォルトの名無しさん:2005/07/15(金) 02:37:36
いや違うな・・・

ソースはタブで書いて、
表示用にタブ→スペースに変換してから、Windows環境に持っていけばいい。
313デフォルトの名無しさん:2005/07/15(金) 02:41:28
をっ!EUCって何だか分かったな!
勉強になっただろ。
314デフォルトの名無しさん:2005/07/15(金) 02:45:52
貫通力の問題なんだが・・・
果てはCP/M(って何?)から今の全てのプラットフォームでおk
315デフォルトの名無しさん:2005/07/15(金) 02:50:38
つか、タブ・スペースごときで保守性とか言ってんなよ...
316デフォルトの名無しさん:2005/07/15(金) 02:57:27
つーか、おまいら、ポインタの話にもどせ。1行の文字数は別スレでやれって。

>277の反論はないのか?

>282 >283の言う、std::string などは ポインタ排除の方向に
C言語がかわりつつあることの象徴だろ。
317デフォルトの名無しさん:2005/07/15(金) 03:07:57
ファームウェア書いたことある人いますか?
318デフォルトの名無しさん:2005/07/15(金) 06:18:44
どうでもいいけど引数の参照が
void hoge(int &ref)
{
}
void hogehoge(void)
{
  int a;
  hoge(&a);
}
みたいにならんかったのは何故?
いつだったか参照に気付かずにバグりそうになった事が…
319デフォルトの名無しさん:2005/07/15(金) 07:26:35
>>318
あなたはこう書きたいですか?
std::string str = "HogeHoge";
&cout << &str;
320283:2005/07/15(金) 07:46:12
>>316
C/C++ではポインタを捨てることが出来ないと言いたいんだが…。

ポインタを使いたくなかったら他の言語に移ってください。
それで丸く収まります。
あなたの仕事がなくなろうがしったこっちゃありません。
321デフォルトの名無しさん:2005/07/15(金) 08:48:56
つまり、文字列型がない以上、const char *を受けるコンストラクタが必要になるということですな。
322デフォルトの名無しさん:2005/07/15(金) 09:05:48
それ以前にC++の参照は仕様が腐ってるから
ポインタ排除は無理だな。
仮にstringだか文字列型を言語仕様でサポートしたとしても。
323デフォルトの名無しさん:2005/07/15(金) 15:01:08
>>316
> >282 >283の言う、std::string などは ポインタ排除の方向に
> C言語がかわりつつあることの象徴だろ。
いつのまに,C言語にstd::stringが追加されたんだ?
324デフォルトの名無しさん:2005/07/15(金) 18:07:04
触ってやるなよ
325デフォルトの名無しさん:2005/07/15(金) 19:22:47
>>316
反論はあるけど、規約に反論しても仕事は進まんし。
規約はそれを作った人間/組織の技術レベルを反映するから読むと面白い。
それだけだよ
326デフォルトの名無しさん:2005/07/16(土) 00:15:26
>>316
gotoはエラー処理以外は使用禁止なら無問題
あんまり使わんけどな。
ポインタ禁止って、、、2つ以上の値を返したい関数はどうやって作ればいいのだ?
もちろんCだから参照はないよな?
327デフォルトの名無しさん:2005/07/16(土) 00:22:17
つ グローバル変数
328デフォルトの名無しさん:2005/07/16(土) 01:27:52
いや、ネタはいいから
329デフォルトの名無しさん:2005/07/16(土) 01:31:16
つ 構造体
330デフォルトの名無しさん:2005/07/16(土) 01:48:40
それじゃまるで、ポインタを隠すことに終始したために見通しの悪くなったJavaの劣化版じゃないか。
331デフォルトの名無しさん:2005/07/16(土) 04:15:49
C言語でポインタを使いまくり
見かけ上ポインタを考慮しなくてよいものをC++で作る
なんか最近のトレンドっぽいね
332デフォルトの名無しさん:2005/07/16(土) 10:45:42
うちの会社は組み込み系でリアルタイム性バリバリ必要なんで、
C言語でないとパフォーマンスでなかったんだが、
さすがに生産性を考えてC++に移行しつつある。

いまどきは、CPUもコンパイラも賢いから
組み込み系でも抽象度の高いほうへシフトしていっている。
333デフォルトの名無しさん:2005/07/16(土) 10:56:13
ちなみにD&EにはC++の目標の1つとしてCと同じ速さで動くというのも挙げられている。
334デフォルトの名無しさん:2005/07/16(土) 11:29:34
>>326
>gotoはエラー処理以外は使用禁止なら無問題
多重ループ脱出用途は駄目ですか?
335レス読まずにカキコ:2005/07/16(土) 11:32:19
まだやってたのか
336デフォルトの名無しさん:2005/07/16(土) 12:17:01
try-catchもbreakもcontinuもgotoじゃん
近代言語でこういうのはgotoで実装してそうだなってのは
基本的に全部OKなんじゃね?

whileあるのにgoto使うバカはほっとけばいいし
337デフォルトの名無しさん:2005/07/16(土) 12:52:56
ループの中のswitch-case文の中からループ脱出したいときどうしてる?
338デフォルトの名無しさん:2005/07/16(土) 13:28:51
gotoとポインタに関連ないからスレ違いだと思うよ
339デフォルトの名無しさん:2005/07/16(土) 13:30:35
while(hoge){

try{

throw "ループから出させよやゴルァ!!!";

}
catch(char *e){
if(strcmp(e,"ループから出させよやゴルァ!!!")==0) break;
}

}
340デフォルトの名無しさん:2005/07/16(土) 14:22:57
C言語でないの?
341デフォルトの名無しさん:2005/07/16(土) 14:34:23
スレタイを読めない人がいるとは思いたくないが
342デフォルトの名無しさん:2005/07/16(土) 14:42:23
わかったようするに>>1は頭悪いんだ
すげー理解力
343デフォルトの名無しさん:2005/07/16(土) 14:48:27
Cもポインタやめてリファレンスにしようぜ
344デフォルトの名無しさん:2005/07/16(土) 14:58:09
議論の結果はどっかにまとめてうpしとけよ
345デフォルトの名無しさん:2005/07/16(土) 15:19:03
c言語のポインタの文法は確かにおかしい。直感に反する記法を強いられる場合がある。

c言語の教師になる人や、コンパイラを作成しようとする人は、この事を意識する
必要がある。しかし、このことに気づかないままCをマスターする人もいるだろう。
普通にプログラムをする人には、文法のおかしさに気付かずに済めば、寧ろその方が
幸せかも知れない。

ただc言語のエキスパートが多数存在し、有益なコードが大量に作成されている事実
がある以上、もし「文法がおかしいから国際語には向かない。」といった発言があれば、
それはは間違いだし、謝罪し訂正するべきだと思う。
346デフォルトの名無しさん:2005/07/16(土) 15:32:34
>>345
慎太郎かよw
347デフォルトの名無しさん:2005/07/16(土) 15:32:59
>>306
コンピュータ言語と違って自然言語は、
使っていくうちに変化するという特徴があるので
文法のおかしさが減ったものほど広く使われるようになる。
また広く使われるほど文法のおかしさが減っていく。
348デフォルトの名無しさん:2005/07/16(土) 16:32:05
まぁ確かに、1から100まで規則性が認められない言語もあれば、
日本語のようにかなり規則性に富んだ言語まである。
フランス語が偶々前者に近いからといって、フランス語全てが
文法がおかしいというようなニュアンスの発言はお郷が知れるというものである。
349デフォルトの名無しさん:2005/07/16(土) 16:34:11
フランス語は数字もまともに数えられない欠陥言語
350デフォルトの名無しさん:2005/07/16(土) 16:38:20
お偉い人はつくづく要らんことばかり言いますな
351デフォルトの名無しさん:2005/07/16(土) 16:49:40
数学を勉強する者にとっては、第二外国語は
ドイツ語よりフランス語だよな。
フランスは数学の本場だし。
352デフォルトの名無しさん:2005/07/16(土) 18:10:30
多重ループ脱出もそうだけど、
1回しか回らないループ(つまりループじゃない)を作って
エラー処理時にbreakするってのは
邪道なの?正道なの?
353デフォルトの名無しさん:2005/07/16(土) 18:18:26
do {

if (…) break;

} while (0);

ってこと?別にいいんじゃね?
でも一般に関数化してreturnの方がよさそう。
354デフォルトの名無しさん:2005/07/16(土) 18:19:17
>>353
ふっふっふ・・・
関数作成数に上限があるコーディング規約なのだお
355デフォルトの名無しさん:2005/07/16(土) 18:26:53
>>354
きもっ!
356デフォルトの名無しさん:2005/07/16(土) 18:28:25
別にいいんじゃね?
変な規約。
357デフォルトの名無しさん:2005/07/16(土) 18:34:42
オーバーヘッド対策か知らんけど、裏目に出るだろうな
358デフォルトの名無しさん:2005/07/16(土) 19:12:39
素直にgoto使えばいいのに
359デフォルトの名無しさん:2005/07/16(土) 20:57:44
>>352
それをやったプログラムで・・・

for(...){ //意味のあるループ

do{ // try代用のループ

if(...) break; // 意味のあるループを抜けるつもりで書いた

}

}

というミスをして1時間くらい悩んだ経験あり。
よって駄目・・・と言いたいが・・・
しかし関数化すると処理が見通しにくくなるし・・・

やっぱ特定のループを指定できるbreakとcontinue、あと例外処理は是非備えてほしい機能だな。
360デフォルトの名無しさん:2005/07/16(土) 21:10:12
トランプを文字列みたいにカードクラスのポインタで表してるんだけど
最初カードを作るときに
for (i = 0; i < 52; i++) {
  (card + i)->SetCard(mark, num);
}
ってやるとアドレスが全然進まないんだけど
これじゃだめなの?
361デフォルトの名無しさん:2005/07/16(土) 21:13:40
とりあえずカードクラス(クラス?)の定義と
cardの定義、見せてみ。
362デフォルトの名無しさん:2005/07/16(土) 21:21:57
ここまできたら何だっていいよ。
C系で言語仕様に関して詰まってることどんとこいだ。
363デフォルトの名無しさん:2005/07/16(土) 23:28:19
// card.h
class CCard {
  int mark;
  int num;
public:
  CCard();
  int SetCard(int mark, int num);
  int GetMark();
  int GetNum();
};

// card.cpp
CCard::CCard() {
  mark = 0;
  num = 0;
}

int CCard::SetCard(int mark, int num) {
  this->mark = mark;
  this->num = num;
  return TRUE;
}

// main.h
CCard *card;
card = new CCard[52];

こんな感じ
364デフォルトの名無しさん:2005/07/16(土) 23:45:09
card[i].SetCard(mark, num);じゃないのかい?
ポインタ配列をnewしてるんじゃなくて
インスタンス配列をnewしてるように見える。

ごめん、ホントはブランク長くてよく分からない。
365デフォルトの名無しさん:2005/07/16(土) 23:53:13
>>360
アドレスは進むだろ。
markとnumそのままだと、52枚とも同じカードになるんじゃないか?
366デフォルトの名無しさん:2005/07/17(日) 00:19:18
やったぜ俺!
>>364その通りだった
カードを配ったときにプレイヤーのカード総数を増やすのを忘れてた
>>365進んでなかったアドレスをよく見たら先頭アドレスだった
367デフォルトの名無しさん:2005/07/17(日) 00:39:24
CCard *card;
card = new CCard[52];

このコードって危なくないかい?
51個のインスタンスポインタがCに管理してもらってないじゃん。
368デフォルトの名無しさん:2005/07/17(日) 01:26:00
>>367
C/C++はポインタの管理なんかしないでしょ
delete[] card;
ってやれば52個とも解放できるので無問題
delete card; だとメモリリークするけどね
369デフォルトの名無しさん:2005/07/17(日) 01:31:06
>>363
ヘッダで領域確保しちゃってるけどいいの?
せめて

// main.h
extern CCard* card;
・・・

// main.cpp
#include "main.h"
card = new CCard[52];
// 以下CCardの初期化コード(>>364の)が52個ほど(使う前であればいつでもいいけど)
・・・

にしてあげて。

>>368
for (int i = 0 ; i < 52 ; ++i)
  delete card[i];
のようにしてる漏れは逝ってよしですか?
370369:2005/07/17(日) 01:32:18
ああ、delete card; が最後に来ます。
371デフォルトの名無しさん:2005/07/17(日) 04:27:14
もう一つ上のクラスを作ってそこのデストラクタで
解放するようにした方がいいと思うぞ。
372デフォルトの名無しさん:2005/07/17(日) 07:29:49
>>353
関数の途中からのreturnを禁止しているコーディング規約もあるぞ。

何らかの片付け処理が必要なものはデストラクタでやるようにしていても、
returnで抜けさせてくれないのよ。そんなだから、例外も投げるのは禁止されてる。

C++なのに・・・と激しく悶える。
373デフォルトの名無しさん:2005/07/18(月) 15:39:25
>>368
が正しい

>>369
はやっちゃいけない

>>371
は有り
374デフォルトの名無しさん:2005/07/19(火) 09:09:43
>>372 return禁止
基地外じみてるな。
しょうがねぇから用もねぇのにフラグ変数増えてハマる・・・
規約を決めた根拠がわからん。
375デフォルトの名無しさん:2005/07/19(火) 09:45:39
class CCard
{
private:
  Card card;
public:
  CCard() { /* インスタンス生成及び失敗した場合の処理。 */ };
  ~CCard() { /* メモリの解放 */ };
}
CCard::CCard()
{
  card = new Card[52];
}
CCard::~CCard()
{
  delete[] card;
}

OO的には普通こんな感じじゃないの?
376デフォルトの名無しさん:2005/07/19(火) 09:53:18
老婆心ながら、ジョーカーの存在を忘れてるよ君たち。
カードの数は53でそ?
377デフォルトの名無しさん:2005/07/19(火) 11:01:39
だってちちならべにジョーカーは使わないんだもん
378デフォルトの名無しさん:2005/07/19(火) 11:20:09
>>374
それでgotoも禁止ならもうどうしようもないな
379デフォルトの名無しさん:2005/07/19(火) 14:10:22
そこで、returnもgotoも使えない場合にはこんなコード。
bool func()
{
int foo;
char buf[100];
FILE * fp;
bool err = false;
if (!err && (fp = fopen("foo", "w")) == NULL) {
err = true;
}
if (!err && fgets(buf, sizeof(buf), fp) == NULL) {
err = true;
}
if (!err && sscanf(buf, "%d", & foo) != 1) {
err = true;
}
if (!err) {
fclose(fp);
}
return err;
}
380デフォルトの名無しさん:2005/07/19(火) 19:05:00
>>379
馬鹿ですか?
381デフォルトの名無しさん:2005/07/19(火) 19:06:16
return禁止なのは、C時代の名残りだね。

openしたものをcloseせずにreturnしたらヤバいでしょ。
returnと書くところで、それぞれcloseしたら、closeし忘れも出るしね。
382379:2005/07/19(火) 19:15:17
調子に乗って書いたらfclose()前にもチェック入れちまったよ。
383デフォルトの名無しさん:2005/07/19(火) 22:27:51
それもそうだが、他にもツッコミどころが・・・
普通は↓のようにやるだろ。

bool func()
{
bool bResult = false;
int foo;
char buf[100];
FILE * fp;

if ((fp = fopen("foo", "w")) != NULL) {
if (fgets(buf, sizeof(buf), fp) != NULL) {
if (sscanf(buf, "%d", & foo) == 1) {
bResult = true;
}
}
fclose(fp);
}

return bResult;
}
384デフォルトの名無しさん:2005/07/19(火) 23:15:10
どっちを読んでも似たようなもんだ
writeモードでfopenして何がしたいか良く判らん
参照側ではエラーの種類も判らんし、fooは使わんのか?
#まあfcloseの返り値を見ないのは支持出来るにしてもだな
385さらにスレ違い:2005/07/19(火) 23:19:38
インデントが深いのも禁止という制限を設けてみる。
E-mailに貼られても7Replyまではクソビューアでも見れるであろう
72文字制限つき。
386379:2005/07/19(火) 23:23:11
>>383
いや、それだとインデント制限もある場合に難しくなる。
387379:2005/07/19(火) 23:24:45
>>384
わはは、最初はライトでサンプルを書こうと思ったのが途中で挫けてリードになったわけだ。
いいじゃん、察してよ(ぉぃ
388デフォルトの名無しさん:2005/07/19(火) 23:35:59
>>385
たしか規格にで処理系はブロックの入れ子を最低15認識できないといけないと書いてあったはず。
となると逆に言えばそれ以上の入れ子のソースはやらないほうがいいと言うことだろう。

#インデント15はかなり多いと思うけど。
389デフォルトの名無しさん:2005/07/19(火) 23:45:35
そういえば一行の長さは最低519byte以上を認識するべしとも書いてあったような
・・・んなもん書くもんか
390デフォルトの名無しさん:2005/07/20(水) 03:49:04
どっかのスレで、一行数KBytesのコードを見たってコメントを見たことがあるが。
391デフォルトの名無しさん:2005/07/20(水) 07:45:29
人間が書いたのではなく、
難読化のツールの出力だったりしないか?
392デフォルトの名無しさん:2005/07/22(金) 01:19:24
>>388
8タブだとえらいことにw
>>389
標準的なBUFSIZ(512)-CR-LF-EOSで509バイトかと。

ポインタの話・・・
393デフォルトの名無しさん:2005/07/22(金) 08:33:30
>>392
ポインタの話は今のままでしょうがないでFAじゃないの?

で、509バイトがどうかしたの?
394デフォルトの名無しさん:2005/07/22(金) 13:45:22
>>393
519バイトはおかしいよね という話?
395392:2005/07/22(金) 21:50:33
タイプミスだと思ったんだけど、とりあえず突っ込み入れておきますた。
519で正しかったら・・・吊ります。
396デフォルトの名無しさん:2005/07/23(土) 03:06:49
ポータビリティ性の問題だね
- 8 nesting levels of conditional inclusion.
- 8 nesting levels for #included files.
- 32 nesting levels of parenthesized expressions within a full expression.
  This will probably occur when using macros.
- 1024 macro identifiers simultaneously. Can happen if one includes too many header files.
- 509 characters in a logical source line. This is a serious restriction if it applies after preprocessing.
  Since a macro expansion always results in one line this affects the maximum size of a macro.
  It is unclear what the Standard means by a logical source line in this context and in most
  implementations this limit will probably apply em before macro expansion.
- 6 significant initial characters in an external identifier. Usually this constraint is imposed by
  the environment, e.g. the linker, and not by the compiler.
- 127 members in a single structure or union.
- 31 parameters in one function call. This may cause trouble with functions which accept a variable
  number of arguments. Therefore, it is advisable that when designing such functions that either
  the number of parameters be kept within reasonable bounds or that alternative interfaces be
  supplied, e.g. using arrays.
397デフォルトの名無しさん:2005/07/24(日) 00:06:17
個人的に重要視してる。

80文字制限を批判する書き込みもあるようだけど、紙媒体等への
出力を考慮すると、やむを得ないと思う。
俺は紙使わないけど、検索できないし。
でも「俺が正義だ」コードは吐かないように努めている(はず。
398デフォルトの名無しさん:2005/07/24(日) 00:21:47
>>397
流石、日本語をまともに使えない人は一味違うね。
399デフォルトの名無しさん:2005/07/24(日) 01:03:50
何でそんなに・・・
400デフォルトの名無しさん:2005/07/24(日) 01:10:30
紙に印刷すること自体が間違いだよ。
変なところでぶった切って見通しが悪くなる。

検索できない? そりゃ糞環境を改善して幸せになるべきだ。
401デフォルトの名無しさん:2005/07/24(日) 01:30:52
主観のみの発言と言われてもしょうがないかな?
客観的な事例を挙げるとよいと思われ。
402デフォルトの名無しさん:2005/07/24(日) 01:36:14
>>400

>俺は紙使わないけど、検索できないし。
これは普通の解釈をしては成り立たない文章なのだと思う。
おそらく、「俺は検索できないから紙を使わない」なのでないだろうか。
403デフォルトの名無しさん:2005/07/24(日) 01:56:14
>402
ありがとう。その通りです。
漏れとしては他に解釈のしようがないと思ったんだけど・・・

それこそ「俺が正義」なのか・・・
404デフォルトの名無しさん:2005/07/24(日) 02:46:46
俺は紙は使わないけど。検索できないし。
なら意味は通る。
405デフォルトの名無しさん:2005/07/24(日) 02:50:55
>これは普通の解釈をしては成り立たない
まさに普通に解釈しちゃダメだったね。
406デフォルトの名無しさん:2005/07/24(日) 04:15:40
いや日本語としてはOKだと思う。

小学校で習ったことをがんばって思い出すと、
それは倒置法っていう奴らしい。
407デフォルトの名無しさん:2005/07/24(日) 11:03:53
これからはなるべく理解しやすい発言を心がけるよ。
正直すまんかった。


紙媒体ではなく電子媒体または二次記憶媒体での文書保存おkで
ISO9000取得しているところって多いのかな?
408デフォルトの名無しさん:2005/07/24(日) 13:12:46
うちのISO9000の内部監査では、
監査員が見せてと言ってすぐに見せられれば電子媒体OKになってます。
409デフォルトの名無しさん:2005/07/24(日) 13:24:02
某映画の様にzipドライブとかオープンリールでそのままは論外ってことだね
410デフォルトの名無しさん:2005/07/24(日) 17:04:37
必ず紙媒体が必要だな。
電子媒体はマシンがとらぶってダウンしてたら見れなくなるんで不可。
411デフォルトの名無しさん:2005/07/24(日) 18:00:32
じゃあ>408は?
412デフォルトの名無しさん:2005/07/24(日) 20:18:42
>>408-410
thx

408は内部監査と限定してあるから、保存用は別ということかな。
設計審査とかのときに重いファイルを持ち歩かなくてよい、目で検索する必要がないなど、
紙より効率いいなぁ。

>>410
(一時的)保存媒体さえしっかりしていれば参照するマシンは何でもよいかと。

長期保存が問題になるような希ガス。
CD-Rに保存するとして、文書保有最低年数は保存データを保証するメディアでないとダメ
だろうし、数年後に読み取り可能なハードが存在するか?という問題もあるだろうし・・・
413408:2005/07/24(日) 21:05:39
ちょっと前まで保存用は紙でした。

最後に紙に印刷して倉庫にしまっていましたが、
倉庫から出してくるのが面倒なので、
後から参照するときも紙は使わないです。

んで、その先がアホな話しでして・・・。
紙に印刷して倉庫番に渡すという社内ルールはそのままに、
倉庫のスペース削減のために、紙ではなく電子化して保存するようになったんです。
紙で渡したものをスキャニングして保存、紙は廃棄。
倉庫から出してというと、紙に印刷して渡してくれる・・・orz

ちなみにうちはCD-RはCD-ROMのマスターとして業者に渡す時だけで、
基本的に保存はMOを正副2枚ずつ保存するようになっています。
414デフォルトの名無しさん:2005/07/24(日) 21:06:05
CD-Rなら良いのかもね。
うちはMTだからダメなんだよ。
(大型コンピュータの磁気ディスク装置にかけるなんてすぐにはできない)
そういや文書はマイクロフィルム化してもよいことにはなってたな。
415デフォルトの名無しさん:2005/07/24(日) 21:18:02
なんかもう激しくスレ違いですね
416デフォルトの名無しさん:2005/07/25(月) 00:54:14
スマソ
417デフォルトの名無しさん:2005/07/25(月) 01:22:20
>>413
ワラタ
MO二重化はOKか。
参考になります。
>>414
マイクロフィルムは耐用年数が非常に長いみたいね。でも手間が・・・
>>415
夏厨が読んだら少しはタメになるかと。
418デフォルトの名無しさん:2005/07/25(月) 02:02:26
>>417
うちは納品物は全部正副の2部づつだけど?
電子媒体に限らずソース(紙媒体)、仕様書にいたるまで全て。
419デフォルトの名無しさん:2005/07/25(月) 22:53:06
品質管理の一環で?
420デフォルトの名無しさん:2005/07/26(火) 00:01:59
品質管理とは関係なく常識かと。
421相変わらず脱線したまま:2005/07/26(火) 23:31:11
話の流れからして、品質管理上必要な文書長期保存の媒体がMO一枚では心許ないので、
正副の二枚に保存することによって電子化できたということだと思ったが。

それはそれとして、
納入物件に紙媒体のソースがあるというのが気になる。
422デフォルトの名無しさん:2005/07/26(火) 23:43:32
話の流れからして、品質管理上必要な文書長期保存の媒体としてMO一枚では心許ないので
正副の二枚に保存することにより電子化できたということだと思ったが。

それはそれとして、
納入物件に紙媒体のソースがあるというのが気になる。
もしかすてF通?
423デフォルトの名無しさん:2005/07/27(水) 06:16:58
どうでもいいやんそんなこと
424デフォルトの名無しさん:2005/07/27(水) 10:38:51
別に不実に限らんだろ。
425デフォルトの名無しさん:2005/07/27(水) 14:42:33
富士通のCMをやっていた工藤静香の曲の歌詞に、
「不実です」というのがあったが、「富士通です」に聞こえたな。
前後の詩の文脈とも相まって、えぐい話だ。
426デフォルトの名無しさん:2005/07/27(水) 23:03:31
いや、でも電子媒体のみで運用できる?
もし印刷したりして持ってたら版数アップとかで
最新版と内容がずれることがあり、監査で引っ掛かるぞ。
427パラドックス:2005/08/09(火) 23:02:01
C++ならあるんだよな>>int &a
さて .cppで
int* aとはどういう違い?
428デフォルトの名無しさん:2005/08/10(水) 14:41:47
別名とポインタ
429デフォルトの名無しさん:2005/08/10(水) 15:14:25
別名はポインタ型の変数に,自動的に*をつけて
逆参照していると思っていいのではないかと思う.

foo (int& a) {
a = 1;
}

は,

foo (int* a) {
*a = 1;
}

と同じ.別名だとa++みたいな
ポインタ操作ができないからこちらの方が安全.
430デフォルトの名無しさん:2005/08/10(水) 18:39:36
最近は、「別名」なんてわけのわからん訳をするのか?
431デフォルトの名無しさん:2005/08/10(水) 19:22:00
前橋って人がある本で『C++における参照は本来「別名」(alias)とでも呼ぶべきものです』って書いたのが原因かも
まぁこれが何処か別のところからの受け売りである可能性も否定できませんが
432デフォルトの名無しさん:2005/08/11(木) 04:38:33
428につられて書いたけど, たしかに,
上で書いた引数の例だと,別名って言わずに
参照渡しと言って,そのまま変数を参照って
言うことが多いね.

でもこれはちょっと混乱の元かと.
普通の変数であってもデータを参照しているわけだし.
433デフォルトの名無しさん:2005/08/11(木) 09:26:59
初心者に言う時に良く言うヤツ多いな、別名って
434デフォルトの名無しさん:2005/08/11(木) 09:39:02
参照って単語が使いづらいんだよ
Cのときは「ポインタを使って参照する」とか
言ったりしてたのに参照そのものが出来たら
今まで言ってた参照をなんて言いかえるのか
435デフォルトの名無しさん:2005/08/11(木) 09:43:24
だがポインタを使って値を参照することに変わりは無いわな
436デフォルトの名無しさん:2005/08/11(木) 09:45:34
>>435
だから、参照に参照という名前をつけてもいいんだけど
それだと参照するときに参照という単語を使うと
参照がダブってしまうので今までのただの参照と
誤解を生むんだよ
437デフォルトの名無しさん:2005/08/11(木) 09:58:00
参照のオンパレードだな
438デフォルトの名無しさん:2005/08/11(木) 11:24:52
そこで意味も無くリファレンスとかエイリアスとか横文字を持ち出してお茶を濁すのはどうだろうか?
439デフォルトの名無しさん:2005/08/11(木) 11:32:45
初心者を煙に巻く以外の意味は全く無いな
440デフォルトの名無しさん:2005/08/11(木) 12:27:18
初心者を煙に巻ければそれで十分。
煙に突進してくるくらいの気概の無い初心者を振り落とせるからな。
441デフォルトの名無しさん:2005/08/11(木) 13:58:06
たしかに参照って言葉は用語として用いるには意味が広すぎて嫌だな…
「別名」のほうが混乱がないと思う…
442デフォルトの名無しさん:2005/08/11(木) 14:08:39
しかし別名という考え方が一般化すると、次は普通に定義された変数が本名とか呼ばれそうな予感。
・・・でも、そんなに弊害は無いかな?
443デフォルトの名無しさん:2005/08/11(木) 14:31:52
別名とくればそりゃ普通に本名だろ
444デフォルトの名無しさん:2005/08/11(木) 14:50:52
仮名・堂島 とか
445デフォルトの名無しさん:2005/08/11(木) 16:01:24
とんでもない方向に…

「アドレスを示すポインタ」が基本だろ?
ポインタはポインタ。

ホワイトボードに書かれた項目をレーザーポインタで指し示す場合、
参照やら別名とか岩ネーだろ。

要は、アドレスを表すのか、アドレス内の値を表すのかって事だけなのに、、、

お前ら、初心者を振り回すのに必死だな。
446デフォルトの名無しさん:2005/08/11(木) 16:02:48
ポインタはアドレス
447デフォルトの名無しさん:2005/08/11(木) 16:05:50
>>445
何の話をしておられるのですか?
448デフォルトの名無しさん:2005/08/11(木) 16:25:41
俺の会社では、レーザーポインタとは呼ばずに激光指針って呼んでるよ。
449デフォルトの名無しさん:2005/08/11(木) 16:27:21
俺はレーザーポインタって呼ばずに赤い点って言ってるよ
450デフォルトの名無しさん:2005/08/11(木) 16:38:50
>>445
アドレスだけがポインタだと思うなよ小僧
451デフォルトの名無しさん:2005/08/11(木) 18:23:04
なんだよC爺
452デフォルトの名無しさん:2005/08/12(金) 00:29:22
>>450
ポインタだけがアドレスだと思うなよ、の間違いですか?(・∀・)ニヤニヤ
453デフォルトの名無しさん:2005/08/12(金) 09:25:34
>>452
間違いじゃないよ(゚∀゚)
454デフォルトの名無しさん:2005/08/12(金) 09:55:13
おまん子が変数

おちん歩がポインタ

{
おまん子 小倉優子,谷亮子;
おちんぽ * 俺;

俺 = &小倉優子;
ASSERT((*俺)(スコスコ))

俺 = &谷亮子;
ASSERT((*俺)(スコスコ)) ←ここでエラー
}
455デフォルトの名無しさん:2005/08/12(金) 09:59:19
楽しいか?
456デフォルトの名無しさん:2005/08/12(金) 23:25:40
ポインタだろうが参照だろうが吐かれるコードは一緒だろうが。
アプリ屋ばっかだな。
457デフォルトの名無しさん:2005/08/13(土) 00:02:00
誰に対してのレスだ?意図も不明
458デフォルトの名無しさん:2005/08/13(土) 15:07:53
どっちでも同じってことだろう。
が、ソース上の違いが重要なのでは?
459デフォルトの名無しさん:2005/08/13(土) 19:20:00
>>458
ファーム屋にはそこがわからないんだよ
良くも悪くもアセンブラの延長としてしか
Cを使ってないからな
460デフォルトの名無しさん:2005/08/18(木) 01:08:56
C:中級言語
C++:中級言語としても使える超高級言語。
当然、基本クラス設計者は神のように下々を見渡せる必要があるが、
んなクラスは見たこと茄子(単純なのは除く)。
言うまでもなくMFCなんぞ論外。

C#標準化って何?
461デフォルトの名無しさん:2005/08/18(木) 14:16:48
高級言語の意味を理解してない馬鹿
462デフォルトの名無しさん:2005/08/18(木) 14:49:15
>>459
PCの発展や最適化技術の発達によりパフォーマンスよりもソースの可読性の方が重要視される場面が出てきたということさ
463デフォルトの名無しさん:2005/08/18(木) 15:07:11
>>461
禿同

……けど、C はかなり低級よりな高級言語だぞ
464デフォルトの名無しさん:2005/08/18(木) 16:58:16
>>462
そこでひまわりですよ
465デフォルトの名無しさん:2005/08/18(木) 22:57:33
「アセンブラめんどいから強力なマクロ作りまスタ。」が、C言語なんだから、おおむね正解。
466デフォルトの名無しさん:2005/08/18(木) 23:17:27
C言語作ったのって「UNIX移植するのめんどいから」ってのが理由じゃなかったっけ?
467デフォルトの名無しさん:2005/08/19(金) 00:25:16
そう。
動機がその程度の言語だから
いい加減な作りがあちこちにあるのは当然。
なのに開発言語としてメジャーになってしまったのが
コンピュータ界の悲劇。
468デフォルトの名無しさん:2005/08/19(金) 00:29:50
他の言語開発者みてるとたいてい理想ばかりが先走って実用性は二の次三の次なヤシばっかなのが不幸をさらに加速させたよな
469デフォルトの名無しさん:2005/08/19(金) 00:37:30
>>467
どこがいい加減なのか書いてみろよプ
470デフォルトの名無しさん:2005/08/19(金) 01:30:17
467ではないが一つあげられるのは演算子の優先順位。
471デフォルトの名無しさん:2005/08/19(金) 01:49:34
>>467-468
そりゃOSを書いてる言語だから、メジャーになるだろうよ。

Cを習得しないと、目の前のマシンにUNIXを移植することができないし、
改変することすらできないわけで、必修言語なわけですよ。
472デフォルトの名無しさん:2005/08/19(金) 01:50:57
>>470
いい加減と言うより、自分が覚えられないだけじゃアルマイカ?
473デフォルトの名無しさん:2005/08/19(金) 01:53:50
>>471
C使いの誰しもがUNIX野郎だとは思えないけどna
つか,なんでOS(ry

単にコンピュータとの親和性が高い(アセンブラに近い)という点に尽きるだろ
それだけ
474デフォルトの名無しさん:2005/08/19(金) 10:07:30
演算子の優先順位がいいかげんって、どのへんがいいかげんなんだ?プ
475デフォルトの名無しさん:2005/08/19(金) 11:01:56
>>474
i=i++;
476デフォルトの名無しさん:2005/08/19(金) 11:15:24
>>475
それは ++ の方が優先順位が高いが、単に ++ が元の値を返す性質があるだけ。

ビット演算子の優先順位が比較演算子よりも低いのはおかしい。
論理演算子が存在するのに、比較演算の結果をビット演算する用途なんてそう頻繁にはないだろうが・・・。
論理xor演算子を導入した上で、ビット演算子の優先順位は上げるべきだった。
477デフォルトの名無しさん:2005/08/19(金) 11:30:15
あとは散々外出だけど、ポインタ参照演算子は前置ではなく後置の単項演算子にすれば文法がかなりシンプルに
なるのに、前置したため話が面倒になってる。
前置の良い所はメンバポインタを記述するのに括弧がいらないことくらい。


あとC++の話になるけど、テンプレートの括弧に<T>をつかってしまったこと。
× TemplateClassA<TemplateClassB<int>>
○ TemplateClassA<TemplateClassB<int> >
            このスペースがキモイ。↑

まぁ探せばまだまだあると思うが。

根源的な話をすれば、LL(1)文法にしなかったという点で、リッチーは言語設計者としてのセンスが無い。
478デフォルトの名無しさん:2005/08/19(金) 13:11:45
関数の()の最初と最後にスペースを入れる俺にとってはそんなスペースキモくも何とも無い
てめぇの趣味だけで語ってんじゃねぇよ
479デフォルトの名無しさん:2005/08/19(金) 13:16:02
>>478
そのまま返される気がするのだが…
480デフォルトの名無しさん:2005/08/19(金) 13:20:04
文法の話と読みやすさの話を混同しないようにしよう
481デフォルトの名無しさん:2005/08/19(金) 13:25:40
>>478
関数の( )の前後はスペースの有無にかかわらずエラーにはならんが、多重テンプレートはスペース入れないとエラー。
関数はお前のような趣味をする余地があるが、テンプレートは趣味が許されない。しかもキモイ。

< や > を多用しすぎなんだよな。
a->b とか、 a-->b とか、 a>-b とか、 a--->b とか・・・
482デフォルトの名無しさん:2005/08/19(金) 13:50:33
まぁ、キモイ=いい加減
というのは成り立たない。
481はキモイ
483デフォルトの名無しさん:2005/08/19(金) 14:37:20
キモイキモイ言ってるだけかよ481
484デフォルトの名無しさん:2005/08/19(金) 14:50:04
記号の使いまわしが 気に入りません

カーニハンに謝罪を、そしてリッチーに賠償を要求しましょう
485デフォルトの名無しさん:2005/08/19(金) 15:01:32
チョンうざい
486デフォルトの名無しさん:2005/08/20(土) 07:25:42
>>475
そんな無意味なコードを書くな(w
せめて別の変数に代入すれ。
487デフォルトの名無しさん:2005/08/20(土) 08:51:37
>>481
->以外解らんのだが
488デフォルトの名無しさん:2005/08/20(土) 08:59:55
>>487
(a--) > b デクリメントと比較演算子
a > (-b) 比較演算子と単項マイナス演算子
(a--)->b デクリメントとアロー演算子
489デフォルトの名無しさん:2005/08/20(土) 09:56:52
あぁなるほど、ってデクリメントとアロー演算子とか、普通()つけるだろ・・・
490デフォルトの名無しさん:2005/08/20(土) 12:10:19
わざわざ分かりにくくて一般的でもない事例をあげて
使いにくいとほざけばいいと思ってる
491デフォルトの名無しさん:2005/08/20(土) 12:34:57
ポインタの本を10冊以上買って読んでみたけど
さっぱりわからん。
なんかこう、フィリーリングが合わない。
アセンブラはわかるのに。
たぶん同じことをやるのに何通りもの書き方があるせい。
492デフォルトの名無しさん:2005/08/20(土) 14:18:11
フィリーリングとはなんですか?
493デフォルトの名無しさん:2005/08/20(土) 14:24:23
auth!
フィーリングだったぜ。
カナ打ちだからゴメンな。
494デフォルトの名無しさん:2005/08/20(土) 16:13:10
カナ打ちだから
495デフォルトの名無しさん:2005/08/20(土) 17:48:54
>>491
お前なりにポインタについて解説してみな
そうすりゃどこがおかしいのか見えてくるから
496デフォルトの名無しさん:2005/08/20(土) 21:27:29
>>490
葉外道。いくらなんでも変換ミスったようだ
497デフォルトの名無しさん:2005/08/21(日) 01:54:11
>>491
>アセンブラはわかるのに
で、ポインタはわからんと・・・

釣られてしまつた orz
498デフォルトの名無しさん:2005/08/21(日) 01:54:54
>ポインタの本を10冊以上買って読んでみたけど
ホホゥ
499497:2005/08/21(日) 02:02:04
このスレ パスカル使い多くね?
Oberon実務で使ったことある人いるのかな?
500デフォルトの名無しさん:2005/08/22(月) 21:28:49
>>473
話の流れを嫁。

ついでに歴史の勉強もしろ。
501デフォルトの名無しさん:2005/08/22(月) 21:54:07
ということにしたいのですね?
502デフォルトの名無しさん:2005/08/22(月) 21:58:06
はい、ということにしたいのです。
503デフォルトの名無しさん:2005/08/22(月) 22:07:34
かのようなこと、某の一存では決めることができませぬ
504デフォルトの名無しさん:2005/08/22(月) 22:35:33
>>1
おかしいだのどうのこうの言っても何もならんのにな。
現実の言語仕様に黙って忠実に従うことだけを考えてきたが。
お主は、英語でも文法だの活用形だの発音だのおかしいと言ってる人物ですの?
それよりも$記号て何ですの?それとCなのに何でC++のコメント使ってますの?
505デフォルトの名無しさん:2005/08/23(火) 01:03:21
原理主義者ですか?w

俺は++でも/*使っちゃってるけど、C99では//は本則ではないのん?
(てめぇで調べろ→漏れ

/*で書いとけば無問題なのでどうでもいいか・・・
506デフォルトの名無しさん:2005/08/23(火) 01:16:27
まあ、たしかに>>1は自己中心的なナルシストだけどさ、Cで//をコメントとして用いたら、コンパイラーが怒るでしかし。
507デフォルトの名無しさん:2005/08/23(火) 01:23:59
C99から//コメントアリだよ
508デフォルトの名無しさん:2005/08/23(火) 06:36:05
俺がコメント書くと十中八九複数行だから/**/で書く
509デフォルトの名無しさん:2005/08/23(火) 09:39:58
// で書いとくと、実験中に /* */でコメントごとコメントアウトできるから
便利だ。 さらにそれをもコメントアウトするときは #ifdef 0〜#endif だ!
510デフォルトの名無しさん:2005/08/23(火) 11:13:22
>>509
#ifdef 0
でもいいけどね・・・
#if 0
のほうが
511デフォルトの名無しさん:2005/08/23(火) 15:41:46
あ、そうか>>510の方がいいな

0がすでにdefineされている可能性をわすれちたよ
512デフォルトの名無しさん:2005/08/23(火) 16:17:07
>>509,>510,>>511
おまいら、微妙に・・・
513デフォルトの名無しさん:2005/08/23(火) 16:35:04
ただしくは「#ifdef <IDENTIFIER>」か

>gcc test.c
test.c:3:8: macro names must be identifiers
514デフォルトの名無しさん:2005/08/23(火) 16:46:22
#defundefun
515デフォルトの名無しさん:2005/08/24(水) 04:46:09
Cの本質的に糞なところはポインタの文法ではない。
文字列型をサポートしないのに文字列リテラルをサポートしてしまったことだ。
この安易な機能追加による不統一感は耐え難いものがある。
516デフォルトの名無しさん:2005/08/24(水) 05:00:16
メモリ管理をしない言語っていうのも、どうかと思う。
517デフォルトの名無しさん:2005/08/24(水) 07:04:15
>>515
全然まったくそんなことないよ?
518デフォルトの名無しさん:2005/08/24(水) 10:36:32
>>515-516
VBすれば?
519デフォルトの名無しさん:2005/08/24(水) 10:38:01
>>515はわかってない。
520デフォルトの名無しさん:2005/08/24(水) 13:59:12
禿同
521デフォルトの名無しさん:2005/08/24(水) 17:49:37
C言語の欠陥は・・・整数除算と浮動小数点除算の区別がわかりにくく、明示させるのも面倒なことかな。
Pascalみたいに、別の演算子にすればよかったのに。
あと、浮動小数点から整数への自動型変換も迷惑。情報が欠落する方向へ勝手にデータを変換するな。
522デフォルトの名無しさん:2005/08/24(水) 18:06:40
>>521
Pascalをやっているとそのように思うのはもっともだけど。筋が違います。
Cは「プログラマは間違えない」という前提で設計された言語だから
523デフォルトの名無しさん:2005/08/24(水) 18:13:54
でも浮動小数点から整数への暗黙の変換は確かにどうかと思う。
524デフォルトの名無しさん:2005/08/24(水) 18:15:02
警告が出るコンパイラを使えばいいじゃない。
525デフォルトの名無しさん:2005/08/24(水) 18:32:52
>>521=523
> でも浮動小数点から整数への暗黙の変換は確かにどうかと思う。

それ逆だから。何の事言ってんだ?
526デフォルトの名無しさん:2005/08/24(水) 18:37:49
>>525
int i = 1.5;
527デフォルトの名無しさん:2005/08/24(水) 18:46:54
そりゃ暗黙の変換以前の問題
528デフォルトの名無しさん:2005/08/24(水) 18:49:14
つーか、小数の扱えないものにわざわざ小数型を持ってくるのが悪い
529デフォルトの名無しさん:2005/08/24(水) 18:51:10
>>522
「プログラマは間違えない」という前提の代償が簡便な記法になるならともかく、
整数と浮動小数点数の型変換は除算の時いちいちキャストしなくてはいけなく、
逆に記述が面倒になっているが。
530デフォルトの名無しさん:2005/08/24(水) 18:54:42
>>529
だから、んなーことない
531デフォルトの名無しさん:2005/08/24(水) 19:02:14
int m=9,n=3;
int a = m/n;
float b = (float)n/m;

いちいちキャストするの面倒だとは思わんか?
それなら、 @とかを整数除算演算子とかにしちゃって、

int m=9,n=3;
int a = m / n; // これはエラー
int a = m @ n; // これはOK
float b = n / m; // これはOK
float b = n @ m; // これはOKだが、b=0.0 となる。

とかの方がスッキリすると思わんか?
まぁ直感的に@が除算に見えない、という感覚的な問題は別として。
532デフォルトの名無しさん:2005/08/24(水) 19:20:42
だから、んなーことない

って、何言ってんのこの池沼
533デフォルトの名無しさん:2005/08/24(水) 20:00:01
池沼だからしかたがない
534デフォルトの名無しさん:2005/08/24(水) 20:15:33
Cが嫌なら使わなければいいじゃない。
535デフォルトの名無しさん:2005/08/24(水) 20:41:17
出た。オコサマの論理。
536デフォルトの名無しさん:2005/08/24(水) 20:44:13
だれも「前提の代償が簡便な記法」とは言っていないし
537デフォルトの名無しさん:2005/08/24(水) 20:47:51
int a = 1 / 3 * 3;

これが a==1 になることってありえる?
538デフォルトの名無しさん:2005/08/24(水) 20:58:52
学生の作ったバグ入り最適化コンパイラならありえるかもな
539デフォルトの名無しさん:2005/08/24(水) 21:00:37
>>538
ありがとう
おれが作ったのはバグ入り最適化コンパイラってことでFAみたいだ
540デフォルトの名無しさん:2005/08/24(水) 21:07:52
>>539
いや、藻前が作ったのは有理数型をネイティブサポートした、誰も必要としていない高性能コンパイラだ。
541デフォルトの名無しさん:2005/08/24(水) 21:28:29
確かにいらねーな。ライブラリで使えるならいいけど。
542デフォルトの名無しさん:2005/08/24(水) 21:29:56
>>537
今のコンパイラーは、最適化するから、 /3 *3 の部分が無くなるよ。
543デフォルトの名無しさん:2005/08/24(水) 21:42:29
>>537
普通の数学の決まりに則ればa==1こそ正しいんだけどな
544デフォルトの名無しさん:2005/08/24(水) 21:44:11
>>542
釣り?
545デフォルトの名無しさん:2005/08/24(水) 21:44:34
>>542
それは…つまり…
a = 1ってことですか?
546デフォルトの名無しさん:2005/08/24(水) 21:47:53
数学的には
a = 1/3*3
   1
= -----
  3*3

= 1/9
が正しい
547デフォルトの名無しさん:2005/08/24(水) 22:08:23
何この池沼546?
548デフォルトの名無しさん:2005/08/24(水) 22:28:49
>>542
いや、1 / 3は整数型同士の演算だから0にならないといけない。 
549デフォルトの名無しさん:2005/08/24(水) 22:30:04
浮動小数点でもマシンイプシロンを考慮しなくてはいけない。
550デフォルトの名無しさん:2005/08/24(水) 22:36:09
>>542
それが最適化しても a==0 になるんですちょ
実験してみれば分かる
551デフォルトの名無しさん:2005/08/24(水) 22:55:46
int a = 1 / 3 * 3;
aの値は?
(※乗除算の優先度は同じ)

(1)数学的
虚数がない限り全ての数は実数計算。
 1/3*3 = (1/3)*3 = (1*3)/3 = 3/3 = 1
(2)整数型
Cの基準どおり行われる。手前から順に計算。整数なので小数点以下は切り捨て。
int a = 1/3*3 ↓
 1/3=0.33333・・・ → 0
 0*3 = 0
a=0

もちろん、こんなことをするのはプログラマーのミスと言われても仕方がない。(意図的にやっているのでなければ)
なぜCが高級アセンブラといわれるかを分かってない発言多すぎ
552デフォルトの名無しさん:2005/08/24(水) 22:57:53
ネ(ry
553デフォルトの名無しさん:2005/08/24(水) 23:00:25
内心Cがメジャーになったのが気に入らないってのが否定派の深層心理。
554デフォルトの名無しさん:2005/08/24(水) 23:06:00
別に気に入らない訳でも否定する気も無いけど、Cにあまりにも欠陥が目立つな、とは良く思う。
少なくとも熟慮の上で設計されたエレガントさがCには感じられない。
なんとなく思いつきで作った言語って感じが否めない。
555デフォルトの名無しさん:2005/08/24(水) 23:08:41
実際、最初はUnixを書くために作ったらしいしな。
そう考えればCはアセンブラに比べれば格段にましだ。
556デフォルトの名無しさん:2005/08/24(水) 23:11:48
>>555
>実際、最初はUnixを書くために作ったらしいしな。
まだそんな話を信じている馬鹿がいたのかww
557デフォルトの名無しさん:2005/08/24(水) 23:25:32
>>554
たとえば?
558デフォルトの名無しさん:2005/08/24(水) 23:33:28
考えてみれば、分数を表現できないのがおかしいよな。
なにか数式言語をネイティブサポートすれば解決。
559デフォルトの名無しさん:2005/08/24(水) 23:34:21
構造体があるじゃない
560デフォルトの名無しさん:2005/08/24(水) 23:34:32
>>556
色んなUnixの歴史を書いた本に書かれてることなんだけど、あれは冗談だったのか・・?
561デフォルトの名無しさん:2005/08/24(水) 23:54:06
>>556
ええっ嘘なの?
コンピュータ界の歴史が変わる大事件だよ
ソースキボンヌ
562デフォルトの名無しさん:2005/08/25(木) 00:13:15
ヒント:Unixも開発段階からそう呼ばれたわけではない。
563デフォルトの名無しさん:2005/08/25(木) 00:21:00
当時はUNIXとは呼ばれていない → Maltics が頓挫したあと、まだ Unics と呼ばれていた時代か?
新規ではなく、既存のOSを改良するために開発された → 移植性を上げる為、極力アセンブラを排除するのが目的
564デフォルトの名無しさん:2005/08/25(木) 00:52:48
>>563
それは私の知識と違うなw
Malticsのアンチテーゼの意味合いで新規に開発された。最初はアセンブラが沢山。
移植性を付加するため、アセンブラ部分をCに書き換えた。
565デフォルトの名無しさん:2005/08/25(木) 01:28:35
>>563,564
×Maltics ○Multics

トリビア:
何でもできることを目指したMultics(<Multi)のアンチテーゼとして
開発されたことからUnics(<Uni)と名づけられた。
566デフォルトの名無しさん:2005/08/25(木) 02:23:17
僕は配列として使うポインタ型作るときは
int a[];
と宣言してアドレス演算子を使わないようにした。
** の重複を回避するためなら a[0] とかいうアクセスもした。

これで掛け算の * と変数の * が混在しなくて済む。
a->b とするよりも a[i].b としたほうが、
デバッグ中に何番目のデータを処理してるか、
すべてのデータを処理したかどうかがはっきり分かるようになる。

データ依存のバグが出る場合はメリットが大きいよ。
567デフォルトの名無しさん:2005/08/25(木) 05:14:07
プロセス間などのメッセージボディーのデータ内に、生のポインタ渡すのもキメエよな。
568デフォルトの名無しさん:2005/08/25(木) 05:19:23
Windows3.1に謝れ
569デフォルトの名無しさん:2005/08/25(木) 07:47:56
なんだ脳内か
570デフォルトの名無しさん:2005/08/25(木) 08:38:41
>>566
仮引数でないときにはint a[]はポインタ型にならないのだがそのときの宣言には * がいるだろ。
571デフォルトの名無しさん:2005/08/25(木) 08:41:05
>>570
そうだっけ。
そうかもね。
572デフォルトの名無しさん:2005/08/25(木) 17:27:44
ハンガリー様でいいじゃない

int iMonar ;

int *ipMonar ;
573デフォルトの名無しさん:2005/08/25(木) 17:45:00
>>572
そこpiMonar。
自己流なら気にしないでおくが。
574デフォルトの名無しさん:2005/08/25(木) 17:58:07
piMonyar
575デフォルトの名無しさん:2005/08/25(木) 18:11:04
piMomi
576デフォルトの名無しさん:2005/08/25(木) 18:36:49
>>566
別に int *aで宣言してもa[x]で使えるわ
577デフォルトの名無しさん:2005/08/26(金) 23:32:43
ttp://www.aromani.com/img/bana-/tintin.jpg
ティんティんマッサージ
578デフォルトの名無しさん:2005/08/26(金) 23:48:49
ハイハイワロスワロス
579デフォルトの名無しさん:2005/08/28(日) 01:37:57
>>1-2
吹いた
余計にややこしくしてるし
ポインタとアドレスの区別くらいしような
580デフォルトの名無しさん:2005/08/28(日) 23:14:33
定義と宣言の区別がついていないヤツ大杉。
581デフォルトの名無しさん:2005/08/29(月) 00:11:16
最近定義と宣言が区別できるようになって大喜びの>>580
582デフォルトの名無しさん:2005/08/29(月) 00:13:09
>>580の一言でハッとする>>583
583デフォルトの名無しさん:2005/08/29(月) 00:15:52
ハッ
584デフォルトの名無しさん:2005/08/29(月) 05:32:43
何この流れ。
585デフォルトの名無しさん:2005/08/29(月) 06:55:07
今時Cなんて資格取得の為にリア厨が勉強するくらいのもんだからな
586デフォルトの名無しさん:2005/08/29(月) 07:15:25
Cじゃなきゃ取れない資格って何?
587デフォルトの名無しさん:2005/08/29(月) 08:42:58
>>586
生きること
588デフォルトの名無しさん:2005/08/29(月) 13:32:20
C出来る人エキスパート最高!
な時代がきたらいいなぁ
589デフォルトの名無しさん:2005/08/29(月) 15:34:53
いやとっくに過ぎてるんですが
590デフォルトの名無しさん:2005/08/29(月) 15:39:41
Cさえあればずっとやっていける
そう思っていた時期が俺にもありました
591デフォルトの名無しさん:2005/08/29(月) 16:18:03
C言語覚えたら潰しが利くって言ってた奴でてこーい
592デフォルトの名無しさん:2005/08/29(月) 16:34:41
C++, C#, Objective-C
Perl, PHP, Java...csh(w
オレの知る限りだとこの辺りは文法が近いので乗り換え自由だと思うのだが。
593デフォルトの名無しさん:2005/08/29(月) 17:38:53
君はどの言語でもFORTRANが書けるんだね
594デフォルトの名無しさん:2005/08/29(月) 18:31:59
ほとんどの言語はC言語のライブラリの上で動いていて
現状そこら辺を隠蔽した言語はパフォーマンスの壁にぶつかっているので
C言語も多少はやっておいて損はないとおもうけどなぁ・・・
595デフォルトの名無しさん:2005/08/29(月) 20:27:47
パフォーマンスの壁…ってんなもん意識する機会なんて極わずかだよ…
596デフォルトの名無しさん:2005/08/29(月) 20:32:25
俺らゲーム製作者には重要な壁だ
597デフォルトの名無しさん:2005/08/29(月) 20:32:53
多少やるぐらいで埋まる速度差ならおまえが悪い
598デフォルトの名無しさん:2005/08/29(月) 21:38:23
>>595
ならなぜJavaがNIOというライブラリを追加したのか説明してくれ
599デフォルトの名無しさん:2005/08/30(火) 00:39:00
Cってプログラミングの基礎だからさー
Cをやってから他の言語をやると割りとすんなり覚えられる
逆に他の言語をやってからCをやってもかなりハードルが高いぞ
だいたいポインタで躓く
プログラマを語るんならCは必須だと思うな
まあもちろんCだけではだめだけどな
600デフォルトの名無しさん:2005/08/30(火) 00:40:38
C言語の習得ごときにたいそうな誇りを持ってるようだな
601デフォルトの名無しさん:2005/08/30(火) 00:45:59
ポインタなんて時代遅れ
602デフォルトの名無しさん:2005/08/30(火) 01:24:16
と、ポインタに挫折した人が申し上げます。
603デフォルトの名無しさん:2005/08/30(火) 08:42:29
どんな言語でもポインタがわからなきゃ内部でC言語の関数を使うライブラリ呼び出すときに難儀するだろうに・・・
604デフォルトの名無しさん:2005/08/30(火) 09:03:31
どっちかっつーと関数を作る時に混乱するんじゃね?
呼び出す時なんて&つければいいだけじゃん
605デフォルトの名無しさん:2005/08/30(火) 14:56:42
>>599
俺はポインタで躓いたあと、
スクリプト言語と浮気しているうちにふっとポインタの使いかたが分かるようになった
606デフォルトの名無しさん:2005/08/30(火) 15:17:00
浮気者!
    _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´)
607デフォルトの名無しさん:2005/08/30(火) 21:36:50
>>605
スクラブと言語ってポインタの概念ないじゃん
どうしてふっとわかったのか教えて
608デフォルトの名無しさん:2005/08/30(火) 21:41:02
>>605
文尾が不完全だぞ
× 分かるようになった
○ 分かるようになったつもりだ
609デフォルトの名無しさん:2005/08/30(火) 21:43:38
>>604
ヒント:キャスト
610デフォルトの名無しさん:2005/09/04(日) 23:38:24
>>601
CPU,MMUの動作原理を知っていての発言なら許す。
611デフォルトの名無しさん:2005/09/08(木) 02:23:53
でもCPU(x86系)だと、C言語にあわせた新設命令とかアドレッシングとか追加されたよね。
高級言語を効率的にコンパイル・実行できるようにマシン語を追加するなんて逆転現象だ。
612デフォルトの名無しさん:2005/09/08(木) 05:28:17
>>611
CISCだからね。
っつうか、Cの文法(++とか)は、68系のCPU(MPU?)に最適化された言語なんだよなぁ・・・。
613デフォルトの名無しさん:2005/09/08(木) 11:03:32
68系?
86系じゃのぉて?
614デフォルトの名無しさん:2005/09/08(木) 11:03:49
Cの出自を知っている人間なら釣られない
615デフォルトの名無しさん:2005/09/08(木) 14:51:27
>>612
INC命令がADD命令より高速だったのは、x86だけじゃなかったっけ?
Pentium系のμコードとかout of orderとかでこれは崩れたわけだけど。
616デフォルトの名無しさん:2005/09/08(木) 16:23:29
>>615
Z80と68kに限った話ではincの方が速い
Z80 INC A
68k addq.l #1,d0

>>612>>615のつながりが良くわからないけど、
昔のヤツはどれもincが速いんでないかい?と思った。
617デフォルトの名無しさん:2005/09/08(木) 16:49:28
MIPSとかに代表されるRISC CPUにはそもそもINC命令はないし、
基本的には命令に速度差はないね。
618デフォルトの名無しさん:2005/09/08(木) 17:03:22
つーか、マイクロプロセッサ以前からCはあるわけだが。
619デフォルトの名無しさん:2005/09/08(木) 20:07:28
>>615
68kに(a0)+とか-(a0)とかあるから>>612は書いたんじゃないかと…。
620デフォルトの名無しさん:2005/09/08(木) 22:50:48
逆だね。68KがCエンジンを目指したんだな。
いい石だね。Big endianness(綴り間違ってたらすまん)は最低だけど。
621デフォルトの名無しさん:2005/09/08(木) 23:26:02
綴りスゲー間違ってる(読みでも)けどそれは置いといて
なんで?
LANなんか伝送路はすべてそうなってるじゃん。
逆にx86の方がサイテー。(いちいちひっくり返さなきゃならん)
622デフォルトの名無しさん:2005/09/08(木) 23:27:26
エンディアン論争を始める気か
623デフォルトの名無しさん:2005/09/08(木) 23:34:50
エンディアン嘘つかない
624デフォルトの名無しさん:2005/09/08(木) 23:45:23
アセンブラ使いはリトルエンディアン支持
高級言語使いはビックエンディアン支持
が多いようだ
625デフォルトの名無しさん:2005/09/08(木) 23:49:45
両方から選べるアレでいいじゃん。アレ。
626デフォルトの名無しさん:2005/09/08(木) 23:57:49
>>624
そう?
俺アセンブラ使うけど、出来りゃビッグエンディアンの方が良いと思ってるよ。
でもZ80から始まってx86系使うことが殆ど。MIPS,ARMとかも使うけど。
どういう理由なのかな?
627デフォルトの名無しさん:2005/09/09(金) 00:03:57
>>626
たとえば16bitのデータを8bitのデータに変換する場合にビックエンディアンだとシフトする必要があるとか
628デフォルトの名無しさん:2005/09/09(金) 00:19:50
>>627
そんなことに不便は覚えんけど?
リトルエンディアンでも上位8bitは0にしなきゃいけないわけだし。
(シフト命令とAND命令とそんなに差があるか?)
そんなことより外とのインターフェースをとろうとすると
x86はいやらしいぞ。RS232Cの頃からLANまで結構バグった。
(って言ってもすぐ判明する単純バグだからデバッグ初期ですぐ潰せたけどね)
629デフォルトの名無しさん:2005/09/09(金) 00:26:10
エンディアンがらみのバグが出るコードなんか書いた事ないなあ
どんなアホなコード書けばエンディアンのバグ出るんだか教えてくれ
630デフォルトの名無しさん:2005/09/09(金) 00:28:54
例えば、
先頭にパケット長が入って、それ以降データ。
とかで思わずそのままWORDとかDWORDとかで計算したまま入れちゃうみたいな感じ。
(もちろんすぐ気づくよ)
631デフォルトの名無しさん:2005/09/09(金) 00:54:24
俺の頭の中で、小さいインディアンと大きいインディアンが闘ってるのはなぜだ。
632デフォルトの名無しさん:2005/09/09(金) 00:56:43
x86系は8/16bitアクセスに優れてるけど、CPUの歴史と特性のせいだな。
633デフォルトの名無しさん:2005/09/09(金) 01:27:48
>>629
文字扱う関数がなぜか文字データ型をint
634デフォルトの名無しさん:2005/09/09(金) 10:29:32
>>629
char *p = xxxx;
short s;
long l;
s = *((short *)p)++;
l = *((long *)p)++;
ダメダメだとわかっていてもつい。
635デフォルトの名無しさん:2005/09/09(金) 17:15:31
>>634
何を意図しているんだ?
636デフォルトの名無しさん:2005/09/09(金) 17:53:20
>>635
バイナリのヘッダ解析じゃね?
637デフォルトの名無しさん:2005/09/09(金) 23:14:37
つーか各方面で不統一だから混乱するだけの話ジャマイカ
俺達人間インディアンだから仕方ないさ
638デフォルトの名無しさん:2005/09/10(土) 00:45:35
一般ファイルや通信プロトコル、その他特にCPUアーキテクチャに無関係なフォーマットでは
バイナリは、ビッグエンディアンに統一されてると思うがなあ。
639デフォルトの名無しさん:2005/09/10(土) 01:58:32
>>638
そうだな。
問題視されるのは、あまりにも無作法なコーディングが氾濫しているって事だろうな。
640デフォルトの名無しさん:2005/09/10(土) 01:59:50
多バイトコード文字を正しく扱えない西欧由来のコードもなんだかなーだけどさw
641名無しさん@そうだ選挙に行こう:2005/09/11(日) 04:07:49
PDP-11
642名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:08:47
通信がビッグエンディアンなのは、
TCP/IPが開発された時に使われていたコンピュータがビッグエンディアンだった
というだけのことだと思うよ。

643名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:57:56
>638
>642に同意
そういう環境(ワークステーションとかサーバーとか)で多く使われているCPUが
ビッグエンディアンで、開発者自体がそれに慣れていたからだと思う
ただ歴史的事情から"正統"といわれてもなぁ。
ttp://www.atmarkit.co.jp/aig/01xml/endian.html
ttp://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=DVXA,DVXA:2005-16,DVXA:ja&q=%E3%83%93%E3%83%83%E3%82%B0%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3+CPU

リトルエンディアン
8,16,32,64といったビットの桁拡張をアドレスに沿って伸ばせるので(過去のCPUとの)互換性を取りやすい
バイナリ上位互換の拡張を繰り返しているCPUであることが多いため命令長が固定できない。
・x86系(Pentium,Athlon,他)
ビッグエンディアン
数値の並びを感覚的に出来る(上の桁を先に書く、という自然の感覚。最初のころはマシン語で直接書いていたことから考えれば・・・)
命令長を固定できる。(こっちの方がエレガント)
・モトローラ系(MC68k,PowerPC)
・SPARC
バイエンディアン(ビッグ/リトル切り替え可能)
・MIPS系(R3000,R5900(PS2のCPU、EEの俗称),R10000)
644名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:41:17
エンディアン論争はやめーい
645名無しさん@そうだ選挙に行こう:2005/09/11(日) 20:55:42
one little two little three little endian 〜♪
646名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:18:49
>>643
ビッグエンディアンかどうかと命令長が固定かどうかは無関係じゃね?
647名無しさん@そうだ選挙に行こう:2005/09/11(日) 21:39:06
つまり要約するとリトルエンディアンはダメダメで
ビッグエンディアンは素晴らしいって事だよね?
648名無しさん@そうだ選挙に行こう:2005/09/11(日) 22:46:35
つか、パラメータの類を通信する時に、数値部分をバイナリで送るってプロトコルなんてあるのか?
最近の通信プロトコルは、アスキーテキストが普通だと思ったが・・・。
649デフォルトの名無しさん:2005/09/11(日) 23:19:10
>>648
いっぱいある。
650デフォルトの名無しさん:2005/09/11(日) 23:51:38
>648
それはOSI階層モデルで言うところのレイヤーが全然違うのだが。
ここで話が出ているのはTCP/IPでネットワーク層及びトランスポート層

アスキーテキストがまともにまともに扱えるのはセッション層以上じゃないか?

Ethernet(Physical)->EthernetProtocol(DataLink)->IP(Network)->TCP(Transport)-> //ここまでバイナリ
HTTP(Session)->HTML,MIME(Presentation)->IE(Application) //こっちはテキスト可
651デフォルトの名無しさん:2005/09/12(月) 01:05:44
>>648
データ通信またはデータ通信で機器制御するソフト作ったことあるのか?
HTTPみたいな汎用なやつじゃなくって?
652デフォルトの名無しさん:2005/09/12(月) 14:06:25
>>648
お前さんはTCP/IPも使ってないのか。
653デフォルトの名無しさん:2005/09/13(火) 22:47:24
アプリ層でもバイナリデータなんていっぱいあるじゃん。
大体、アプリでフォーマットを決めるんで、それこそ無数にある。
654デフォルトの名無しさん:2005/09/14(水) 06:12:29
SOAP以外は全部糞
655デフォルトの名無しさん:2005/09/14(水) 07:18:13
>>654
禿堂
656デフォルトの名無しさん:2005/09/14(水) 09:22:58
DCOMは?
657デフォルトの名無しさん:2005/09/15(木) 23:55:58
658デフォルトの名無しさん:2005/09/16(金) 07:15:08
DQNは?
659デフォルトの名無しさん:2005/09/16(金) 11:29:05
目撃
660デフォルトの名無しさん:2005/09/16(金) 14:55:24
>>1
単純な変数だけ考えると若干不自然に感じるかも知れないが
 ある構造体の宣言 その構造体変数,その構造体変数へのポインタ;
って一箇所にまとめて書けるメリットは理解できるだろ?
661デフォルトの名無しさん:2005/09/16(金) 15:35:33
>>660
何を今更。
つーか、あんたは>1を理解できてないだろ。
662デフォルトの名無しさん:2005/09/16(金) 19:08:44
そもそも>1の書き方もおかしいんだよ。
int* p ; // 「int値を持つポインタ変数」の宣言
p ; // 「int値を持つポインタ変数」の内容(=アドレス)
*p ; // 「int値を持つポインタ変数」の内容が指し示す場所の値

int n ; // 「int型変数」の宣言
n ; // 「int型変数」の値
&n ; // 「int型変数」が格納されている場所へのポインタ

ポインタ宣言を「int *p ;」と書くからおかしく感じるだけで、「int* p ;」と書けば
「int値を持つポインタ変数」である[p]の宣言,という自然な解釈ができる。
C++ではこの記法を標準としているくらい。

ちなみに上の記法からすれば↓はおかしいことになる。そうするならポインタ宣言は不要。
int$ p ; // 「int値を持つポインタ変数」の宣言
$p ; // 「int値を持つポインタ変数」の内容(=アドレス)
p ; // 「int値を持つポインタ変数」の内容が指し示す場所の値

int n ; //「int型変数」の宣言
n ; // 「int型変数」の値
$n ; // 「int型変数」が格納されている場所へのポインタ
663デフォルトの名無しさん:2005/09/16(金) 20:30:29
ところがだ、
int* a, b ;
と書くとどーなるかな?

typedef int* int_ptr ;
int_ptr a, b ;
とやらないと、大変なことになるよ。
664デフォルトの名無しさん:2005/09/16(金) 22:50:26
>>662
int *p;という書き方は式内で*pと書くとint型になると読めるという利点がある。
665デフォルトの名無しさん:2005/09/16(金) 23:23:07
俺は一つの宣言に一つの変数で書くからint* a, b;なんて問題は起こらない
666662:2005/09/17(土) 11:10:50
>663
それは前から知ってる。だからポインタ宣言は1つずつ書くようにしてる。
>664
それ誤解の原因だから。関数宣言、定義の引数、戻値がその形式で書かれて過去に迷ったことが何度あったことか。

char *strcpy(char *s1,char *s2)

char* strcpy(char* s1,char* s2)
なら、下の方が自然だと思う。
667デフォルトの名無しさん:2005/09/17(土) 11:43:43
そんなに迷う宣言はtypedefしろよ。
668デフォルトの名無しさん:2005/09/17(土) 11:56:56
わかった、Javaを使えばいいんだ。
669デフォルトの名無しさん:2005/09/17(土) 12:06:27
それは逃げているだけ。
670デフォルトの名無しさん:2005/09/17(土) 14:12:12
>>666
俺は上の形式を使ってるな。
その方が自然に感じるので。
まあどっちにしろ、言語がその表記を許してるんだから好き好きで良いと思うんだが。
671デフォルトの名無しさん:2005/09/17(土) 14:30:20
俺は、
ポインタ変数とtypedefした型変数とは別だという認識になるな。
(実際には同じ動作でも)

従って
int *p;
int **p;
int ***p;

int_ptr p;
int_ptr *p;
int_ptr **p;
という書き方になっちゃう。
672デフォルトの名無しさん:2005/09/17(土) 14:33:18
>>671
Windowsのポインタでは型名にPが入る。
ポインタのポインタならPPとなる。
673デフォルトの名無しさん:2005/09/17(土) 14:37:32
>>672
(´ ,_ゝ`)
674デフォルトの名無しさん:2005/09/17(土) 14:38:25
int *p;
は、あくまでint型の型定義であって、*pとか**pとかはpの属性って感じるなあ。

>>672
バカ?
675デフォルトの名無しさん:2005/09/17(土) 15:32:40
int *p;
int* p;
漏れはどっちでもいいと思うが、一方が「自然」で他方が「不自然」と感じる人もいる。
「不自然」な記法が許されている事が「文法がおかしい」の根拠になるんでないの?
676デフォルトの名無しさん:2005/09/17(土) 16:24:56
Pascalみたく、変数宣言で識別子と型名の間に区切り文字を入れるかい?
677デフォルトの名無しさん:2005/09/17(土) 16:26:13
全部参照にすればいいんだよ
int n = new Int(1);
678デフォルトの名無しさん:2005/09/18(日) 03:46:33
型宣言を根本的に誤解している連中が集う集会があると聞いてやって来ましたが、もうお開きでしたか・・・。
679デフォルトの名無しさん:2005/09/18(日) 04:44:57
>>674
オマエこそ馬鹿だろ。
ポインタの型なんか関数に渡してしまえばどんな型にでもされちゃうのに意味ないだろ。

型に無関係に関数組めるのがポインタとキャストのいいところなのに、
そういうプログラム作ったことないんだろうな。
680デフォルトの名無しさん:2005/09/18(日) 04:55:11
int *p でも int* p でもなくて int * p と書けばいいじゃない。
681デフォルトの名無しさん:2005/09/18(日) 07:39:37
>型名にPが入る
これってつまりは
int_ptr
ってのはダメで
pInt
にしろってことを言ってるんだよね?
それと今議論してるのとどういう関係があるのかなあ?
それがわからんし、
さらに>>679がそれの何処に突っ込んでバカ返しをしてるのかも
さっぱりわからん俺ってきっとバカなんだろうな。
682デフォルトの名無しさん:2005/09/18(日) 07:54:33
すまん。上のは>>679に対するレスで、
>型名にPが入る
ってのは、>>672が言った言葉。
さらに、int_ptrってのは別に>>671が言ったってわけじゃなくて
その前の>>663が言った言葉を受けていると思う。

>型に無関係に関数組めるのがポインタとキャストのいいところなのに
これも論点が完全にズレまくってる言葉だよなあ?
いったいこれから int* p;なのかint *p;なのか、はたまたどっちでも良いのか、
どっちもダメなのか全然導き出せないや。

俺の認識
int*p; //これはint型の定義
int**pp; //これだってint型の定義
int_ptr n; //これはint_ptr型の定義であり、上のint*p;とはまったく無関係

したがって代入は
n = (int_ptr)p;
p=(int*)n;
とcast変換が必要

こういう感じ方だと
int *p;
の方が自然だと感じる。
683デフォルトの名無しさん:2005/09/18(日) 08:13:26
>>681
ばかじゃねーの?

int_ptr が * を書かないために使うのなら、
int_ptr* なんて宣言したら意味がなくなるだろと言ってるんだよ。

せめてint_ptrptr くらい書いてくれよと。
その程度のことも読み取れないのにSEになんて・・・・・
あ、ここは死ぬまでコーディングするスレだっけ。

>>682
>>型に無関係に関数組めるのがポインタとキャストのいいところなのに
>これも論点が完全にズレまくってる言葉だよなあ?

int *ip;
long *lp;

ip は intで lpはlongという認識らしいが、変数宣言したスコープ内だけの話だから、
同じ関数に渡せば二つは同一だと言いたかったんだが。
684デフォルトの名無しさん:2005/09/18(日) 08:40:02
( ゚д゚)ポカーン
685662:2005/09/18(日) 09:49:54
自分が "型名"+'*' "変数名" に拘るのは、変数でやり取りされている内容、つまりあくまでポインタはアドレスをやりとりするもの
という認識だから。下のレスと合わせてアセンブラの感覚で使っているということでもある。

char *strcpy(char *s1,char *s2); //これだと”*変数名”で値渡しに見えなくもないので慣れないと判別しにくい
char* strcpy(char* s1,char* s2); //これなら"変数名"でアドレス渡しであることが判りやすい

typedef int* pInt;
int *pI_a; //int型の"*pI_a"に見えなくもない
int* pI_b; //int値を指すポインタの"pI_b"
pInt pI_c; //pInt型の"pI_c"で、上2つとは別の型。アドレス渡しを強く意識しないなら値渡しみたいに見えて良いのかもしれない。

>679 >683
自分もキャストはよく使うけど、使いすぎて型宣言の意味がなくなるとデバッグしにくくないか?
(だから自分は void* と char* 位しか使わない)
ついでに関数のプロトタイプ宣言の意味まで無くしてどうするんだよ。
(引数がvoid*型で宣言されてるなら確かにそうなんだけど)
686デフォルトの名無しさん:2005/09/18(日) 10:03:32
>>685
>ついでに関数のプロトタイプ宣言の意味まで無くしてどうするんだよ。

なんでそんな風に思うか分からないね。


>値渡しに見えなくもないので

宣言時と使用時はまったく違うわけで、
使用時に勘違いしなければいいわけで。
687デフォルトの名無しさん:2005/09/18(日) 10:09:29
アドレスの値なんてものを扱えるってのは
もはや低級言語なんだよ。ポインターなんて使わず
リファレンスを使おうぜ。
っま、低級な言語ほど実行速度が速いのは認めてやるぜ!
688デフォルトの名無しさん:2005/09/18(日) 13:17:20
一回でも自分で言語を設計してみるとCのうまさが理解できるかも
式(実行文)と宣言とで同じ表現が使えるとか
ポインタ型を別途用意する必要がないとか
PL/I辺りと比べるとその差がはっきりする
見事としかいいようがない
689デフォルトの名無しさん:2005/09/18(日) 22:53:52
>>682
> int*p; //これはint型の定義
ええーっ

型とは何か? という話になるけどさ、

自分の理解では、
たとえば
int* p ;
と宣言した時に、スタックに割り当てられた領域に入れることができるもの

ということだから、
int* p ;
の型が何かと聞かれたら、ポインタ、だと言う。
どういったポインタなのかと聞かれれば、intの変数を指すのに使うポインタだと言う。
690デフォルトの名無しさん:2005/09/18(日) 22:57:19
「intの変数を指すのに使うポインタ」 が型の名前だ
691デフォルトの名無しさん:2005/09/18(日) 23:23:33
なんか一人だけとんでもなくズレた奴が混じってるな。
本人がマジにそれに気づいて無いだけに不憫だ。
692デフォルトの名無しさん:2005/09/18(日) 23:27:47
まあ要は動きゃいいのさ。
Cはプログラマの手抜き・知識不足を
かなり許容してくれる素敵な言語だ。
693デフォルトの名無しさん:2005/09/18(日) 23:38:20
>>682
>したがって代入は 
>n = (int_ptr)p; 
>p=(int*)n; 
>とcast変換が必要 

ごめん。キャスト無しで gcc に噛ませたけどワーニングすら出なかった

そういえば 「 typedef int  *int_ptr; 」 とは書くけど 「 typedef int*  int_ptr; 」 と書くのはあまり見ない気がする
「 typedef struct tagStruct { /**/ } STRUCT, *LPSTRUCT; 」 に見慣れているから錯覚しているだけか?
694デフォルトの名無しさん:2005/09/18(日) 23:44:36
うえ〜ん。
俺、
LPCSTR *
とか使ってるよ。
これは、きっとLPCSTRSTRとしなきゃならんのだろうな。
695デフォルトの名無しさん:2005/09/18(日) 23:59:44
LPCSTRSTR -> LPPCSTRだろが。
696デフォルトの名無しさん:2005/09/19(月) 00:03:01
>692
逆。手抜き・知識不足によるバグが出やすく、デバッグしにくい言語。
ポインタ使ってもアセンブラよりはマシという程度で、自動GCはしない、
スタックオーバーフロー監視機能も実行ファイルには付かない。
メモリ管理も甘いのでOS側で管理していないとバグった時に危険。

>693
mingwでこれ通したけどエラーは特に無し。
#include <stdio.h>
#include <windows.h>
typedef char* lpChar;
int main(int argc,char* argv[],char* envstr[])
{
LPSTR lp_a;lpChar lp_b;char* lp_c="test1test2test3";
lp_a=lp_b=lp_c;
printf("%s,%s,%s",lp_a,lp_b,lp_c);
return(0);
}
697693:2005/09/19(月) 00:05:50
あ、682 と 693 は別人なんでよろしく
698デフォルトの名無しさん:2005/09/19(月) 03:13:22
>>696
GCなんて必要ないって。
メモリが歯抜けになるのは、メモリ管理のライブラリがお粗末なのさ。

スタックオーバーフローが検出されないのはOSがしょぼいから。
Windowsならちゃんと例外になるよ。
699デフォルトの名無しさん:2005/09/19(月) 04:10:55
メモリ管理ってのは
本来アクセスしちゃいけないアドレスに簡単にアクセスできちゃう(ポインタ)ってことでは?

また、スタックチェックはWindowsが行うわけじゃなくて
スタックチェックライブラリがリンクされるかどうかなので
コンパイルオプションしだい。
それに例外はC言語じゃなくてC++言語だし。
700698:2005/09/19(月) 07:47:26
メモリ管理というのは、mallocとかnewとかで割り当てられるメモリの管理ね。

GCしたところで、
> 本来アクセスしちゃいけないアドレスに簡単にアクセスできちゃう
ことは防げないけどね。

それにC/C++でもGCはできる。
言語が強制するのではなく、ユーザが自由にやればいいんだよ。


スタックオーバーフローはOSが行ってるよ。
スタックオーバーフローすると、そういう例外が出るから。

> スタックチェックライブラリがリンクされるかどうかなので
という話は、スタックオーバーフローではなくて、バッファオーバーランでしょ?

WindowsでOSが出す例外は、正式名称は「構造化例外処理」というもので、
CやC++などの言語とは関係なく、OSの機能として備わっているものですよ。
701デフォルトの名無しさん:2005/09/20(火) 02:56:49
俺はどっちかというと
int *p ;
ではなく
int* p ;
と考えるといいと思うんだが・・・・
702デフォルトの名無しさん:2005/09/20(火) 04:09:20
だからさ、なんで型宣言を、部分で見ようとするのかな?
ファンクション型宣言とか使えない奴らなのかな?
703デフォルトの名無しさん:2005/09/20(火) 04:33:25
関数ポインタもtypedefします。
704デフォルトの名無しさん:2005/09/20(火) 10:15:16
>>701
おれは int *p と考えないと脳がパンクしちゃうので。
int a,*b とあるとき、 aと*bは同じ意味だし。
でも、(int*)&a と b が同じという考えも納得はする。
となると、まあ宗教だなこりゃ。
705デフォルトの名無しさん:2005/09/20(火) 10:20:42
>>704
あんたが正しい


typedef のときは int* 型だし、
通常宣言時は int *i; だし、
cast時は (int*) というのが正しい。

これは演算の優先順位とかと同じ考えかただ。
706デフォルトの名無しさん:2005/09/20(火) 11:19:45
キャストはなぜか (int *) で統一してますが何か
707デフォルトの名無しさん:2005/09/20(火) 12:00:05
>>706
ああ、そうそう。
スペース開けたほうが見やすくていいんだった。
typedefもcastもポインタ型なのがはっきりしてるから。

ただ、通常宣言時だけ、適用対象が特定変数だから、
変数に対してつける意味で変数の前につけるんだ。
708デフォルトの名無しさん:2005/09/20(火) 17:49:54
おまいらがそんなこと言うんで、
俺のソースには int *p;とint* p;が混在しちゃってるじゃないか。
709デフォルトの名無しさん:2005/09/20(火) 18:00:35
じゃあ、せっかくだからint * p;も入れよう
710デフォルトの名無しさん:2005/09/20(火) 18:23:50
× cast時は (int*) というのが正しい。
○ cast時は (int *) というのがみやすくてよい。
711デフォルトの名無しさん:2005/09/20(火) 18:26:55
◎どうでもいい
712デフォルトの名無しさん:2005/09/21(水) 00:02:56
文法的に可能な限り、改行せずに書いたら、悲惨なことになるでしょ。

それと同じように、文法的にはどうでもよくても、コーディング上はどうでもよくないの!
713デフォルトの名無しさん:2005/09/21(水) 00:12:09
たかがスペース1個に何をガタガタ言ってるんだ?
改行と違って、キャスト式の内部の空白1個の有無で、
極度に読みにくくなるわけでもないだろ?
その程度ならどうでもいいよ。
714デフォルトの名無しさん:2005/09/21(水) 00:19:20
>>712 自分が良いと思う方を使いなさい
>>713 同意
715デフォルトの名無しさん:2005/09/21(水) 00:26:04
ただ、プロジェクト内では統一したいよな
オレコーディング規約でもなんでもいいから統一すべし
検索するときに (int *)と(int*)とが混在してると
たったコレだけのことに性器表現を使う羽目になり
おにんにんがおっきおっきしちゃうのぉおお
716デフォルトの名無しさん:2005/09/21(水) 07:41:17
>>715
インチキ臭い理由付けだな。
int*で検索するよりも、変数・関数名で検索しないか?
717デフォルトの名無しさん:2005/09/21(水) 07:46:45
そこで_castで検索できるC++キャストですよ。
718デフォルトの名無しさん:2005/09/21(水) 08:54:05
>>715
”(int”とか”*)”で検索すればいいやん。

>極度に読みにくくなるわけでもないだろ?
読みにくいよ
スペースの有無で探せば眺めるだけでいいから
作業効率がぜんぜん違う。
719デフォルトの名無しさん:2005/09/21(水) 10:11:07
>>718
それじゃ他のキャストや関数と間違えちゃうでしょ
720デフォルトの名無しさん:2005/09/21(水) 11:00:56
正規表現を使う面倒を避けるためだけに
規約を追加するというのは正しいとは思えない
721デフォルトの名無しさん:2005/09/21(水) 13:39:02
括弧がネストしたり、式が長かったりしたら(int*)とスペースを入れないときもあるし、
間違って(int *)とスペース2つ入ってる場合も考えられるし、
検索するなら正規表現でやっぱやるだろ。
手間なんて殆ど変わらんじゃんか。
722デフォルトの名無しさん:2005/09/21(水) 18:46:27
ちょっと眺めてみて、
俺的にはこのスレあぼ〜ん対象でした
さよなら
723デフォルトの名無しさん:2005/09/21(水) 22:37:12
世界が平和になるおまじない

#define ptr(type) type*

/* examples */
ptr(int) pointerToInt;
int justInt;
724デフォルトの名無しさん:2005/09/22(木) 00:23:11
悪魔だな。

代わりに魂を差し出せ、と?
725デフォルトの名無しさん:2005/09/22(木) 01:31:05
悪くない。
726デフォルトの名無しさん:2005/09/22(木) 01:45:13
defineがそれじゃちとまずいだろ。
自分の意図しない動作が起きたって知らないぞ。
727デフォルトの名無しさん:2005/09/22(木) 01:46:56
ptr<int> の方が良いのかねぇ
728デフォルトの名無しさん:2005/09/22(木) 02:10:18
defineってスペースは考慮してくれるのか?
729デフォルトの名無しさん:2005/09/22(木) 07:08:37
基本的にスペースは無視だろ?
730デフォルトの名無しさん:2005/09/22(木) 07:20:18
define って、単なる文字列置換でしょ?
731デフォルトの名無しさん:2005/09/22(木) 12:27:32
#define USE_POINTR(type) typedef type *ptr_ ## type ## _t;
#define USE_ARRAY(type, size) typedef type array_ ## type ## _t[size];
#define USE_FUNCTION(type, name, ...) typedef type func_ ## type ## _ ## name ## _t(__VA_ARGS__);

USE_FUNCTION(void, sig, int);
USE_POINTER(func_void_sig_t);
ptr_func_void_sig_t signal(int, ptr_func_void_sig_t);
732デフォルトの名無しさん:2005/09/25(日) 11:39:12
このスレ面白すぎ。
733デフォルトの名無しさん:2005/09/25(日) 11:48:28
C言語の場合
int*f;
int* f;
int *f;
は、おなじ?
734デフォルトの名無しさん:2005/09/25(日) 11:55:00
アセンブラのソースに落して比較すりゃいーじゃん。
つか、それくらいやれ。
735デフォルトの名無しさん:2005/09/25(日) 11:56:36
わざわざんなことするかバカ
736デフォルトの名無しさん:2005/09/25(日) 12:02:01
>>733
同じだよ
737デフォルトの名無しさん:2005/09/25(日) 12:04:46
>>734
文句言うのに2行
答えるのは1行

どちらが楽か自分で考えれよ
738デフォルトの名無しさん:2005/09/25(日) 12:06:10
いま>>734の髪の毛が一本抜け落ちました

          〜
739デフォルトの名無しさん:2005/09/25(日) 12:37:10
>>737
安易に教えて君プログラマを増殖させると実生活で困る局面が多いからなぁ。
どっちが楽かって考えるとねぇ…一行とか二行とかの問題じゃないと思う。
740デフォルトの名無しさん:2005/09/26(月) 00:18:27
>>733
C及びCライクな文法を持つ大抵の言語は、トークンやシンボル境界のスペースはあってもなくてもOK。

例外としては、テンプレートクラスが入れ子になっている時の閉じ括弧くらいかな。
T1<T2> > // ←これ
スペース入れないとビットシフトになってしまう。
741デフォルトの名無しさん:2005/09/26(月) 00:20:53
int* a, b;  // a, b の型は int
int *a, b;  // *a, b の型は int
742デフォルトの名無しさん:2005/09/26(月) 02:03:22
ハァ?
743デフォルトの名無しさん:2005/09/26(月) 02:22:59
わるい。とりあえず自分が頭悪いということを理解した。
744デフォルトの名無しさん:2005/09/26(月) 21:42:32
>>740
a++ +b
a+ ++b
a+++b
どれだ?
745デフォルトの名無しさん:2005/09/26(月) 21:44:25
a/ *b
とかも
746デフォルトの名無しさん:2005/09/30(金) 21:56:08
なんて参考にならないスレだここわ!
747デフォルトの名無しさん:2005/09/30(金) 22:06:46
いえいえ、とても参考になりますよ
748デフォルトの名無しさん:2005/10/01(土) 00:25:06
嘘ばっかり言われて参考にはならにー
749デフォルトの名無しさん:2005/10/01(土) 04:06:32
嘘とわかる時点ですでにそれは嘘ではないんだ。
ほんとうの嘘は、誰にもそれが嘘かどうかなんてわからないんだ。
だから嘘をつかない人がいたとしても、その人が本当に嘘をついていないかは
750デフォルトの名無しさん:2005/10/01(土) 04:07:51
まるっとお見通しだ!
751名無しさん@お腹いっぱい。:2005/10/02(日) 04:00:34
>>715
つ\(int *\*\)
752デフォルトの名無しさん:2005/10/02(日) 04:22:31
Cのポインタ周りを設計した香具師、ちょっと出てこい。
俺はこれでプログラマになり損ねて今はフリーター。
狂った人生をどうしてくれる。
753デフォルトの名無しさん:2005/10/02(日) 06:12:21
>>752
呼んだかね?
私が君の質問に答えよう。
ただし! 1回だけだ。
754デフォルトの名無しさん:2005/10/02(日) 06:18:13
>>753
彼女ができるようになるにはどうしたらいいの?
755デフォルトの名無しさん:2005/10/02(日) 18:03:58
>>752
良かったね。

ポインタごときの低いハードルを越えられないようなら、
その先のもっともっと高いハードルの数々は無理でしょう。
早めに軌道修正できて良かったと感謝すべきだろう。
756デフォルトの名無しさん:2005/10/02(日) 18:31:25
もっと深い事情がありそうだ
757デフォルトの名無しさん:2005/10/02(日) 18:52:01
>>754
考え方を変えよう、君が彼女になればいい
さあ、今から二丁目に行って来よう
758デフォルトの名無しさん:2005/10/02(日) 20:56:02
ウホッ
759デフォルトの名無しさん:2005/10/02(日) 21:48:26
>>758
ウホッ じゃないよ。馬鹿だな。いいか、お釜とゲイはぜんっぜん違うんだよ。
お釜は自分が女性でありたいと願うが、ゲイは男として男が好きなんだよ。
760デフォルトの名無しさん:2005/10/02(日) 21:54:19
何こいつw
761デフォルトの名無しさん:2005/10/02(日) 23:52:57
>>760
「何こいつw」 じゃないわよ! あんたまであたしを馬鹿にする気!?
そうやって人を見下すようだからいつまで経っても独り身なのよ!!
762デフォルトの名無しさん:2005/10/04(火) 11:35:12
僕には愛するミギーがいますから。。。
763デフォルトの名無しさん:2005/10/05(水) 00:55:33
で? スレタイとは全く違う方向だが??
764デフォルトの名無しさん:2005/10/05(水) 06:11:49
そもそもどうでもいいスレ
765デフォルトの名無しさん:2005/10/05(水) 11:11:51
どうりでsage進行・・・
766デフォルトの名無しさん:2005/10/06(木) 19:43:37
よし、ミギーが彼女なやつは手を挙げろ!
767デフォルトの名無しさん:2005/10/06(木) 20:02:00
俺はヒダリーヌ派なので…
768デフォルトの名無しさん:2005/10/07(金) 04:08:26
俺はミギーもヒダリーヌもどっちでも。でも本命はヒダリーヌかな
769デフォルトの名無しさん:2005/10/07(金) 14:03:46
>>768
あたしの他にもいい人がいたのね
その人どこにいるのよ、呪ってやる
770デフォルトの名無しさん:2005/10/07(金) 22:09:20
お口の恋人ロッテ
771デフォルトの名無しさん:2005/10/07(金) 23:53:00
こすり付ける派の彼女は誰ですか?
772デフォルトの名無しさん:2005/10/07(金) 23:55:16
滝真倉さん
773デフォルトの名無しさん:2005/10/08(土) 00:36:03
奥地の恋人ロッテ?
774デフォルトの名無しさん:2005/10/08(土) 00:39:39
いくら体が柔らかいったって自分で咥える気になれるか?
775766:2005/10/08(土) 05:24:39
よし、>>774を体が硬くてできなかったけど試してみようとしたことあるやつは手を挙げろ!
776デフォルトの名無しさん:2005/10/08(土) 17:18:28
ノシ
777デフォルトの名無しさん:2005/10/08(土) 21:26:38
サー
778766:2005/10/08(土) 21:57:09
よ、よし俺以外にも居るな!

ノシ
779デフォルトの名無しさん:2005/10/08(土) 22:59:39
自演乙
780デフォルトの名無しさん:2005/10/08(土) 23:13:53
乙かれさま
781デフォルトの名無しさん:2005/11/14(月) 06:55:56
int *ptr:
int index=0;



index++;
(ptr+index)=(int *)malloc(sizeof(int));

こういう使い方が出来ないのがめっちゃ不便。
代替策も思いつかんし・・・
782デフォルトの名無しさん:2005/11/14(月) 07:47:21
>>781
>(ptr+index)=(int *)malloc(sizeof(int));

何がしたいのか意図不明す。。。
783デフォルトの名無しさん:2005/11/14(月) 08:21:16
ポインタ配列を使うのはダメなのか?
784デフォルトの名無しさん:2005/11/14(月) 08:37:40
ポインタ配列を意図してるなら、sizeof(int)はNG。
32bit環境では帳尻が合うが、意味がぼやけてる。
64bitではサイズが足りない。
785デフォルトの名無しさん:2005/11/14(月) 08:59:23
int **ptr = (int**)malloc(sizeof(int*)*length):
int index=0;



index++;
(ptr[index])=(int *)malloc(sizeof(int));
786デフォルトの名無しさん:2005/11/14(月) 09:46:29
>>785
う〜ん、それだと配列の長さが固定になってしまう・・・
787デフォルトの名無しさん:2005/11/14(月) 20:06:06
>>786
realloc()?
788デフォルトの名無しさん:2005/11/14(月) 20:44:15
malloc(sizeof(int))の意味がわからん。
int 1個のために一々mallocする理由がわからん。
789デフォルトの名無しさん:2005/11/14(月) 22:27:54
意図が伝わらないコードは糞コード
790デフォルトの名無しさん:2005/11/14(月) 23:21:47
>>788
おそらく、ポインタにオフセットをつけ、mallocした領域(変数)を
登録することで可変長配列を実装したいんじゃないかと。

でも、そうするなら mallocした領域(変数)を登録する領域を
可変長にしなければ意味がないんだが。

こういう形で可変長配列を実現してる言語ってあるん? >>871
791790:2005/11/14(月) 23:22:51
失礼。

 × >>871
 ○ >>781
792デフォルトの名無しさん:2005/11/14(月) 23:37:51
calloc
realloc
793デフォルトの名無しさん:2005/11/15(火) 00:07:00
おまいらセンス無いからダメなんだよ。
794790:2005/11/15(火) 00:12:23
>>792
まぁ、普通に考えたらその関数でintの配列として使う領域を確保するよなぁ。
795デフォルトの名無しさん:2005/11/15(火) 00:34:37
CPUキャッシュやメモリのバースト転送のこと考えたらポインタのポインタで可変長配列、という時点でダメ。
その辺考えたら、普通は、
・malloc()で多めに確保。
・ポインタとオフセットで配列のようにアクセス。
足りなくなったら、
1:代替領域確保→元の領域から代替領域へメモリコピー→元の領域を開放。
2:テンポラリファイル書き出し→realloc()でさらに大き目の領域を再確保→テンポラリファイル再読込み
3:複数のメモリ領域にまたがっていても動くようにする(少々面倒だが現実的)
796デフォルトの名無しさん:2005/11/15(火) 07:31:47
>>795
ああ。マシンは十分早いのでその辺は考えなくていいです。
797デフォルトの名無しさん:2005/11/15(火) 08:22:35
プロを煽るならもうちっと高度なことを書いてください。
798デフォルトの名無しさん:2005/11/15(火) 14:06:57
Cにはポインタという型は無いのだが?>1
799デフォルトの名無しさん:2005/11/15(火) 16:38:13
>CPUキャッシュやメモリのバースト転送のこと考えたらポインタのポインタで可変長配列、という時点でダメ。
でも、スタックにオブジェクトインスタンス作れない言語だったらそうなるわな。
まぁnew[]やらdelete[]やら使ってなさい、ってこった。
deleteに[]を忘れたり、deleteせずにreturnしたり例外に吹っ飛ばされるようなお子様はベクタ&スマポでも使ってなさい。
mallocは10年早い。
800デフォルトの名無しさん:2005/11/15(火) 17:23:48
C++ で malloc 系使ってたら阿呆だが、それより
いつのまに C++ の話になったんだ?
801デフォルトの名無しさん:2005/11/15(火) 23:28:38
>>800
C++の標準ライブラリはアホなんですね。
802デフォルトの名無しさん:2005/11/15(火) 23:44:44
標準ライブラリって実装方法まで指定されてんの?
803デフォルトの名無しさん:2005/11/15(火) 23:58:15
C++でmalloc使ってはいけない理由キボンヌ

>>799
STLのvectorって例外をthrowするよね。
つーことは、例外のないCでは困ったことに。
804デフォルトの名無しさん:2005/11/16(水) 00:01:51
freeを使うなって言うのはデストラクタが呼ばれないから
大きなお世話だよね
805デフォルトの名無しさん:2005/11/16(水) 00:24:22
>>803
mallocを使ってはいけないというわけではなかったと思う。

ただ、new演算子を使うほうがよりスマート(サイズを与えるのが楽だとか、
戻ってくるポインタをキャストしなくていいとか、確保に失敗したときは
例外を投げてくれるとか)だからってことだったような気がする。
806805補足:2005/11/16(水) 12:02:03
重要なこと忘れてた。

new演算子には領域確保を抽象化(?)して
プリミティブ型とオブジェクト型を同列に扱うというのがあったな。
0で埋められたインスタンスと同じサイズの領域ってのは
必ずしもインスタンスにはならんわけで。

これがmallocではなくnewが推奨される理由だと思うんだが。

 #これ以上詳しいことは知らんので間違ってたら笑い飛ばしてくれ。
807デフォルトの名無しさん:2005/11/16(水) 20:28:09
C++でnewが推奨されるのは何よりも804の逆でコンストラクタが呼ばれるから。
808デフォルトの名無しさん:2005/11/16(水) 20:46:09
クラスのオブジェクトに対してmalloc/freeする馬鹿はいないでしょ。
809デフォルトの名無しさん:2005/11/16(水) 21:19:35
>>808それはおまえが無知なだけ
stlのソース見たらわかると思うが
listとかはあらかじめmallocで数個分のオブジェクトの領域を確保しといて
そこにplacement newでオブジェクトを配置してる
810デフォルトの名無しさん:2005/11/16(水) 23:16:48
C++でnewが推奨されるのは、それを無くすと
誰も C++ をオブジェクト指向だと認めてくれなくなるから。
811デフォルトの名無しさん:2005/11/16(水) 23:40:29
>>809
それをクラスオブジェクトをmallocすると称するのかね?君は?
812デフォルトの名無しさん:2005/11/16(水) 23:44:44
STLがなにをしているのかとSTL利用者がなにをしようとしているのかでは
100万光年からの開きがあるよ
813デフォルトの名無しさん:2005/11/17(木) 17:23:21
>>809
STLの実装によって違うのではないかと。

vector::reserveしたら、コンストラクタがゴリゴリっと呼ばれてワロタこともある。
814デフォルトの名無しさん:2005/11/17(木) 17:53:58
用途、環境に合わせて適切なデータ構造やアルゴリズムを選択できない御子様は、
外見だけ華やかな流行の技術でもつまみ食いしてなさいってこった。
815デフォルトの名無しさん:2005/11/17(木) 19:05:59
>>813
なんだその糞な実装は。
816デフォルトの名無しさん:2005/11/23(水) 09:14:23
>>809
阿呆ですか?
内部の話始めたら、そもそも new が malloc(ry
817デフォルトの名無しさん:2005/11/23(水) 18:27:38
糞みたいなやり取りだな
818デフォルトの名無しさん:2005/11/24(木) 00:11:54
>>816
当然だが、内部でmalloc呼んでないnewの実装もあるよ。
newがオーバーロード出来るのを忘れてる人は結構いると見た。
819デフォルトの名無しさん:2005/11/24(木) 00:15:14
巨new
820デフォルトの名無しさん:2005/11/24(木) 07:49:46
逆にmallocの実装に::operator newを使ってはならないと読んだ記憶がある。
821デフォルトの名無しさん:2005/11/24(木) 09:39:20
mallocはヒープ領域に
newはフリーストアに割り当てると
山本信雄のVisual C++ 2巻に書いてあったけど
なんのこっちゃ分からんしどうやって実装すればいいか検討つきません。
822デフォルトの名無しさん:2005/11/24(木) 10:26:09
>>821
VC++ではそうだという話
823デフォルトの名無しさん:2005/11/24(木) 11:12:15
VC++じゃ、ヒープ=フリーストアじゃなかったっけ?
824デフォルトの名無しさん:2005/11/24(木) 11:17:35
そうだとしても、むしろ間違ってはいないだろう
825デフォルトの名無しさん:2005/11/25(金) 19:25:46
VC++のmallocはソースを読めばわかるけど、ちょっとややこしいよ。
826デフォルトの名無しさん:2005/11/25(金) 22:48:37
でも結局はHeapAllocを呼んでいるだけだよ。
827デフォルトの名無しさん:2005/11/25(金) 23:23:42
まあ、C++になってヒープがフリーストアという名前に変わったと理解してても
大抵の処理系では問題ないはず。
828デフォルトの名無しさん:2005/11/26(土) 01:02:18
heap
━━ n. (うず高い)山, 積み重ね; 〔話〕 (pl.) たくさん, うんと (This is 〜s better.); 〔話〕 ポンコツ車; 【コンピュータ】ヒープ ((確保したメモリ領域)).
all of a heap 〔話〕 どさり[ぐったり]と(倒れる); すっかり; 出し抜けに.
heaps of 〔話〕 たくさんの….
in a heap 山積みに[の], 積み重なって[た]; どさり[ぐったり]と(倒れる).
━━ v. 積み重ねる ((up)); 山積み[山盛り]にする[なる]; 大量に集める; たくさん与える ((with)); (賛辞・侮辱などを)浴びせかける ((on)).
heaped ━━ a. 山盛りの (a 〜ed spoonful スプーン山盛り一杯); 積み重なった ((with)).
heap sort 【コンピュータ】ヒープ・ソート.


たしかに「ヒープ」よりはわかりやすい言葉かもしれない。
829デフォルトの名無しさん:2005/11/26(土) 04:08:24
ヒープ構造とは限らなくなった、ってことじゃないか? 呼び方が変ったのは。
830デフォルトの名無しさん:2005/11/26(土) 18:44:56
ヒープ構造ってどんなの?
俺は、bssセクションとスタックの間の空間ってだけだと思ってたよ。
831デフォルトの名無しさん:2005/11/27(日) 03:19:12
その空間の割り当てをどうやって管理するのか、という話よ>ヒープ構造
832デフォルトの名無しさん:2005/11/27(日) 03:26:23
そんなガキのいちゃもんみたいなこと言ってないで、
どういった構造をしてるのか説明するのが大人の対応ですぞ。
833デフォルトの名無しさん:2005/11/27(日) 04:20:52
DOSの場合のヒープはUCB
834デフォルトの名無しさん:2005/11/27(日) 04:55:32
win9xではローカルヒープとグローバルヒープに分かれてた。
835デフォルトの名無しさん:2005/11/27(日) 11:39:17
昔の名残よのお、、、
836デフォルトの名無しさん:2005/11/27(日) 13:20:12
>>834
Win3.1までは、じゃね?
837デフォルトの名無しさん:2005/11/27(日) 14:59:19
>>836
一応、互換性はない。
838デフォルトの名無しさん:2005/11/27(日) 16:35:20
いまはおなにー
839デフォルトの名無しさん:2005/12/13(火) 21:05:18
ヒープはプロセスがその都度OSにお伺いをたてて、許可されたら確保されて
手渡されるメモリ領域。土地登記のような厳格な管理下に置かれる。
スタックは予め手渡されているローカルでLIFOなメモリ領域。スタックオーバー
はプロセスの自己責任。再帰処理ではよく注意して想定内で使うしかない。
840デフォルトの名無しさん:2005/12/13(火) 21:13:11
誰かスタックの話をしてました?
フリーストアってみんな言ってるように見受けられます。
841デフォルトの名無しさん:2005/12/14(水) 13:23:01
OS管理ではないヒープもあるがな。

OSからは大きなサイズで割り当ててもらって、
Cランタイムライブラリ側で管理するのも手ですよ。

ただそうすると、メモリが無駄になるので・・・。
842デフォルトの名無しさん:2005/12/14(水) 14:09:10
ちょっと待って、今 >>841 が
>OSからは大きなサイズで割り当ててもらって、
>Cランタイムライブラリ側で管理するのも手ですよ。
ものすごい当たり前の事を言った!
843デフォルトの名無しさん:2005/12/14(水) 16:31:44
大体のライブラリはそういう実装になってるよな。
844デフォルトの名無しさん:2005/12/14(水) 17:33:35
mallocなんてその代表格じゃないか?
845デフォルトの名無しさん:2005/12/14(水) 20:03:23
>>844
そんなあわけはない
846デフォルトの名無しさん:2005/12/14(水) 20:15:04
ただ闇雲に否定したいだけ?それとも無知?
847デフォルトの名無しさん:2005/12/15(木) 13:50:52
学生さん
848デフォルトの名無しさん:2005/12/15(木) 15:25:07
VC6のCランタイムのソースでは、OSに管理させてるな。

といってもWindowsの場合、
Win32APIの呼び出しはシステムコールとは違う。

さらにランタイムライブラリが一枚噛んでいるいるようなもので、
HeapAllocを呼んでも、DLLの中で処理されて戻ってくることもある。
849デフォルトの名無しさん:2005/12/19(月) 20:54:36
HeapAllocはメモリブロック単位で管理してるんじゃなかったかな。
850デフォルトの名無しさん:2005/12/19(月) 21:33:29
*記号の流用が許せない
あるときは乗算記号、またあるときはポインタ、またあるときはコメントの一味
しかしてその実体は
851デフォルトの名無しさん:2005/12/19(月) 22:07:46
参照を忘れてるぞ。

*hoge = xxx

みたいなの。
8521:2005/12/19(月) 22:08:41
このスレが、こんなに伸びるとは思わなかった
853デフォルトの名無しさん:2005/12/19(月) 22:21:05
そりゃそうさ。
普通はポインタを理解しよう、という方向になるのに
このスレはストレートに「おかしい」だからな。
挫折者・落伍者にはオアシスのようなもんさ。
854デフォルトの名無しさん:2005/12/19(月) 22:53:09
実際のところ、ポインタに躓いている人を観察するとさ、
クソッタレなC言語入門書に書かれているオナニーな用法で、躓いてる。

たとえば、ポインタのポインタ。
型という概念とtypedefの使い方を教えれば、ポインタのポインタは必要なくなる。

855デフォルトの名無しさん:2005/12/19(月) 23:05:13
もっと革新的な説明の仕方をしてくれてる入門書はないか。
どれもこれもタンスの絵ぱっかでゲロが出そうだ。
856デフォルトの名無しさん:2005/12/19(月) 23:11:40
タンスの絵とか本の目次とかで理解できなきゃ、
頭を取り替えない限り理解できない
857デフォルトの名無しさん:2005/12/20(火) 12:04:42
>>850
C++ なんてもっと酷い事になってるからな。
余計な思想まで継承しなくていいっつの。
858デフォルトの名無しさん:2005/12/20(火) 14:14:48
>>855
メモリにはタンスの引き出しみたいな仕切りは存在しないからなぁ。

カセットテープの場所を指差すもの、というイメージなのだけど、
今の若い人はカセットテープ使わないからわからないか。
859デフォルトの名無しさん:2005/12/20(火) 21:16:04
方眼紙の升目に数字を書き込んで・・・・というのでも分かりにくいか?

そもそも、アセンブラも未経験、コンピューターの基礎知識、動作原理の知識も無し、
パズルや数学が苦手(理論的思考を不得手とする)なプログラマが多数派になりかねない現状では無理ないかも。
860デフォルトの名無しさん:2005/12/20(火) 21:30:55
しかもポインタレス言語マンセーだしな
861デフォルトの名無しさん:2005/12/20(火) 23:15:07
>>857
Cをまるごと受け継ぐというのがC++の最重要な方針だったわけで。
だからこそC++は成功したんだとStroustrupはD&Eにはっきりと書いている。
862デフォルトの名無しさん:2006/01/16(月) 12:31:13
それが成功したってことはプログラマがいかに保守的かってことか...
863デフォルトの名無しさん:2006/01/16(月) 23:43:43
て言うか、人は大体保守的だよ。
864デフォルトの名無しさん:2006/01/17(火) 11:59:22
C との互換性が高ければいい、というものでもないらしい。
つ[Objective-C]
865デフォルトの名無しさん:2006/01/20(金) 20:15:31
>>857
新しいC++の規格には型の新しい修飾( 右辺値参照だっけ? )
として && が採用されようとしてるぞ。
866デフォルトの名無しさん:2006/01/21(土) 03:11:49
また記号の流用かよ orz
aaa<bbb<ccc>> や a = b/*c; で全く懲りてないんだな・・・。
867デフォルトの名無しさん:2006/01/21(土) 15:17:33
$は未使用だよね。

なんで$を使うのを避けるのかな。
868デフォルトの名無しさん:2006/01/21(土) 15:47:45
$(笑)
869デフォルトの名無しさん:2006/01/21(土) 16:56:02
'$'の他にも'@'とか'`'とか。
それぞれダラーや単価記号や逆向きクォートとは限らないので使われないのか?
その割りには'{', '|', '}'もトライグラフで置き換えられるわけだから使ってもいいだろうに。
870デフォルトの名無しさん:2006/02/05(日) 15:40:24
>>867
$はバックスラッシュでしょ
\と同じコード。
通貨単位だから。
でも、両方出るなあ。

@は単価だし
871デフォルトの名無しさん:2006/02/05(日) 15:55:40
C++で好きなように演算子つくれ。


**************************

                終了

**************************
872デフォルトの名無しさん:2006/02/05(日) 16:10:11
873デフォルトの名無しさん:2006/02/05(日) 16:12:38
>>870
落ち着いて話そう。
まあ、クソスレだしいいか。
874デフォルトの名無しさん:2006/02/05(日) 16:39:59
&の使いまわしも気に食わないよな
a &= &a && a & &a; とかどうなんのよってのな
875デフォルトの名無しさん:2006/02/05(日) 18:14:53
&ヽ(`Д´)ノ&
876870:2006/02/05(日) 20:42:56
http://ruby.gfd-dennou.org/products/ruby-dcl/ruby-dcl-doc/misc1/node6.html
EBCDICとASCIIの対応 見ると、¥と$が逆なんだ・・・

特殊文字コード表です
http://www.shikaku-d.com/neko/character_entity.html
ブラウザでは使えるけど、2chビューワーでは表示できない。
877デフォルトの名無しさん:2006/02/12(日) 04:41:24
バイナリからデータサイズ毎の先頭アドレスを取り出して扱うってのは
PCの実際の動作に近くていいと思うんだが。
大体、ポインタがなかったら多重リストの実装とかどうするんだ。
878デフォルトの名無しさん:2006/02/12(日) 12:15:34
記号の多重使用が気に食わない、文法が気に入らない、ポインタ(というか、コンピューターの動作原理)が理解できない。
そういう香具師が見かけポインタの無い高級言語を持ち上げてCを貶めようとしているかのよう。

アスキーで昔(エンターブレインになる前)出てた256倍シリーズのC言語本にはC始める前にアセンブラとPascal習得しろとか書かれてる。
879デフォルトの名無しさん:2006/02/13(月) 11:14:03
俺、アセンブリ→PL/M→C の順にやったんだが
>記号の多重使用が気に食わない、文法が気に入らない
これは激しくオモタ。流石に慣れたが。
880デフォルトの名無しさん:2006/02/13(月) 19:24:01
>>878
多重起用がうざいってのも
半分はネタで言ってるだけだがな

でももう半分はマジ
881デフォルトの名無しさん:2006/02/14(火) 01:27:34
そういや、某マシンの某OS上でしか動作しない言語にゃあ、そのマシン特製キーボードにしかない記号を使って記述する物があったな・・・ポインタの記号だったかなぁ・・・
882デフォルトの名無しさん:2006/02/14(火) 05:41:20
自然言語に比べたらはるかにマシ
883デフォルトの名無しさん:2006/02/14(火) 11:55:43
>>881
言語専用文字と言えば APL を思い出す。
884デフォルトの名無しさん:2006/02/15(水) 22:42:26
>>881
#define
885デフォルトの名無しさん:2006/02/16(木) 01:23:43
int* p; って解釈するんじゃなかった?
int* を typedef で別名にすれば解りやすい。
886デフォルトの名無しさん:2006/02/16(木) 01:37:19
int * p;
*p

この両者が似ているのが混乱の元。
どっちも変数の前に*をつけてるだけなのに
一方はポインタ変数であることを意味し、他方はポインタの中身を意味する。
感覚的には変
887デフォルトの名無しさん:2006/02/16(木) 01:55:26
>>886
おいおい、C言語の基礎からやり直せw
その形式は別にポインタだけじゃないだろ。
そのまんまの記述で型を指定するってだけで・・・
888デフォルトの名無しさん:2006/02/16(木) 02:50:57
中身はint型になるようなポインタ変数を定義・・・って考えれば何の矛盾も有馬線。
889デフォルトの名無しさん:2006/02/16(木) 06:05:29
>>888
中身はint型
890デフォルトの名無しさん:2006/02/16(木) 07:50:24
>>886
int *p;と書いて「*pがint型」になると読めばよいというのがお約束。
891デフォルトの名無しさん:2006/02/16(木) 11:11:05
>>887
おいおい、宣言子と演算子が同じでキモイって話だろ
892デフォルトの名無しさん:2006/02/16(木) 12:01:01
C++/CLIの ^ 演算子の方がずっとキモイと思うんだが・・・・
893デフォルトの名無しさん:2006/02/16(木) 13:17:42
BYTE buf[64];
for(int i = 0; i < 16; i++)
*(int *)&buf[i * 4] = i;
894デフォルトの名無しさん:2006/02/17(金) 01:59:30
>>893
これやって、ライン1日止めたなぁ・・・
895デフォルトの名無しさん:2006/02/17(金) 03:55:03
>>894
なんで問題になる?
896デフォルトの名無しさん:2006/02/17(金) 04:01:35
int が16ビットな環境だったとか?
897デフォルトの名無しさん:2006/02/17(金) 05:25:53
サイズの決め打ちはするな、きちんとsizeofしろって耳にタコが出来るほどいわれたな。
898デフォルトの名無しさん:2006/02/17(金) 14:45:52
>>886
宣言は宣言であって宣言以外の何者でもない。
899デフォルトの名無しさん:2006/02/17(金) 14:46:39
>>895
昔のコンパイラはintが16ビットなのが多かった。
そして今後は64ビットのが出てくるかも知れない。
900デフォルトの名無しさん:2006/02/17(金) 17:25:56
int16_tみたいなのって、gcc以外は使えないんだっけ。
901デフォルトの名無しさん:2006/02/17(金) 17:30:49
あほの子のVCが使えないだけ。
902デフォルトの名無しさん:2006/02/17(金) 17:32:04
>>900
たとえば
1. C++で<boost/cstdint.h>
2. 自分で自分の処理系に沿った内容の<stdint.h>を作れる。
903デフォルトの名無しさん:2006/02/17(金) 18:42:26
>>902
boostにもあるのか。
ありがとう。
904デフォルトの名無しさん:2006/02/18(土) 00:12:28
<boost/cstdint.hpp>だな。
905デフォルトの名無しさん:2006/02/18(土) 09:06:01
>>886-891
C++ では int* p とするのは, やっぱり int *p とするのがキモイからなのかなぁ.
C++ やり始めて, どちらもかみ分けて読めるようになってきたけど,
C から始めた者からすると int* p の方が少しキモイ.
だから, 参照とかを覚えるときも int &p = a; とする方が, 覚えやすかった.
906デフォルトの名無しさん:2006/02/18(土) 10:10:29
俺はC++をやり始めたときにはint *p; int& r;だったけど、
いつのまにかキャスト演算子の時にはint*を使うようになり、
最近変数・宣言でもint* p;になってきた。
907デフォルトの名無しさん:2006/02/18(土) 10:10:33
っていうか、全部変だよC言語
908デフォルトの名無しさん:2006/02/18(土) 11:33:26
30年も前に作られた言語に文句言ってもしょうがないじゃないか。
909デフォルトの名無しさん:2006/02/19(日) 11:27:22
つーか何もおかしくない
910デフォルトの名無しさん:2006/02/20(月) 07:57:11
日本語の方が遥かに複雑怪奇
911デフォルトの名無しさん:2006/02/20(月) 10:00:34
気に入らないなら気に入るものを自分で作ればいい。
912デフォルトの名無しさん:2006/02/20(月) 19:53:47
ていうか、いまだにプロトタイプ宣言の意義がさっぱり理解できません。
どう考えても冗長以外の何でもねえだろあんなもん。
913デフォルトの名無しさん:2006/02/20(月) 21:08:33
>>912
コンパイラが全部面倒見るべき? そういや Delphi とかはそうだったかな?
914デフォルトの名無しさん:2006/02/20(月) 22:15:52
>>912
コンパイラがソースコードを上から下へ1回読むだけでコンパイルできるように。
915デフォルトの名無しさん:2006/02/20(月) 22:21:38
>>912
ヘッダファイルは無くてもいいと?
916デフォルトの名無しさん:2006/02/20(月) 22:30:57
>>914
なんで人間様がコンパイラに仕えなきゃなんねえんだよ。
……と普通は思うでしょ。
Cの文化ってこういう倒錯が結構みられるよね。
たとえば最適化なんかに関しても。
917デフォルトの名無しさん:2006/02/20(月) 22:40:23
プログラマに向いてないな
918デフォルトの名無しさん:2006/02/20(月) 23:28:46
>>917
君がねw
現にたとえば最適化のような猿仕事はコンパイラがやるべきであって
可読性を犠牲にするようなアクロバチックな記述はすべきでないって風潮になってるでしょ。
919デフォルトの名無しさん:2006/02/20(月) 23:32:08
>>916
Cができたのは30年以上も昔のことだ。
そのときのコンピュータの性能を考えれば仕方がない。

ちなみに俺はまだ生まれていない。
920デフォルトの名無しさん:2006/02/20(月) 23:32:28
>>918
人間が最適化するのはそれを超えたところが存在するから
921デフォルトの名無しさん:2006/02/20(月) 23:42:41
でもプロトタイプって昔はなかったんだよな。
ANSI Cの時点で追加されたんだよ確か。
80年代の終わりごろならパソコンの性能でもプロトタイプなんてなしで
コンパイルできるような仕様が十分現実的だと思うんだけど。
922デフォルトの名無しさん:2006/02/21(火) 00:05:31
プロトタイプ宣言するのが面倒くさかったら、
プロトタイプ宣言を自動生成するようにすりゃいいじゃん。

俺は面倒くさかったから、
#define AUTOPROTOFUNCTION
しておいて、
AUTOPROTOFUNCTION void FooBar(void) {
/*関数の中身*/
}
のように書いておき、
AUTOPROTOFUNCTIONと書いてある行を抽出してヘッダファイルを生成してたよ。

でもさ、C++になるとクラスの宣言と実体はファイルを分けるわけで・・・。
923デフォルトの名無しさん:2006/02/21(火) 02:38:21
>>913
残念ながら、Delphiにもそんな機能は無い。
interface部又はforward付けて宣言しなくちゃダメ。
924デフォルトの名無しさん:2006/02/21(火) 04:02:20
まあ自動生成なんかさせてたら
プロトタイプで型チェックさせるっていう
もともとの目的は無意味になるんですがね。
925デフォルトの名無しさん:2006/02/21(火) 05:17:40
>>924
お前はわかってない。
Cにプロトタイプ宣言が導入される前の、あの悲惨な状況を。

自動生成つっても、関数の実装から生成するんだから、
人間が書いたプロトタイプ宣言と一致するでしょ。
926デフォルトの名無しさん:2006/02/21(火) 07:14:32
ヘッダにプロトタイプ宣言を書かないなら
ライブラリとか、WindowsだったらDLLにも
プロトタイプ情報を含めないとな。
それで実行時に動的チェック、と。

んなアホなことやってられる訳ねーだろ。
自動生成とか言ってる自分本位の馬鹿は死んでくれよ。
927デフォルトの名無しさん:2006/02/21(火) 08:13:37
プロトタイプを宣言しないってことは、
あるソースをコンパイルしているときに関数呼び出しをみつけたら、
他の全ソースからその関数の定義を見つけだすって事だよね。
ソースファイルが数個程度ならともかく
数千、数万もあるようなプロジェクトではどうなるんだろう?w
928デフォルトの名無しさん:2006/02/21(火) 08:19:12
どうもならんでしょ。
だってアセンブラには最初からプロトタイプなんてないよ。
もちろんアセンブラにはシグネチャって概念はないけどね。
今のドトネトはもちろんだが、それどころかパスカルにもそんなもんはねえ。

つーかコンパイラじゃなくてリンカの仕事じゃないのそれ。
929デフォルトの名無しさん:2006/02/21(火) 08:26:51
だな、呼び出し側できっちり型指定すればすむこと。
昔はそうしていたんだし。
930デフォルトの名無しさん:2006/02/21(火) 09:53:33
>>922
そんなことしなくても cproto っていうコマンドで作れるよ。
少なくとも Linux では動いた。他のOSでは知らないがUNIX系OSなら
動くんじゃないかな。(Windowsは知らない。でも最悪Cygwin使えば
動きそうだな)。
931デフォルトの名無しさん:2006/02/21(火) 10:03:53
>>927
オブジェクトファイルやライブラリに型情報を含めて持たせて
そこで判定すればいいんじゃないか? あるいはオブジェクト
ファイルとソースの間にもう一つ中間的なファイルを作って
そこに情報を持つか。一度コンパイルすると自動でそれが
作られる。で、まとめてライブラリに付属させる。

まあでも無理にC言語でやる必要はないな。そういう言語
作った方がいいんじゃないかな。

ていうか Java 使ったらどうか?
932デフォルトの名無しさん:2006/02/21(火) 12:35:58
>>926
>それで実行時に動的チェック、と。
なんでそうなる。
>んなアホなことやってられる訳ねーだろ。
阿呆はお前だ。

>>927
リンカになるべく手を入れなくて済むよう、多くの C++ 実装では
関数名の mangle をやっている。同様にすればよい。
933デフォルトの名無しさん:2006/02/21(火) 13:21:47
何にせよコンパイラが関数の型チェックするのは無理があるでしょ。
934デフォルトの名無しさん:2006/02/21(火) 17:40:43
>>926
> ライブラリとか、WindowsだったらDLLにも

あほですか。
そういうものはプロトタイプ宣言したヘッダファイル必須だろうが。

ここで話をしているのは、自分で作った関数について、
プロトタイプ宣言をいちいち書かないといけないのが面倒だから、
自動生成にしたらよい、っていう話でしょうが。
935デフォルトの名無しさん:2006/02/21(火) 18:55:21
>>934
その程度の話なのか
936デフォルトの名無しさん:2006/02/21(火) 20:18:27
外部ソースへの参照が有るか無いかだけじゃん。
有る時に規模の小さい日曜プログラムならヘッダー要らないように出来ないかって話だろ?
937デフォルトの名無しさん:2006/02/21(火) 20:50:19
ないある
938デフォルトの名無しさん:2006/02/22(水) 00:26:32
プロトタイプ宣言の必要性が分からない馬鹿はプロのプログラマにはなれない
939デフォルトの名無しさん:2006/02/22(水) 09:56:43
「必要性」ではなくて「重要性」でそ
940デフォルトの名無しさん:2006/02/22(水) 13:14:07
Java にはそんなものはないわけだが。
941デフォルトの名無しさん:2006/02/22(水) 19:32:33
Javaは馬鹿のプログラマが使う言語と…。
942デフォルトの名無しさん:2006/02/22(水) 19:45:02
だから「全部変だよC言語」。
頭の悪い奴は「頭が悪い」それゆえに
自分が頭が悪いと思われることを恐れ「裸の王様」をマンセーする。

で、人間てのは恐ろしいものでそのうち防衛機制が作動しだして
なんだか本当に裸の王様がステキに見えて来る、とw
943デフォルトの名無しさん:2006/02/22(水) 21:11:38
えっ? 自己分析?
944デフォルトの名無しさん:2006/02/22(水) 21:58:31
Cと宣言の文法だけを(好きな様に)変えた言語を設計して
それでその言語のコンパイラを書いてみればCの合理性が分かる

かも知れない
945デフォルトの名無しさん:2006/02/22(水) 22:17:34
Cより使いやすい言語が出来るかもしれんな。
946デフォルトの名無しさん:2006/02/23(木) 21:30:07
そうそう。おかしいと思うならおかしくないものを使えばいい。
なければ作れ。
947デフォルトの名無しさん:2006/02/23(木) 21:32:06
個人的には記号の使いまわしが気に入らないので
新しい言語を開発するにあたり解決すべきポイントは
新しい文字・記号を生み出すということです。
つまり、新しい文字が出来れば全ての問題は解決です。
948デフォルトの名無しさん:2006/02/23(木) 21:44:47
>>947
それは中国人の発想だな。

そういう考えの結果が積もり積もって、
現在の膨大な量の漢字が生まれてしまった訳だが・・・

結局、歴史的には、記号の数が少ないアルファベット文化が
世界を制してしまった点については、どう思う?
949デフォルトの名無しさん:2006/02/23(木) 22:04:43
世の中アルファベットぐらいの数の文字しか操れない低脳の方が多いからな。
950デフォルトの名無しさん:2006/02/23(木) 22:17:09
>そういう考えの結果が積もり積もって、
>現在の膨大な量の漢字が生まれてしまった訳だが・・・

別にそれ自体は悪いことじゃないだろ。
英語だって知らない単語を見せられても意味なんてわかんねぇし。

>結局、歴史的には、記号の数が少ないアルファベット文化が
>世界を制してしまった点については、どう思う?

君の言う「世界を制した」というのが、いったい何を持ってして
「世界を制した」と言ってるのか全然わからないんで、まずは
そこんとこを説明してくれまいか?

あと君はあの悪名高き trigraph についてはどう思う?
記号の数が少ないことによって起きた悲劇なわけだが。
951デフォルトの名無しさん:2006/02/23(木) 22:20:10
>>948
そういうの論理の飛躍っていうんじゃない?
頭の悪い発想だよw

947じゃなくても普通のプログラマならASCIIの文字セットに不満持ったことがあるでしょ。
たとえば些細なことだけどギリシャ文字の接頭語が使えないから
苦し紛れにuSecとかさ。
952デフォルトの名無しさん:2006/02/23(木) 22:46:42
>>950
>別にそれ自体は悪いことじゃないだろ。 
本当に悪くなかったらば、中国自身が使用する漢字の量を減らそう、
なんて考えたりはしなかった思うけど?

>そこんとこを説明してくれまいか? 
一番分かり易いのが、科学全般の発展具合。
漏れは別に「中国の科学と文明」の信奉者ではないが、
それでも科学の黎明期における中国の役割は非常に大きかったと思う。
その大きさと、その後に続く現在の発展具合を見る限り、
漏れでなくとも、誰だって「ナンデ、ソウナルノ?」って気になるだろ?

でも、こんなのは当たり前と言えば、当たり前。
長い間、ご当地で生まれた秀才は皆が皆、科挙の為にタコツボに入って、
数十万・数百万の漢字を必死に覚え込んでいたんだからな。
彼らが生産的な方向に脳みそを使い、かつ円滑な交流がなされていれば、
どんな素晴らしい結果が生まれたのだろうと考えると
悔やんでも悔やみきれない。

>あと君はあの悪名高き trigraph についてはどう思う? 
>記号の数が少ないことによって起きた悲劇なわけだが。 

スマソ。トライグラフが存在していた事によって起こった
"悲劇"って一体何?
953デフォルトの名無しさん:2006/02/23(木) 23:18:51
>>952
漢字を覚えるのは簡単。
英単語を覚えるのといっしょで 意味の組み合わせと法則を
それなりに理解してれば、覚えるべきは例外のみで済む。
954デフォルトの名無しさん:2006/02/23(木) 23:26:06
>>953
ならば、その秘訣とやらを「やねうらお」大先生あたりにでも
教えてやれ。
漢字検定1級を取るのが悲願らしいから。

泣いてよろこぶぞ。
955デフォルトの名無しさん:2006/02/24(金) 00:18:34
表音文字と表意文字を題材にした比較文化論のスレはここですか?
956デフォルトの名無しさん:2006/02/24(金) 00:22:36
ハングル文字でも学んどけ
楽だから
957デフォルトの名無しさん:2006/02/24(金) 00:36:46
Delphiの自動プロトタイプ宣言とはコード補完の事では?
958デフォルトの名無しさん:2006/02/24(金) 01:34:02
>>948
漢字使ってる人口がどれだけいるか知ってるのか?
世界人口の1/3は漢字を使ってるぞ。
959デフォルトの名無しさん:2006/02/24(金) 01:55:46
>>952
いや、だからさぁ、なにがどう世界を制したのよ?

あと、おまえ、trigraph を見てなんとも思わんの?
trigraph を知らないだけ?
960デフォルトの名無しさん:2006/02/24(金) 07:11:07
>>958
>世界人口の1/3は漢字を使ってるぞ。 

世界のプログラマの人口比率でも、
1/3 位は COBOL を使っているだろうな。

>>959
>いや、だからさぁ、なにがどう世界を制したのよ? 

>>952を読んでないのか、読んでも理解できなかったのか、
最初から理解したくないのか、俺に知るすべは無いが、
これ以上俺に >>959 に納得させる能力はない。
俺の能力不足を許してくれ。

>あと、おまえ、trigraph を見てなんとも思わんの? 

いや、「思う」とか「思わない」の話じゃなくて、
渡来グラフのために、現場で "悲劇" が起こっているんだろ?
961デフォルトの名無しさん:2006/02/24(金) 09:44:37
>1/3 位は COBOL を使っているだろうな。
おれの分野だとひとりも見たことが無い
962デフォルトの名無しさん:2006/02/24(金) 11:27:56
馬鹿だなお前らは
プロトタイプ宣言なんてやめて、プログラムを宣言部と実現部に分ければいいんだよ
という事でAdaを使いなさい
963デフォルトの名無しさん:2006/02/24(金) 11:46:45
もうわずらわしいから機械語使おうぜ
964デフォルトの名無しさん:2006/02/24(金) 12:48:24
>>あと君はあの悪名高き trigraph についてはどう思う?
>>記号の数が少ないことによって起きた悲劇なわけだが。
>
>スマソ。トライグラフが存在していた事によって起こった
>"悲劇"って一体何?

日本語読めないバカハケーン
965デフォルトの名無しさん:2006/02/24(金) 12:56:43
>>964
いや結局「悲劇」とやらの内容を一切説明してないんだが。

ま、どうせ「意図せず別の文字に置き換えられて悩んだ」とかだろうが
そりゃ無知だから悩むんであって、悲劇でもなんでもない。
966デフォルトの名無しさん:2006/02/24(金) 13:01:55
まだわからんのか。小学校の国語からやり直せ
967デフォルトの名無しさん:2006/02/24(金) 13:03:20
つまり
 trigraphの発明→(なんらかの)悲劇の発生
じゃなくて
 記号の数がすくない→「trigraphの発明」という悲劇
ってことだろ
968デフォルトの名無しさん:2006/02/24(金) 14:31:45
で、それの何処が悲劇?
969デフォルトの名無しさん:2006/02/24(金) 18:21:48
>>968
トライグラフ見たことないのかww
970965=968:2006/02/24(金) 18:26:34
971デフォルトの名無しさん:2006/02/24(金) 20:44:16
非常にわかりやすくていいなw
972デフォルトの名無しさん:2006/02/24(金) 23:07:04
>>965
無知なのはお前。m9(^д^) プッ
973デフォルトの名無しさん:2006/03/15(水) 00:01:18
結論としては「宣言の仕様はおかしいが、概念がわからない奴はバカ」ってことでよろしいか
974デフォルトの名無しさん:2006/03/15(水) 00:21:46

                     ) 
       _ ,, -ー=- 、    ヽ 異議なし!!
       ゝ、ニ 二 _ ミミV,    )
       マ二 ニ、 r' ..,,_ ヽソ,   `v'⌒ヽ/⌒ヽ/       ,. ‐- .. _
       `ヽ、 { a`'   tij` _!                  /  __  `` ー- 、
         |ノゝi     ,_〈                , ィ/   ゝヽ ̄ヽ ー- '
         /   t   -‐ ,'"             _ / { {ヽ、_   ヽ' ノ_,.〉  
        /!   `>、 _/_ -ァー- 、_ ... -‐ '    ヽヽ、 `>、..ノ=┘
       /j >-‐ ' ´/ /   /    /   _ノ      \ `ー '!
   , -‐ 7´/{⌒|  / _/   j                  >‐'
  / / //| 〉‐f/ \'    !                ,  ' ´
 / ,' > .|/ レ   ゚ノ    |           ,.. -‐ '"
/  {  ヽ |  〉  /__  t     ,. -‐ ' ´
  |   ヽ| / /  '   `  ヽ、  /
  |   `!//           /
975デフォルトの名無しさん:2006/03/15(水) 02:42:28
C言語が悲劇的だったのはその統一されていない仕様ゆえに
IDEによる自動化の恩恵をあまり受けられなかったこと
それゆえに生産性ではJavaやC#の後塵を拝することになる
976デフォルトの名無しさん:2006/03/15(水) 08:53:11
生産性ではな。

ここ一番の最強プログラムはほぼ例外なくC/C++
977デフォルトの名無しさん:2006/03/15(水) 12:20:29
最強とか言ってる時点で厨確定
978デフォルトの名無しさん:2006/03/15(水) 15:01:46
C#が、
実行に必要なすべてをスタティックリンクできて、
EXEファイルが10MBくらいに収まるなら、
大歓迎なんだけどなぁ。
979デフォルトの名無しさん:2006/03/15(水) 15:42:43
>>975
TurboC とかあったのだが。

PCの場合、スペックが高速大容量化したからCにする
必要性がなくなっただけなんじゃないか? 小さくて
効率のいい実行ファイルを作る必要はないもんな。

それだけでなくPCの場合ユーザの要求が高まってCだけで
作るのは辛い状態になった。
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
981デフォルトの名無しさん:2006/03/19(日) 13:16:48
ここは劣化したfjでつね
982デフォルトの名無しさん:2006/03/23(木) 21:59:35
>>1
それは普通だと思う
配列のはわかめ
983デフォルトの名無しさん:2006/03/25(土) 03:54:32
次スレ候補

ポインタ死ね。
http://pc8.2ch.net/test/read.cgi/tech/1141028162/l50
値渡し、参照渡し、ポインタ渡しを議論する
http://pc8.2ch.net/test/read.cgi/tech/1142322025/l50
984デフォルトの名無しさん:2006/03/25(土) 16:16:56
>>983
どちらも合わないと思う。

おかしいのは文法であって、ポインタそのものの概念は
おおむね問題ないと思うがどうか。
985デフォルトの名無しさん:2006/03/25(土) 16:27:28
>>1
今更だけど。

つC++参照
986デフォルトの名無しさん:2006/03/25(土) 20:58:38
意味が一意に決まってるし、文法上おかしいとか思わん
987デフォルトの名無しさん:2006/03/25(土) 21:56:38
文法も概念もおかしいと思わん
988デフォルトの名無しさん:2006/03/26(日) 00:24:18
文法の問題じゃなくて、表記法が綺麗じゃないってだけなんだよな
989デフォルトの名無しさん:2006/03/26(日) 00:56:02
宣言の構文もおかしいと思わんが?
990デフォルトの名無しさん:2006/03/26(日) 01:06:06
char (*(*p())[])();
こんなに複雑な宣言ができるのだよ
991デフォルトの名無しさん:2006/03/26(日) 01:12:52
関数ポインタを返す関数って、typedefを使わない場合のプロトタイプ宣言はどのようになりますか?
992デフォルトの名無しさん:2006/03/26(日) 02:33:30
きみょうな字句解析研究者のオナニーということでよろしいか。バッカス表記も
993デフォルトの名無しさん:2006/03/26(日) 02:59:57
>>990
そういや複雑なポインタの宣言を自動生成してくれるツールとかあったな。
994デフォルトの名無しさん:2006/03/26(日) 09:36:48
**
995デフォルトの名無しさん:2006/03/26(日) 09:59:27
>>991
不可能でございます
996デフォルトの名無しさん:2006/03/26(日) 17:25:23
パズルみたいなのはダメでしょう。
997デフォルトの名無しさん:2006/03/27(月) 01:25:57
1000
998デフォルトの名無しさん:2006/03/27(月) 01:28:18
>>1
おかしくない!!
999デフォルトの名無しさん:2006/03/27(月) 01:29:07
勝手に他の言語の概念持ち込む方がおかしい。
1000デフォルトの名無しさん:2006/03/27(月) 01:45:59
よく続きました。
これで終了します。
この話題はもはやこれ以上続きません。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。