C言語のポインタの文法はおかしい
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/05/07(土) 07:40:23p ; // intの値の変数へのポインタ
*p ; // int の値
int n ; // intの値の変数の宣言
n ; // intの値
&n ; // intの値の変数へのポインタ
↑これって不自然じゃない?
どうして↓のようにしなかったの?
int $p ; // intの値へのポインタ変数の宣言
$p ; // intの値の変数へのポインタ
p ; // int の値
int n ; // intの値の変数の宣言
n ; // intの値
$n ; // intの値の変数へのポインタ
0002デフォルトの名無しさん
2005/05/07(土) 07:44:22int n ; // intの値の変数の宣言
p = &n ; // intの値へのポインタの代入
*p = n ; // intの値の代入
というよりも、
int $p ; // intの値へのポインタ変数の宣言
int n ; // intの値の変数の宣言
$p = $n ; // intの値へのポインタの代入
p = n ; // intの値の代入
のほうが、すっきりすると思うのだけど。
0003デフォルトの名無しさん
2005/05/07(土) 07:47:42終了
0004デフォルトの名無しさん
2005/05/07(土) 08:01:33根本的に誤解
0005デフォルトの名無しさん
2005/05/07(土) 08:05:280006デフォルトの名無しさん
2005/05/07(土) 08:10:23wwwwwwwwwwwwwうぇwwwwwwっうぇおkwww
っ
wwwおkwwwwwwwwwwwwwwww
wwwwwおkwwwwwwwwwwwwwww
0007デフォルトの名無しさん
2005/05/07(土) 08:11:49Perl風に$でアドレス表すことにするなら、
int $p;
っていう宣言はおかしい。pは使うときは普通に$つけずに普通にpで使うんだから、宣言は
int p;
でしょ。ということは、普通のintと同じことになるから、型に厳しいCとしては、ポインタ型っていうのを別に作ったんじゃないの、たぶん
0008デフォルトの名無しさん
2005/05/07(土) 08:19:440009デフォルトの名無しさん
2005/05/07(土) 08:21:29int p; // intの値の変数の宣言
S(p); // intの値の変数へのポインタ
p; // int の値
int n; // intの値の変数の宣言
n; // intの値
S(n); // intの値の変数へのポインタ
0010デフォルトの名無しさん
2005/05/07(土) 08:24:110011デフォルトの名無しさん
2005/05/07(土) 08:27:57参照とはある変数の別名を持った変数であり,次の構文で宣言される.
データ型& 参照する名前 = 変数名;
と記述する.例えば,
int n = 44;
int& rn = n;
と宣言すると,rnはnの参照である.素人の言葉で説明すると,参照とは芸名みたいなもので, 名前は違うけれど,名前が指している人は同じ人ということである.
0012デフォルトの名無しさん
2005/05/07(土) 08:29:120013デフォルトの名無しさん
2005/05/07(土) 08:34:54うはっwwwwwwwwwwwwwwwwwwwっw
wおkwww
うはっwww
wwwwwwうはっwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0014デフォルトの名無しさん
2005/05/07(土) 08:38:170015きそちしきだから、ほかのひとにじまんしちゃだめだよ
2005/05/07(土) 08:54:01int& 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 と同じ
0016デフォルトの名無しさん
2005/05/07(土) 08:54:410017デフォルトの名無しさん
2005/05/07(土) 09:11:51■■■■ スレ終焉 ■■■■
0018デフォルトの名無しさん
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++
みたいな。
0019デフォルトの名無しさん
2005/05/07(土) 10:49:15>inc edi ;n++
??
add esi,4 ; sizeof int
add edi,4
0020デフォルトの名無しさん
2005/05/07(土) 11:48:28・・・って、perlの作者の人が言ってなかったか?
0021デフォルトの名無しさん
2005/05/07(土) 11:55:00まったくそういうことだな。
今の政治が気に食わないなら自分が総理大臣になれっていう
捨て台詞を吐く友人がむかつく。
0022デフォルトの名無しさん
2005/05/07(土) 12:02:38S(p) = S(n) ; // pのアドレスをnのアドレスで上書き
配列をポインタみたく扱うようなもの。
pがリファレンスじゃなかったら、メモリー回収できなくなるでしょ。
0023デフォルトの名無しさん
2005/05/07(土) 12:45:35変な拘束ゲーム始めた >>1は
気付かなかったみたいだけどw
0024ウンコ
2005/05/07(土) 13:51:53* コンパイル方法:
* 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;
}
0025デフォルトの名無しさん
2005/05/07(土) 13:55:570026デフォルトの名無しさん
2005/05/07(土) 14:52:490027デフォルトの名無しさん
2005/05/07(土) 15:43:150028デフォルトの名無しさん
2005/05/07(土) 17:15:10void main(void)
void main(int argc, char *argv[])
int main(int argc, char *argv[])
正式な形式はこうだ。
int main(int argc, char **argv, char **envp)
0029デフォルトの名無しさん
2005/05/07(土) 17:21:56職業的プログラマーの俺に言わせれば、
動けば良いのだよ、なんであっても・・・
0030デフォルトの名無しさん
2005/05/07(土) 17:27:380031デフォルトの名無しさん
2005/05/07(土) 17:28:570032デフォルトの名無しさん
2005/05/07(土) 17:34:56どうでもいい。
俺は逆に、コマンドラインパラメータを使わなかったり、戻り値チェックしないなら、
void main( void )
で明示してる(していた)。
0033ウンコ
2005/05/07(土) 17:39:26答え出したぞ。早くどっちがいいか確認しろ
0034デフォルトの名無しさん
2005/05/07(土) 17:48:29初心者はそう書きたがるんだけど、
必要ないものは省略するのがCの慣習なのだよ。
0035ウンコ
2005/05/07(土) 17:54:05Cのスタートアップルーチンは、
単に _mainラベルを C言語呼び出し規約で呼び出すだけだからな。
C++と違って、なんでもいいんだよ。
残念
0036デフォルトの名無しさん
2005/05/07(土) 17:55:300037デフォルトの名無しさん
2005/05/07(土) 18:08:19C言語上は main 識別子を必ず使えよアフォ。
マクロ定義してからヤレ。
#define 姪 main
#define 切腹 exit
00381
2005/05/07(土) 18:19:24C言語のポインタは、変数の型の一つに過ぎない
というまっとうなことを言えたのは、誰もいないな。
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値の変数へのポインタ値
どうだ、スッキリしたろ。
00391
2005/05/07(土) 18:20:40#define REF(x) (*(x))
#define PTR(x) (&(x))
0040デフォルトの名無しさん
2005/05/07(土) 18:26:51当方28歳なんだけど、告ったらふられるかな??
どう思う???
0041デフォルトの名無しさん
2005/05/07(土) 18:28:310042デフォルトの名無しさん
2005/05/07(土) 18:49:20>>1-2見て、池沼だと思った。
やっとポインタ覚えたのねw
で、プログラムはいつ書けるようになる予定?
0043デフォルトの名無しさん
2005/05/07(土) 18:50:54>>24が正解、
>>38-39はルール変更で失格
てことで。
===============終了===============
0044デフォルトの名無しさん
2005/05/07(土) 19:10:13typedefすりゃいいって、そういう問題じゃないだろ。
0045デフォルトの名無しさん
2005/05/07(土) 19:14:46+と++の違い程度ならまだ許せるけど
a*b の*は掛け算で、 *bとなったらポインタってのは
納得できないと思うよ
そういう仕様 の一言で片付けるには納得しがたい
なぜ*という記号をポインタに選んだのか
その理由を答えろ!カーニハン!
0046デフォルトの名無しさん
2005/05/07(土) 19:15:58・演算子をマクロに置き換えて、あと
・typedef やっと覚えた、
だけだろう。
>typedef int *inp_ptr;
>#define REF(x) (*(x))
ポインタ演算子 '*' → マクロ REF(x)
>#define PTR(x) (&(x))
ポインタ演算子 '&' → マクロ PTR(x)
0047デフォルトの名無しさん
2005/05/07(土) 19:20:11*である必然性はないわな。
#でも$でも@でもいいだろうし。
なぜあえて掛け算記号と重複させたのか?というのは疑問だ。
0048デフォルトの名無しさん
2005/05/07(土) 19:25:05うぇwwwうはっwwwうぇwwwwwwwwwうはっwww
wwwwwwwwwwwwっうぇっwww
wwwwwwwwwwww
っっうぇ
っうぇうはっwww
0049デフォルトの名無しさん
2005/05/07(土) 19:26:06XORかよ!
0050Cだけじゃねぇ〜よ
2005/05/07(土) 19:40:01普通のKBとフォントじゃ書けないw
・昔の非ASCII文字コードを使ったマシンでは、
演算子にできる文字が極めて少ない
(現在の半分くらい。どうしても書けない記号はトライコード(K&R)で書く)
・Smalltalkの演算子もかなり変。
AltoPC上: ↑値
現在: return 値
0051デフォルトの名無しさん
2005/05/07(土) 20:13:45func1( int *a )
{
}
func2( int a )
{
}
hoge()
{
int *a, b;
a = *b;
b = &a;
func1( *b );
func2( &a );
}
のほうが自然だよなあと思う。
0052デフォルトの名無しさん
2005/05/07(土) 20:19:080053デフォルトの名無しさん
2005/05/07(土) 20:21:33英語キーボードの*の位置をよく観察すれば答えがわかるはず
っていうか、記号の使いまわしは仕方が無いと思うけどな
とりあえず、C言語では一通りの記号を使いきっているわけだし
しいて言うなら「_」が演算子としては余っているけど、ねぇ?
0054デフォルトの名無しさん
2005/05/07(土) 20:25:400055デフォルトの名無しさん
2005/05/07(土) 20:28:420056デフォルトの名無しさん
2005/05/07(土) 20:38:07おまえ、カーニハンか? 元気だった?
ところで、&と*が並んでるからとか、そういう理由なのか?
答えろ!カーニハン!
@とかあまってたジャンよ
0057デフォルトの名無しさん
2005/05/07(土) 20:45:43pdp11のアセンブラの
アドレッシングモードの
間接参照の文法からきている...そうです。
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
0058デフォルトの名無しさん
2005/05/07(土) 20:47:05_も演算子なのか?
0059デフォルトの名無しさん
2005/05/07(土) 20:47:54~は、AWK (Aho-Wainberg-Kernighan)で、パターンマッチ用に使用済。
ちゅぅか、'>>'演算子, '<<'演算子の優先順位の設計ミスをなんとかしてほしい。
0060デフォルトの名無しさん
2005/05/07(土) 20:49:45最低限「演算子順位文法」とそのパース方法をマスターする
努力をすることw
0061デフォルトの名無しさん
2005/05/07(土) 20:53:230062デフォルトの名無しさん
2005/05/07(土) 21:01:590063デフォルトの名無しさん
2005/05/07(土) 21:33:230064デフォルトの名無しさん
2005/05/07(土) 21:37:37今思い出したーよ。
皆がその役目を忘れてる
'~'タン、カワイソ
0065デフォルトの名無しさん
2005/05/07(土) 22:57:300066デフォルトの名無しさん
2005/05/07(土) 22:59:180067デフォルトの名無しさん
2005/05/07(土) 23:01:000068デフォルトの名無しさん
2005/05/07(土) 23:06:240069デフォルトの名無しさん
2005/05/07(土) 23:09:35自虐的だな
0070デフォルトの名無しさん
2005/05/07(土) 23:11:34a-=b;
a|=b;
a&=b;
a==b;//これこそ、真の代入ではなかろうか…
0071デフォルトの名無しさん
2005/05/07(土) 23:27:220072デフォルトの名無しさん
2005/05/07(土) 23:28:24a=bの結果をaに代入するってことか。
つまりa=bと同じだな。
0073デフォルトの名無しさん
2005/05/07(土) 23:35:30C言語にデストラクタなどないw
0074デフォルトの名無しさん
2005/05/07(土) 23:47:55int i ;
} St ;
St s, *sp ;
sp = &s ;
s.i=1 ;
sp->i=2 ;
(*sp).i=3 ;
sp[0].i=4 ;
0075デフォルトの名無しさん
2005/05/08(日) 00:32:39C言語で書かれたプログラムだ。
いろいろな意味で、一番タチが悪い。
0076デフォルトの名無しさん
2005/05/08(日) 00:36:23Source Please !!
VB だって、COBOL だって負けてはないと思うが。
0077デフォルトの名無しさん
2005/05/08(日) 04:01:11そうか、むしろJavaとかの方が多い気がする、適当に書いてもそれなりに動くから、かなりフィックスされないバグが多い気がする。
0078デフォルトの名無しさん
2005/05/08(日) 14:21:050079デフォルトの名無しさん
2005/05/08(日) 16:57:48int a, *p, **pp;
int f();
これで a も *p も **pp も f() もみんな int型。
シンプルだろ。
int *p; は p が intポインタ型という意味じゃなくて *p が int型と読むんだよ。
だから、
int* p; なんてキモい表記はするなよ。
0080デフォルトの名無しさん
2005/05/08(日) 16:58:400081デフォルトの名無しさん
2005/05/08(日) 17:03:370082デフォルトの名無しさん
2005/05/08(日) 18:09:340083デフォルトの名無しさん
2005/05/08(日) 19:05:180084デフォルトの名無しさん
2005/05/08(日) 19:07:21似たようなので、構造体の任意のメンバの
先頭からのオフセットをコンパイル時に数値で得る方法
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);
0085デフォルトの名無しさん
2005/05/08(日) 22:22:23んなことしなくても規格にちゃんとマクロ offsetofがある。
offsetofが何をしているかということを考える意味では84のコードも役立たずではないが。
0086デフォルトの名無しさん
2005/05/09(月) 12:13:41空ポインタがアドレス0の位置を指すという保証はないからね。
0087デフォルトの名無しさん
2005/05/09(月) 14:43:30それは一見、一理あるが・・・
int a, *p, **pp ;
と宣言した時に、メモリ上に確保されるのは、
a、*p、**pp
ではなく、
a、p、pp
なんだよね。
*pや**ppがint型と読むのなら、
*pや**ppのメモリが確保されるべきじゃない?
0088デフォルトの名無しさん
2005/05/09(月) 14:45:31ちがう。
*(何か)NULL
ならば、NULLポインタが0番地という保証はないかもしれないが、
*(何か)0
ならば、0番地という保証があるでしょう。
というかNULL == 0って言語仕様で決まってたような・・・。
0089デフォルトの名無しさん
2005/05/09(月) 15:04:26「空ポインタ」と「空ポインタ定数」の違い。わかるかな?
0をポインタに変換したときに、0番地に変換される保証はないの。
0090デフォルトの名無しさん
2005/05/09(月) 15:44:34そうだっけ
近年は保証するように変わった記憶があったけど
0091デフォルトの名無しさん
2005/05/09(月) 16:03:540番地にアクセスできなくなるから、有り得ない。
0092デフォルトの名無しさん
2005/05/09(月) 16:10:30規格読んだけど見あたらない。
古い資料だけどこういう主張もある。
ttp://www.kouno.jp/home/c_faq/c5.html#16
0093デフォルトの名無しさん
2005/05/09(月) 17:15:52でもおかしいよね
アドレス0にアクセスする方法が無いのが根拠だとしたら
特別なビットパターンであらわされるアドレスにアクセスする方法も無いよね
0094デフォルトの名無しさん
2005/05/09(月) 17:31:50何の話だ? 藪から棒に。
0095デフォルトの名無しさん
2005/05/09(月) 17:43:41「特別なビットパターンであらわされるアドレス」は、普通はもともと(仮想)メモリの外にある。
空ポインタにアドレス0を割り当ててる場合でも事情は同じ。
0096デフォルトの名無しさん
2005/05/09(月) 20:03:56stddef.hに定義されているoffsetofマクロも>>84と
同じじゃん。
貴方の主張が正しいなら
#define offsetof(s,m) (size_t)&(((s *)0)->m) - (size_t)&((s *)0)
こんな感じにしなきゃいけないと思うが。
本来の意味からすれば相対的な位置を知りたいんだから
自分はこっちが正しい気がする。
0097デフォルトの名無しさん
2005/05/09(月) 20:51:42ポインタ使わずに済むなら、使わない方が良い、ってことだ。
バグのもとだし、後から見て分かり難いプログラムになるからな。
キチガイみたいにポインタのポインタのポインタのポインタとか
使って書かれてるプログラムを見せて、自慢げに講釈たれてる
自称スーパープログラマーが昔会社にいたなぁ・・・
0098デフォルトの名無しさん
2005/05/09(月) 20:56:140099デフォルトの名無しさん
2005/05/09(月) 20:59:480100デフォルトの名無しさん
2005/05/09(月) 21:02:430101デフォルトの名無しさん
2005/05/09(月) 23:51:06>使って書かれてるプログラムを見せて、自慢げに講釈たれてる
>自称スーパープログラマーが昔会社にいたなぁ・・・
俺の最高記録は * 4つだが、
* 5つ以上を使った事のある奴
(もちろん意味のあるコードで)
っている?
0102デフォルトの名無しさん
2005/05/10(火) 00:21:35構造体も一種のポインタと考えて良いなら、5個まで
0103デフォルトの名無しさん
2005/05/10(火) 09:26:230104デフォルトの名無しさん
2005/05/10(火) 10:18:06じゃぁどうやって0番地にアクセスするの。
そもそも、ポインタの値 = アドレスとは限らないよね。
メモリの特定のアドレスへのハンドルだと思ったほうがいいのかな。
ポインタのポインタって無意識のうちに使わない?
a->b->c->d->e
なんていうのも、そうなんだしさ。
0105デフォルトの名無しさん
2005/05/10(火) 12:36:17> じゃぁどうやって0番地にアクセスするの。
Cから直接アクセスできればそれを使えばいいし、できなければアセンブラでも使えばいい。
アドレス指定でアクセスするという行為自体が環境に強く依存するんだから、
移植性は気にする必要はないだろう。
0106デフォルトの名無しさん
2005/05/10(火) 12:45:58C のソース上、ポインタとして定数「0」が記述された場合、
それは NULL ポインタとして判断される。
NULL ポインタ値の実装値が、
All 0 のビットパターンであるかどうかは環境依存。
0107デフォルトの名無しさん
2005/05/10(火) 12:59:12LispでもCでも、明示的なデータ構造なり型を定義せず書くのは、
デッサン画のようなもの
0108デフォルトの名無しさん
2005/05/10(火) 13:20:06あれは型を隠蔽してしまうから、もちろんそのために使うんだけど
たとえば time_t
こう書かれちゃうと、一瞬「これって比較していいんだっけ?」と
躊躇してしまうよ。結局一度はtypedefの定義元を必ず参照する。
ポインタとは関係ない話だけど
0109デフォルトの名無しさん
2005/05/10(火) 13:27:39>あれは型を隠蔽してしまうから、もちろんそのために使うんだけど
型を隠蔽?はぁ?
0110デフォルトの名無しさん
2005/05/10(火) 13:29:16実装を抽象して、
抽象データ型に近づけるためのもの。
アセンブラで16進コード弄り倒す人間には、関係ないけどなw
0111デフォルトの名無しさん
2005/05/10(火) 13:34:16隠蔽するじゃん
0112デフォルトの名無しさん
2005/05/10(火) 13:41:57ガッ
ガッ
0113デフォルトの名無しさん
2005/05/10(火) 13:43:11wwwwwwwwwwwwうぇwwwっっうぇっwwwwww
wwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwうはっwww
0114デフォルトの名無しさん
2005/05/10(火) 13:50:40typedefは、型を定義するもの。
データ構造の実装を抽象=隠蔽して、
宣言的なデータ構造に近づけるのが目的。
もちろん、16進ダンプおっかけるような仕事には無関係だけどなw
0115デフォルトの名無しさん
2005/05/10(火) 23:21:520116デフォルトの名無しさん
2005/05/10(火) 23:45:100117デフォルトの名無しさん
2005/05/11(水) 00:06:54おまえが本当に馬鹿なのはよくわかった。消滅しろ
0118デフォルトの名無しさん
2005/05/11(水) 00:10:25ここに常駐してるバカは、
概念と単語の結びつきが特殊だからな。
"int *p"の"int *"が「型定義」と妄想しているのだろうな(ぷ
0119デフォルトの名無しさん
2005/05/11(水) 00:12:04typedef 型定義 の検索結果のうち 日本語のページ 約 15,600 件中 1 - 50 件目 (0.15 秒)
0120デフォルトの名無しさん
2005/05/11(水) 00:15:430121デフォルトの名無しさん
2005/05/11(水) 00:18:19素人イジメ倒すの(・Λ・)イクナイ。
もっと、お母さんみたいに優しく教えなきゃ、かわいそうだよ
0122115-116
2005/05/11(水) 00:19:310123デフォルトの名無しさん
2005/05/11(水) 00:22:01むしろ逝�`
0124デフォルトの名無しさん
2005/05/11(水) 00:25:280125デフォルトの名無しさん
2005/05/11(水) 00:26:44wwwwwwwwwwwwうぇwwwっっうぇっwwwwww
wwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwうはっwww
0126デフォルトの名無しさん
2005/05/11(水) 00:31:23wwwwwwwwwwwwうぇwwwっっうぇっwwwwww
wwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwうはっwww
0127デフォルトの名無しさん
2005/05/11(水) 03:35:59http://192.168.0.1/
ワロタ
0128デフォルトの名無しさん
2005/05/11(水) 08:37:040129デフォルトの名無しさん
2005/05/11(水) 09:52:53それはあなたの持っているコンパイラのstddef.hがそうなってるってだけでしょ?
規格でそう実装しろといってる訳じゃない。
空ポインタがアドレス0の環境なら>>84で十分。
違う環境なら違うように書くでしょ。
0130デフォルトの名無しさん
2005/05/11(水) 23:06:43int sum;
for(int i=0; i < 12; i++) { sum = sum + mozi[i]; }
このようにすれば変数moziの1バイトごとの合計値は求めれると思うのですが
2バイトごとに求めるにはどうしたらいいでしょうか?教えてくださいお願いします。
0131130
2005/05/11(水) 23:08:370132デフォルトの名無しさん
2005/05/12(木) 00:47:550133デフォルトの名無しさん
2005/05/12(木) 01:29:30>>130のこと?
かわいそうなので解答。
for(int i=0; i < sizeof(mozi)/sizeof(short); i++) { sum = sum + ((short*)mozi)[i]; }
0135130
2005/05/12(木) 10:53:360136130
2005/05/12(木) 13:07:390137130
2005/05/12(木) 13:10:010138デフォルトの名無しさん
2005/06/10(金) 11:01:27一、型修飾子と間接参照演算子がカブっている。
宣言系と演算系の性質の全く違う記号がカブっている上に
型修飾子を型につけても変数名につけてもいいという
無意味な自由度のせいで
余計に見にくくなっている。
二、積の算術演算子とカブッている。
性質がまるで違っていて
他に使える記号があるのになんでわざわざ
算術演算子とカブらせるのか。無意味に見にくい。
0139デフォルトの名無しさん
2005/06/10(金) 23:51:350140デフォルトの名無しさん
2005/06/11(土) 03:45:02そこでオーバーロードですよ。
0141デフォルトの名無しさん
2005/06/11(土) 03:54:02もともと参照の意味で使ってたとか
0142デフォルトの名無しさん
2005/06/11(土) 04:04:55上で既出だった…
0143デフォルトの名無しさん
2005/06/11(土) 14:01:160144デフォルトの名無しさん
2005/06/11(土) 22:26:34point( )とか
refer( )とかでよかったんでは。
0145デフォルトの名無しさん
2005/06/11(土) 22:47:000146デフォルトの名無しさん
2005/06/11(土) 22:50:150147デフォルトの名無しさん
2005/06/12(日) 00:02:290148デフォルトの名無しさん
2005/06/12(日) 13:06:46記述上の区別がないのは煩雑だと思わないか?
int型ポインタ型の変数と、ただのint型変数を
記述上で全く区別しなくていいわけだ。
どっちも "a" だとか "b" っていう名前だけで定義できてしまう。
記述を見ただけじゃ型付きポインタ型変数か普通の変数だかもわからないし
指し型もわからない。
$でも何でもいいから
せめてポインタ型かそうでないかの区別くらいあったほうがいいんじゃなかろか
0149デフォルトの名無しさん
2005/06/12(日) 13:14:40pointer<int> pi;
0150デフォルトの名無しさん
2005/06/12(日) 14:19:40ここは例外として
*<int> ptr;
でOKとか。*は型名って事で。
ptr->deref, ptr = var->ref ...
0151デフォルトの名無しさん
2005/06/12(日) 14:22:070152提案
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
0153デフォルトの名無しさん
2005/06/12(日) 14:49:26今後、掛け算には新たに x を使用します。
変数名としての1文字単独の x は禁止します。
0154デフォルトの名無しさん
2005/06/12(日) 14:52:36文字だと単項演算子と、くっつけて書く場合に問題が出る。
Count*=3;
を
Countx=3; にしたら意味が変わってしまうし
記号だと iA*iA といったくっつけた書き方ができるが
文字のxだと
iAxiA で違う名前になってしまう。
0155デフォルトの名無しさん
2005/06/12(日) 15:06:45NODE *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;
}
↑本に載ってた
0156デフォルトの名無しさん
2005/06/12(日) 15:08:49NODE *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文のかっこがぬけてるかも。
0157デフォルトの名無しさん
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;
}
0158デフォルトの名無しさん
2005/06/12(日) 15:18:27離して書けよバカ
0159デフォルトの名無しさん
2005/06/12(日) 15:24:17既存のコードも全部そうするのかよ。
そんなクソ文法を考えるセンスが素晴らしいな。
0160デフォルトの名無しさん
2005/06/12(日) 18:09:440161デフォルトの名無しさん
2005/06/12(日) 18:30:040162デフォルトの名無しさん
2005/06/12(日) 19:18:230163デフォルトの名無しさん
2005/06/13(月) 01:38:27演算子をなんでもくっつけられると思ってんじゃねーぞ
ポインタ同士の割り算は離して書くだろうが
括弧をつけるとか言い訳すんじゃねーぞ
ホントお前は知恵足りんだな
0164デフォルトの名無しさん
2005/06/13(月) 01:45:190165デフォルトの名無しさん
2005/06/13(月) 01:53:24悔しかったら煽りじゃなくて反論をしてみせろ
0166デフォルトの名無しさん
2005/06/13(月) 02:11:41悔しがってるのはお前だろw
ちょっと批判されたくらいで熱くなり過ぎ。
お前がいいと思うんなら勝手にそう思ってりゃいいよ。
0167デフォルトの名無しさん
2005/06/13(月) 04:06:42ハンガリアンのごとく嫌われそうな希ガス
0168デフォルトの名無しさん
2005/06/13(月) 07:43:49第三者からみるとどうでもいい
0169デフォルトの名無しさん
2005/06/13(月) 09:58:160170デフォルトの名無しさん
2005/06/13(月) 15:07:45まず
>ポインタ同士の割り算は
「頭悪いなー」と気付かないと。
0171デフォルトの名無しさん
2005/06/13(月) 16:00:50ポインタのポインタはppに
ポインタのポインタのポインタはpppに
となっちゃうんですかねやっぱり
0172デフォルトの名無しさん
2005/06/13(月) 16:12:57イヤニナルナ・・・
0173デフォルトの名無しさん
2005/06/13(月) 16:19:580174デフォルトの名無しさん
2005/06/13(月) 16:45:09*の代わりにpを使うんじゃね?
0175デフォルトの名無しさん
2005/06/13(月) 20:01:02などという
ひとりよがりの型を作るやつは
スパゲッティと同じで嫌われそう
0176デフォルトの名無しさん
2005/06/13(月) 20:36:42宣言時が違う
0177デフォルトの名無しさん
2005/06/13(月) 22:39:34ポインタのポインタのポインタぐらいまでは普通に必要。
0178デフォルトの名無しさん
2005/06/14(火) 09:09:36>call_function()
()演算子を廃止して、関数を呼び出す関数を作るとすると
関数を呼び出す関数をで呼び出すわけだから、それを呼び出す演算子はcall_functionで…
call_function call_function call_function call_function call_function call_function...
こんなかんじか?
0179デフォルトの名無しさん
2005/06/18(土) 21:37:450180デフォルトの名無しさん
2005/06/19(日) 05:22:45ポインタの糞なところを指摘し
改良しようという立派な意味が。
0181デフォルトの名無しさん
2005/06/19(日) 06:47:44ptr<int> p; //int型ポインタの宣言
p = ptr_of(a); // ptr_of演算子
0182デフォルトの名無しさん
2005/06/19(日) 07:31:24ポインタの糞と思うとこを指摘して、誰かがが改良するのを待つという意味だろ
それとも、オマエが改良できるのか?(´,_ゝ`)
0183デフォルトの名無しさん
2005/06/19(日) 07:37:26意味わからんな。
改良なんて誰がしたっていいだろ。
こうしてみんなで意見を出し合えば、
やってくれる香具師も出てくるってもんだ。
グダグダ言ってないで君も何か案を出しなさいよ。
もしかしたら開発言語界の寵児になれるかも知れんよ。
0184デフォルトの名無しさん
2005/06/19(日) 08:22:160185デフォルトの名無しさん
2005/06/19(日) 09:18:380186デフォルトの名無しさん
2005/06/19(日) 19:00:56ポインタであるということを意識させないのは
すごい画期的なアイデアだと思うんだが
>>183はきっと気づいていないんだろうな
0187デフォルトの名無しさん
2005/06/19(日) 19:15:52C 以前から参照渡しの言語はあったが、C はそれを選択しなかっただけ
アイデアを出した所で、実装が出来る人間はそんな事には確実に興味が無い
何で今更互換性を無視してまで C を改良しなくちゃいけないのか…
0188デフォルトの名無しさん
2005/06/19(日) 20:53:02これだけ多くの人がつまづき、バグの元になっている現状を見なさい。
ポインタという欠点を放置しておくことはC言語業界の損失だよ。
解決できれば、互換性を捨ててでも乗り換える価値がある。
0189デフォルトの名無しさん
2005/06/19(日) 21:15:05C++でもポインタを生のまま使いたがる人の存在はどう説明する?
0190デフォルトの名無しさん
2005/06/19(日) 21:34:12それは単に保守的なだけと思うが。
無理にC++を使わされてるCプログラマと思う。
彼らは被害者なのだから、いたわりなさい。
0191デフォルトの名無しさん
2005/06/19(日) 21:41:55ポインタであることを意識しないと非常に不安なんだが…。
つーか、意識しない人間がCのポインタで色々やらかしてる気がする。
意識したくないなら、他言語に移ればいいだけだと思うよ。
0192デフォルトの名無しさん
2005/06/19(日) 21:44:31信仰があったが、今は高性能なコンパイラの最適化により、
同じ処理をポインタ使うもの/使わないもの、2つ書いても
両方ともほとんど同じアセンブラコード出力すっどえ。
これは実験してみれば簡単に目で確かめることができる。
C#の選択は正しいど。
0193デフォルトの名無しさん
2005/06/19(日) 21:49:18CわかってるやつにJavaを教えるときは
「あれ全部ポインタだから」と言うようにしてる。
何の言語でアレ、わかってないやつは
なにをやってもだめだし、すぐ理解するやつは
なにやってもそつなくこなす。だからどうでもいい
0194デフォルトの名無しさん
2005/06/20(月) 00:19:05で、int *p を ptr <int> p と書けば、多くの人は躓かなくなるのか?
0195デフォルトの名無しさん
2005/06/20(月) 02:44:17$と#を使えばよかったのに
int# pA = pB ;
$pA = 10 ;
とかにすれば・・・。
>>189
C++でポインタを生のまま使わない方法ってどんなの?
0196デフォルトの名無しさん
2005/06/20(月) 03:17:18ポインタなんて嵩が知れてると思うが…
自分のレベルでしか物事を判断出来ないようね。
0197デフォルトの名無しさん
2005/06/20(月) 03:24:380198デフォルトの名無しさん
2005/06/20(月) 03:32:08デバッグとかテストとか、禁じられてる国から来た人ですか?
0199デフォルトの名無しさん
2005/06/20(月) 03:45:20参照を使ったり、vectorなどのコンテナを使ったりってことだろ。
0200デフォルトの名無しさん
2005/06/20(月) 04:05:39君こそ自分の視野だけで物事を計ってるだろ。
君は書店に糞ほどポインタの解説本・攻略本が
並んでる現状をどう見る?
難解だからという以外の評価があるかね。
ポインタはCの恥部でありガンなんだよ。
0201デフォルトの名無しさん
2005/06/20(月) 04:45:01ポインタがなければ C は価値を失う。
理解出来ないなら、そうまで必死に C を使おうなどとしなければ
幸せになれるのに。
0202デフォルトの名無しさん
2005/06/20(月) 05:35:01サンクス
参照やSTLはポインタよりも使うのが難しいと思う。
>>198
規模が大きくなればなるほど、
デバッグやテストでバグをゼロにすることはできません。
0203デフォルトの名無しさん
2005/06/20(月) 05:50:48それって入り口でつまずいた人の為に用意されている物でしょ。
自分で解決の糸口を見つけられない人の補助教材。
入り口を抜けられた後にも当然 C の問題はある訳でしょう。
メモリマネージメントとか、他の言語ではカバーされていても
C では環境依存になる様な処理とか。そういうのを含めると、
ポインタの記法は些末な事と言っても良いと思うんだよね。
スレタイにある様に、C のポインタの記法はクセがあると思う
けど、今から仕様を変更するだけの労力に見合う物じゃないと
思う訳。STL が難しい人に、皆に受け入れられる提案が出来る
とは思えないよ。
0204デフォルトの名無しさん
2005/06/20(月) 07:08:18バグを0にできると信じてる方ですか?
0205デフォルトの名無しさん
2005/06/20(月) 07:20:39>参照やSTLはポインタよりも使うのが難しいと思う。
Javaについてはどう思う? 一般的にはCより難しくないと言われているが。
#あれは私にとってはポインタを生で触れなくて使い難く感じるのだが。
0206デフォルトの名無しさん
2005/06/20(月) 10:25:24あれはガベコレあってのことだからなあ。
0207202
2005/06/20(月) 16:15:39まさか。
でも規模が小さければバグがゼロということもありうるよ。
たとえば
int add(int a, int b) {
return a+b ;
}
とかになると、仕様の書き方しだいでバグがゼロになってしまう。
って、そんな非現実的な話はどーでもいいっすね。
>>205
Javaは常に参照なので難しくないと思います。
使い方を間違えにくいですから。
C++は参照とそうではないものが混在して、
使い方を間違うと混乱のもとになるので難しいです。
0208デフォルトの名無しさん
2005/06/29(水) 10:21:49const 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;
0209デフォルトの名無しさん
2005/06/29(水) 11:41:16がねぇぞ!w
先頭constは仲間外れな気はするな。
0210デフォルトの名無しさん
2005/06/29(水) 11:43:57tmp.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'
0211デフォルトの名無しさん
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;
}
0212デフォルトの名無しさん
2005/06/29(水) 13:01:34char 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;
0213連投スマソ
2005/06/29(水) 13:02:230214デフォルトの名無しさん
2005/06/30(木) 03:21:590215デフォルトの名無しさん
2005/06/30(木) 06:22:510216デフォルトの名無しさん
2005/06/30(木) 15:58:040217デフォルトの名無しさん
2005/07/01(金) 12:34:55むずかしいです。
0218デフォルトの名無しさん
2005/07/01(金) 13:08:44難しいと思うのは邪念がある所為。
心眼を持ってすれば同じものであることが判る筈。
0219デフォルトの名無しさん
2005/07/01(金) 13:25:23なんだか徐々にわかってきました。
でもまだ難しいです。
0220デフォルトの名無しさん
2005/07/02(土) 00:11:51フラフープを手に持って走り回るのがJavaの参照
0221デフォルトの名無しさん
2005/07/02(土) 02:26:440222デフォルトの名無しさん
2005/07/02(土) 02:31:14JAVAはヤリたい放題だけどCは窮屈ってことでしょうか?
0223デフォルトの名無しさん
2005/07/02(土) 02:32:060224デフォルトの名無しさん
2005/07/02(土) 09:20:160225デフォルトの名無しさん
2005/07/02(土) 10:14:45JAVAが子供ってことじゃないの?
0226デフォルトの名無しさん
2005/07/02(土) 17:48:11C++だとポインタより参照の方が早くて、constをつけるともっと早いと聞きました。
JAVAの参照も早いですか?
0227デフォルトの名無しさん
2005/07/02(土) 17:51:470228デフォルトの名無しさん
2005/07/02(土) 17:58:57「早い」かどうかは知らんが、const参照はより「速く」なる可能性がある。
0229デフォルトの名無しさん
2005/07/02(土) 18:15:150230デフォルトの名無しさん
2005/07/02(土) 18:47:26Cではどれにも使える魔法のような存在。
C++では参照がほしいなら参照を、イタレータがほしければイタレータを使えばいいし、NULLかもしれないというのはboost::optionalがある。
イタレータを使うとは言ってもstd::vectorやboost::arrayでは結局ポインタ型に帰着するだろうけどそこは気にしない。
0231デフォルトの名無しさん
2005/07/02(土) 18:50:39Cからポインタとったら何も残らない希ガス・・・
C++のポインタと参照ならびにconst修飾子をつけた
場合の差異については、コンパイラにアセンブラ
ソースを吐かせて比べてみてはどう?
0232デフォルトの名無しさん
2005/07/02(土) 20:12:47それなら別にconstのありなし・参照かポインタかということは無関係。
その中でもconst参照だけが値渡しとまったく同じように使えるというだけの話。
0233デフォルトの名無しさん
2005/07/02(土) 21:10:270234デフォルトの名無しさん
2005/07/03(日) 01:51:13吐いてよいというのもあるかと。
0235デフォルトの名無しさん
2005/07/03(日) 13:45:25void hoge( const char *hoge ) と書いたときは
hogeを変更しないよ という宣言? それとも
*hogeを変更しないよ という宣言?
void hoge( char const *hoge ) と書いたときは
*hogeは保護されるとして、hoge[1]以降は?
0236デフォルトの名無しさん
2005/07/03(日) 14:35:06http://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]も変更できない。
0237デフォルトの名無しさん
2005/07/03(日) 14:38:16ありがとう
お礼に グーグルで「ポインタ」で検索してみて
0238デフォルトの名無しさん
2005/07/03(日) 14:38:380239デフォルトの名無しさん
2005/07/04(月) 01:35:070240デフォルトの名無しさん
2005/07/04(月) 03:47:15http://images.google.co.jp/images?q=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&hl=ja&lr=&c2coff=1&sa=N&tab=wi
http://www.limo.fumi2kick.com/tips/gtk_sprite2/spr2_screen1.jpg
0241デフォルトの名無しさん
2005/07/09(土) 01:05:51当然、互換性の観点から、デフォルトでは先頭constは警告なし。
が、イィと思うんだけどなぁ・・・
0242デフォルトの名無しさん
2005/07/09(土) 19:45:44そんなんでは人によりコード記述の流儀が違いすぎて
バグの元だし保守しづらくなる。
やはりCOBOLのように、誰が書いても同じコードになることが
業務系開発言語には最重要に思う。
てか、システム記述言語であるCを業務系に使うことが誤りなんだよな。
0243デフォルトの名無しさん
2005/07/09(土) 20:30:340244デフォルトの名無しさん
2005/07/09(土) 20:55:39>バグの元
流儀の違いがバグの元になるわけね〜。
解釈する能力が足りないからだろ。
0245デフォルトの名無しさん
2005/07/09(土) 21:41:05>やはりCOBOLのように、誰が書いても同じコードになることが
ほほぉ?
0246デフォルトの名無しさん
2005/07/09(土) 22:51:550247デフォルトの名無しさん
2005/07/09(土) 23:07:53わけがわからんことになりやすいって話だろ。
コーディング規約レベルでは守らないやつも出てくるし
言語である程度自由度を下げておくというアプローチもありでしょ。
0248デフォルトの名無しさん
2005/07/09(土) 23:16:28それは判るが、COBOLを引き合いに出した>242は問題の本質を判っていない気がする。
0249デフォルトの名無しさん
2005/07/09(土) 23:40:43あ、その業界でもそうかな?
0250ビル・ジョブス
2005/07/10(日) 00:38:47’$’(ドル記号)は通貨記号なのでソースの可読性を下げると考えられたから。
だた、**p***n;ってソースを見るとゲギョ!っと思うのはごもっとも。
以降、こちらでお願いしますです。<(_ _)>
C言語なら俺に聞け! Part 110
http://pc8.2ch.net/test/read.cgi/tech/1120596481/l50
0251デフォルトの名無しさん
2005/07/10(日) 00:40:06通常の変数のポインタは不自然じゃない。
それよか、関数ポインタの方が不自然。
int (*pproc)(void); // 関数ポインタ定義
int proc(void); // 関数プロトタイプ
pproc = proc; // ポインタコピーして
pproc(); // ポインタから実行
宣言としては、 (*pproc)() と proc() はint型を示すものとして理解できる。
ならば、 *pproc と proc はintを返す関数として理解できる。
なら、
pproc = &proc; // ポインタコピーして
(*pproc)(); // ポインタから実行
の方が自然じゃないのか???
0252デフォルトの名無しさん
2005/07/10(日) 01:07:19へっぴりジョブスは引っ込んでろ!
0254デフォルトの名無しさん
2005/07/10(日) 13:33:50昔は後者のようにしないと駄目だったようだが、
自然だということ以外メリットがないということで、
前者のルールになった。
ちなみにこんなこともできる。
(*******************printf)("hoge");
0255デフォルトの名無しさん
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がそうか。
0256デフォルトの名無しさん
2005/07/11(月) 21:18:26C++の純粋仮想関数だって=0みたいな気色悪いことやってるんだし。
0257デフォルトの名無しさん
2005/07/11(月) 22:16:38>C++の純粋仮想関数だって=0みたいな気色悪いことやってるんだし。
確かにあれはテラキモス。
0258デフォルトの名無しさん
2005/07/11(月) 22:22:270259デフォルトの名無しさん
2005/07/11(月) 22:44:52ポインタというものを変数の裏の顔というより、
ポインタ型という型として認めてやってからは矛盾を感じなくなった。
D言語ならint* foo,bar;でどっちもポインタ型にできるみたいで能動的。
0260デフォルトの名無しさん
2005/07/11(月) 22:57:44int* foo,bar;としてもポインタになるのはfooだけなんだよなぁ
0261デフォルトの名無しさん
2005/07/11(月) 23:05:45・・・あっ、そうしたのがJavaか・・・
0262デフォルトの名無しさん
2005/07/11(月) 23:12:020263デフォルトの名無しさん
2005/07/12(火) 04:30:02ことになるんだ?
0264デフォルトの名無しさん
2005/07/12(火) 15:52:290265デフォルトの名無しさん
2005/07/12(火) 17:32:23自然だとする根拠を、なぜ>>18で説明出来るのか?
ということなのだが。
0266デフォルトの名無しさん
2005/07/12(火) 18:15:530267デフォルトの名無しさん
2005/07/12(火) 18:16:47リファレンスとでリファレンスがちゃんとマップされてるから
0268デフォルトの名無しさん
2005/07/12(火) 18:47:05リニア(配列の類)なデータを渡されてそれをアセンブリで操作することをやったことがある?
無ければ直感的にはわからないかも。
0269デフォルトの名無しさん
2005/07/13(水) 02:20:47以上
以下、このスレは新言語原案募集スレになりました。(w
0270デフォルトの名無しさん
2005/07/13(水) 19:20:440271デフォルトの名無しさん
2005/07/13(水) 20:07:55なんでそう決めたのかの経緯を知ることも重要だろ
0272デフォルトの名無しさん
2005/07/13(水) 20:46:080273デフォルトの名無しさん
2005/07/13(水) 20:57:28代案の方がよっぽど変。
0274デフォルトの名無しさん
2005/07/13(水) 21:12:28E言語とF言語は欠番ですか?
0275デフォルトの名無しさん
2005/07/13(水) 22:32:15→H→愛→自衛
0276デフォルトの名無しさん
2005/07/14(木) 01:52:080277デフォルトの名無しさん
2005/07/14(木) 14:52:45どうよ。例えば次のように↓↓
<< 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.高級言語ではポインタを使わない方がデータ操作をスマートに記述できる
との理由のため、ポインタの使用を禁止しているコーディング規約が多い。
0278デフォルトの名無しさん
2005/07/14(木) 14:57:12>277 ようなコーディング規約が各社で運営されて
"それでもポインタ使う派"と、"新しい記述を推進する派"で、2chで終わりのない論争を
続けているだろう、と予想した。
さあ、だれか、 >277 を否定してみてよ!
さあ!さあ!!さあ!!!
0279デフォルトの名無しさん
2005/07/14(木) 14:59:05goto文やポインタを使わなくても きれいなコードはそれなりに書ける。
この程度の下駄なんてたいした問題じゃない。
本当にひどいコーディング規約になると
構造体はいつでも必ず実体で扱うこと とか
C++なら継承禁止 とか枚挙にいとまがない
0280デフォルトの名無しさん
2005/07/14(木) 16:08:25などの戯けたコーディング規約に早く消え去って欲しいと思う恭子の頃。
0281デフォルトの名無しさん
2005/07/14(木) 17:55:250282デフォルトの名無しさん
2005/07/14(木) 17:58:10std::vector<T>::iteratorは?
0283デフォルトの名無しさん
2005/07/14(木) 19:26:17std::string str = "abc";
もダメなんだよな?
0284デフォルトの名無しさん
2005/07/14(木) 19:53:26いや、それはなるべく守ろうよ
コメントはどうでもいいとして
0285デフォルトの名無しさん
2005/07/14(木) 20:01:38そんなもんでポインタポインタ騒ぐヤツ居ないと思うが・・・
0286デフォルトの名無しさん
2005/07/14(木) 20:22:23どっかで見たよ。
一行80バイトは馬鹿馬鹿しいね。
行を折り返すことで発生するトラブルもあるんだしさ。
0287デフォルトの名無しさん
2005/07/14(木) 22:07:25でも、80バイト以内に収まるよう「心がける」ことは
決して悪いことではないと思う。
多少はみ出たって気にはしないけど
0288デフォルトの名無しさん
2005/07/14(木) 22:12:230289デフォルトの名無しさん
2005/07/14(木) 22:15:060290デフォルトの名無しさん
2005/07/14(木) 22:16:54何も入っていない人様のWindowsでEUCの入ったソースを見ようと
思ってIEに食わせたら眩暈がした。
0292デフォルトの名無しさん
2005/07/14(木) 23:21:430294デフォルトの名無しさん
2005/07/15(金) 00:15:2610個近くの引数を取る関数・・・それ自体がそもそも間違った存在なのではあるけれど、
そういうのがある以上、一行80バイトを越えてしまうのは仕方ない。
一行一引数での書き方もあるが、それはケースバイケースで使い分けるべきで、
なんでもかんでも、どちらか片方の書き方に統一しろというのはナンセンス。
中カッコのネストが深くて行頭にタブが10個以上入っている・・・
それは関数が大きいからなのだが、時には大きいほうが良い場合もあるからなぁ。
>>290
インデントにスペースを使うのは勘弁してくれ。
もっと最悪なのは、インデントにタブとスペースを混ぜて使ってることだが。
タブにしておけば、見る人が好きな文字数にして見ることができるじゃないか。
スペースを入れた瞬間に、そのソースのタブのサイズは固定になり死ぬ。
0295デフォルトの名無しさん
2005/07/15(金) 00:19:18好き好んで混ぜるというよりIDEのエディタがタコで混ざるパターンが多いかも
改行したときの自動インデントとタブ入力の扱いが違ってたりとか
0296デフォルトの名無しさん
2005/07/15(金) 00:50:09そういったビューアでもツールでも標準でついていれば文句は言わん。
IEにタブ ストップの文字数設定する項目あるか?
劣悪な環境下でもなるべく可読性をそこねないコードを吐けって話だ。
タブ ストップ 文字数を自由に変えれる環境にentab、detab追加する
くらい簡単だろ?
0297デフォルトの名無しさん
2005/07/15(金) 00:54:32IEにそういう項目がないからって噛み付く意味がわからない。
0298デフォルトの名無しさん
2005/07/15(金) 01:00:11だから劣悪な環境だと・・・
0299酔っ払ってきた
2005/07/15(金) 01:18:53デフォルトのインデントは2だがタブ ストップは8文字だったかと。
んでIDEが吐いたテキストを便利なエヂタで開いてタブ文字数
変えると・・・
0300デフォルトの名無しさん
2005/07/15(金) 01:20:41そのIDEは余りにゴミだな。
劣化unix使いで、viを動かしている端末エミュレータ間でコピペする阿呆がいる。
その場合、XWindow上だと空白でコピペされるんだよね。
よって、インデントがタブか空白かでオリジナルかどうか判る罠。
0301デフォルトの名無しさん
2005/07/15(金) 01:30:56EUC→MS-Kanji変換を何もしなくてもやってくれるからだよ。
0302デフォルトの名無しさん
2005/07/15(金) 01:58:380303デフォルトの名無しさん
2005/07/15(金) 02:02:04ごめん
0304デフォルトの名無しさん
2005/07/15(金) 02:02:550305デフォルトの名無しさん
2005/07/15(金) 02:07:12実際客先であったんだけど。
0306マリー
2005/07/15(金) 02:08:400307デフォルトの名無しさん
2005/07/15(金) 02:15:24ソース次とか・・・
0308デフォルトの名無しさん
2005/07/15(金) 02:24:55M$だって補償してくれる訳ではないんだけどねぇ。
0309デフォルトの名無しさん
2005/07/15(金) 02:31:36ソースの保守性を下げるのかよ。
馬鹿じゃないの?
っていうか、なんでWindows環境なのにEUCなんだよ。
そのソースをWindows環境に持ってくる前にEUCから変換しろよ。
0310デフォルトの名無しさん
2005/07/15(金) 02:32:45UNICODEにすべき
0311デフォルトの名無しさん
2005/07/15(金) 02:37:17nkfとか入ってないのは前レスを。
0312デフォルトの名無しさん
2005/07/15(金) 02:37:36ソースはタブで書いて、
表示用にタブ→スペースに変換してから、Windows環境に持っていけばいい。
0313デフォルトの名無しさん
2005/07/15(金) 02:41:28勉強になっただろ。
0314デフォルトの名無しさん
2005/07/15(金) 02:45:52果てはCP/M(って何?)から今の全てのプラットフォームでおk
0315デフォルトの名無しさん
2005/07/15(金) 02:50:380316デフォルトの名無しさん
2005/07/15(金) 02:57:27>277の反論はないのか?
>282 >283の言う、std::string などは ポインタ排除の方向に
C言語がかわりつつあることの象徴だろ。
0317デフォルトの名無しさん
2005/07/15(金) 03:07:570318デフォルトの名無しさん
2005/07/15(金) 06:18:44void hoge(int &ref)
{
}
void hogehoge(void)
{
int a;
hoge(&a);
}
みたいにならんかったのは何故?
いつだったか参照に気付かずにバグりそうになった事が…
0319デフォルトの名無しさん
2005/07/15(金) 07:26:35あなたはこう書きたいですか?
std::string str = "HogeHoge";
&cout << &str;
0320283
2005/07/15(金) 07:46:12C/C++ではポインタを捨てることが出来ないと言いたいんだが…。
ポインタを使いたくなかったら他の言語に移ってください。
それで丸く収まります。
あなたの仕事がなくなろうがしったこっちゃありません。
0321デフォルトの名無しさん
2005/07/15(金) 08:48:560322デフォルトの名無しさん
2005/07/15(金) 09:05:48ポインタ排除は無理だな。
仮にstringだか文字列型を言語仕様でサポートしたとしても。
0323デフォルトの名無しさん
2005/07/15(金) 15:01:08> >282 >283の言う、std::string などは ポインタ排除の方向に
> C言語がかわりつつあることの象徴だろ。
いつのまに,C言語にstd::stringが追加されたんだ?
0324デフォルトの名無しさん
2005/07/15(金) 18:07:040325デフォルトの名無しさん
2005/07/15(金) 19:22:47反論はあるけど、規約に反論しても仕事は進まんし。
規約はそれを作った人間/組織の技術レベルを反映するから読むと面白い。
それだけだよ
0326デフォルトの名無しさん
2005/07/16(土) 00:15:26gotoはエラー処理以外は使用禁止なら無問題
あんまり使わんけどな。
ポインタ禁止って、、、2つ以上の値を返したい関数はどうやって作ればいいのだ?
もちろんCだから参照はないよな?
0327デフォルトの名無しさん
2005/07/16(土) 00:22:170328デフォルトの名無しさん
2005/07/16(土) 01:27:520329デフォルトの名無しさん
2005/07/16(土) 01:31:160330デフォルトの名無しさん
2005/07/16(土) 01:48:400331デフォルトの名無しさん
2005/07/16(土) 04:15:49見かけ上ポインタを考慮しなくてよいものをC++で作る
なんか最近のトレンドっぽいね
0332デフォルトの名無しさん
2005/07/16(土) 10:45:42C言語でないとパフォーマンスでなかったんだが、
さすがに生産性を考えてC++に移行しつつある。
いまどきは、CPUもコンパイラも賢いから
組み込み系でも抽象度の高いほうへシフトしていっている。
0333デフォルトの名無しさん
2005/07/16(土) 10:56:130334デフォルトの名無しさん
2005/07/16(土) 11:29:34>gotoはエラー処理以外は使用禁止なら無問題
多重ループ脱出用途は駄目ですか?
0335レス読まずにカキコ
2005/07/16(土) 11:32:190336デフォルトの名無しさん
2005/07/16(土) 12:17:01近代言語でこういうのはgotoで実装してそうだなってのは
基本的に全部OKなんじゃね?
whileあるのにgoto使うバカはほっとけばいいし
0337デフォルトの名無しさん
2005/07/16(土) 12:52:560338デフォルトの名無しさん
2005/07/16(土) 13:28:510339デフォルトの名無しさん
2005/07/16(土) 13:30:35try{
throw "ループから出させよやゴルァ!!!";
}
catch(char *e){
if(strcmp(e,"ループから出させよやゴルァ!!!")==0) break;
}
}
0340デフォルトの名無しさん
2005/07/16(土) 14:22:570341デフォルトの名無しさん
2005/07/16(土) 14:34:230342デフォルトの名無しさん
2005/07/16(土) 14:42:23すげー理解力
0343デフォルトの名無しさん
2005/07/16(土) 14:48:270344デフォルトの名無しさん
2005/07/16(土) 14:58:090345デフォルトの名無しさん
2005/07/16(土) 15:19:03c言語の教師になる人や、コンパイラを作成しようとする人は、この事を意識する
必要がある。しかし、このことに気づかないままCをマスターする人もいるだろう。
普通にプログラムをする人には、文法のおかしさに気付かずに済めば、寧ろその方が
幸せかも知れない。
ただc言語のエキスパートが多数存在し、有益なコードが大量に作成されている事実
がある以上、もし「文法がおかしいから国際語には向かない。」といった発言があれば、
それはは間違いだし、謝罪し訂正するべきだと思う。
0346デフォルトの名無しさん
2005/07/16(土) 15:32:34慎太郎かよw
0347デフォルトの名無しさん
2005/07/16(土) 15:32:59コンピュータ言語と違って自然言語は、
使っていくうちに変化するという特徴があるので
文法のおかしさが減ったものほど広く使われるようになる。
また広く使われるほど文法のおかしさが減っていく。
0348デフォルトの名無しさん
2005/07/16(土) 16:32:05日本語のようにかなり規則性に富んだ言語まである。
フランス語が偶々前者に近いからといって、フランス語全てが
文法がおかしいというようなニュアンスの発言はお郷が知れるというものである。
0349デフォルトの名無しさん
2005/07/16(土) 16:34:110350デフォルトの名無しさん
2005/07/16(土) 16:38:200351デフォルトの名無しさん
2005/07/16(土) 16:49:40ドイツ語よりフランス語だよな。
フランスは数学の本場だし。
0352デフォルトの名無しさん
2005/07/16(土) 18:10:301回しか回らないループ(つまりループじゃない)を作って
エラー処理時にbreakするってのは
邪道なの?正道なの?
0353デフォルトの名無しさん
2005/07/16(土) 18:18:26:
if (…) break;
:
} while (0);
ってこと?別にいいんじゃね?
でも一般に関数化してreturnの方がよさそう。
0354デフォルトの名無しさん
2005/07/16(土) 18:19:17ふっふっふ・・・
関数作成数に上限があるコーディング規約なのだお
0355デフォルトの名無しさん
2005/07/16(土) 18:26:53きもっ!
0356デフォルトの名無しさん
2005/07/16(土) 18:28:25変な規約。
0357デフォルトの名無しさん
2005/07/16(土) 18:34:420358デフォルトの名無しさん
2005/07/16(土) 19:12:390359デフォルトの名無しさん
2005/07/16(土) 20:57:44それをやったプログラムで・・・
for(...){ //意味のあるループ
do{ // try代用のループ
if(...) break; // 意味のあるループを抜けるつもりで書いた
}
}
というミスをして1時間くらい悩んだ経験あり。
よって駄目・・・と言いたいが・・・
しかし関数化すると処理が見通しにくくなるし・・・
やっぱ特定のループを指定できるbreakとcontinue、あと例外処理は是非備えてほしい機能だな。
0360デフォルトの名無しさん
2005/07/16(土) 21:10:12最初カードを作るときに
for (i = 0; i < 52; i++) {
(card + i)->SetCard(mark, num);
}
ってやるとアドレスが全然進まないんだけど
これじゃだめなの?
0361デフォルトの名無しさん
2005/07/16(土) 21:13:40cardの定義、見せてみ。
0362デフォルトの名無しさん
2005/07/16(土) 21:21:57C系で言語仕様に関して詰まってることどんとこいだ。
0363デフォルトの名無しさん
2005/07/16(土) 23:28:19class 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];
こんな感じ
0364デフォルトの名無しさん
2005/07/16(土) 23:45:09ポインタ配列をnewしてるんじゃなくて
インスタンス配列をnewしてるように見える。
ごめん、ホントはブランク長くてよく分からない。
0365デフォルトの名無しさん
2005/07/16(土) 23:53:13アドレスは進むだろ。
markとnumそのままだと、52枚とも同じカードになるんじゃないか?
0366デフォルトの名無しさん
2005/07/17(日) 00:19:18>>364その通りだった
カードを配ったときにプレイヤーのカード総数を増やすのを忘れてた
>>365進んでなかったアドレスをよく見たら先頭アドレスだった
0367デフォルトの名無しさん
2005/07/17(日) 00:39:24card = new CCard[52];
このコードって危なくないかい?
51個のインスタンスポインタがCに管理してもらってないじゃん。
0368デフォルトの名無しさん
2005/07/17(日) 01:26:00C/C++はポインタの管理なんかしないでしょ
delete[] card;
ってやれば52個とも解放できるので無問題
delete card; だとメモリリークするけどね
0369デフォルトの名無しさん
2005/07/17(日) 01:31:06ヘッダで領域確保しちゃってるけどいいの?
せめて
// 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];
のようにしてる漏れは逝ってよしですか?
0370369
2005/07/17(日) 01:32:180371デフォルトの名無しさん
2005/07/17(日) 04:27:14解放するようにした方がいいと思うぞ。
0372デフォルトの名無しさん
2005/07/17(日) 07:29:49関数の途中からのreturnを禁止しているコーディング規約もあるぞ。
何らかの片付け処理が必要なものはデストラクタでやるようにしていても、
returnで抜けさせてくれないのよ。そんなだから、例外も投げるのは禁止されてる。
C++なのに・・・と激しく悶える。
0373デフォルトの名無しさん
2005/07/18(月) 15:39:25が正しい
>>369
はやっちゃいけない
>>371
は有り
0374デフォルトの名無しさん
2005/07/19(火) 09:09:43基地外じみてるな。
しょうがねぇから用もねぇのにフラグ変数増えてハマる・・・
規約を決めた根拠がわからん。
0375デフォルトの名無しさん
2005/07/19(火) 09:45:39{
private:
Card card;
public:
CCard() { /* インスタンス生成及び失敗した場合の処理。 */ };
~CCard() { /* メモリの解放 */ };
}
CCard::CCard()
{
card = new Card[52];
}
CCard::~CCard()
{
delete[] card;
}
OO的には普通こんな感じじゃないの?
0376デフォルトの名無しさん
2005/07/19(火) 09:53:18カードの数は53でそ?
0377デフォルトの名無しさん
2005/07/19(火) 11:01:390378デフォルトの名無しさん
2005/07/19(火) 11:20:09それでgotoも禁止ならもうどうしようもないな
0379デフォルトの名無しさん
2005/07/19(火) 14:10:22bool 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;
}
0380デフォルトの名無しさん
2005/07/19(火) 19:05:00馬鹿ですか?
0381デフォルトの名無しさん
2005/07/19(火) 19:06:16openしたものをcloseせずにreturnしたらヤバいでしょ。
returnと書くところで、それぞれcloseしたら、closeし忘れも出るしね。
0382379
2005/07/19(火) 19:15:170383デフォルトの名無しさん
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;
}
0384デフォルトの名無しさん
2005/07/19(火) 23:15:10writeモードでfopenして何がしたいか良く判らん
参照側ではエラーの種類も判らんし、fooは使わんのか?
#まあfcloseの返り値を見ないのは支持出来るにしてもだな
0385さらにスレ違い
2005/07/19(火) 23:19:38E-mailに貼られても7Replyまではクソビューアでも見れるであろう
72文字制限つき。
0388デフォルトの名無しさん
2005/07/19(火) 23:35:59たしか規格にで処理系はブロックの入れ子を最低15認識できないといけないと書いてあったはず。
となると逆に言えばそれ以上の入れ子のソースはやらないほうがいいと言うことだろう。
#インデント15はかなり多いと思うけど。
0389デフォルトの名無しさん
2005/07/19(火) 23:45:35・・・んなもん書くもんか
0390デフォルトの名無しさん
2005/07/20(水) 03:49:040391デフォルトの名無しさん
2005/07/20(水) 07:45:29難読化のツールの出力だったりしないか?
0392デフォルトの名無しさん
2005/07/22(金) 01:19:248タブだとえらいことにw
>>389
標準的なBUFSIZ(512)-CR-LF-EOSで509バイトかと。
ポインタの話・・・
0393デフォルトの名無しさん
2005/07/22(金) 08:33:30ポインタの話は今のままでしょうがないでFAじゃないの?
で、509バイトがどうかしたの?
0394デフォルトの名無しさん
2005/07/22(金) 13:45:22519バイトはおかしいよね という話?
0395392
2005/07/22(金) 21:50:33519で正しかったら・・・吊ります。
0396デフォルトの名無しさん
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.
0397デフォルトの名無しさん
2005/07/24(日) 00:06:1780文字制限を批判する書き込みもあるようだけど、紙媒体等への
出力を考慮すると、やむを得ないと思う。
俺は紙使わないけど、検索できないし。
でも「俺が正義だ」コードは吐かないように努めている(はず。
0398デフォルトの名無しさん
2005/07/24(日) 00:21:47流石、日本語をまともに使えない人は一味違うね。
0399デフォルトの名無しさん
2005/07/24(日) 01:03:500400デフォルトの名無しさん
2005/07/24(日) 01:10:30変なところでぶった切って見通しが悪くなる。
検索できない? そりゃ糞環境を改善して幸せになるべきだ。
0401デフォルトの名無しさん
2005/07/24(日) 01:30:52客観的な事例を挙げるとよいと思われ。
0402デフォルトの名無しさん
2005/07/24(日) 01:36:14>俺は紙使わないけど、検索できないし。
これは普通の解釈をしては成り立たない文章なのだと思う。
おそらく、「俺は検索できないから紙を使わない」なのでないだろうか。
0403デフォルトの名無しさん
2005/07/24(日) 01:56:14ありがとう。その通りです。
漏れとしては他に解釈のしようがないと思ったんだけど・・・
それこそ「俺が正義」なのか・・・
0404デフォルトの名無しさん
2005/07/24(日) 02:46:46なら意味は通る。
0405デフォルトの名無しさん
2005/07/24(日) 02:50:55まさに普通に解釈しちゃダメだったね。
0406デフォルトの名無しさん
2005/07/24(日) 04:15:40小学校で習ったことをがんばって思い出すと、
それは倒置法っていう奴らしい。
0407デフォルトの名無しさん
2005/07/24(日) 11:03:53正直すまんかった。
紙媒体ではなく電子媒体または二次記憶媒体での文書保存おkで
ISO9000取得しているところって多いのかな?
0408デフォルトの名無しさん
2005/07/24(日) 13:12:46監査員が見せてと言ってすぐに見せられれば電子媒体OKになってます。
0409デフォルトの名無しさん
2005/07/24(日) 13:24:020410デフォルトの名無しさん
2005/07/24(日) 17:04:37電子媒体はマシンがとらぶってダウンしてたら見れなくなるんで不可。
0411デフォルトの名無しさん
2005/07/24(日) 18:00:320412デフォルトの名無しさん
2005/07/24(日) 20:18:42thx
408は内部監査と限定してあるから、保存用は別ということかな。
設計審査とかのときに重いファイルを持ち歩かなくてよい、目で検索する必要がないなど、
紙より効率いいなぁ。
>>410
(一時的)保存媒体さえしっかりしていれば参照するマシンは何でもよいかと。
長期保存が問題になるような希ガス。
CD-Rに保存するとして、文書保有最低年数は保存データを保証するメディアでないとダメ
だろうし、数年後に読み取り可能なハードが存在するか?という問題もあるだろうし・・・
0413408
2005/07/24(日) 21:05:39最後に紙に印刷して倉庫にしまっていましたが、
倉庫から出してくるのが面倒なので、
後から参照するときも紙は使わないです。
んで、その先がアホな話しでして・・・。
紙に印刷して倉庫番に渡すという社内ルールはそのままに、
倉庫のスペース削減のために、紙ではなく電子化して保存するようになったんです。
紙で渡したものをスキャニングして保存、紙は廃棄。
倉庫から出してというと、紙に印刷して渡してくれる・・・orz
ちなみにうちはCD-RはCD-ROMのマスターとして業者に渡す時だけで、
基本的に保存はMOを正副2枚ずつ保存するようになっています。
0414デフォルトの名無しさん
2005/07/24(日) 21:06:05うちはMTだからダメなんだよ。
(大型コンピュータの磁気ディスク装置にかけるなんてすぐにはできない)
そういや文書はマイクロフィルム化してもよいことにはなってたな。
0415デフォルトの名無しさん
2005/07/24(日) 21:18:020416デフォルトの名無しさん
2005/07/25(月) 00:54:140417デフォルトの名無しさん
2005/07/25(月) 01:22:20ワラタ
MO二重化はOKか。
参考になります。
>>414
マイクロフィルムは耐用年数が非常に長いみたいね。でも手間が・・・
>>415
夏厨が読んだら少しはタメになるかと。
0418デフォルトの名無しさん
2005/07/25(月) 02:02:26うちは納品物は全部正副の2部づつだけど?
電子媒体に限らずソース(紙媒体)、仕様書にいたるまで全て。
0419デフォルトの名無しさん
2005/07/25(月) 22:53:060420デフォルトの名無しさん
2005/07/26(火) 00:01:590421相変わらず脱線したまま
2005/07/26(火) 23:31:11正副の二枚に保存することによって電子化できたということだと思ったが。
それはそれとして、
納入物件に紙媒体のソースがあるというのが気になる。
0422デフォルトの名無しさん
2005/07/26(火) 23:43:32正副の二枚に保存することにより電子化できたということだと思ったが。
それはそれとして、
納入物件に紙媒体のソースがあるというのが気になる。
もしかすてF通?
0423デフォルトの名無しさん
2005/07/27(水) 06:16:580424デフォルトの名無しさん
2005/07/27(水) 10:38:510425デフォルトの名無しさん
2005/07/27(水) 14:42:33「不実です」というのがあったが、「富士通です」に聞こえたな。
前後の詩の文脈とも相まって、えぐい話だ。
0426デフォルトの名無しさん
2005/07/27(水) 23:03:31もし印刷したりして持ってたら版数アップとかで
最新版と内容がずれることがあり、監査で引っ掛かるぞ。
0427パラドックス
2005/08/09(火) 23:02:01さて .cppで
int* aとはどういう違い?
0428デフォルトの名無しさん
2005/08/10(水) 14:41:470429デフォルトの名無しさん
2005/08/10(水) 15:14:25逆参照していると思っていいのではないかと思う.
foo (int& a) {
a = 1;
}
は,
foo (int* a) {
*a = 1;
}
と同じ.別名だとa++みたいな
ポインタ操作ができないからこちらの方が安全.
0430デフォルトの名無しさん
2005/08/10(水) 18:39:360431デフォルトの名無しさん
2005/08/10(水) 19:22:00まぁこれが何処か別のところからの受け売りである可能性も否定できませんが
0432デフォルトの名無しさん
2005/08/11(木) 04:38:33上で書いた引数の例だと,別名って言わずに
参照渡しと言って,そのまま変数を参照って
言うことが多いね.
でもこれはちょっと混乱の元かと.
普通の変数であってもデータを参照しているわけだし.
0433デフォルトの名無しさん
2005/08/11(木) 09:26:590434デフォルトの名無しさん
2005/08/11(木) 09:39:02Cのときは「ポインタを使って参照する」とか
言ったりしてたのに参照そのものが出来たら
今まで言ってた参照をなんて言いかえるのか
0435デフォルトの名無しさん
2005/08/11(木) 09:43:240436デフォルトの名無しさん
2005/08/11(木) 09:45:34だから、参照に参照という名前をつけてもいいんだけど
それだと参照するときに参照という単語を使うと
参照がダブってしまうので今までのただの参照と
誤解を生むんだよ
0437デフォルトの名無しさん
2005/08/11(木) 09:58:000438デフォルトの名無しさん
2005/08/11(木) 11:24:520439デフォルトの名無しさん
2005/08/11(木) 11:32:450440デフォルトの名無しさん
2005/08/11(木) 12:27:18煙に突進してくるくらいの気概の無い初心者を振り落とせるからな。
0441デフォルトの名無しさん
2005/08/11(木) 13:58:06「別名」のほうが混乱がないと思う…
0442デフォルトの名無しさん
2005/08/11(木) 14:08:39・・・でも、そんなに弊害は無いかな?
0443デフォルトの名無しさん
2005/08/11(木) 14:31:520444デフォルトの名無しさん
2005/08/11(木) 14:50:520445デフォルトの名無しさん
2005/08/11(木) 16:01:24「アドレスを示すポインタ」が基本だろ?
ポインタはポインタ。
ホワイトボードに書かれた項目をレーザーポインタで指し示す場合、
参照やら別名とか岩ネーだろ。
要は、アドレスを表すのか、アドレス内の値を表すのかって事だけなのに、、、
お前ら、初心者を振り回すのに必死だな。
0446デフォルトの名無しさん
2005/08/11(木) 16:02:480447デフォルトの名無しさん
2005/08/11(木) 16:05:50何の話をしておられるのですか?
0448デフォルトの名無しさん
2005/08/11(木) 16:25:410449デフォルトの名無しさん
2005/08/11(木) 16:27:210450デフォルトの名無しさん
2005/08/11(木) 16:38:50アドレスだけがポインタだと思うなよ小僧
0451デフォルトの名無しさん
2005/08/11(木) 18:23:040452デフォルトの名無しさん
2005/08/12(金) 00:29:22ポインタだけがアドレスだと思うなよ、の間違いですか?(・∀・)ニヤニヤ
0453デフォルトの名無しさん
2005/08/12(金) 09:25:34間違いじゃないよ(゚∀゚)
0454デフォルトの名無しさん
2005/08/12(金) 09:55:13おちん歩がポインタ
{
おまん子 小倉優子,谷亮子;
おちんぽ * 俺;
俺 = &小倉優子;
ASSERT((*俺)(スコスコ))
俺 = &谷亮子;
ASSERT((*俺)(スコスコ)) ←ここでエラー
}
0455デフォルトの名無しさん
2005/08/12(金) 09:59:190456デフォルトの名無しさん
2005/08/12(金) 23:25:40アプリ屋ばっかだな。
0457デフォルトの名無しさん
2005/08/13(土) 00:02:000458デフォルトの名無しさん
2005/08/13(土) 15:07:53が、ソース上の違いが重要なのでは?
0459デフォルトの名無しさん
2005/08/13(土) 19:20:00ファーム屋にはそこがわからないんだよ
良くも悪くもアセンブラの延長としてしか
Cを使ってないからな
0460デフォルトの名無しさん
2005/08/18(木) 01:08:56C++:中級言語としても使える超高級言語。
当然、基本クラス設計者は神のように下々を見渡せる必要があるが、
んなクラスは見たこと茄子(単純なのは除く)。
言うまでもなくMFCなんぞ論外。
C#標準化って何?
0461デフォルトの名無しさん
2005/08/18(木) 14:16:480462デフォルトの名無しさん
2005/08/18(木) 14:49:15PCの発展や最適化技術の発達によりパフォーマンスよりもソースの可読性の方が重要視される場面が出てきたということさ
0463デフォルトの名無しさん
2005/08/18(木) 15:07:11禿同
……けど、C はかなり低級よりな高級言語だぞ
0464デフォルトの名無しさん
2005/08/18(木) 16:58:16そこでひまわりですよ
0465デフォルトの名無しさん
2005/08/18(木) 22:57:330466デフォルトの名無しさん
2005/08/18(木) 23:17:270467デフォルトの名無しさん
2005/08/19(金) 00:25:16動機がその程度の言語だから
いい加減な作りがあちこちにあるのは当然。
なのに開発言語としてメジャーになってしまったのが
コンピュータ界の悲劇。
0468デフォルトの名無しさん
2005/08/19(金) 00:29:500469デフォルトの名無しさん
2005/08/19(金) 00:37:30どこがいい加減なのか書いてみろよプ
0470デフォルトの名無しさん
2005/08/19(金) 01:30:170471デフォルトの名無しさん
2005/08/19(金) 01:49:34そりゃOSを書いてる言語だから、メジャーになるだろうよ。
Cを習得しないと、目の前のマシンにUNIXを移植することができないし、
改変することすらできないわけで、必修言語なわけですよ。
0472デフォルトの名無しさん
2005/08/19(金) 01:50:57いい加減と言うより、自分が覚えられないだけじゃアルマイカ?
0473デフォルトの名無しさん
2005/08/19(金) 01:53:50C使いの誰しもがUNIX野郎だとは思えないけどna
つか,なんでOS(ry
単にコンピュータとの親和性が高い(アセンブラに近い)という点に尽きるだろ
それだけ
0474デフォルトの名無しさん
2005/08/19(金) 10:07:300475デフォルトの名無しさん
2005/08/19(金) 11:01:56i=i++;
0476デフォルトの名無しさん
2005/08/19(金) 11:15:24それは ++ の方が優先順位が高いが、単に ++ が元の値を返す性質があるだけ。
ビット演算子の優先順位が比較演算子よりも低いのはおかしい。
論理演算子が存在するのに、比較演算の結果をビット演算する用途なんてそう頻繁にはないだろうが・・・。
論理xor演算子を導入した上で、ビット演算子の優先順位は上げるべきだった。
0477デフォルトの名無しさん
2005/08/19(金) 11:30:15なるのに、前置したため話が面倒になってる。
前置の良い所はメンバポインタを記述するのに括弧がいらないことくらい。
あとC++の話になるけど、テンプレートの括弧に<T>をつかってしまったこと。
× TemplateClassA<TemplateClassB<int>>
○ TemplateClassA<TemplateClassB<int> >
このスペースがキモイ。↑
まぁ探せばまだまだあると思うが。
根源的な話をすれば、LL(1)文法にしなかったという点で、リッチーは言語設計者としてのセンスが無い。
0478デフォルトの名無しさん
2005/08/19(金) 13:11:45てめぇの趣味だけで語ってんじゃねぇよ
0479デフォルトの名無しさん
2005/08/19(金) 13:16:02そのまま返される気がするのだが…
0480デフォルトの名無しさん
2005/08/19(金) 13:20:040481デフォルトの名無しさん
2005/08/19(金) 13:25:40関数の( )の前後はスペースの有無にかかわらずエラーにはならんが、多重テンプレートはスペース入れないとエラー。
関数はお前のような趣味をする余地があるが、テンプレートは趣味が許されない。しかもキモイ。
< や > を多用しすぎなんだよな。
a->b とか、 a-->b とか、 a>-b とか、 a--->b とか・・・
0482デフォルトの名無しさん
2005/08/19(金) 13:50:33というのは成り立たない。
481はキモイ
0483デフォルトの名無しさん
2005/08/19(金) 14:37:200484デフォルトの名無しさん
2005/08/19(金) 14:50:04カーニハンに謝罪を、そしてリッチーに賠償を要求しましょう
0485デフォルトの名無しさん
2005/08/19(金) 15:01:320486デフォルトの名無しさん
2005/08/20(土) 07:25:42そんな無意味なコードを書くな(w
せめて別の変数に代入すれ。
0487デフォルトの名無しさん
2005/08/20(土) 08:51:37->以外解らんのだが
0488デフォルトの名無しさん
2005/08/20(土) 08:59:55(a--) > b デクリメントと比較演算子
a > (-b) 比較演算子と単項マイナス演算子
(a--)->b デクリメントとアロー演算子
0489デフォルトの名無しさん
2005/08/20(土) 09:56:520490デフォルトの名無しさん
2005/08/20(土) 12:10:19使いにくいとほざけばいいと思ってる
0491デフォルトの名無しさん
2005/08/20(土) 12:34:57さっぱりわからん。
なんかこう、フィリーリングが合わない。
アセンブラはわかるのに。
たぶん同じことをやるのに何通りもの書き方があるせい。
0492デフォルトの名無しさん
2005/08/20(土) 14:18:110493デフォルトの名無しさん
2005/08/20(土) 14:24:23フィーリングだったぜ。
カナ打ちだからゴメンな。
0494デフォルトの名無しさん
2005/08/20(土) 16:13:100495デフォルトの名無しさん
2005/08/20(土) 17:48:54お前なりにポインタについて解説してみな
そうすりゃどこがおかしいのか見えてくるから
0496デフォルトの名無しさん
2005/08/20(土) 21:27:29葉外道。いくらなんでも変換ミスったようだ
0497デフォルトの名無しさん
2005/08/21(日) 01:54:11>アセンブラはわかるのに
で、ポインタはわからんと・・・
釣られてしまつた orz
0498デフォルトの名無しさん
2005/08/21(日) 01:54:54ホホゥ
0499497
2005/08/21(日) 02:02:04Oberon実務で使ったことある人いるのかな?
0500デフォルトの名無しさん
2005/08/22(月) 21:28:49話の流れを嫁。
ついでに歴史の勉強もしろ。
0501デフォルトの名無しさん
2005/08/22(月) 21:54:070502デフォルトの名無しさん
2005/08/22(月) 21:58:060503デフォルトの名無しさん
2005/08/22(月) 22:07:340504デフォルトの名無しさん
2005/08/22(月) 22:35:33おかしいだのどうのこうの言っても何もならんのにな。
現実の言語仕様に黙って忠実に従うことだけを考えてきたが。
お主は、英語でも文法だの活用形だの発音だのおかしいと言ってる人物ですの?
それよりも$記号て何ですの?それとCなのに何でC++のコメント使ってますの?
0505デフォルトの名無しさん
2005/08/23(火) 01:03:21俺は++でも/*使っちゃってるけど、C99では//は本則ではないのん?
(てめぇで調べろ→漏れ
/*で書いとけば無問題なのでどうでもいいか・・・
0506デフォルトの名無しさん
2005/08/23(火) 01:16:270507デフォルトの名無しさん
2005/08/23(火) 01:23:590508デフォルトの名無しさん
2005/08/23(火) 06:36:050509デフォルトの名無しさん
2005/08/23(火) 09:39:58便利だ。 さらにそれをもコメントアウトするときは #ifdef 0〜#endif だ!
0510デフォルトの名無しさん
2005/08/23(火) 11:13:22#ifdef 0
でもいいけどね・・・
#if 0
のほうが
0511デフォルトの名無しさん
2005/08/23(火) 15:41:460がすでにdefineされている可能性をわすれちたよ
0512デフォルトの名無しさん
2005/08/23(火) 16:17:07おまいら、微妙に・・・
0513デフォルトの名無しさん
2005/08/23(火) 16:35:04>gcc test.c
test.c:3:8: macro names must be identifiers
0514デフォルトの名無しさん
2005/08/23(火) 16:46:220515デフォルトの名無しさん
2005/08/24(水) 04:46:09文字列型をサポートしないのに文字列リテラルをサポートしてしまったことだ。
この安易な機能追加による不統一感は耐え難いものがある。
0516デフォルトの名無しさん
2005/08/24(水) 05:00:160517デフォルトの名無しさん
2005/08/24(水) 07:04:15全然まったくそんなことないよ?
0518デフォルトの名無しさん
2005/08/24(水) 10:36:32VBすれば?
0519デフォルトの名無しさん
2005/08/24(水) 10:38:010520デフォルトの名無しさん
2005/08/24(水) 13:59:120521デフォルトの名無しさん
2005/08/24(水) 17:49:37Pascalみたいに、別の演算子にすればよかったのに。
あと、浮動小数点から整数への自動型変換も迷惑。情報が欠落する方向へ勝手にデータを変換するな。
0522デフォルトの名無しさん
2005/08/24(水) 18:06:40Pascalをやっているとそのように思うのはもっともだけど。筋が違います。
Cは「プログラマは間違えない」という前提で設計された言語だから
0523デフォルトの名無しさん
2005/08/24(水) 18:13:540524デフォルトの名無しさん
2005/08/24(水) 18:15:020525デフォルトの名無しさん
2005/08/24(水) 18:32:52> でも浮動小数点から整数への暗黙の変換は確かにどうかと思う。
それ逆だから。何の事言ってんだ?
0526デフォルトの名無しさん
2005/08/24(水) 18:37:49int i = 1.5;
0527デフォルトの名無しさん
2005/08/24(水) 18:46:540528デフォルトの名無しさん
2005/08/24(水) 18:49:140529デフォルトの名無しさん
2005/08/24(水) 18:51:10「プログラマは間違えない」という前提の代償が簡便な記法になるならともかく、
整数と浮動小数点数の型変換は除算の時いちいちキャストしなくてはいけなく、
逆に記述が面倒になっているが。
0530デフォルトの名無しさん
2005/08/24(水) 18:54:42だから、んなーことない
0531デフォルトの名無しさん
2005/08/24(水) 19:02:14int 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 となる。
とかの方がスッキリすると思わんか?
まぁ直感的に@が除算に見えない、という感覚的な問題は別として。
0532デフォルトの名無しさん
2005/08/24(水) 19:20:42って、何言ってんのこの池沼
0533デフォルトの名無しさん
2005/08/24(水) 20:00:010534デフォルトの名無しさん
2005/08/24(水) 20:15:330535デフォルトの名無しさん
2005/08/24(水) 20:41:170536デフォルトの名無しさん
2005/08/24(水) 20:44:130537デフォルトの名無しさん
2005/08/24(水) 20:47:51これが a==1 になることってありえる?
0538デフォルトの名無しさん
2005/08/24(水) 20:58:520539デフォルトの名無しさん
2005/08/24(水) 21:00:37ありがとう
おれが作ったのはバグ入り最適化コンパイラってことでFAみたいだ
0540デフォルトの名無しさん
2005/08/24(水) 21:07:52いや、藻前が作ったのは有理数型をネイティブサポートした、誰も必要としていない高性能コンパイラだ。
0541デフォルトの名無しさん
2005/08/24(水) 21:28:290542デフォルトの名無しさん
2005/08/24(水) 21:29:56今のコンパイラーは、最適化するから、 /3 *3 の部分が無くなるよ。
0543デフォルトの名無しさん
2005/08/24(水) 21:42:29普通の数学の決まりに則ればa==1こそ正しいんだけどな
0544デフォルトの名無しさん
2005/08/24(水) 21:44:11釣り?
0545デフォルトの名無しさん
2005/08/24(水) 21:44:34それは…つまり…
a = 1ってことですか?
0546デフォルトの名無しさん
2005/08/24(水) 21:47:53a = 1/3*3
1
= -----
3*3
= 1/9
が正しい
0547デフォルトの名無しさん
2005/08/24(水) 22:08:230548デフォルトの名無しさん
2005/08/24(水) 22:28:49いや、1 / 3は整数型同士の演算だから0にならないといけない。
0549デフォルトの名無しさん
2005/08/24(水) 22:30:040550デフォルトの名無しさん
2005/08/24(水) 22:36:09それが最適化しても a==0 になるんですちょ
実験してみれば分かる
0551デフォルトの名無しさん
2005/08/24(水) 22:55:46aの値は?
(※乗除算の優先度は同じ)
(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が高級アセンブラといわれるかを分かってない発言多すぎ
0552デフォルトの名無しさん
2005/08/24(水) 22:57:530553デフォルトの名無しさん
2005/08/24(水) 23:00:250554デフォルトの名無しさん
2005/08/24(水) 23:06:00少なくとも熟慮の上で設計されたエレガントさがCには感じられない。
なんとなく思いつきで作った言語って感じが否めない。
0555デフォルトの名無しさん
2005/08/24(水) 23:08:41そう考えればCはアセンブラに比べれば格段にましだ。
0556デフォルトの名無しさん
2005/08/24(水) 23:11:48>実際、最初はUnixを書くために作ったらしいしな。
まだそんな話を信じている馬鹿がいたのかww
0557デフォルトの名無しさん
2005/08/24(水) 23:25:32たとえば?
0558デフォルトの名無しさん
2005/08/24(水) 23:33:28なにか数式言語をネイティブサポートすれば解決。
0559デフォルトの名無しさん
2005/08/24(水) 23:34:210560デフォルトの名無しさん
2005/08/24(水) 23:34:32色んなUnixの歴史を書いた本に書かれてることなんだけど、あれは冗談だったのか・・?
0561デフォルトの名無しさん
2005/08/24(水) 23:54:06ええっ嘘なの?
コンピュータ界の歴史が変わる大事件だよ
ソースキボンヌ
0562デフォルトの名無しさん
2005/08/25(木) 00:13:150563デフォルトの名無しさん
2005/08/25(木) 00:21:00新規ではなく、既存のOSを改良するために開発された → 移植性を上げる為、極力アセンブラを排除するのが目的
0564デフォルトの名無しさん
2005/08/25(木) 00:52:48それは私の知識と違うなw
Malticsのアンチテーゼの意味合いで新規に開発された。最初はアセンブラが沢山。
移植性を付加するため、アセンブラ部分をCに書き換えた。
0565デフォルトの名無しさん
2005/08/25(木) 01:28:35×Maltics ○Multics
トリビア:
何でもできることを目指したMultics(<Multi)のアンチテーゼとして
開発されたことからUnics(<Uni)と名づけられた。
0566デフォルトの名無しさん
2005/08/25(木) 02:23:17int a[];
と宣言してアドレス演算子を使わないようにした。
** の重複を回避するためなら a[0] とかいうアクセスもした。
これで掛け算の * と変数の * が混在しなくて済む。
a->b とするよりも a[i].b としたほうが、
デバッグ中に何番目のデータを処理してるか、
すべてのデータを処理したかどうかがはっきり分かるようになる。
データ依存のバグが出る場合はメリットが大きいよ。
0567デフォルトの名無しさん
2005/08/25(木) 05:14:070568デフォルトの名無しさん
2005/08/25(木) 05:19:230569デフォルトの名無しさん
2005/08/25(木) 07:47:560570デフォルトの名無しさん
2005/08/25(木) 08:38:41仮引数でないときにはint a[]はポインタ型にならないのだがそのときの宣言には * がいるだろ。
0571デフォルトの名無しさん
2005/08/25(木) 08:41:05そうだっけ。
そうかもね。
0572デフォルトの名無しさん
2005/08/25(木) 17:27:44int iMonar ;
int *ipMonar ;
0573デフォルトの名無しさん
2005/08/25(木) 17:45:00そこpiMonar。
自己流なら気にしないでおくが。
0574デフォルトの名無しさん
2005/08/25(木) 17:58:070575デフォルトの名無しさん
2005/08/25(木) 18:11:040576デフォルトの名無しさん
2005/08/25(木) 18:36:49別に int *aで宣言してもa[x]で使えるわ
0577デフォルトの名無しさん
2005/08/26(金) 23:32:43ティんティんマッサージ
0578デフォルトの名無しさん
2005/08/26(金) 23:48:490579デフォルトの名無しさん
2005/08/28(日) 01:37:57吹いた
余計にややこしくしてるし
ポインタとアドレスの区別くらいしような
0580デフォルトの名無しさん
2005/08/28(日) 23:14:330581デフォルトの名無しさん
2005/08/29(月) 00:11:160582デフォルトの名無しさん
2005/08/29(月) 00:13:090583デフォルトの名無しさん
2005/08/29(月) 00:15:520584デフォルトの名無しさん
2005/08/29(月) 05:32:430585デフォルトの名無しさん
2005/08/29(月) 06:55:070586デフォルトの名無しさん
2005/08/29(月) 07:15:250587デフォルトの名無しさん
2005/08/29(月) 08:42:58生きること
0588デフォルトの名無しさん
2005/08/29(月) 13:32:20な時代がきたらいいなぁ
0589デフォルトの名無しさん
2005/08/29(月) 15:34:530590デフォルトの名無しさん
2005/08/29(月) 15:39:41そう思っていた時期が俺にもありました
0591デフォルトの名無しさん
2005/08/29(月) 16:18:030592デフォルトの名無しさん
2005/08/29(月) 16:34:41Perl, PHP, Java...csh(w
オレの知る限りだとこの辺りは文法が近いので乗り換え自由だと思うのだが。
0593デフォルトの名無しさん
2005/08/29(月) 17:38:530594デフォルトの名無しさん
2005/08/29(月) 18:31:59現状そこら辺を隠蔽した言語はパフォーマンスの壁にぶつかっているので
C言語も多少はやっておいて損はないとおもうけどなぁ・・・
0595デフォルトの名無しさん
2005/08/29(月) 20:27:470596デフォルトの名無しさん
2005/08/29(月) 20:32:250597デフォルトの名無しさん
2005/08/29(月) 20:32:530598デフォルトの名無しさん
2005/08/29(月) 21:38:23ならなぜJavaがNIOというライブラリを追加したのか説明してくれ
0599デフォルトの名無しさん
2005/08/30(火) 00:39:00Cをやってから他の言語をやると割りとすんなり覚えられる
逆に他の言語をやってからCをやってもかなりハードルが高いぞ
だいたいポインタで躓く
プログラマを語るんならCは必須だと思うな
まあもちろんCだけではだめだけどな
0600デフォルトの名無しさん
2005/08/30(火) 00:40:380601デフォルトの名無しさん
2005/08/30(火) 00:45:590602デフォルトの名無しさん
2005/08/30(火) 01:24:160603デフォルトの名無しさん
2005/08/30(火) 08:42:290604デフォルトの名無しさん
2005/08/30(火) 09:03:31呼び出す時なんて&つければいいだけじゃん
0605デフォルトの名無しさん
2005/08/30(火) 14:56:42俺はポインタで躓いたあと、
スクリプト言語と浮気しているうちにふっとポインタの使いかたが分かるようになった
0606デフォルトの名無しさん
2005/08/30(火) 15:17:00_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´)
0607デフォルトの名無しさん
2005/08/30(火) 21:36:50スクラブと言語ってポインタの概念ないじゃん
どうしてふっとわかったのか教えて
0608デフォルトの名無しさん
2005/08/30(火) 21:41:02文尾が不完全だぞ
× 分かるようになった
○ 分かるようになったつもりだ
0609デフォルトの名無しさん
2005/08/30(火) 21:43:38ヒント:キャスト
0610デフォルトの名無しさん
2005/09/04(日) 23:38:24CPU,MMUの動作原理を知っていての発言なら許す。
0611デフォルトの名無しさん
2005/09/08(木) 02:23:53高級言語を効率的にコンパイル・実行できるようにマシン語を追加するなんて逆転現象だ。
0612デフォルトの名無しさん
2005/09/08(木) 05:28:17CISCだからね。
っつうか、Cの文法(++とか)は、68系のCPU(MPU?)に最適化された言語なんだよなぁ・・・。
0613デフォルトの名無しさん
2005/09/08(木) 11:03:3286系じゃのぉて?
0614デフォルトの名無しさん
2005/09/08(木) 11:03:490615デフォルトの名無しさん
2005/09/08(木) 14:51:27INC命令がADD命令より高速だったのは、x86だけじゃなかったっけ?
Pentium系のμコードとかout of orderとかでこれは崩れたわけだけど。
0616デフォルトの名無しさん
2005/09/08(木) 16:23:29Z80と68kに限った話ではincの方が速い
Z80 INC A
68k addq.l #1,d0
>>612と>>615のつながりが良くわからないけど、
昔のヤツはどれもincが速いんでないかい?と思った。
0617デフォルトの名無しさん
2005/09/08(木) 16:49:28基本的には命令に速度差はないね。
0618デフォルトの名無しさん
2005/09/08(木) 17:03:220619デフォルトの名無しさん
2005/09/08(木) 20:07:2868kに(a0)+とか-(a0)とかあるから>>612は書いたんじゃないかと…。
0620デフォルトの名無しさん
2005/09/08(木) 22:50:48いい石だね。Big endianness(綴り間違ってたらすまん)は最低だけど。
0621デフォルトの名無しさん
2005/09/08(木) 23:26:02なんで?
LANなんか伝送路はすべてそうなってるじゃん。
逆にx86の方がサイテー。(いちいちひっくり返さなきゃならん)
0622デフォルトの名無しさん
2005/09/08(木) 23:27:260623デフォルトの名無しさん
2005/09/08(木) 23:34:500624デフォルトの名無しさん
2005/09/08(木) 23:45:23高級言語使いはビックエンディアン支持
が多いようだ
0625デフォルトの名無しさん
2005/09/08(木) 23:49:450626デフォルトの名無しさん
2005/09/08(木) 23:57:49そう?
俺アセンブラ使うけど、出来りゃビッグエンディアンの方が良いと思ってるよ。
でもZ80から始まってx86系使うことが殆ど。MIPS,ARMとかも使うけど。
どういう理由なのかな?
0627デフォルトの名無しさん
2005/09/09(金) 00:03:57たとえば16bitのデータを8bitのデータに変換する場合にビックエンディアンだとシフトする必要があるとか
0628デフォルトの名無しさん
2005/09/09(金) 00:19:50そんなことに不便は覚えんけど?
リトルエンディアンでも上位8bitは0にしなきゃいけないわけだし。
(シフト命令とAND命令とそんなに差があるか?)
そんなことより外とのインターフェースをとろうとすると
x86はいやらしいぞ。RS232Cの頃からLANまで結構バグった。
(って言ってもすぐ判明する単純バグだからデバッグ初期ですぐ潰せたけどね)
0629デフォルトの名無しさん
2005/09/09(金) 00:26:10どんなアホなコード書けばエンディアンのバグ出るんだか教えてくれ
0630デフォルトの名無しさん
2005/09/09(金) 00:28:54先頭にパケット長が入って、それ以降データ。
とかで思わずそのままWORDとかDWORDとかで計算したまま入れちゃうみたいな感じ。
(もちろんすぐ気づくよ)
0631デフォルトの名無しさん
2005/09/09(金) 00:54:240632デフォルトの名無しさん
2005/09/09(金) 00:56:430633デフォルトの名無しさん
2005/09/09(金) 01:27:48文字扱う関数がなぜか文字データ型をint
0634デフォルトの名無しさん
2005/09/09(金) 10:29:32char *p = xxxx;
short s;
long l;
s = *((short *)p)++;
l = *((long *)p)++;
ダメダメだとわかっていてもつい。
0635デフォルトの名無しさん
2005/09/09(金) 17:15:31何を意図しているんだ?
0636デフォルトの名無しさん
2005/09/09(金) 17:53:20バイナリのヘッダ解析じゃね?
0637デフォルトの名無しさん
2005/09/09(金) 23:14:37俺達人間インディアンだから仕方ないさ
0638デフォルトの名無しさん
2005/09/10(土) 00:45:35バイナリは、ビッグエンディアンに統一されてると思うがなあ。
0639デフォルトの名無しさん
2005/09/10(土) 01:58:32そうだな。
問題視されるのは、あまりにも無作法なコーディングが氾濫しているって事だろうな。
0640デフォルトの名無しさん
2005/09/10(土) 01:59:500641名無しさん@そうだ選挙に行こう
2005/09/11(日) 04:07:490642名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:08:47TCP/IPが開発された時に使われていたコンピュータがビッグエンディアンだった
というだけのことだと思うよ。
0643名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:57:56>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)
0644名無しさん@そうだ選挙に行こう
2005/09/11(日) 20:41:170645名無しさん@そうだ選挙に行こう
2005/09/11(日) 20:55:420646名無しさん@そうだ選挙に行こう
2005/09/11(日) 21:18:49ビッグエンディアンかどうかと命令長が固定かどうかは無関係じゃね?
0647名無しさん@そうだ選挙に行こう
2005/09/11(日) 21:39:06ビッグエンディアンは素晴らしいって事だよね?
0648名無しさん@そうだ選挙に行こう
2005/09/11(日) 22:46:35最近の通信プロトコルは、アスキーテキストが普通だと思ったが・・・。
0649デフォルトの名無しさん
2005/09/11(日) 23:19:10いっぱいある。
0650デフォルトの名無しさん
2005/09/11(日) 23:51:38それはOSI階層モデルで言うところのレイヤーが全然違うのだが。
ここで話が出ているのはTCP/IPでネットワーク層及びトランスポート層
アスキーテキストがまともにまともに扱えるのはセッション層以上じゃないか?
Ethernet(Physical)->EthernetProtocol(DataLink)->IP(Network)->TCP(Transport)-> //ここまでバイナリ
HTTP(Session)->HTML,MIME(Presentation)->IE(Application) //こっちはテキスト可
0651デフォルトの名無しさん
2005/09/12(月) 01:05:44データ通信またはデータ通信で機器制御するソフト作ったことあるのか?
HTTPみたいな汎用なやつじゃなくって?
0652デフォルトの名無しさん
2005/09/12(月) 14:06:25お前さんはTCP/IPも使ってないのか。
0653デフォルトの名無しさん
2005/09/13(火) 22:47:24大体、アプリでフォーマットを決めるんで、それこそ無数にある。
0654デフォルトの名無しさん
2005/09/14(水) 06:12:290655デフォルトの名無しさん
2005/09/14(水) 07:18:13禿堂
0656デフォルトの名無しさん
2005/09/14(水) 09:22:580657デフォルトの名無しさん
2005/09/15(木) 23:55:580658デフォルトの名無しさん
2005/09/16(金) 07:15:080659デフォルトの名無しさん
2005/09/16(金) 11:29:050660デフォルトの名無しさん
2005/09/16(金) 14:55:24単純な変数だけ考えると若干不自然に感じるかも知れないが
ある構造体の宣言 その構造体変数,その構造体変数へのポインタ;
って一箇所にまとめて書けるメリットは理解できるだろ?
0661デフォルトの名無しさん
2005/09/16(金) 15:35:33何を今更。
つーか、あんたは>1を理解できてないだろ。
0662デフォルトの名無しさん
2005/09/16(金) 19:08:44int* 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型変数」が格納されている場所へのポインタ
0663デフォルトの名無しさん
2005/09/16(金) 20:30:29int* a, b ;
と書くとどーなるかな?
typedef int* int_ptr ;
int_ptr a, b ;
とやらないと、大変なことになるよ。
0664デフォルトの名無しさん
2005/09/16(金) 22:50:26int *p;という書き方は式内で*pと書くとint型になると読めるという利点がある。
0665デフォルトの名無しさん
2005/09/16(金) 23:23:070666662
2005/09/17(土) 11:10:50それは前から知ってる。だからポインタ宣言は1つずつ書くようにしてる。
>664
それ誤解の原因だから。関数宣言、定義の引数、戻値がその形式で書かれて過去に迷ったことが何度あったことか。
char *strcpy(char *s1,char *s2)
と
char* strcpy(char* s1,char* s2)
なら、下の方が自然だと思う。
0667デフォルトの名無しさん
2005/09/17(土) 11:43:430668デフォルトの名無しさん
2005/09/17(土) 11:56:560669デフォルトの名無しさん
2005/09/17(土) 12:06:270670デフォルトの名無しさん
2005/09/17(土) 14:12:12俺は上の形式を使ってるな。
その方が自然に感じるので。
まあどっちにしろ、言語がその表記を許してるんだから好き好きで良いと思うんだが。
0671デフォルトの名無しさん
2005/09/17(土) 14:30:20ポインタ変数とtypedefした型変数とは別だという認識になるな。
(実際には同じ動作でも)
従って
int *p;
int **p;
int ***p;
int_ptr p;
int_ptr *p;
int_ptr **p;
という書き方になっちゃう。
0672デフォルトの名無しさん
2005/09/17(土) 14:33:18Windowsのポインタでは型名にPが入る。
ポインタのポインタならPPとなる。
0673デフォルトの名無しさん
2005/09/17(土) 14:37:32(´ ,_ゝ`)
0674デフォルトの名無しさん
2005/09/17(土) 14:38:25は、あくまでint型の型定義であって、*pとか**pとかはpの属性って感じるなあ。
>>672
バカ?
0675デフォルトの名無しさん
2005/09/17(土) 15:32:40int* p;
漏れはどっちでもいいと思うが、一方が「自然」で他方が「不自然」と感じる人もいる。
「不自然」な記法が許されている事が「文法がおかしい」の根拠になるんでないの?
0676デフォルトの名無しさん
2005/09/17(土) 16:24:560677デフォルトの名無しさん
2005/09/17(土) 16:26:13int n = new Int(1);
0678デフォルトの名無しさん
2005/09/18(日) 03:46:330679デフォルトの名無しさん
2005/09/18(日) 04:44:57オマエこそ馬鹿だろ。
ポインタの型なんか関数に渡してしまえばどんな型にでもされちゃうのに意味ないだろ。
型に無関係に関数組めるのがポインタとキャストのいいところなのに、
そういうプログラム作ったことないんだろうな。
0680デフォルトの名無しさん
2005/09/18(日) 04:55:110681デフォルトの名無しさん
2005/09/18(日) 07:39:37これってつまりは
int_ptr
ってのはダメで
pInt
にしろってことを言ってるんだよね?
それと今議論してるのとどういう関係があるのかなあ?
それがわからんし、
さらに>>679がそれの何処に突っ込んでバカ返しをしてるのかも
さっぱりわからん俺ってきっとバカなんだろうな。
0682デフォルトの名無しさん
2005/09/18(日) 07:54:33>型名に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;
の方が自然だと感じる。
0683デフォルトの名無しさん
2005/09/18(日) 08:13:26ばかじゃねーの?
int_ptr が * を書かないために使うのなら、
int_ptr* なんて宣言したら意味がなくなるだろと言ってるんだよ。
せめてint_ptrptr くらい書いてくれよと。
その程度のことも読み取れないのにSEになんて・・・・・
あ、ここは死ぬまでコーディングするスレだっけ。
>>682
>>型に無関係に関数組めるのがポインタとキャストのいいところなのに
>これも論点が完全にズレまくってる言葉だよなあ?
int *ip;
long *lp;
ip は intで lpはlongという認識らしいが、変数宣言したスコープ内だけの話だから、
同じ関数に渡せば二つは同一だと言いたかったんだが。
0684デフォルトの名無しさん
2005/09/18(日) 08:40:020685662
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*型で宣言されてるなら確かにそうなんだけど)
0686デフォルトの名無しさん
2005/09/18(日) 10:03:32>ついでに関数のプロトタイプ宣言の意味まで無くしてどうするんだよ。
なんでそんな風に思うか分からないね。
>値渡しに見えなくもないので
宣言時と使用時はまったく違うわけで、
使用時に勘違いしなければいいわけで。
0687デフォルトの名無しさん
2005/09/18(日) 10:09:29もはや低級言語なんだよ。ポインターなんて使わず
リファレンスを使おうぜ。
っま、低級な言語ほど実行速度が速いのは認めてやるぜ!
0688デフォルトの名無しさん
2005/09/18(日) 13:17:20式(実行文)と宣言とで同じ表現が使えるとか
ポインタ型を別途用意する必要がないとか
PL/I辺りと比べるとその差がはっきりする
見事としかいいようがない
0689デフォルトの名無しさん
2005/09/18(日) 22:53:52> int*p; //これはint型の定義
ええーっ
型とは何か? という話になるけどさ、
自分の理解では、
たとえば
int* p ;
と宣言した時に、スタックに割り当てられた領域に入れることができるもの
ということだから、
int* p ;
の型が何かと聞かれたら、ポインタ、だと言う。
どういったポインタなのかと聞かれれば、intの変数を指すのに使うポインタだと言う。
0690デフォルトの名無しさん
2005/09/18(日) 22:57:190691デフォルトの名無しさん
2005/09/18(日) 23:23:33本人がマジにそれに気づいて無いだけに不憫だ。
0692デフォルトの名無しさん
2005/09/18(日) 23:27:47Cはプログラマの手抜き・知識不足を
かなり許容してくれる素敵な言語だ。
0693デフォルトの名無しさん
2005/09/18(日) 23:38:20>したがって代入は
>n = (int_ptr)p;
>p=(int*)n;
>とcast変換が必要
ごめん。キャスト無しで gcc に噛ませたけどワーニングすら出なかった
そういえば 「 typedef int *int_ptr; 」 とは書くけど 「 typedef int* int_ptr; 」 と書くのはあまり見ない気がする
「 typedef struct tagStruct { /**/ } STRUCT, *LPSTRUCT; 」 に見慣れているから錯覚しているだけか?
0694デフォルトの名無しさん
2005/09/18(日) 23:44:36俺、
LPCSTR *
とか使ってるよ。
これは、きっとLPCSTRSTRとしなきゃならんのだろうな。
0695デフォルトの名無しさん
2005/09/18(日) 23:59:440696デフォルトの名無しさん
2005/09/19(月) 00:03:01逆。手抜き・知識不足によるバグが出やすく、デバッグしにくい言語。
ポインタ使ってもアセンブラよりはマシという程度で、自動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);
}
0697693
2005/09/19(月) 00:05:500698デフォルトの名無しさん
2005/09/19(月) 03:13:22GCなんて必要ないって。
メモリが歯抜けになるのは、メモリ管理のライブラリがお粗末なのさ。
スタックオーバーフローが検出されないのはOSがしょぼいから。
Windowsならちゃんと例外になるよ。
0699デフォルトの名無しさん
2005/09/19(月) 04:10:55本来アクセスしちゃいけないアドレスに簡単にアクセスできちゃう(ポインタ)ってことでは?
また、スタックチェックはWindowsが行うわけじゃなくて
スタックチェックライブラリがリンクされるかどうかなので
コンパイルオプションしだい。
それに例外はC言語じゃなくてC++言語だし。
0700698
2005/09/19(月) 07:47:26GCしたところで、
> 本来アクセスしちゃいけないアドレスに簡単にアクセスできちゃう
ことは防げないけどね。
それにC/C++でもGCはできる。
言語が強制するのではなく、ユーザが自由にやればいいんだよ。
スタックオーバーフローはOSが行ってるよ。
スタックオーバーフローすると、そういう例外が出るから。
> スタックチェックライブラリがリンクされるかどうかなので
という話は、スタックオーバーフローではなくて、バッファオーバーランでしょ?
WindowsでOSが出す例外は、正式名称は「構造化例外処理」というもので、
CやC++などの言語とは関係なく、OSの機能として備わっているものですよ。
0701デフォルトの名無しさん
2005/09/20(火) 02:56:49int *p ;
ではなく
int* p ;
と考えるといいと思うんだが・・・・
0702デフォルトの名無しさん
2005/09/20(火) 04:09:20ファンクション型宣言とか使えない奴らなのかな?
0703デフォルトの名無しさん
2005/09/20(火) 04:33:250704デフォルトの名無しさん
2005/09/20(火) 10:15:16おれは int *p と考えないと脳がパンクしちゃうので。
int a,*b とあるとき、 aと*bは同じ意味だし。
でも、(int*)&a と b が同じという考えも納得はする。
となると、まあ宗教だなこりゃ。
0705デフォルトの名無しさん
2005/09/20(火) 10:20:42あんたが正しい
typedef のときは int* 型だし、
通常宣言時は int *i; だし、
cast時は (int*) というのが正しい。
これは演算の優先順位とかと同じ考えかただ。
0706デフォルトの名無しさん
2005/09/20(火) 11:19:450707デフォルトの名無しさん
2005/09/20(火) 12:00:05ああ、そうそう。
スペース開けたほうが見やすくていいんだった。
typedefもcastもポインタ型なのがはっきりしてるから。
ただ、通常宣言時だけ、適用対象が特定変数だから、
変数に対してつける意味で変数の前につけるんだ。
0708デフォルトの名無しさん
2005/09/20(火) 17:49:54俺のソースには int *p;とint* p;が混在しちゃってるじゃないか。
0709デフォルトの名無しさん
2005/09/20(火) 18:00:350710デフォルトの名無しさん
2005/09/20(火) 18:23:50○ cast時は (int *) というのがみやすくてよい。
0711デフォルトの名無しさん
2005/09/20(火) 18:26:550712デフォルトの名無しさん
2005/09/21(水) 00:02:56それと同じように、文法的にはどうでもよくても、コーディング上はどうでもよくないの!
0713デフォルトの名無しさん
2005/09/21(水) 00:12:09改行と違って、キャスト式の内部の空白1個の有無で、
極度に読みにくくなるわけでもないだろ?
その程度ならどうでもいいよ。
0714デフォルトの名無しさん
2005/09/21(水) 00:19:20>>713 同意
0715デフォルトの名無しさん
2005/09/21(水) 00:26:04オレコーディング規約でもなんでもいいから統一すべし
検索するときに (int *)と(int*)とが混在してると
たったコレだけのことに性器表現を使う羽目になり
おにんにんがおっきおっきしちゃうのぉおお
0716デフォルトの名無しさん
2005/09/21(水) 07:41:17インチキ臭い理由付けだな。
int*で検索するよりも、変数・関数名で検索しないか?
0717デフォルトの名無しさん
2005/09/21(水) 07:46:450718デフォルトの名無しさん
2005/09/21(水) 08:54:05”(int”とか”*)”で検索すればいいやん。
>極度に読みにくくなるわけでもないだろ?
読みにくいよ
スペースの有無で探せば眺めるだけでいいから
作業効率がぜんぜん違う。
0719デフォルトの名無しさん
2005/09/21(水) 10:11:07それじゃ他のキャストや関数と間違えちゃうでしょ
0720デフォルトの名無しさん
2005/09/21(水) 11:00:56規約を追加するというのは正しいとは思えない
0721デフォルトの名無しさん
2005/09/21(水) 13:39:02間違って(int *)とスペース2つ入ってる場合も考えられるし、
検索するなら正規表現でやっぱやるだろ。
手間なんて殆ど変わらんじゃんか。
0722デフォルトの名無しさん
2005/09/21(水) 18:46:27俺的にはこのスレあぼ〜ん対象でした
さよなら
0723デフォルトの名無しさん
2005/09/21(水) 22:37:12#define ptr(type) type*
/* examples */
ptr(int) pointerToInt;
int justInt;
0724デフォルトの名無しさん
2005/09/22(木) 00:23:11代わりに魂を差し出せ、と?
0725デフォルトの名無しさん
2005/09/22(木) 01:31:050726デフォルトの名無しさん
2005/09/22(木) 01:45:13自分の意図しない動作が起きたって知らないぞ。
0727デフォルトの名無しさん
2005/09/22(木) 01:46:560728デフォルトの名無しさん
2005/09/22(木) 02:10:180729デフォルトの名無しさん
2005/09/22(木) 07:08:370730デフォルトの名無しさん
2005/09/22(木) 07:20:180731デフォルトの名無しさん
2005/09/22(木) 12:27:32#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);
0732デフォルトの名無しさん
2005/09/25(日) 11:39:120733デフォルトの名無しさん
2005/09/25(日) 11:48:28int*f;
int* f;
int *f;
は、おなじ?
0734デフォルトの名無しさん
2005/09/25(日) 11:55:00つか、それくらいやれ。
0735デフォルトの名無しさん
2005/09/25(日) 11:56:360736デフォルトの名無しさん
2005/09/25(日) 12:02:01同じだよ
0737デフォルトの名無しさん
2005/09/25(日) 12:04:46文句言うのに2行
答えるのは1行
どちらが楽か自分で考えれよ
0738デフォルトの名無しさん
2005/09/25(日) 12:06:10〜
0739デフォルトの名無しさん
2005/09/25(日) 12:37:10安易に教えて君プログラマを増殖させると実生活で困る局面が多いからなぁ。
どっちが楽かって考えるとねぇ…一行とか二行とかの問題じゃないと思う。
0740デフォルトの名無しさん
2005/09/26(月) 00:18:27C及びCライクな文法を持つ大抵の言語は、トークンやシンボル境界のスペースはあってもなくてもOK。
例外としては、テンプレートクラスが入れ子になっている時の閉じ括弧くらいかな。
T1<T2> > // ←これ
スペース入れないとビットシフトになってしまう。
0741デフォルトの名無しさん
2005/09/26(月) 00:20:53int *a, b; // *a, b の型は int
0742デフォルトの名無しさん
2005/09/26(月) 02:03:220743デフォルトの名無しさん
2005/09/26(月) 02:22:590744デフォルトの名無しさん
2005/09/26(月) 21:42:32a++ +b
a+ ++b
a+++b
どれだ?
0745デフォルトの名無しさん
2005/09/26(月) 21:44:25とかも
0746デフォルトの名無しさん
2005/09/30(金) 21:56:080747デフォルトの名無しさん
2005/09/30(金) 22:06:460748デフォルトの名無しさん
2005/10/01(土) 00:25:060749デフォルトの名無しさん
2005/10/01(土) 04:06:32ほんとうの嘘は、誰にもそれが嘘かどうかなんてわからないんだ。
だから嘘をつかない人がいたとしても、その人が本当に嘘をついていないかは
0750デフォルトの名無しさん
2005/10/01(土) 04:07:510751名無しさん@お腹いっぱい。
2005/10/02(日) 04:00:34つ\(int *\*\)
0752デフォルトの名無しさん
2005/10/02(日) 04:22:31俺はこれでプログラマになり損ねて今はフリーター。
狂った人生をどうしてくれる。
0753デフォルトの名無しさん
2005/10/02(日) 06:12:21呼んだかね?
私が君の質問に答えよう。
ただし! 1回だけだ。
0754デフォルトの名無しさん
2005/10/02(日) 06:18:13彼女ができるようになるにはどうしたらいいの?
0755デフォルトの名無しさん
2005/10/02(日) 18:03:58良かったね。
ポインタごときの低いハードルを越えられないようなら、
その先のもっともっと高いハードルの数々は無理でしょう。
早めに軌道修正できて良かったと感謝すべきだろう。
0756デフォルトの名無しさん
2005/10/02(日) 18:31:250757デフォルトの名無しさん
2005/10/02(日) 18:52:01考え方を変えよう、君が彼女になればいい
さあ、今から二丁目に行って来よう
0758デフォルトの名無しさん
2005/10/02(日) 20:56:020759デフォルトの名無しさん
2005/10/02(日) 21:48:26ウホッ じゃないよ。馬鹿だな。いいか、お釜とゲイはぜんっぜん違うんだよ。
お釜は自分が女性でありたいと願うが、ゲイは男として男が好きなんだよ。
0760デフォルトの名無しさん
2005/10/02(日) 21:54:190761デフォルトの名無しさん
2005/10/02(日) 23:52:57「何こいつw」 じゃないわよ! あんたまであたしを馬鹿にする気!?
そうやって人を見下すようだからいつまで経っても独り身なのよ!!
0762デフォルトの名無しさん
2005/10/04(火) 11:35:120763デフォルトの名無しさん
2005/10/05(水) 00:55:330764デフォルトの名無しさん
2005/10/05(水) 06:11:490765デフォルトの名無しさん
2005/10/05(水) 11:11:510766デフォルトの名無しさん
2005/10/06(木) 19:43:370767デフォルトの名無しさん
2005/10/06(木) 20:02:000768デフォルトの名無しさん
2005/10/07(金) 04:08:260769デフォルトの名無しさん
2005/10/07(金) 14:03:46あたしの他にもいい人がいたのね
その人どこにいるのよ、呪ってやる
0770デフォルトの名無しさん
2005/10/07(金) 22:09:200771デフォルトの名無しさん
2005/10/07(金) 23:53:000772デフォルトの名無しさん
2005/10/07(金) 23:55:160773デフォルトの名無しさん
2005/10/08(土) 00:36:030774デフォルトの名無しさん
2005/10/08(土) 00:39:390776デフォルトの名無しさん
2005/10/08(土) 17:18:280777デフォルトの名無しさん
2005/10/08(土) 21:26:380778766
2005/10/08(土) 21:57:09ノシ
0779デフォルトの名無しさん
2005/10/08(土) 22:59:390780デフォルトの名無しさん
2005/10/08(土) 23:13:530781デフォルトの名無しさん
2005/11/14(月) 06:55:56int index=0;
略
index++;
(ptr+index)=(int *)malloc(sizeof(int));
こういう使い方が出来ないのがめっちゃ不便。
代替策も思いつかんし・・・
0782デフォルトの名無しさん
2005/11/14(月) 07:47:21>(ptr+index)=(int *)malloc(sizeof(int));
何がしたいのか意図不明す。。。
0783デフォルトの名無しさん
2005/11/14(月) 08:21:160784デフォルトの名無しさん
2005/11/14(月) 08:37:4032bit環境では帳尻が合うが、意味がぼやけてる。
64bitではサイズが足りない。
0785デフォルトの名無しさん
2005/11/14(月) 08:59:23int index=0;
略
index++;
(ptr[index])=(int *)malloc(sizeof(int));
0786デフォルトの名無しさん
2005/11/14(月) 09:46:29う〜ん、それだと配列の長さが固定になってしまう・・・
0787デフォルトの名無しさん
2005/11/14(月) 20:06:06realloc()?
0788デフォルトの名無しさん
2005/11/14(月) 20:44:15int 1個のために一々mallocする理由がわからん。
0789デフォルトの名無しさん
2005/11/14(月) 22:27:540790デフォルトの名無しさん
2005/11/14(月) 23:21:47おそらく、ポインタにオフセットをつけ、mallocした領域(変数)を
登録することで可変長配列を実装したいんじゃないかと。
でも、そうするなら mallocした領域(変数)を登録する領域を
可変長にしなければ意味がないんだが。
こういう形で可変長配列を実現してる言語ってあるん? >>871
0792デフォルトの名無しさん
2005/11/14(月) 23:37:51realloc
0793デフォルトの名無しさん
2005/11/15(火) 00:07:000795デフォルトの名無しさん
2005/11/15(火) 00:34:37その辺考えたら、普通は、
・malloc()で多めに確保。
・ポインタとオフセットで配列のようにアクセス。
足りなくなったら、
1:代替領域確保→元の領域から代替領域へメモリコピー→元の領域を開放。
2:テンポラリファイル書き出し→realloc()でさらに大き目の領域を再確保→テンポラリファイル再読込み
3:複数のメモリ領域にまたがっていても動くようにする(少々面倒だが現実的)
0796デフォルトの名無しさん
2005/11/15(火) 07:31:47ああ。マシンは十分早いのでその辺は考えなくていいです。
0797デフォルトの名無しさん
2005/11/15(火) 08:22:350798デフォルトの名無しさん
2005/11/15(火) 14:06:570799デフォルトの名無しさん
2005/11/15(火) 16:38:13でも、スタックにオブジェクトインスタンス作れない言語だったらそうなるわな。
まぁnew[]やらdelete[]やら使ってなさい、ってこった。
deleteに[]を忘れたり、deleteせずにreturnしたり例外に吹っ飛ばされるようなお子様はベクタ&スマポでも使ってなさい。
mallocは10年早い。
0800デフォルトの名無しさん
2005/11/15(火) 17:23:48いつのまに C++ の話になったんだ?
0801デフォルトの名無しさん
2005/11/15(火) 23:28:38C++の標準ライブラリはアホなんですね。
0802デフォルトの名無しさん
2005/11/15(火) 23:44:440803デフォルトの名無しさん
2005/11/15(火) 23:58:15>>799
STLのvectorって例外をthrowするよね。
つーことは、例外のないCでは困ったことに。
0804デフォルトの名無しさん
2005/11/16(水) 00:01:51大きなお世話だよね
0805デフォルトの名無しさん
2005/11/16(水) 00:24:22mallocを使ってはいけないというわけではなかったと思う。
ただ、new演算子を使うほうがよりスマート(サイズを与えるのが楽だとか、
戻ってくるポインタをキャストしなくていいとか、確保に失敗したときは
例外を投げてくれるとか)だからってことだったような気がする。
0806805補足
2005/11/16(水) 12:02:03new演算子には領域確保を抽象化(?)して
プリミティブ型とオブジェクト型を同列に扱うというのがあったな。
0で埋められたインスタンスと同じサイズの領域ってのは
必ずしもインスタンスにはならんわけで。
これがmallocではなくnewが推奨される理由だと思うんだが。
#これ以上詳しいことは知らんので間違ってたら笑い飛ばしてくれ。
0807デフォルトの名無しさん
2005/11/16(水) 20:28:090808デフォルトの名無しさん
2005/11/16(水) 20:46:090809デフォルトの名無しさん
2005/11/16(水) 21:19:35stlのソース見たらわかると思うが
listとかはあらかじめmallocで数個分のオブジェクトの領域を確保しといて
そこにplacement newでオブジェクトを配置してる
0810デフォルトの名無しさん
2005/11/16(水) 23:16:48誰も C++ をオブジェクト指向だと認めてくれなくなるから。
0811デフォルトの名無しさん
2005/11/16(水) 23:40:29それをクラスオブジェクトをmallocすると称するのかね?君は?
0812デフォルトの名無しさん
2005/11/16(水) 23:44:44100万光年からの開きがあるよ
0813デフォルトの名無しさん
2005/11/17(木) 17:23:21STLの実装によって違うのではないかと。
vector::reserveしたら、コンストラクタがゴリゴリっと呼ばれてワロタこともある。
0814デフォルトの名無しさん
2005/11/17(木) 17:53:58外見だけ華やかな流行の技術でもつまみ食いしてなさいってこった。
0815デフォルトの名無しさん
2005/11/17(木) 19:05:59なんだその糞な実装は。
0816デフォルトの名無しさん
2005/11/23(水) 09:14:23阿呆ですか?
内部の話始めたら、そもそも new が malloc(ry
0817デフォルトの名無しさん
2005/11/23(水) 18:27:380818デフォルトの名無しさん
2005/11/24(木) 00:11:54当然だが、内部でmalloc呼んでないnewの実装もあるよ。
newがオーバーロード出来るのを忘れてる人は結構いると見た。
0819デフォルトの名無しさん
2005/11/24(木) 00:15:140820デフォルトの名無しさん
2005/11/24(木) 07:49:460821デフォルトの名無しさん
2005/11/24(木) 09:39:20newはフリーストアに割り当てると
山本信雄のVisual C++ 2巻に書いてあったけど
なんのこっちゃ分からんしどうやって実装すればいいか検討つきません。
0822デフォルトの名無しさん
2005/11/24(木) 10:26:09VC++ではそうだという話
0823デフォルトの名無しさん
2005/11/24(木) 11:12:150824デフォルトの名無しさん
2005/11/24(木) 11:17:350825デフォルトの名無しさん
2005/11/25(金) 19:25:460826デフォルトの名無しさん
2005/11/25(金) 22:48:370827デフォルトの名無しさん
2005/11/25(金) 23:23:42大抵の処理系では問題ないはず。
0828デフォルトの名無しさん
2005/11/26(土) 01:02:18━━ 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 【コンピュータ】ヒープ・ソート.
たしかに「ヒープ」よりはわかりやすい言葉かもしれない。
0829デフォルトの名無しさん
2005/11/26(土) 04:08:240830デフォルトの名無しさん
2005/11/26(土) 18:44:56俺は、bssセクションとスタックの間の空間ってだけだと思ってたよ。
0831デフォルトの名無しさん
2005/11/27(日) 03:19:120832デフォルトの名無しさん
2005/11/27(日) 03:26:23どういった構造をしてるのか説明するのが大人の対応ですぞ。
0833デフォルトの名無しさん
2005/11/27(日) 04:20:520834デフォルトの名無しさん
2005/11/27(日) 04:55:320835デフォルトの名無しさん
2005/11/27(日) 11:39:170836デフォルトの名無しさん
2005/11/27(日) 13:20:12Win3.1までは、じゃね?
0837デフォルトの名無しさん
2005/11/27(日) 14:59:19一応、互換性はない。
0838デフォルトの名無しさん
2005/11/27(日) 16:35:200839デフォルトの名無しさん
2005/12/13(火) 21:05:18手渡されるメモリ領域。土地登記のような厳格な管理下に置かれる。
スタックは予め手渡されているローカルでLIFOなメモリ領域。スタックオーバー
はプロセスの自己責任。再帰処理ではよく注意して想定内で使うしかない。
0840デフォルトの名無しさん
2005/12/13(火) 21:13:11フリーストアってみんな言ってるように見受けられます。
0841デフォルトの名無しさん
2005/12/14(水) 13:23:01OSからは大きなサイズで割り当ててもらって、
Cランタイムライブラリ側で管理するのも手ですよ。
ただそうすると、メモリが無駄になるので・・・。
0842デフォルトの名無しさん
2005/12/14(水) 14:09:10>OSからは大きなサイズで割り当ててもらって、
>Cランタイムライブラリ側で管理するのも手ですよ。
ものすごい当たり前の事を言った!
0843デフォルトの名無しさん
2005/12/14(水) 16:31:440844デフォルトの名無しさん
2005/12/14(水) 17:33:350845デフォルトの名無しさん
2005/12/14(水) 20:03:23そんなあわけはない
0846デフォルトの名無しさん
2005/12/14(水) 20:15:040847デフォルトの名無しさん
2005/12/15(木) 13:50:520848デフォルトの名無しさん
2005/12/15(木) 15:25:07といってもWindowsの場合、
Win32APIの呼び出しはシステムコールとは違う。
さらにランタイムライブラリが一枚噛んでいるいるようなもので、
HeapAllocを呼んでも、DLLの中で処理されて戻ってくることもある。
0849デフォルトの名無しさん
2005/12/19(月) 20:54:360850デフォルトの名無しさん
2005/12/19(月) 21:33:29あるときは乗算記号、またあるときはポインタ、またあるときはコメントの一味
しかしてその実体は
0851デフォルトの名無しさん
2005/12/19(月) 22:07:46*hoge = xxx
みたいなの。
08521
2005/12/19(月) 22:08:410853デフォルトの名無しさん
2005/12/19(月) 22:21:05普通はポインタを理解しよう、という方向になるのに
このスレはストレートに「おかしい」だからな。
挫折者・落伍者にはオアシスのようなもんさ。
0854デフォルトの名無しさん
2005/12/19(月) 22:53:09クソッタレなC言語入門書に書かれているオナニーな用法で、躓いてる。
たとえば、ポインタのポインタ。
型という概念とtypedefの使い方を教えれば、ポインタのポインタは必要なくなる。
0855デフォルトの名無しさん
2005/12/19(月) 23:05:13どれもこれもタンスの絵ぱっかでゲロが出そうだ。
0856デフォルトの名無しさん
2005/12/19(月) 23:11:40頭を取り替えない限り理解できない
0857デフォルトの名無しさん
2005/12/20(火) 12:04:42C++ なんてもっと酷い事になってるからな。
余計な思想まで継承しなくていいっつの。
0858デフォルトの名無しさん
2005/12/20(火) 14:14:48メモリにはタンスの引き出しみたいな仕切りは存在しないからなぁ。
カセットテープの場所を指差すもの、というイメージなのだけど、
今の若い人はカセットテープ使わないからわからないか。
0859デフォルトの名無しさん
2005/12/20(火) 21:16:04そもそも、アセンブラも未経験、コンピューターの基礎知識、動作原理の知識も無し、
パズルや数学が苦手(理論的思考を不得手とする)なプログラマが多数派になりかねない現状では無理ないかも。
0860デフォルトの名無しさん
2005/12/20(火) 21:30:550861デフォルトの名無しさん
2005/12/20(火) 23:15:07Cをまるごと受け継ぐというのがC++の最重要な方針だったわけで。
だからこそC++は成功したんだとStroustrupはD&Eにはっきりと書いている。
0862デフォルトの名無しさん
2006/01/16(月) 12:31:130863デフォルトの名無しさん
2006/01/16(月) 23:43:430864デフォルトの名無しさん
2006/01/17(火) 11:59:22つ[Objective-C]
0865デフォルトの名無しさん
2006/01/20(金) 20:15:31新しいC++の規格には型の新しい修飾( 右辺値参照だっけ? )
として && が採用されようとしてるぞ。
0866デフォルトの名無しさん
2006/01/21(土) 03:11:49aaa<bbb<ccc>> や a = b/*c; で全く懲りてないんだな・・・。
0867デフォルトの名無しさん
2006/01/21(土) 15:17:33なんで$を使うのを避けるのかな。
0868デフォルトの名無しさん
2006/01/21(土) 15:47:450869デフォルトの名無しさん
2006/01/21(土) 16:56:02それぞれダラーや単価記号や逆向きクォートとは限らないので使われないのか?
その割りには'{', '|', '}'もトライグラフで置き換えられるわけだから使ってもいいだろうに。
0870デフォルトの名無しさん
2006/02/05(日) 15:40:24$はバックスラッシュでしょ
\と同じコード。
通貨単位だから。
でも、両方出るなあ。
@は単価だし
0871デフォルトの名無しさん
2006/02/05(日) 15:55:40**************************
終了
**************************
0872デフォルトの名無しさん
2006/02/05(日) 16:10:110873デフォルトの名無しさん
2006/02/05(日) 16:12:38落ち着いて話そう。
まあ、クソスレだしいいか。
0874デフォルトの名無しさん
2006/02/05(日) 16:39:59a &= &a && a & &a; とかどうなんのよってのな
0875デフォルトの名無しさん
2006/02/05(日) 18:14:530876870
2006/02/05(日) 20:42:56EBCDICとASCIIの対応 見ると、¥と$が逆なんだ・・・
特殊文字コード表です
http://www.shikaku-d.com/neko/character_entity.html
ブラウザでは使えるけど、2chビューワーでは表示できない。
0877デフォルトの名無しさん
2006/02/12(日) 04:41:24PCの実際の動作に近くていいと思うんだが。
大体、ポインタがなかったら多重リストの実装とかどうするんだ。
0878デフォルトの名無しさん
2006/02/12(日) 12:15:34そういう香具師が見かけポインタの無い高級言語を持ち上げてCを貶めようとしているかのよう。
アスキーで昔(エンターブレインになる前)出てた256倍シリーズのC言語本にはC始める前にアセンブラとPascal習得しろとか書かれてる。
0879デフォルトの名無しさん
2006/02/13(月) 11:14:03>記号の多重使用が気に食わない、文法が気に入らない
これは激しくオモタ。流石に慣れたが。
0880デフォルトの名無しさん
2006/02/13(月) 19:24:01多重起用がうざいってのも
半分はネタで言ってるだけだがな
でももう半分はマジ
0881デフォルトの名無しさん
2006/02/14(火) 01:27:340882デフォルトの名無しさん
2006/02/14(火) 05:41:200883デフォルトの名無しさん
2006/02/14(火) 11:55:43言語専用文字と言えば APL を思い出す。
0884デフォルトの名無しさん
2006/02/15(水) 22:42:26#define
0885デフォルトの名無しさん
2006/02/16(木) 01:23:43int* を typedef で別名にすれば解りやすい。
0886デフォルトの名無しさん
2006/02/16(木) 01:37:19*p
この両者が似ているのが混乱の元。
どっちも変数の前に*をつけてるだけなのに
一方はポインタ変数であることを意味し、他方はポインタの中身を意味する。
感覚的には変
0887デフォルトの名無しさん
2006/02/16(木) 01:55:26おいおい、C言語の基礎からやり直せw
その形式は別にポインタだけじゃないだろ。
そのまんまの記述で型を指定するってだけで・・・
0888デフォルトの名無しさん
2006/02/16(木) 02:50:570889デフォルトの名無しさん
2006/02/16(木) 06:05:29中身はint型
0890デフォルトの名無しさん
2006/02/16(木) 07:50:24int *p;と書いて「*pがint型」になると読めばよいというのがお約束。
0891デフォルトの名無しさん
2006/02/16(木) 11:11:05おいおい、宣言子と演算子が同じでキモイって話だろ
0892デフォルトの名無しさん
2006/02/16(木) 12:01:010893デフォルトの名無しさん
2006/02/16(木) 13:17:42for(int i = 0; i < 16; i++)
*(int *)&buf[i * 4] = i;
0894デフォルトの名無しさん
2006/02/17(金) 01:59:30これやって、ライン1日止めたなぁ・・・
0895デフォルトの名無しさん
2006/02/17(金) 03:55:03なんで問題になる?
0896デフォルトの名無しさん
2006/02/17(金) 04:01:350897デフォルトの名無しさん
2006/02/17(金) 05:25:530898デフォルトの名無しさん
2006/02/17(金) 14:45:52宣言は宣言であって宣言以外の何者でもない。
0899デフォルトの名無しさん
2006/02/17(金) 14:46:39昔のコンパイラはintが16ビットなのが多かった。
そして今後は64ビットのが出てくるかも知れない。
0900デフォルトの名無しさん
2006/02/17(金) 17:25:560901デフォルトの名無しさん
2006/02/17(金) 17:30:490902デフォルトの名無しさん
2006/02/17(金) 17:32:04たとえば
1. C++で<boost/cstdint.h>
2. 自分で自分の処理系に沿った内容の<stdint.h>を作れる。
0903デフォルトの名無しさん
2006/02/17(金) 18:42:26boostにもあるのか。
ありがとう。
0904デフォルトの名無しさん
2006/02/18(土) 00:12:280905デフォルトの名無しさん
2006/02/18(土) 09:06:01C++ では int* p とするのは, やっぱり int *p とするのがキモイからなのかなぁ.
C++ やり始めて, どちらもかみ分けて読めるようになってきたけど,
C から始めた者からすると int* p の方が少しキモイ.
だから, 参照とかを覚えるときも int &p = a; とする方が, 覚えやすかった.
0906デフォルトの名無しさん
2006/02/18(土) 10:10:29いつのまにかキャスト演算子の時にはint*を使うようになり、
最近変数・宣言でもint* p;になってきた。
0907デフォルトの名無しさん
2006/02/18(土) 10:10:330908デフォルトの名無しさん
2006/02/18(土) 11:33:260909デフォルトの名無しさん
2006/02/19(日) 11:27:220910デフォルトの名無しさん
2006/02/20(月) 07:57:110911デフォルトの名無しさん
2006/02/20(月) 10:00:340912デフォルトの名無しさん
2006/02/20(月) 19:53:47どう考えても冗長以外の何でもねえだろあんなもん。
0913デフォルトの名無しさん
2006/02/20(月) 21:08:33コンパイラが全部面倒見るべき? そういや Delphi とかはそうだったかな?
0914デフォルトの名無しさん
2006/02/20(月) 22:15:52コンパイラがソースコードを上から下へ1回読むだけでコンパイルできるように。
0915デフォルトの名無しさん
2006/02/20(月) 22:21:38ヘッダファイルは無くてもいいと?
0916デフォルトの名無しさん
2006/02/20(月) 22:30:57なんで人間様がコンパイラに仕えなきゃなんねえんだよ。
……と普通は思うでしょ。
Cの文化ってこういう倒錯が結構みられるよね。
たとえば最適化なんかに関しても。
0917デフォルトの名無しさん
2006/02/20(月) 22:40:230918デフォルトの名無しさん
2006/02/20(月) 23:28:46君がねw
現にたとえば最適化のような猿仕事はコンパイラがやるべきであって
可読性を犠牲にするようなアクロバチックな記述はすべきでないって風潮になってるでしょ。
0919デフォルトの名無しさん
2006/02/20(月) 23:32:08Cができたのは30年以上も昔のことだ。
そのときのコンピュータの性能を考えれば仕方がない。
ちなみに俺はまだ生まれていない。
0920デフォルトの名無しさん
2006/02/20(月) 23:32:28人間が最適化するのはそれを超えたところが存在するから
0921デフォルトの名無しさん
2006/02/20(月) 23:42:41ANSI Cの時点で追加されたんだよ確か。
80年代の終わりごろならパソコンの性能でもプロトタイプなんてなしで
コンパイルできるような仕様が十分現実的だと思うんだけど。
0922デフォルトの名無しさん
2006/02/21(火) 00:05:31プロトタイプ宣言を自動生成するようにすりゃいいじゃん。
俺は面倒くさかったから、
#define AUTOPROTOFUNCTION
しておいて、
AUTOPROTOFUNCTION void FooBar(void) {
/*関数の中身*/
}
のように書いておき、
AUTOPROTOFUNCTIONと書いてある行を抽出してヘッダファイルを生成してたよ。
でもさ、C++になるとクラスの宣言と実体はファイルを分けるわけで・・・。
0923デフォルトの名無しさん
2006/02/21(火) 02:38:21残念ながら、Delphiにもそんな機能は無い。
interface部又はforward付けて宣言しなくちゃダメ。
0924デフォルトの名無しさん
2006/02/21(火) 04:02:20プロトタイプで型チェックさせるっていう
もともとの目的は無意味になるんですがね。
0925デフォルトの名無しさん
2006/02/21(火) 05:17:40お前はわかってない。
Cにプロトタイプ宣言が導入される前の、あの悲惨な状況を。
自動生成つっても、関数の実装から生成するんだから、
人間が書いたプロトタイプ宣言と一致するでしょ。
0926デフォルトの名無しさん
2006/02/21(火) 07:14:32ライブラリとか、WindowsだったらDLLにも
プロトタイプ情報を含めないとな。
それで実行時に動的チェック、と。
んなアホなことやってられる訳ねーだろ。
自動生成とか言ってる自分本位の馬鹿は死んでくれよ。
0927デフォルトの名無しさん
2006/02/21(火) 08:13:37あるソースをコンパイルしているときに関数呼び出しをみつけたら、
他の全ソースからその関数の定義を見つけだすって事だよね。
ソースファイルが数個程度ならともかく
数千、数万もあるようなプロジェクトではどうなるんだろう?w
0928デフォルトの名無しさん
2006/02/21(火) 08:19:12だってアセンブラには最初からプロトタイプなんてないよ。
もちろんアセンブラにはシグネチャって概念はないけどね。
今のドトネトはもちろんだが、それどころかパスカルにもそんなもんはねえ。
つーかコンパイラじゃなくてリンカの仕事じゃないのそれ。
0929デフォルトの名無しさん
2006/02/21(火) 08:26:51昔はそうしていたんだし。
0930デフォルトの名無しさん
2006/02/21(火) 09:53:33そんなことしなくても cproto っていうコマンドで作れるよ。
少なくとも Linux では動いた。他のOSでは知らないがUNIX系OSなら
動くんじゃないかな。(Windowsは知らない。でも最悪Cygwin使えば
動きそうだな)。
0931デフォルトの名無しさん
2006/02/21(火) 10:03:53オブジェクトファイルやライブラリに型情報を含めて持たせて
そこで判定すればいいんじゃないか? あるいはオブジェクト
ファイルとソースの間にもう一つ中間的なファイルを作って
そこに情報を持つか。一度コンパイルすると自動でそれが
作られる。で、まとめてライブラリに付属させる。
まあでも無理にC言語でやる必要はないな。そういう言語
作った方がいいんじゃないかな。
ていうか Java 使ったらどうか?
0932デフォルトの名無しさん
2006/02/21(火) 12:35:58>それで実行時に動的チェック、と。
なんでそうなる。
>んなアホなことやってられる訳ねーだろ。
阿呆はお前だ。
>>927
リンカになるべく手を入れなくて済むよう、多くの C++ 実装では
関数名の mangle をやっている。同様にすればよい。
0933デフォルトの名無しさん
2006/02/21(火) 13:21:470934デフォルトの名無しさん
2006/02/21(火) 17:40:43> ライブラリとか、WindowsだったらDLLにも
あほですか。
そういうものはプロトタイプ宣言したヘッダファイル必須だろうが。
ここで話をしているのは、自分で作った関数について、
プロトタイプ宣言をいちいち書かないといけないのが面倒だから、
自動生成にしたらよい、っていう話でしょうが。
0935デフォルトの名無しさん
2006/02/21(火) 18:55:21その程度の話なのか
0936デフォルトの名無しさん
2006/02/21(火) 20:18:27有る時に規模の小さい日曜プログラムならヘッダー要らないように出来ないかって話だろ?
0937デフォルトの名無しさん
2006/02/21(火) 20:50:190938デフォルトの名無しさん
2006/02/22(水) 00:26:320939デフォルトの名無しさん
2006/02/22(水) 09:56:430940デフォルトの名無しさん
2006/02/22(水) 13:14:070941デフォルトの名無しさん
2006/02/22(水) 19:32:330942デフォルトの名無しさん
2006/02/22(水) 19:45:02頭の悪い奴は「頭が悪い」それゆえに
自分が頭が悪いと思われることを恐れ「裸の王様」をマンセーする。
で、人間てのは恐ろしいものでそのうち防衛機制が作動しだして
なんだか本当に裸の王様がステキに見えて来る、とw
0943デフォルトの名無しさん
2006/02/22(水) 21:11:380944デフォルトの名無しさん
2006/02/22(水) 21:58:31それでその言語のコンパイラを書いてみればCの合理性が分かる
かも知れない
0945デフォルトの名無しさん
2006/02/22(水) 22:17:340946デフォルトの名無しさん
2006/02/23(木) 21:30:07なければ作れ。
0947デフォルトの名無しさん
2006/02/23(木) 21:32:06新しい言語を開発するにあたり解決すべきポイントは
新しい文字・記号を生み出すということです。
つまり、新しい文字が出来れば全ての問題は解決です。
0948デフォルトの名無しさん
2006/02/23(木) 21:44:47それは中国人の発想だな。
そういう考えの結果が積もり積もって、
現在の膨大な量の漢字が生まれてしまった訳だが・・・
結局、歴史的には、記号の数が少ないアルファベット文化が
世界を制してしまった点については、どう思う?
0949デフォルトの名無しさん
2006/02/23(木) 22:04:430950デフォルトの名無しさん
2006/02/23(木) 22:17:09>現在の膨大な量の漢字が生まれてしまった訳だが・・・
別にそれ自体は悪いことじゃないだろ。
英語だって知らない単語を見せられても意味なんてわかんねぇし。
>結局、歴史的には、記号の数が少ないアルファベット文化が
>世界を制してしまった点については、どう思う?
君の言う「世界を制した」というのが、いったい何を持ってして
「世界を制した」と言ってるのか全然わからないんで、まずは
そこんとこを説明してくれまいか?
あと君はあの悪名高き trigraph についてはどう思う?
記号の数が少ないことによって起きた悲劇なわけだが。
0951デフォルトの名無しさん
2006/02/23(木) 22:20:10そういうの論理の飛躍っていうんじゃない?
頭の悪い発想だよw
947じゃなくても普通のプログラマならASCIIの文字セットに不満持ったことがあるでしょ。
たとえば些細なことだけどギリシャ文字の接頭語が使えないから
苦し紛れにuSecとかさ。
0952デフォルトの名無しさん
2006/02/23(木) 22:46:42>別にそれ自体は悪いことじゃないだろ。
本当に悪くなかったらば、中国自身が使用する漢字の量を減らそう、
なんて考えたりはしなかった思うけど?
>そこんとこを説明してくれまいか?
一番分かり易いのが、科学全般の発展具合。
漏れは別に「中国の科学と文明」の信奉者ではないが、
それでも科学の黎明期における中国の役割は非常に大きかったと思う。
その大きさと、その後に続く現在の発展具合を見る限り、
漏れでなくとも、誰だって「ナンデ、ソウナルノ?」って気になるだろ?
でも、こんなのは当たり前と言えば、当たり前。
長い間、ご当地で生まれた秀才は皆が皆、科挙の為にタコツボに入って、
数十万・数百万の漢字を必死に覚え込んでいたんだからな。
彼らが生産的な方向に脳みそを使い、かつ円滑な交流がなされていれば、
どんな素晴らしい結果が生まれたのだろうと考えると
悔やんでも悔やみきれない。
>あと君はあの悪名高き trigraph についてはどう思う?
>記号の数が少ないことによって起きた悲劇なわけだが。
スマソ。トライグラフが存在していた事によって起こった
"悲劇"って一体何?
0953デフォルトの名無しさん
2006/02/23(木) 23:18:51漢字を覚えるのは簡単。
英単語を覚えるのといっしょで 意味の組み合わせと法則を
それなりに理解してれば、覚えるべきは例外のみで済む。
0954デフォルトの名無しさん
2006/02/23(木) 23:26:06ならば、その秘訣とやらを「やねうらお」大先生あたりにでも
教えてやれ。
漢字検定1級を取るのが悲願らしいから。
泣いてよろこぶぞ。
0955デフォルトの名無しさん
2006/02/24(金) 00:18:340956デフォルトの名無しさん
2006/02/24(金) 00:22:36楽だから
0957デフォルトの名無しさん
2006/02/24(金) 00:36:460958デフォルトの名無しさん
2006/02/24(金) 01:34:02漢字使ってる人口がどれだけいるか知ってるのか?
世界人口の1/3は漢字を使ってるぞ。
0959デフォルトの名無しさん
2006/02/24(金) 01:55:46いや、だからさぁ、なにがどう世界を制したのよ?
あと、おまえ、trigraph を見てなんとも思わんの?
trigraph を知らないだけ?
0960デフォルトの名無しさん
2006/02/24(金) 07:11:07>世界人口の1/3は漢字を使ってるぞ。
世界のプログラマの人口比率でも、
1/3 位は COBOL を使っているだろうな。
>>959
>いや、だからさぁ、なにがどう世界を制したのよ?
>>952を読んでないのか、読んでも理解できなかったのか、
最初から理解したくないのか、俺に知るすべは無いが、
これ以上俺に >>959 に納得させる能力はない。
俺の能力不足を許してくれ。
>あと、おまえ、trigraph を見てなんとも思わんの?
いや、「思う」とか「思わない」の話じゃなくて、
渡来グラフのために、現場で "悲劇" が起こっているんだろ?
0961デフォルトの名無しさん
2006/02/24(金) 09:44:37おれの分野だとひとりも見たことが無い
0962デフォルトの名無しさん
2006/02/24(金) 11:27:56プロトタイプ宣言なんてやめて、プログラムを宣言部と実現部に分ければいいんだよ
という事でAdaを使いなさい
0963デフォルトの名無しさん
2006/02/24(金) 11:46:450964デフォルトの名無しさん
2006/02/24(金) 12:48:24>>記号の数が少ないことによって起きた悲劇なわけだが。
>
>スマソ。トライグラフが存在していた事によって起こった
>"悲劇"って一体何?
日本語読めないバカハケーン
0965デフォルトの名無しさん
2006/02/24(金) 12:56:43いや結局「悲劇」とやらの内容を一切説明してないんだが。
ま、どうせ「意図せず別の文字に置き換えられて悩んだ」とかだろうが
そりゃ無知だから悩むんであって、悲劇でもなんでもない。
0966デフォルトの名無しさん
2006/02/24(金) 13:01:550967デフォルトの名無しさん
2006/02/24(金) 13:03:20trigraphの発明→(なんらかの)悲劇の発生
じゃなくて
記号の数がすくない→「trigraphの発明」という悲劇
ってことだろ
0968デフォルトの名無しさん
2006/02/24(金) 14:31:450969デフォルトの名無しさん
2006/02/24(金) 18:21:48トライグラフ見たことないのかww
0971デフォルトの名無しさん
2006/02/24(金) 20:44:160972デフォルトの名無しさん
2006/02/24(金) 23:07:04無知なのはお前。m9(^д^) プッ
0973デフォルトの名無しさん
2006/03/15(水) 00:01:180974デフォルトの名無しさん
2006/03/15(水) 00:21:46)
_ ,, -ー=- 、 ヽ 異議なし!!
ゝ、ニ 二 _ ミミV, )
マ二 ニ、 r' ..,,_ ヽソ, `v'⌒ヽ/⌒ヽ/ ,. ‐- .. _
`ヽ、 { a`' tij` _! / __ `` ー- 、
|ノゝi ,_〈 , ィ/ ゝヽ ̄ヽ ー- '
/ t -‐ ,'" _ / { {ヽ、_ ヽ' ノ_,.〉
/! `>、 _/_ -ァー- 、_ ... -‐ ' ヽヽ、 `>、..ノ=┘
/j >-‐ ' ´/ / / / _ノ \ `ー '!
, -‐ 7´/{⌒| / _/ j >‐'
/ / //| 〉‐f/ \' ! , ' ´
/ ,' > .|/ レ ゚ノ | ,.. -‐ '"
/ { ヽ | 〉 /__ t ,. -‐ ' ´
| ヽ| / / ' ` ヽ、 /
| `!// /
0975デフォルトの名無しさん
2006/03/15(水) 02:42:28IDEによる自動化の恩恵をあまり受けられなかったこと
それゆえに生産性ではJavaやC#の後塵を拝することになる
0976デフォルトの名無しさん
2006/03/15(水) 08:53:11ここ一番の最強プログラムはほぼ例外なくC/C++
0977デフォルトの名無しさん
2006/03/15(水) 12:20:290978デフォルトの名無しさん
2006/03/15(水) 15:01:46実行に必要なすべてをスタティックリンクできて、
EXEファイルが10MBくらいに収まるなら、
大歓迎なんだけどなぁ。
0979デフォルトの名無しさん
2006/03/15(水) 15:42:43TurboC とかあったのだが。
PCの場合、スペックが高速大容量化したからCにする
必要性がなくなっただけなんじゃないか? 小さくて
効率のいい実行ファイルを作る必要はないもんな。
それだけでなくPCの場合ユーザの要求が高まってCだけで
作るのは辛い状態になった。
0980http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 20:07:15もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0981デフォルトの名無しさん
2006/03/19(日) 13:16:480982デフォルトの名無しさん
2006/03/23(木) 21:59:35それは普通だと思う
配列のはわかめ
0983デフォルトの名無しさん
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
0984デフォルトの名無しさん
2006/03/25(土) 16:16:56どちらも合わないと思う。
おかしいのは文法であって、ポインタそのものの概念は
おおむね問題ないと思うがどうか。
0985デフォルトの名無しさん
2006/03/25(土) 16:27:28今更だけど。
つC++参照
0986デフォルトの名無しさん
2006/03/25(土) 20:58:380987デフォルトの名無しさん
2006/03/25(土) 21:56:380988デフォルトの名無しさん
2006/03/26(日) 00:24:180989デフォルトの名無しさん
2006/03/26(日) 00:56:020990デフォルトの名無しさん
2006/03/26(日) 01:06:06こんなに複雑な宣言ができるのだよ
0991デフォルトの名無しさん
2006/03/26(日) 01:12:520992デフォルトの名無しさん
2006/03/26(日) 02:33:300993デフォルトの名無しさん
2006/03/26(日) 02:59:57そういや複雑なポインタの宣言を自動生成してくれるツールとかあったな。
0994デフォルトの名無しさん
2006/03/26(日) 09:36:480995デフォルトの名無しさん
2006/03/26(日) 09:59:27不可能でございます
0996デフォルトの名無しさん
2006/03/26(日) 17:25:230997デフォルトの名無しさん
2006/03/27(月) 01:25:570998デフォルトの名無しさん
2006/03/27(月) 01:28:18おかしくない!!
0999デフォルトの名無しさん
2006/03/27(月) 01:29:071000デフォルトの名無しさん
2006/03/27(月) 01:45:59これで終了します。
この話題はもはやこれ以上続きません。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。