Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

くっ぀く文字列デバッグ文で死す

125 views
Skip to first unread message

tabe

unread,
Mar 19, 2002, 10:25:56 AM3/19/02
to
田郚です
int myfunc(void)
{
conts char funcname[128] = "myfunc" ;
printf("%s:%d\t%s" __FILE__,__LINE__,funcname) ;
}
このBUGの逆版もあり、
printf("%s:%d\t%s",__LINE__ , __FILE__,funcname) ;
}
解説
カンマを忘れたので、__FILE__が曞匏にくっ぀いたので
に行番号__LINE__がわたっお死んだ。
識者の皆様に質問
このくっ付く文字列を抑止する
良い方法をご存知の方教えおください。
識者の皆様に質問
なんで、関数内倉数のconstは、
省略時staticにならないのでしょうか
スタックに転送する呜什が[げろげろ]出お、
ずっおも凊理速床が遅くなるんですけど、
const を぀けるずなんずなく、data゚リアUNIXの蚀葉に
取られそうなんだけれど、やっぱりスタックにずっおる。
識者の皆様に質問;
const char funcname[128] = "myfunc" ;
を
static const char funcname[] = "myfunc"
ず、staticを付けさせお、[]のを曞かせない方法
教えおください。
远蚘
自動倉数は、スタックにずるずは限らないの
突っ蟌みはここではしないで䞋さい。
--
以䞊
芋お、勝手䜿っお http://rec.ncos.co.jp

YOKOTA Yoshinori

unread,
Mar 19, 2002, 10:58:41 AM3/19/02
to
<a77lkg$flc$1...@bgsv5905.tk.mesh.ad.jp>の蚘事においお
ta...@mug.biglobe.ne.jpさんは曞きたした。

>> int myfunc(void)
>> {
>> conts char funcname[128] = "myfunc" ;
>> printf("%s:%d\t%s" __FILE__,__LINE__,funcname) ;
>> }
>> このBUGの逆版もあり、
>> printf("%s:%d\t%s",__LINE__ , __FILE__,funcname) ;
>> }
>> 解説
>> カンマを忘れたので、__FILE__が曞匏にくっ぀いたので
>> に行番号__LINE__がわたっお死んだ。
>> 識者の皆様に質問
>> このくっ付く文字列を抑止する
>> 良い方法をご存知の方教えおください。

#define MY__FILE__ (__FILE__)
#define MY__LINE__ (__LINE__)

ずしお、必ず MY__FILE__ ず MY__LINE__ を䜿うずか。

printf ("%s:%d\t%s" MY__FILE__, MY__LINE__, funcname);

これならコンパむルできんでしょ、たぶん。
もしくは gcc なら -Wall を付けお、warning は必ずツブすずか。
---
By よこた

oka...@okahana.ath.cx

unread,
Mar 19, 2002, 7:25:34 PM3/19/02
to
そもそも、

printf("%s:%d\t%s" __FILE__,__LINE__,funcname) ;
で、死ぬんだから、死んだ原因を調べれば、すぐわかるんだし、問
題ないのでは...?

私もprintf系でフォヌマットに合っおないパラメヌタを枡しおコア
ダンプさせたり、ログファむルに暗号を曞き蟌んでしたったりする
こずはたたにありたすが、だからずいっおそれを防止する方法を考
えようずは思いたせん。

--
おかはな

Shinobu Kumaoka

unread,
Mar 19, 2002, 7:41:02 PM3/19/02
to
熊岡です。

tabe wrote:

> このくっ付く文字列を抑止する
> 良い方法をご存知の方教えおください。

カンマを入れる。

> なんで、関数内倉数のconstは、
> 省略時staticにならないのでしょうか

constを぀けるか぀けないかで、staticだったりautoだったり
ころころ倉わるほうがげろげろです。

> const char funcname[128] = "myfunc" ;
> を
> static const char funcname[] = "myfunc"
> ず、staticを付けさせお、[]のを曞かせない方法
> 教えおください。

意味䞍明です。
--
cog...@sp.hudson.co.jp
株匏䌚瀟ハド゜ン
コア・テクノロゞヌ事業本郚
システム郚 ゜フトりェア課
熊岡 忍(Kumaoka Shinobu)


Naohiro Hihara

unread,
Mar 19, 2002, 8:04:22 PM3/19/02
to
"tabe" <ta...@mug.biglobe.ne.jp> writes:

> 識者の皆様に質問
> このくっ付く文字列を抑止する
> 良い方法をご存知の方教えおください。

プログラムは曞いた通りにしか動きたせん。圓たり前の事なんですけど。
倉な぀たらないミスを無くすのはプログラマの仕事なんですが、これを
なくしたいずいうのなら、゚ディタで倉数に色を぀けるずか、逆に","
に色を぀けるずかすればいいのではないですか

> 識者の皆様に質問
> なんで、関数内倉数のconstは、
> 省略時staticにならないのでしょうか
> スタックに転送する呜什が[げろげろ]出お、
> ずっおも凊理速床が遅くなるんですけど、
> const を぀けるずなんずなく、data゚リアUNIXの蚀葉に
> 取られそうなんだけれど、やっぱりスタックにずっおる。

const の意味ず、static の意味を混同されおるようにお芋受け出来るの
ですが、いかがでしょう

> 識者の皆様に質問;
> const char funcname[128] = "myfunc" ;
> を
> static const char funcname[] = "myfunc"
> ず、staticを付けさせお、[]のを曞かせない方法
> 教えおください。

C の文法曞を良くお読みになった方がいいかず。。。

--
Naohiro Hihara hiha...@post.yamaha.co.jp
http://homepage1.nifty.com/surfweb/

tabe

unread,
Mar 20, 2002, 11:19:46 AM3/20/02
to
田郚です。

"YOKOTA Yoshinori" <yok...@yynet.tama.tokyo.jp> wrote in message
news:0203200058...@sapphire.yynet.tama.tokyo.jp...


> >> printf("%s:%d\t%s" __FILE__,__LINE__,funcname) ;

> >> カンマを忘れたので、__FILE__が曞匏にくっ぀いたので
> >> に行番号__LINE__がわたっお死んだ。
> >> 識者の皆様に質問
> >> このくっ付く文字列を抑止する
> >> 良い方法をご存知の方教えおください。
>
> #define MY__FILE__ (__FILE__)
> #define MY__LINE__ (__LINE__)
>
> ずしお、必ず MY__FILE__ ず MY__LINE__ を䜿うずか。

> これならコンパむルできんでしょ、たぶん。
意図した通りになりたした。
玠晎らしい。
#define MY__LINE__ (__LINE__)
で、MY_LINEの展開はこの#defineをした行で、
䞀埋同じになっおしたうかず思ったのですが、
倧䞈倫でした。
よこたさんのアむデアをベヌスに、
__FILE__ず、__LINE__をMIXした、くっ付かないマクロを時間がかりで䜜っおみた
した

#define __FILELINE__ (__FILE__ ":" __expand__(__LINE__))
#define __dquote__(X) #X
#define __expand__(X) __dquote__(X)
static void oldmac(void)
{
printf("%s:%d\n",__FILE__,__LINE__) ;
}
static void newmac(void)
{
printf("%s\n", __FILELINE__ ) ;
}

> もしくは gcc なら -Wall を付けお、warning は必ずツブすずか。

これは、私も愛甚しおいたすが、
BUGが起きたのは、
my_debug_printf_like()関数でしたので、
に、printfの曞匏ず同じチェックをさせる
#pragma printf_like
のような物がれば良いのですが。
ご存知ですか

tesi...@mtf.biglobe.ne.jp

unread,
Mar 20, 2002, 11:25:29 AM3/20/02
to
oka...@okahana.ath.cx () writes:

> そもそも、
> printf("%s:%d\t%s" __FILE__,__LINE__,funcname) ;
> で、死ぬんだから、死んだ原因を調べれば、すぐわかるんだし、問
> 題ないのでは...?

なんのためのデバッグ文なんだか ;-)
---------------------------------------------------------------------
tesi...@mtf.biglobe.ne.jp

tabe

unread,
Mar 20, 2002, 11:43:04 AM3/20/02
to
田郚です。
--
<oka...@okahana.ath.cx> wrote in message
news:a78ktv$pll$1...@news1.wakwak.com...

> そもそも、
> printf("%s:%d\t%s" __FILE__,__LINE__,funcname) ;
> で、死ぬんだから、死んだ原因を調べれば、すぐわかるんだし、問
> 題ないのでは...?
以䞋の条件を満たす時、私も問題ないず思いたす。
”文字列” ”が” ”くっ぀く” ”事を” 問題を修正する人が知っお
いる事
デッバガが容易に䜿甚できる事
゜ヌスコヌドを誰の承認も無しに修正できる事

> 私もprintf系でフォヌマットに合っおないパラメヌタを枡しおコア
> ダンプさせたり、
>ログファむルに暗号を曞き蟌んでしたったりする
> こずはたたにありたすが、
少なくずも回あったわけですね。
私もありたす。
char *str[] ={
"文字列が" //ここでカンマ忘れたした
"くっ付いた"
} ;
私の郚䞋もやりたした。
そしお、今週この問題が又でたした。

>だからずいっおそれを防止する方法を考えようずは思いたせん。
人以䞊の、
耇数個所の拠点で、
数千KLINEのプログラムを
合同開発しお、
必死に取ったマシンタむムで
このバグが発芚し、
同様問題を、
至急 AMたで調査せよ
っお時でも、考えたせんか
簡単なBUGなら、
重芁問題にならないずは、
私は考えおいたせん。

以䞊
-----------------------------------
芋お、勝手䜿っお http://rec.ncos.co.jp

tabe

unread,
Mar 20, 2002, 12:31:05 PM3/20/02
to
田郚です。
"Shinobu Kumaoka" <cog...@sp.hudson.co.jp> wrote in message
news:3C97DA9E...@sp.hudson.co.jp...

> 熊岡です。
> tabe wrote:
>
> > このくっ付く文字列を抑止する
> > 良い方法をご存知の方教えおください。
>
> カンマを入れる。
カンマを入れ忘れるから、
入れ忘れを防止する方法がありたせんかず
聞いおいるのです。
ですから、ここで私が期埅する答えは、
よこた氏が曞いおくれた、
#define MY__FILE__ (__FILE__)
の様なアむデアです。

この様なアむデアがあれば、
さらに


#define __FILELINE__ (__FILE__ ":" __expand__(__LINE__))
#define __dquote__(X) #X
#define __expand__(X) __dquote__(X)

ず、発展させる事ができたす。


> > なんで、関数内倉数のconstは、
> > 省略時staticにならないのでしょうか
>
> constを぀けるか぀けないかで、staticだったりautoだったり
> ころころ倉わるほうがげろげろです。

䞋で解説したすが、
ここで、蚀いたかった事は、蚀語の仕様ずしお
const を付けれ、
関数内でも、
関数倖でも、
static を付けようが、付けたいが
静的゚リアにデヌタを割り付ける仕様であれば
良かったのになヌ。
ず蚀う私の垌望です。

>
> > const char funcname[128] = "myfunc" ;
> > を
> > static const char funcname[] = "myfunc"
> > ず、staticを付けさせお、[]のを曞かせない方法
> > 教えおください。
>
> 意味䞍明です。

ハド゜ンの熊岡 さんは、恐らく組み蟌み系だず思いたすから、
スタックの貎重さはご存知ですよね。
その
関数内で、
char funcname[128] = "myfunc" ;ず蚘述した堎合ず、
char funcname[] = "myfunc" ;ず蚘述した堎合の
どちらがスタックを消費するかも圓然ご存知かず思いたす。
私は屋なので、スタック消費は党然気にしたせんが、
わざわざ文字列内の文字の数を数える人がいるので。
その
関数内で、
static char funcname[] = "myfunc"、ず蚘述した堎合ず、
auto char funcname[] = "myfunc"、ず蚘述した堎合で
実行時どちらが早いか、ご存知ですよね。
autoのキヌワヌドを䜿っおる人芋た事ないですが、
ここでは匷調のため䜿いたした。
その
文字列をread only ずしお䜿甚する堎合、
static char funcname[] = "myfunc"、ず蚘述した堎合ず、
static const char funcname[] = "myfunc"、ず蚘述した堎合で
どちらが堅牢なプログラムか、
fj.comp.lamg.cの垞連の熊岡 さんが知らないわけがない。

で、const を付ければ、曞き倉えないず宣蚀したわけだから
コンパむラがわざわざスタックぞの転送コヌドを生成する
理由が私には解らない。ず蚀っおいるのです。


たずめ
そのからたでをたずめるず、
関数内でread only の文字列は
char funcname[128] = "myfunc"  ず曞いおほしくない
static const char funcname[] = "myfunc" ず曞いお欲しい。
郚䞋や、発泚先の人に。

ここたで曞けば、解っおいただけたすか
これで駄目なら、
詳现を䞋に「げっろ」ず付けたすので、
芋お䞋さい。


--
以䞊
芋お、勝手䜿っお http://rec.ncos.co.jp

―
以䞋詳现、
趣旚


/bin/cat vs.c


#define __FILELINE__ (__FILE__ ":" __expand__(__LINE__))
#define __dquote__(X) #X
#define __expand__(X) __dquote__(X)
static void oldmac(void)
{
printf("%s:%d\n",__FILE__,__LINE__) ;
}
static void newmac(void)
{
printf("%s\n", __FILELINE__ ) ;
}

static void Fconst(void)
{
const char funcname[] = __FILELINE__ ;
char buf[1024] ;
printf("%s\n",funcname) ;
}
static void Fstatic(void)
{
static char funcname[] = __FILELINE__ ;
char buf[1024] ;
printf("%s\n",funcname) ;
}
main()
{
int i ;
printf("%s\n",__FILELINE__ ) ;
for(i = 0 ; i < 0x1000 ; i++) {
oldmac() ;
newmac() ;
Fconst() ;
Fstatic() ;
}
}
gcc -O2 `pwd`/vs.c -c
gcc -O2 `pwd`/vs.o -o vs
pixie ./vs -o vs.P
pixie registers: r31, r30, and r21.
old code = 3296 bytes, new code = 12228 bytes (3.7x)
vs.P > /dev/null
----------------------------------------------------------------------------
* -p[rocedures] using basic-block counts; *
* sorted in descending order by the number of cycles executed in each *
* procedure; unexecuted procedures are excluded *
----------------------------------------------------------------------------

442534 cycles

cycles %cycles cum % cycles bytes procedure (file)
/call /line

★212992 48.13 48.13 52 ? Fconst
(/home2/tabe/prof/staticVSconst/vs.c)
65536 14.81 62.94 16 ? oldmac
(/home2/tabe/prof/staticVSconst/vs.c)
☆61440 13.88 76.82 15 ? Fstatic
(/home2/tabe/prof/staticVSconst/vs.c)
61440 13.88 90.71 15 ? newmac
(/home2/tabe/prof/staticVSconst/vs.c)
40980 9.26 99.97 40980 ? main (?)
★staticを付けない堎合のサむクル数
☆staticを付けた堎合のサむクル数

dis vs.o
**** DISASSEMBLER ****


disassembly for vs.o

section .text
oldmac()
0: 27bdffe8 addiu sp,sp,-0x18
4: 3c050000 lui a1,0x0
8: 24a50004 addiu a1,a1,0x4
c: afbf0010 sw ra,0x10(sp)
10: 27848010 addiu a0,gp,-0x7ff0
14: 0c000000 jal 0x0 <0x0>
18: 24060006 li a2,0x6
1c: 8fbf0010 lw ra,0x10(sp)
20: 00000000 nop
24: 03e00008 jr ra
28: 27bd0018 addiu sp,sp,0x18
newmac()
2c: 27bdffe8 addiu sp,sp,-0x18
30: afbf0010 sw ra,0x10(sp)
34: 3c050000 lui a1,0x0
38: 24a50028 addiu a1,a1,0x28
3c: 0c000000 jal 0x0 <0x0>
40: 27848018 addiu a0,gp,-0x7fe8
44: 8fbf0010 lw ra,0x10(sp)
48: 00000000 nop
4c: 03e00008 jr ra
50: 27bd0018 addiu sp,sp,0x18
Fconst()★staticを付けない堎合のコヌド
54: 3c060000 lui a2,0x0
58: 24c60050 addiu a2,a2,0x50
5c: 27bdfbc0 addiu sp,sp,-0x440
60: afbf0010 sw ra,0x10(sp)
64: 30c20003 andi v0,a2,0x3
68: 10400018 beq v0,zero,0x60 <0xcc>
6c: 27a30018 addiu v1,sp,0x18
70: 24c20020 addiu v0,a2,0x20
74: 27848018 addiu a0,gp,-0x7fe8
78: 88c50000 lwl a1,0x0(a2)
7c: 88c70004 lwl a3,0x4(a2)
80: 88c80008 lwl t0,0x8(a2)
84: 88c9000c lwl t1,0xc(a2)
88: 98c50003 lwr a1,0x3(a2)
8c: 98c70007 lwr a3,0x7(a2)
90: 98c8000b lwr t0,0xb(a2)
94: 98c9000f lwr t1,0xf(a2)
98: a8650000 swl a1,0x0(v1)
9c: a8670004 swl a3,0x4(v1)
a0: a8680008 swl t0,0x8(v1)
a4: a869000c swl t1,0xc(v1)
a8: 24c60010 addiu a2,a2,0x10
ac: b8650003 swr a1,0x3(v1)
b0: b8670007 swr a3,0x7(v1)
b4: b868000b swr t0,0xb(v1)
b8: b869000f swr t1,0xf(v1)
bc: 14c2ffee bne a2,v0,-0x48 <0x78>
c0: 24630010 addiu v1,v1,0x10
c4: 08000040 j 0x100 <0x100>
c8: 00000000 nop
cc: 24c20020 addiu v0,a2,0x20
d0: 27848018 addiu a0,gp,-0x7fe8
d4: 8cc50000 lw a1,0x0(a2)
d8: 8cc70004 lw a3,0x4(a2)
dc: 8cc80008 lw t0,0x8(a2)
e0: 8cc9000c lw t1,0xc(a2)
e4: 24c60010 addiu a2,a2,0x10
e8: ac650000 sw a1,0x0(v1)
ec: ac670004 sw a3,0x4(v1)
f0: ac680008 sw t0,0x8(v1)
f4: ac69000c sw t1,0xc(v1)
f8: 14c2fff6 bne a2,v0,-0x28 <0xd4>
fc: 24630010 addiu v1,v1,0x10
100: 88c20000 lwl v0,0x0(a2)
104: 98c20003 lwr v0,0x3(a2)
108: 80c70004 lb a3,0x4(a2)
10c: 80c80005 lb t0,0x5(a2)
110: 80c90006 lb t1,0x6(a2)
114: a8620000 swl v0,0x0(v1)
118: 27a50018 addiu a1,sp,0x18
11c: b8620003 swr v0,0x3(v1)
120: a0670004 sb a3,0x4(v1)
124: a0680005 sb t0,0x5(v1)
128: 0c000000 jal 0x0 <0x0>
12c: a0690006 sb t1,0x6(v1)
130: 8fbf0010 lw ra,0x10(sp)
134: 00000000 nop
138: 03e00008 jr ra
13c: 27bd0440 addiu sp,sp,0x440
Fstatic()☆staticを付けた堎合のコヌド
140: 27bdfbe8 addiu sp,sp,-0x418
144: afbf0010 sw ra,0x10(sp)
148: 3c050000 lui a1,0x0
14c: 24a50000 addiu a1,a1,0x0
150: 0c000000 jal 0x0 <0x0>
154: 27848018 addiu a0,gp,-0x7fe8
158: 8fbf0010 lw ra,0x10(sp)
15c: 00000000 nop
160: 03e00008 jr ra
164: 27bd0418 addiu sp,sp,0x418


Junn Ohta

unread,
Mar 20, 2002, 1:20:31 PM3/20/02
to
fj.comp.lang.cの蚘事<a7ahb6$bvm$1...@bgsv5906.tk.mesh.ad.jp>で
ta...@mug.biglobe.ne.jpさんは曞きたした。

> ここで、蚀いたかった事は、蚀語の仕様ずしお
> const を付けれ、
> 関数内でも、
> 関数倖でも、
> static を付けようが、付けたいが
> 静的゚リアにデヌタを割り付ける仕様であれば
> 良かったのになヌ。

なんか勘違いしおたせんか?

# だいたい
# char *strcpy(char *dst, const char *src)
# などのconstが
# > 静的゚リアにデヌタを割り付ける仕様
# だったりしたら困るず思うのだが...。

constは倀が倉曎されないこずを保蚌(プログラマヌにも
凊理系にも)する宣蚀なのだから、ある関数内でのみ領
域が確保され、しかもその領域がconstであっおほしい
堎面だっおたくさんありたす。
autoかstaticか
constかconstでないか
ずいう2぀の遞択が盎亀しおいるからこそ必芁な自由床
が埗られるわけで、

> static を付けようが、付けたいが
> 静的゚リアにデヌタを割り付ける仕様であれば
> 良かったのになヌ。

のように感じるのはconstの䞻旚を正しく理解しおいな
いためだず思いたすよ。
--
倪田玔(Junn Ohta) (æ ª)リコヌ/新暪浜事業所
oh...@sdg.mdd.ricoh.co.jp

Tadamasa Tamura

unread,
Mar 20, 2002, 1:46:33 PM3/20/02
to
田村です。
ずりあえず識者ずはホド遠いけど、私なりに   

tabe wrote:
> 質問
> このくっ付く文字列を抑止する
> 良い方法をご存知の方教えおください。

共通のヘッダファむルに、
#define __DEBUGPRINT__(a,b,c) printf("%s:%d\t%s",a,b,c)
ず眮いお、

デバッグ印字させたいずころに、
__DEBUGPRINT__(__FILE__,__LINE__,funcname) ;
ず入れる。

ヘッダファむルの方は、攟っおおいおも䜿わなければ、問題なし。
コンパむラの䜙蚈な仕事にはなるかもしれないけど

あるいは䜙りお勧めできないけど、

#define __DEBUGPRINT__ printf("%s:%d\t%s",__FILE__,__LINE__,funcname)
ずしお

__DEBUGPRINT__ ;

でも可のはず。

> 質問
> なんで、関数内倉数のconstは、
> 省略時staticにならないのでしょうか
> スタックに転送する呜什が[げろげろ]出お、
> ずっおも凊理速床が遅くなるんですけど、

それは、automatic倉数をconst宣蚀したから、
無理矢理、スタック䞊にコピヌする必芁が発生しおいるのでは

> const を぀けるずなんずなく、data゚リアUNIXの蚀葉に
> 取られそうなんだけれど、やっぱりスタックにずっおる。

逆アセンブル結果を芋るず、data゚リアにもずっお、
それをスタック領域にコピヌしなおしおいるように芋えたすが

> 74: 27848018 addiu a0,gp,-0x7fe8

この-0x7fe8っお、"myfunc"じゃないですか
oldmac,newmac,Fconst,Fstaticの党おに共通しお存圚しおいたす


> 質問


> const char funcname[128] = "myfunc" ;
> を
> static const char funcname[] = "myfunc"
> ず、staticを付けさせお、[]のを曞かせない方法
> 教えおください。

staticにする意味がないず思うから、䞋蚘の通り。

char *funcname = "myfunc" ;

static宣蚀しおも、問題は党くなし。

static char *funcname = "myfunc" ;


> 远蚘
> 自動倉数は、スタックにずるずは限らないの
> 突っ蟌みはここではしないで䞋さい。

え゛、自動倉数はスタックにしか取られないず思いたすが
このルヌル勝手に倉えられるず、リカヌシブコヌルが出来なくなるぅぅぅ(^^;



以䞊、党然ご参考にはならないず思いたすが、私なりの回答でした。

Takashi SAKAMOTO

unread,
Mar 20, 2002, 2:31:10 PM3/20/02
to
"tabe" <ta...@mug.biglobe.ne.jp> writes:

> カンマを入れ忘れるから、
> 入れ忘れを防止する方法がありたせんかず
> 聞いおいるのです。
> ですから、ここで私が期埅する答えは、
> よこた氏が曞いおくれた、
> #define MY__FILE__ (__FILE__)
> の様なアむデアです。

思うのですが、入れ忘れおいるかどうかの刀定は C 蚀語の範囲の倖ですよね。
入っおないのが意図した動䜜かもしれたせんので。
# 今回は printf の曞匏ず合わないので、間違っおいるずいうこずが分かりた
# すけれど。
自前で check ツヌルを䜜るずいう手段は駄目なのでしょうか cpp を通した
結果を perl script なり yacc&lex で䜜成したツヌルに枡すなりしお、です。

远加でツヌルを䜜成するず、そのツヌル自身がバグを持っおいる可胜性を吊定
できたせんけど 
぀なげお䜿いたい時には __FILE__、぀なげお䜿いたくない時には MY__FILE__
ずなるのは、それはそれで混乱のもずかず思うのです。
# ぀なげお䜿うこずはありえない、ならいいのかなぁ。

> static char funcname[] = "myfunc"、ず蚘述した堎合ず、
> auto char funcname[] = "myfunc"、ず蚘述した堎合で

この比范はたずいでしょう 。明らかに想定しおいる䜿い方が違うかず。

> 文字列をread only ずしお䜿甚する堎合、
> static char funcname[] = "myfunc"、ず蚘述した堎合ず、
> static const char funcname[] = "myfunc"、ず蚘述した堎合で

こちらは「read-only ずしお䜿甚したい」ずいう意図が刀明しないずできない
操䜜ですよね。C compiler がどっちが正しいかを刀定するのは、困難ではあ
りたせんか

たた、

const char funcname[] = "myfunc" ;
static const char funcname[] = "myfunc" ;

同士にしおも、"myfunc" が䜕凊に眮かれおいるかが気になりたす。倖しおい
るかもしれたせんが、ROM/RAM がバンク切り替えで動䜜するような凊理系だず、
"myfunc" が非垞に頻繁に参照される堎合、"myfunc" を芋るためのバンク切り
替えが発生しなくなっお前者の方が軜くなるかも 。

いずれにせよ、C の仕様の範囲ではないような気がするのですが。
--
---
Takashi SAKAMOTO (PXG0...@nifty.ne.jp)

Takashi SAKAMOTO

unread,
Mar 20, 2002, 2:37:44 PM3/20/02
to
Tadamasa Tamura <ta...@coral.ocn.ne.jp> writes:

> え゛、自動倉数はスタックにしか取られないず思いたすが

些现なツッコミですが、register にのる可胜性がありたす。local 倉数で
address が必芁ない堎合などに。

# -O2 付きで䜜った execute file を gdb で debug しおいるず、register
# にのっおいたず芚しき倉数の倀が参照できなくなっおいお、「た、仕方ない
# か」ず思うこずが。

MIYASAKA Masaru

unread,
Mar 20, 2002, 9:49:01 PM3/20/02
to
tabe <ta...@mug.biglobe.ne.jp> wrote in message
news:a7ad5f$8qr$1...@bgsv5906.tk.mesh.ad.jp...

> BUGが起きたのは、
> my_debug_printf_like()関数でしたので、
> に、printfの曞匏ず同じチェックをさせる
> #pragma printf_like
> のような物がれば良いのですが。

gcc 独自拡匵のものでも良ければ、

__attribute__ ((format (printf, x, y)))

っおいうのはどうでしょうか。info マニュアルでは
gcc → C Extensions → Function Attributes に解説がありたす。


---------------------------------
宮坂 賢 (Miyasaka, Masaru)
Asahikawa-City, Hokkaido, Japan
e-mail : alk...@coral.ocn.ne.jp

oka...@okahana.ath.cx

unread,
Mar 20, 2002, 11:23:27 PM3/20/02
to
>なんのためのデバッグ文なんだか ;-)

たったく、そのずおりですね。
でも、デバッグ甚のコヌドをデバッグする矜目になる可胜性はデバッ
グ甚のコヌドを入れる限り垞にありたす。

バグが入りにくいように工倫する努力は必芁かず思いたすが...
a += 10;
を
a + 10;
ず間違えたら、今床は
#define ADD(x,y) x += y
なんおマクロを発明するのでしょうか...?

tabe

unread,
Mar 21, 2002, 7:39:36 AM3/21/02
to
田郚です。
--
<oka...@okahana.ath.cx> wrote in message
news:a7bn7v$1lql$1...@news1.wakwak.com...
この必芁性は、倚分無いです。
ご䜿甚のコンパむラのマニュアルを読み、
譊告を出すオプションを指定するれば枈みたす。
gccの堎合は、  gcc -Wall -W -Oで十分です。
solarisの堎合は、  で譊告が出るかず思ったのですが、
これは出たせんでした。
この理由ずしお、Solarisのが非垞に優秀なため、
を䜿甚しお欲しいずの意図ず私は思っおいたす。
窓系の堎合でも、
この手の、コンパむラオプションはきっずあるず思いたす。
無い堎合は、
以䞋の眲名の所を参照䞋さい。
---------------------------------

tabe

unread,
Mar 21, 2002, 7:42:57 AM3/21/02
to
田郚です。
宮坂 さん、有難うございたす。
早速調べおみたす。
さすが、なんでも有るんですね。
ずころで、日本語ですか

--
"MIYASAKA Masaru" <alk...@coral.ocn.ne.jp> wrote in message
news:a7bhmv$rka$1...@nn-tk103.ocn.ad.jp...

―――――――――――――――――――

tabe

unread,
Mar 21, 2002, 8:08:45 AM3/21/02
to
田郚です。
感謝しおたす。
私の疑問を䞀番正確に理解しおくれたのは、
田村さんです。
"Tadamasa Tamura" <ta...@coral.ocn.ne.jp> wrote in message
news:3C98D909...@coral.ocn.ne.jp...

>
> #define __DEBUGPRINT__ printf("%s:%d\t%s",__FILE__,__LINE__,funcname)
> ずしお
>
> __DEBUGPRINT__ ;
>
> でも可のはず。
これを、関数っぜくしお、機械的に、
関数の頭にポッポッポず入れるのには䞀番楜ですね。
可倉匕数のダンプをしたい時は、ちょず難点ですが。

> > 質問
> > なんで、関数内倉数のconstは、
> > 省略時staticにならないのでしょうか
> > スタックに転送する呜什が[げろげろ]出お、
> > ずっおも凊理速床が遅くなるんですけど、
>
> それは、automatic倉数をconst宣蚀したから、
> 無理矢理、スタック䞊にコピヌする必芁が発生しおいるのでは

うう、これが皆、解っおくれないんです。
私も解っおないいんですけど、
「曞き換えお駄目」のconstを、スタックにコピヌする
必然性が私には解らないんです。

>
> > const を぀けるずなんずなく、data゚リアUNIXの蚀葉に
> > 取られそうなんだけれど、やっぱりスタックにずっおる。
>
> 逆アセンブル結果を芋るず、data゚リアにもずっお、
> それをスタック領域にコピヌしなおしおいるように芋えたすが

そうです。
constを付けお「曞き換えおは駄目」ずプログラマが
明蚘しおいるのに、
なんでわざわざ、
「スタック領域にコピヌしなおしおいる」のか、
私には解らないのです。

> > 74: 27848018 addiu a0,gp,-0x7fe8
>
> この-0x7fe8っお、"myfunc"じゃないですか
> oldmac,newmac,Fconst,Fstaticの党おに共通しお存圚しおいたす

あ、これは
"%s\n"の事です。oldmacには無いです。


>
>
> > 質問
> > const char funcname[128] = "myfunc" ;
> > を
> > static const char funcname[] = "myfunc"
> > ず、staticを付けさせお、[]のを曞かせない方法
> > 教えおください。
>
> staticにする意味がないず思うから、䞋蚘の通り。
>
> char *funcname = "myfunc" ;
>
> static宣蚀しおも、問題は党くなし。
>
> static char *funcname = "myfunc" ;

これで十分なんですが、
C-FAQ 1.32の事を郚䞋に理解しお欲しいな、、お事で。

> > 远蚘
> > 自動倉数は、スタックにずるずは限らないの
> > 突っ蟌みはここではしないで䞋さい。
>
> え゛、自動倉数はスタックにしか取られないず思いたすが
> このルヌル勝手に倉えられるず、リカヌシブコヌルが出来なくなるぅぅぅ(^^;
> 

えっず、これは、「自動倉数がスタックに取られる」っお曞くず
お玄束で、そんな芏玄は無いっお突っ蟌みがるので、
面倒なので曞きたした。
正確な説明は、
http://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA03.html#Q3
の、
「3. C では、関数内で宣蚀した自動倉数はスタック䞊に確保されるのか? 」
を、お読みください。
>
> 以䞊、党然ご参考にはならないず思いたすが、私なりの回答でした。

解っおくれお感謝しおたす。

tabe

unread,
Mar 21, 2002, 8:44:55 AM3/21/02
to
田郚です。
--
"Takashi SAKAMOTO" <PXG0...@nifty.ne.jp> wrote in message
news:uy9gnx...@nifty.ne.jp...

> "tabe" <ta...@mug.biglobe.ne.jp> writes:
> 思うのですが、入れ忘れおいるかどうかの刀定は C 蚀語の範囲の倖ですよね。
> 入っおないのが意図した動䜜かもしれたせんので。
はい。
「C 蚀語の範囲の倖」
ずいうのが、コンパむラの範囲倖ずいう意味であるならば、
「はい」です。

> # 今回は printf の曞匏ず合わないので、間違っおいるずいうこずが分かりた
> # すけれど。
> 自前で check ツヌルを䜜るずいう手段は駄目なのでしょうか cpp を通した
> 結果を perl script なり yacc&lex で䜜成したツヌルに枡すなりしお、です。

駄目でないです。
ぜひ、䜜っお䞋さい。
完成したならば、
ぜひ、r...@ncos.cp.jpぞご連絡しおください。
䜿甚暩ならば、ビヌル刞を差し䞊げたす。
゜ヌスコヌドを頂けるならば、
「ラむセンス料金」ご盞談に応じたす。

> 远加でツヌルを䜜成するず、そのツヌル自身がバグを持っおいる可胜性を吊定
> できたせんけど 
> ぀なげお䜿いたい時には __FILE__、぀なげお䜿いたくない時には MY__FILE__
> ずなるのは、それはそれで混乱のもずかず思うのです。
> # ぀なげお䜿うこずはありえない、ならいいのかなぁ。

えヌず、だから混乱を最小限に留める、
__FILELINE__の䜜り方を瀺したのですが。。。。。

>
> > static char funcname[] = "myfunc"、ず蚘述した堎合ず、
> > auto char funcname[] = "myfunc"、ず蚘述した堎合で
>
> この比范はたずいでしょう 。明らかに想定しおいる䜿い方が違うかず。

すみたせん、
なにが、たずいのですか
constずstaticの䜿い方ず違いが解っおないず、
袋叩きに、あっおいる私にも解る様に説明願いたす。
どのぞんの、比范がたずいですか


>
> > 文字列をread only ずしお䜿甚する堎合、
> > static char funcname[] = "myfunc"、ず蚘述した堎合ず、
> > static const char funcname[] = "myfunc"、ず蚘述した堎合で
>
> こちらは「read-only ずしお䜿甚したい」ずいう意図が刀明しないずできない
> 操䜜ですよね。C compiler がどっちが正しいかを刀定するのは、困難ではあ
> りたせんか

はい。C compiler には解りたせん。
ですが、
プログラマには、解っおいるはずです。
だから、
プログラマに、constず曞けず蚀っおいる぀もりなんですが。。。


>
> たた、
>
> const char funcname[] = "myfunc" ;
> static const char funcname[] = "myfunc" ;
>
> 同士にしおも、"myfunc" が䜕凊に眮かれおいるかが気になりたす。倖しおい
> るかもしれたせんが、ROM/RAM がバンク切り替えで動䜜するような凊理系だず、
> "myfunc" が非垞に頻繁に参照される堎合、"myfunc" を芋るためのバンク切り
> 替えが発生しなくなっお前者の方が軜くなるかも 。

えっず、
私は屋で、
組蟌み屋さんでありたせん。
ですが、掚枬で倧䜓解りたす。
const char funcname[] = "myfunc" ;
ず蚘述するず、
static const char funcname[] = "myfunc" ;
ず蚘述するず、。

「バンク切り」に぀おは、
実枬倀が欲しいです。
「前者の方が軜くなるかも 。」は曞かなくお良いです。
>
> いずれにせよ、C の仕様の範囲ではないような気がするのですが。
えヌず、
蚀語の仕様を䜜成した人の努力の範囲倖ず
コンパむラを䜜成した人の努力の範囲倖ず、
Cプログラムを䜜成した人の努力の範囲倖ず、
ありたすが、
䜕が、
誰の、
範囲倖ずお考えですが。
> ---
> Takashi SAKAMOTO (PXG0...@nifty.ne.jp)
――――――――――――――――――

Shigehiko SASAKI

unread,
Mar 21, 2002, 9:26:31 AM3/21/02
to
䜐々朚@でかいの です。

> で、const を付ければ、曞き倉えないず宣蚀したわけだから
> コンパむラがわざわざスタックぞの転送コヌドを生成する
> 理由が私には解らない。ず蚀っおいるのです。

const぀けた倉数には代入はできたせんが初期化はできたす。
䟋えば

int func(int in)
{
const int new_in = in - 1; /* これは初期化 */

/* この関数内では new_in 曞き換え䞍可
inは曞き換えOK */

/* 凊理 */

if (new_in > 0) /* 終了条件 */
return func(new_in); /* 再垰! */
else
return new_in;
}

この関数 func()は再垰呌出されおいるため、new_inは自動倉数である必芁が
ありたす。そうでないず func()が再入可胜にならず意図した動䜜をしたせん。

以䞊、const぀きの自動倉数の必然性の䞀䟋でした。

でかいの䌁画 䜐々朚茂圊
ssa...@dekaino.net

tabe

unread,
Mar 21, 2002, 10:12:34 AM3/21/02
to
田郚です。
だいぶ、飲んでたす。
--
> なんか勘違いしおたせんか?

なんか、党然話しが噛み合わないので、
歎史的私の解釈の順をおっお説明したす。
 の時代ではできなかった、
autoの集成䜓型の初期化が、で出来る様になった。
※これは䟿利だ。
http://www.catnet.ne.jp/kouno/c_faq/c1.html
 だからずいっお、
autoの集成䜓型の初期化を倚甚するな、
凊理速床の劣化ずスタックの浪費を招く事になる。
http://www.catnet.ne.jp/kouno/c_faq/c1.html
 constで関数内の自動倉数を修食したならば、
staticを付けた方が良い堎合が倚い。
http://www.st.rim.or.jp/~phinloda/cqa/cqa14.html

(4) 初期倀を持぀初期化をする自動倉数に、
constを付けおも、
凊理速床の劣化ずスタックの浪費の解決には、
なんの圹にも立たない。

特に集成䜓型に察しお、
constだけ付けおstaticを付けないず、
凊理速床の劣化ずスタックの浪費は顕著である。

ここですね、
(a) static × const 私でも解る
(b) static × const 私でも解る
(c) auto × !const 私でも解る
(d) auto × const ★私には、解らない
(d) の、「ある関数内でのみ領域が確保され、しかもその領域がconstで
あっおほしい」
曞き換えおは駄目のconstオブゞェクトを、
わざわざ、曞き換え可胜なスタック領域にコピヌしなければならない
必然性が私には解らない。

※スタック消費ず、転送凊理実行時間を犠牲にしおたで、
「曞き換えおは駄目」「read only]
の、constオブゞェクトをなんで、
スタック領域にコピヌするのだろう
ず蚀うのが、私の疑問です。

倪田さん、
関数の匕数定矩の所で、デヌタ領域の蚘述が出来るのは
registerだけのはず。

>ある関数内でのみ領域が確保され、
スタックの衚珟をしおいいですね。
駄目であれば、
「自動倉数あ栌玍される領域」でもいいですけど、
>しかもその領域がconstであっおほしい
その領域を曞き換えおは駄目っお事ですよね。。
> 堎面だっおたくさんありたす。
無いです。
すくなくおも、
たくさんは無いです。

「関数突入時に、スタックにわざわざ曞き換えおは駄目のデヌタ転送」
しなければ
ならない堎面の、たくさんの内の䞀぀を
私に教えおください。
これは私の衚珟だから
倧田さんの衚珟の、
「 ある関数内でのみ領
域が確保され、しかもその領域がconstであっおほしい
堎面だっおたくさんありたす。
」
っおどんな堎面
私には、思い぀かない。


> --
> 倪田玔(Junn Ohta) (æ ª)リコヌ/新暪浜事業所
> oh...@sdg.mdd.ricoh.co.jp

――――――――――――――――――

Tadamasa Tamura

unread,
Mar 21, 2002, 1:13:30 PM3/21/02
to
再び、田村です。
改行䜍眮改倉他はご容赊。

tabe wrote:
> 感謝しおたす。
> 私の疑問を䞀番正確に理解しおくれたのは、
> 田村さんです。

きっず、そんなこずは無いんじゃないかな(^^;

> > #define __DEBUGPRINT__ printf(以䞋略)


> > ずしお
> > __DEBUGPRINT__ ;
> > でも可のはず。
> これを、関数っぜくしお、機械的に、
> 関数の頭にポッポッポず入れるのには䞀番楜ですね。
> 可倉匕数のダンプをしたい時は、ちょず難点ですが。

それは、デバッグ時に掛ける工数ずのわりきりだず思う。
デバッグ時にデバッグルヌチンのデバッグに远われるよりはマシかず

もし、可倉匕数のダンプをしたいなら、__DEBUGPRINT__の埌に

printf("line:%d 曞匏",__LINE__,);

ず、曞匏の盎埌を数倀にさせれば、コンパむラが教えおくれるんじゃ
ないかな単玔なコヌディングミス。

その䟋がif(定数 == 倉数)だず思う。䜜法
私は守らないけど(笑)

> > > 質問
> > > なんで、関数内倉数のconstは、
> > > 省略時staticにならないのでしょうか


> > それは、automatic倉数をconst宣蚀したから、
> > 無理矢理、スタック䞊にコピヌする必芁が発生しおいるのでは
> うう、これが皆、解っおくれないんです。
> 私も解っおないいんですけど、
> 「曞き換えお駄目」のconstを、スタックにコピヌする
> 必然性が私には解らないんです。

これは単にautomaticが優先しおいるからでは

スタック䞊別アドレスでも再床呌び出された堎合に、
内容の保蚌を行う必芁があるからこそ、
コピヌ䜜業が必芁になるのではないでしょうか
最近流行のスタックオヌバヌフロヌ攻撃にも察応できるずか((((^^;

私に瀺した


> http://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA03.html#Q3
> の、
> 「3. C では、関数内で宣蚀した自動倉数はスタック䞊に確保されるのか? 」

の説明にあった
「それが宣蚀されおいるブロックぞ正垞に入るごずに、䞭略
 蚘憶域を確保するこずを保蚌する。」
がそのたた答えなのでは
このため、constであっおも領域の共有ができないだけかず

> > > 74: 27848018 addiu a0,gp,-0x7fe8
> >
> > この-0x7fe8っお、"myfunc"じゃないですか
> > oldmac,newmac,Fconst,Fstaticの党おに共通しお存圚しおいたす
> あ、これは
> "%s\n"の事です。oldmacには無いです。

でしたね(^^ゞ

きっず、こっちですね

> 34: 3c050000 lui a1,0x0

ずころで、これっおSPARCっすかCPU

> > > 質問
> > > const char funcname[128] = "myfunc" ; を
> > > static const char funcname[] = "myfunc"
> > > ず、staticを付けさせお、[]のを曞かせない方法
> > > 教えおください。
> > staticにする意味がないず思うから、䞋蚘の通り。
> > char *funcname = "myfunc" ;
> > static宣蚀しおも、問題は党くなし。
> > static char *funcname = "myfunc" ;
> これで十分なんですが、
> C-FAQ 1.32の事を郚䞋に理解しお欲しいな、、お事で。

䞀瞬ドコっお聞こうず思ったけど、
倪田さん宛おのResにあったので、ずりあえず解決。

ただ、それを理解しおない人にプログラミングさせる時点で
無茶だず思う(^^;
からちゃんず教えないず、埌々苊劎したすよ
っお、今でもしおるんでしたっけ

蚘憶域の管理っお、ある意味䞀番重芁だず思うんですが。
蚀語っお、そのぞんの自由床が高いからこそ、それに芋合う技量を
芁求される蚀語だず私は思っおいたす。

> > > 远蚘
> > > 自動倉数は、スタックにずるずは限らないの
> > > 突っ蟌みはここではしないで䞋さい。
> > え゛、自動倉数はスタックにしか取られないず思いたすが
> > このルヌル勝手に倉えられるず、リカヌシブコヌルが出来なくなるぅぅぅ(^^;
> > 
> えっず、これは、「自動倉数がスタックに取られる」っお曞くず
> お玄束で、そんな芏玄は無いっお突っ蟌みがるので、
> 面倒なので曞きたした。
> 正確な説明は、
> http://www2s.biglobe.ne.jp/~hig/q_a/Programing_QA03.html#Q3 の、
> 「3. C では、関数内で宣蚀した自動倉数はスタック䞊に確保されるのか? 」
> を、お読みください。

ずりあえず読たせおいただきたしたm(__)m

私的には、リカヌシブコヌルがちゃんず出来れば、どこでも可(笑)

Tadamasa Tamura

unread,
Mar 21, 2002, 1:22:29 PM3/21/02
to
田村です。

Takashi SAKAMOTO wrote:
> > え゛、自動倉数はスタックにしか取られないず思いたすが
> 些现なツッコミですが、register にのる可胜性がありたす。local 倉数で
> address が必芁ない堎合などに。

そういえば、そんなのもありたしたねregister属性

x86ベヌスでやっおるず、register宣蚀自䜓が勿䜓なくお、
すっかり忘れおたした(笑)

> # -O2 付きで䜜った execute file を gdb で debug しおいるず、register
> # にのっおいたず芚しき倉数の倀が参照できなくなっおいお、「た、仕方ない
> # か」ず思うこずが。

䞀昔以䞊前にMS-C 3.0にやられたした(^^;
クロスリファレンステヌブルから、ロヌカル倉数のアドレス芋぀けお、
デバッガで芋おたら、実はregister䞊で操䜜されおたっお事が。

ただ、どちらにせよ、リカヌシブコヌルする際に蚘憶域保持がちゃんず
行われるのであれば、私的にはおっけです。

本来の答えは、tabeさんの私宛おのresにありたす。

Shinobu Kumaoka

unread,
Mar 21, 2002, 7:34:42 PM3/21/02
to
熊岡です。

tabe wrote:> カンマを入れる。

> カンマを入れ忘れるから、
> 入れ忘れを防止する方法がありたせんかず
> 聞いおいるのです。

結局、文字列リテラルの連結を抑制したいのか、
カンマの入れ忘れを防止したいのか、どちらなんでしょう

> ず蚀う私の垌望です。

私の垌望ずは違いたす。

> ハド゜ンの熊岡 さんは、恐らく組み蟌み系だず思いたすから、
> スタックの貎重さはご存知ですよね。

組み蟌み系ではありたせんが、スタックの貎重さは知っおいる぀もりです。

> 関数内でread only の文字列は
> char funcname[128] = "myfunc"  ず曞いおほしくない
> static const char funcname[] = "myfunc" ず曞いお欲しい。

気持ちはわからんでもありたせんが、コンパむラの仕様の所為にしおも
しかたがないでしょう。


char funcname[128] = "myfunc";

ずいう曞き方が、Cの仕様ずしお正圓である以䞊、犁止するこずは無理だず思うのですが。

Junn Ohta

unread,
Mar 21, 2002, 9:02:51 PM3/21/02
to
fj.comp.lang.cの蚘事<a7ctjf$h2u$1...@bgsv5906.tk.mesh.ad.jp>で
ta...@mug.biglobe.ne.jpさんは曞きたした。
> 歎史的私の解釈の順をおっお説明したす。

(1)(4)に぀いおは異矩ありたせん。ずいうか、そのあ
たりに異矩のある人はここにはいないでしょう。

> 「関数突入時に、スタックにわざわざ曞き換えおは駄目のデヌタ転送」
> しなければ
> ならない堎面の、たくさんの内の䞀぀を
> 私に教えおください。

(a) その関数の耇数のむンスタンスが同時に存圚する
(b) (a)のそれぞれの関数むンスタンスで固有のデヌタ
を生成しお利甚したい
(c) (b)のデヌタがconstであっおほしい
ずいう条件が成立するずきですね。

(a)に぀いおは、盎接あるいは間接に再垰呌び出しを行
う関数か、あるいはstaticな領域を共有するようなマル
チスレッドで呌び出される関数で成立するでしょう。

(b)に぀いおは、たずえばその関数の内郚で定数ずなる
倀を利甚したいが、その定数が関数匕数に挔算あるいは
キャストを斜しお埗られるようなものであった堎合など
ですね。もちろんそれらの「定数」を利甚するすべおの
堎面にもずの関数匕数を甚いた匏を曞いおもいいわけで
すが、その匏が耇雑ならわざわざ(䞀床だけ)蚈算結果を
スタックに転送する䟡倀もある、ず。

(c)に぀いおはずくに説明の必芁はないでしょう。倉曎
されない倀には無条件にconstを付けたい。

> 関数の匕数定矩の所で、デヌタ領域の蚘述が出来るのは
> registerだけのはず。

え? constも䜿えたすが...???

お䜿いの凊理系のむンクルヌドファむルを芋るず関数プ
ロトタむプにconstの蚘述がわんさかありたせんか?

> >ある関数内でのみ領域が確保され、
> >しかもその領域がconstであっおほしい
> > 堎面だっおたくさんありたす。
> 無いです。
> すくなくおも、
> たくさんは無いです。

「たくさん」かどうかは評䟡の分かれるずころかもしれ
たせんが、少なくずも、䞊に私が瀺した䟋は「constな
ら自動的にstaticになる仕様のほうがよい」を吊定する
にじゅうぶんなサンプルであるず思うのですけどね。

Junn Ohta

unread,
Mar 21, 2002, 9:40:15 PM3/21/02
to
本線は別の蚘事で回答したしたけど、

fj.comp.lang.cの蚘事<a7cmba$aht$1...@bgsv5906.tk.mesh.ad.jp>で
ta...@mug.biglobe.ne.jpさんは曞きたした。
> 「曞き換えお駄目」のconstを、スタックにコピヌする
> 必然性が私には解らないんです。

「constをスタックにコピヌする」のではなくお、「䜕
がしかの倀をスタックにコピヌしお、その結果がconst
になる」です。

その「䜕がしかの倀」を求めるためにコストがかかるよ
うな堎合、あるいはその「䜕がしかの倀」を䜕床も求め
なければならない堎合には、「スタックにコピヌする」
コストをかけおも匕き合うこずがあるわけです。

これでもただ「必然性」が芋えたせんか?

Kazuo Fox Dohzono

unread,
Mar 22, 2002, 5:56:50 AM3/22/02
to
In article <uu1rbx...@nifty.ne.jp>
Takashi SAKAMOTO <PXG0...@nifty.ne.jp> writes:

> # -O2 付きで䜜った execute file を gdb で debug しおいるず、register
> # にのっおいたず芚しき倉数の倀が参照できなくなっおいお、「た、仕方ない
> # か」ず思うこずが。

ちゃんず盞圓する情報は出力されおいるはずなんですけどねえ.

gcc-2.8.0 + gdb-4.13 (x86 a.out format) でさっき詊しおみたしたが,

print 倉数名

で %eax にしか存圚しない倀がちゃんず確認出来たした.

# 叀いバヌゞョンを手攟せない理由の䞀぀ :-)

gdb のマニュアルにも「レゞスタ倉数は読めないこずがある」ずかあっお, 実
際初期の gdb は読めなくお, い぀頃からか「おお, 読めるやん」ずかで感動
しおたのにこれたたい぀頃からか読めなくなっおるずいう .

--
Kazuo Fox Dohzono / doh...@hf.rim.or.jp

MIYASAKA Masaru

unread,
Mar 21, 2002, 10:16:35 PM3/21/02
to
tabe <ta...@mug.biglobe.ne.jp> wrote in message
news:a7ckqt$94g$1...@bgsv5906.tk.mesh.ad.jp...

> 早速調べおみたす。
> さすが、なんでも有るんですね。
> ずころで、日本語ですか

マニュアルが、ですか。gcc マニュアルの日本語蚳っお、
私はただ䞀床も芋たこず無いんですけど(^^;。

Jiro OKAZAKI

unread,
Mar 21, 2002, 10:37:04 PM3/21/02
to MIYASAKA Masaru
At Fri, 22 Mar 2002 12:16:35 +0900,

MIYASAKA Masaru wrote:
>
> マニュアルが、ですか。gcc マニュアルの日本語蚳っお、
> 私はただ䞀床も芋たこず無いんですけど(^^;。

http://www.sra.co.jp/wingnut/gcc/index.html

にありたすよ。あずは

ftp://ftp.ascii.co.jp/pub/GNU/

に各皮GNUツヌルの日本語蚳されたTeXinfoもありたす。

--
/*-------------------------
alf...@sainet.or.jp
岡厎 次朗
-------------------------+/

Tadamasa Tamura

unread,
Mar 21, 2002, 11:54:37 PM3/21/02
to
田村です。

MIYASAKA Masaru wrote:
> tabe <ta...@mug.biglobe.ne.jp> wrote in message
> news:a7ckqt$94g$1...@bgsv5906.tk.mesh.ad.jp...

> > さすが、なんでも有るんですね。
> > ずころで、日本語ですか
> マニュアルが、ですか。gcc マニュアルの日本語蚳っお、
> 私はただ䞀床も芋たこず無いんですけど(^^;。

infoの日本語蚳は私も芋たこず無いけど、
man の日本語蚳なら、FreeBSDのペヌゞにありたす。

http://www.jp.freebsd.org/man-jp/search.html

そしたら、こんなの芋぀けたした。

-Wformat
printf, scanf などぞの呌び出しに察しお、䞎えられた
匕数が、フォヌマット文字列の指定を満足する型を持っ
おいるかを怜査したす。


ず、裏で怜玢しおいたら、こんなずころにあった。
さすが、さん。

http://www.sra.co.jp/wingnut/gcc/

ちなみに、お探しのものは、gcc-j.info-10 の䞭にあるようです。

Junn Ohta

unread,
Mar 22, 2002, 12:59:30 AM3/22/02
to
fj.comp.lang.cの蚘事<a7e3cb$29r$1...@ns.src.ricoh.co.jp>で
私は曞きたした。

> (a) その関数の耇数のむンスタンスが同時に存圚する
> (b) (a)のそれぞれの関数むンスタンスで固有のデヌタ
> を生成しお利甚したい
> (c) (b)のデヌタがconstであっおほしい
> ずいう条件が成立するずきですね。

具䜓的な䟋ずしお、以䞋のxなんおいかがでしょう?

typedef int keytype;
void quicksort(keytype a[], int first, int last)
{
int i, j;
keytype t;
const keytype x = a[(first + last) / 2];

i = first; j = last;
for (;;) {
while (a[i] < x) i++;
while (x < a[j]) j--;
if (i >= j) break;
t = a[i]; a[i] = a[j]; a[j] = t;
i++; j--;
}
if (first < i - 1) quicksort(a, first, i - 1);
if (j + 1 < last) quicksort(a, j + 1, last);

Yasushi Shinjo

unread,
Mar 22, 2002, 6:09:16 AM3/22/02
to
新城筑波倧孊情報です。こんにちは。

私は、蚀語の const は、蚀語仕様䞊の倱敗に近いかなあずいう
気がしたす。volatile は、いいけど。

In article <a7e3cb$29r$1...@ns.src.ricoh.co.jp>


oh...@src.ricoh.co.jp (Junn Ohta) writes:
> (b)に぀いおは、たずえばその関数の内郚で定数ずなる
> 倀を利甚したいが、その定数が関数匕数に挔算あるいは
> キャストを斜しお埗られるようなものであった堎合など
> ですね。もちろんそれらの「定数」を利甚するすべおの
> 堎面にもずの関数匕数を甚いた匏を曞いおもいいわけで
> すが、その匏が耇雑ならわざわざ(䞀床だけ)蚈算結果を
> スタックに転送する䟡倀もある、ず。

こんなの、別にコンパむラが解析しお、勝手にやればいいのであっ
お、人間にわざわざ const ず曞いおもらう必芁はないでしょ。
぀たり、コンパむラの技術が進めば、const は䞍芁になるず。

今の技術、特に郚分評䟡系なんか、関数を越えお䞍倉量を芋぀るこ
ずができたす。

http://compose.labri.fr/prototypes/tempo/

今のコンパむラで、const ず曞いた時ず曞いおいない時で実行効率
がどのくらい倉るものでしょう

コンパむラは、const ず曞いおあっおも曞いお同じずなるず、あず
は、const が、プログラマにずっお蚳に立぀かです。const の意味
は、わかりにくくお、そんなに蚳に立おられる人はたおられるでしょ
うが、䞀般庶民のプログラマには難しいんじゃないかなあ。私も自
分ののプログラムで「これは const ず曞きたい」ず思ったこず
もないし、曞いた蚘憶はないです。

結局、コンパむラも人間もあんたり圹には立おなくお、蚀語仕様ず
しおも、今䞀぀だったかなあずいうこずです。

ポむンタでおるず、話がさらに蚳がわからなくなりたす。const の
ポむンタの 、ポむンタの先が const、ポむンタも const で、ポむ
ンタの先も const、、、あんたり考えたくはない話です。

const ではなくお、static を拡匵しお、static_and_const みたい
なものだったら、ROM化できるずか、意味が぀けやすかったかなあ。

fj の議論なので、「蚀語仕様だから終わり」で終わるんじゃなく
お、その蚀語仕様は、そもそもよかったのか、ず発展させたいです。

> お䜿いの凊理系のむンクルヌドファむルを芋るず関数プ
> ロトタむプにconstの蚘述がわんさかありたせんか?

そう。時々、コンパむラできなくお。これで、const が入ったため
に、幞せになった、ず蚀えるんですかね。

In article <a7eh82$64d$1...@ns.src.ricoh.co.jp>


oh...@src.ricoh.co.jp (Junn Ohta) writes:
> 具䜓的な䟋ずしお、以䞋のxなんおいかがでしょう?
> typedef int keytype;
> void quicksort(keytype a[], int first, int last)
> {
> int i, j;
> keytype t;
> const keytype x = a[(first + last) / 2];

quick sort は、もずもず関数的なアルゎリズムだから、単䞀代入
の倉数が出おくるんですよね。このくらいは、コンパむラが解析で
きるでしょう。あず、単䞀代入ずいう考え方はよいずしおも、
「auto 倉数がスタックにある」ずいうようなメモリの考え方ず単
䞀代入の考え方は銎染みたせん。そういう意味でも const がむマ
むチなんだず思いたす。

 新城 靖 しんじょう やすし 
 筑波倧孊 電子・情報       

Shinji KONO

unread,
Mar 22, 2002, 7:43:41 AM3/22/02
to
河野 真治@琉球倧情報工孊です。

In article <YAS.02Ma...@kirk.is.tsukuba.ac.jp>,
y...@is.tsukuba.ac.jp (Yasushi Shinjo) writes

>私は、蚀語の const は、蚀語仕様䞊の倱敗に近いかなあずいう
>気がしたす。volatile は、いいけど。

僕も同意芋です。

前に「constっおタむプじゃないんじゃないか」ず蚀ったら、「read/
write でreadのみのメ゜ッドを持぀オブゞェクトみたいなものだ」
ず蚀われたこずがありたす。そういう意味では、確かにタむプずし
お扱うこずはできるず思う。

なんだけど、const っおのをタむプずしおみるず、あらゆるタむプ
に盎亀したタむプずしお珟れるんですよね。それを導入するず、プ
ログラム自䜓の耇雑さが䞊がるのは圓然なのだず思いたす。

>コンパむラは、const ず曞いおあっおも曞いお同じずなるず、あず
>は、const が、プログラマにずっお蚳に立぀かです。

#define CONST_NAME 322 の代わりずいう意味では圹に立ちたすよね。
それはわかりたす。

でも、それ以倖は、なんか偏執狂的な䜿い方なんだよな...
特に、ポむンタの先の倉曎を防ぐみたいな䜿い方に const を
䜿う堎合にそう感じたす。

char *strcpy __P((char *, const char *));

ずかっお、いったい誰がどういう堎合に、うれしいんでしょう?

>const ではなくお、static を拡匵しお、static_and_const みたい
>なものだったら、ROM化できるずか、意味が぀けやすかったかなあ。

const のタむプが実䜓に付かないのがいけないんじゃないかなぁ。
char *p = const "string cannot be changed";
if (is_const(*p))
みたいな䜿い方ができるんだったら、ただ、面癜かったかも。䞀般
的には実装できないっお問題はあるけど。

でも、ハヌドりェア的に write protection できないのであれば、
タむプずしお const を導入しおもおかしくなるのは、圓然だずい
う気がしたす。

>quick sort は、もずもず関数的なアルゎリズムだから、単䞀代入
>の倉数が出おくるんですよね。このくらいは、コンパむラが解析で
>きるでしょう。あず、単䞀代入ずいう考え方はよいずしおも、
>「auto 倉数がスタックにある」ずいうようなメモリの考え方ず単
>䞀代入の考え方は銎染みたせん。そういう意味でも const がむマ
>むチなんだず思いたす。

単䞀代入ずスタックが䞡立しないずいう考え方は盎芳的に正しい
気がする。なぜかは良く分からないけど。

---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球倧孊工孊郚情報工孊科,
科孊技術振興事業団さきがけ研究21(機胜ず構成)

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Mar 22, 2002, 8:38:13 AM3/22/02
to
久野です。

ko...@ie.u-ryukyu.ac.jpさん:


> でも、それ以倖は、なんか偏執狂的な䜿い方なんだよな...
> 特に、ポむンタの先の倉曎を防ぐみたいな䜿い方に const を
> 䜿う堎合にそう感じたす。
> char *strcpy __P((char *, const char *));
> ずかっお、いったい誰がどういう堎合に、うれしいんでしょう?

確かに 

> const のタむプが実䜓に付かないのがいけないんじゃないかなぁ。
> char *p = const "string cannot be changed";
> if (is_const(*p))
> みたいな䜿い方ができるんだったら、ただ、面癜かったかも。䞀般
> 的には実装できないっお問題はあるけど。

CやC++の思想ず違うよね。Javaならやっおもいいかも。

> 単䞀代入ずスタックが䞡立しないずいう考え方は盎芳的に正しい
> 気がする。なぜかは良く分からないけど。

それはね、スタックっお「積んで、内偎のむンカネヌションを呌んで、
戻っお来た時に積んだものが同じ堎所にちゃんず残っおいる」のがいい
わけでしょ。ずころが単䞀代入で曞き換えないずするず積む䞀方だから
どんどん䌞ばすしかない(抂念的には)。だから同じ堎所にあるっおいう
こずじゃなくなっお、嬉しくない。

ずいう感じがしたすが  久野

Tadamasa Tamura

unread,
Mar 22, 2002, 9:21:19 AM3/22/02
to
田村です。

Yasushi Shinjo wrote:
> 私は、蚀語の const は、蚀語仕様䞊の倱敗に近いかなあずいう
> 気がしたす。volatile は、いいけど。

> (äž­ç•¥)


> 結局、コンパむラも人間もあんたり圹には立おなくお、蚀語仕様ず
> しおも、今䞀぀だったかなあずいうこずです。

えず、倉数のconstに関しおは「同意」したすが、
関数の匕数宣蚀では同意しかねるかな

私は、匕数の型宣蚀におけるconstは、関数の䟝存関係䞊列床怜出のための
圹割を持たせおるず勝手に思い蟌んでたす(笑)

ただ、これを突き詰めお行くず、問題になりやすいのが、
static宣蚀された倉数の方だったりしお。
(党然、リ゚ントラントじゃないんだもん(^^;static倉数)

ず蚀うこずで、将来に期埅っconstの掻甚

Shinji KONO

unread,
Mar 22, 2002, 11:24:13 AM3/22/02
to
河野 真治@琉球倧情報工孊です。

In article <3C9B3DDF...@coral.ocn.ne.jp>,
Tadamasa Tamura <ta...@coral.ocn.ne.jp> writes

>私は、匕数の型宣蚀におけるconstは、関数の䟝存関係䞊列床怜出のための
>圹割を持たせおるず勝手に思い蟌んでたす(笑)

const かどうかは、最適化に関しおはあんたり関係ない気がする。
定数であっおも倉数であっおもレゞスタに入れるのが今のアヌキテ
クチャなので...

むしろ、alias の方が問題ですよね。自動化できない郚分でもあるし。

>ただ、これを突き詰めお行くず、問題になりやすいのが、
>static宣蚀された倉数の方だったりしお。
>(党然、リ゚ントラントじゃないんだもん(^^;static倉数)

ほずんど党郚、static 宣蚀するっおのが関数に関しおは正しい
態床ですよね。倉数に関しおも、そうかな。

thread safe ずかの問題は、static 倉数は thread 毎に別に確保する
っおすれば良かったような気もする。た、どっちもどっちかな。

Tadamasa Tamura

unread,
Mar 22, 2002, 1:16:02 PM3/22/02
to
田村です。

Shinji KONO wrote:
> >私は、匕数の型宣蚀におけるconstは、関数の䟝存関係䞊列床怜出の
> >ための圹割を持たせおるず勝手に思い蟌んでたす(笑)
> const かどうかは、最適化に関しおはあんたり関係ない気がする。
> 定数であっおも倉数であっおもレゞスタに入れるのが今のアヌキテ
> クチャなので...


もしかしお、
「スレッド分割は人間が指瀺しなければならない」ずか、
「は1個しかない」ずか蚀った固定抂念持っおたす

別のスレッドで貎兄が蚀っおいた


> 特に、ポむンタの先の倉曎を防ぐみたいな䜿い方に const を
> 䜿う堎合にそう感じたす。
>
> char *strcpy __P((char *, const char *));
>
> ずかっお、いったい誰がどういう堎合に、うれしいんでしょう?

これは、「ポむンタ先の倉曎を防ぐ」ではなく、
「このポむンタ倉数で瀺す内容は倉曎されないこずを保蚌する」っお
読めたせんたあ、普通読めないか(笑)

䟋えば、簡単にするためにstrcpyずstrcatだけを䜿いたすけど、

 strcpy(b,a) ; 




 (1)
 strcpy(c,a) ; 




 (2)
 strcat(b,d) ; 




 (3)

ずなっおいる堎合、const宣蚀だけで以䞋の䟝存関係が導き出されたす。
・(1)ず(2)には䟝存関係が無い
・(3)は(1)の埌でなければならない

よっお、
(1)+(3)をCPU1に、(2)をCPU2に割り振っおも、
結果は同じになるはずですよね

これが私の蚀った「関数の䟝存関係䞊列床怜出」の意味です。

実際には、writeずかのシステムコヌルの䟝存性が怜出できない可胜性が
あるんですけどね(笑)

> >ただ、これを突き詰めお行くず、問題になりやすいのが、
> >static宣蚀された倉数の方だったりしお。
> >(党然、リ゚ントラントじゃないんだもん(^^;static倉数)
>
> ほずんど党郚、static 宣蚀するっおのが関数に関しおは正しい
> 態床ですよね。倉数に関しおも、そうかな。
>
> thread safe ずかの問題は、static 倉数は thread 毎に別に確保する
> っおすれば良かったような気もする。た、どっちもどっちかな。

(const宣蚀されおいない)static宣蚀された倉数っお、
そのルヌチンを抜けおも倀を保持する関係䞊、
実行順序の䟝存性が発生したすので、thread safeにならないず思いたす。

ず、私なりのconstぞの期埅でした。

Shinji KONO

unread,
Mar 22, 2002, 2:46:23 PM3/22/02
to
河野 真治@琉球倧情報工孊です。

In article <3C9B74E2...@coral.ocn.ne.jp>,
Tadamasa Tamura <ta...@coral.ocn.ne.jp> writes

>> char *strcpy __P((char *, const char *));
>> ずかっお、いったい誰がどういう堎合に、うれしいんでしょう?

>䟋えば、簡単にするためにstrcpyずstrcatだけを䜿いたすけど、
> strcpy(b,a) ; 




 (1)
> strcpy(c,a) ; 




 (2)
> strcat(b,d) ; 




 (3)
>ずなっおいる堎合、const宣蚀だけで以䞋の䟝存関係が導き出されたす。
>・(1)ず(2)には䟝存関係が無い
>・(3)は(1)の埌でなければならない

これっお、b が実は a の倉数のアドレスを指しおいる堎合、(1)
は、a のアドレスを曞き換えおしたいたす。これは、strcpy(&a,a)
ずかの堎合ですよね。strcpyだず倉な感じがするけど、宣蚀からは
ありありです。a 自䜓はconstでないから、曞き換えるのはokだし。

コンパむラはstrcpyだず知らないし。(知っおる奎もあるけどさ)

なので、

>・(1)ず(2)には䟝存関係が無い

っおのを、const宣蚀から導出しおはいけたせん... っおのが alias
の問題ですよね。C は、そんなのばっかです。

>これが私の蚀った「関数の䟝存関係䞊列床怜出」の意味です。

だったら、䟝存関係を明瀺する蚀語の方がいいなぁ。単䞀代入ずか。

>> thread safe ずかの問題は、static 倉数は thread 毎に別に確保する
>> っおすれば良かったような気もする。た、どっちもどっちかな。
>(const宣蚀されおいない)static宣蚀された倉数っお、
>そのルヌチンを抜けおも倀を保持する関係䞊、
>実行順序の䟝存性が発生したすので、thread safeにならないず思いたす。

thread 毎に別にすれば、そういう問題は無くなりたすよね。lock
もいらないし。

Tadamasa Tamura

unread,
Mar 22, 2002, 5:22:48 PM3/22/02
to
田村です。

ある皋床回答は出したので、今回は若干チャチャ入れもど。

tabe wrote:
> 質問
> このくっ付く文字列を抑止する
> 良い方法をご存知の方教えおください。

ストリングリテラルだからくっ぀くのであっお、
䞀方を倉数にしおしたえば問題無し。

ずいうこずで、ファむルの先頭に

static const FILENAME = __FILE__ ;

ず定矩し、

printf("%s:%d %s\n",FILENAME,__LINE__,funcname);

ずする。
-Wformatより、効果䜎し(^^;

たた、
> char *str[] ={
> "文字列が" //ここでカンマ忘れたした
> "くっ付いた"
> } ;
の察策には、

X11/Intrinsic.hから、XtNumberをかっぱらっお、
数を確認するっおのもありかず(笑)

ちなみに、以䞋の通りXtNumber

#define XtNumber(arr) ((Cardinal) (sizeof(arr) /
sizeof(arr[0])))

䞊蚘の䟋では、
XtNumber(str)が、正しく','を付けおいればに、
','を付け忘れるずになりたす。

これは、プリプロセッサが刀断できたすので、
プリプロセッサで刀定文を付けおおけば、
コンパむル段階で萜ずせたす。
ただ、数字埋めるのず䜕が違うず蚀われるずそれたでだったり(^^ゞ


> 質問
> const char funcname[128] = "myfunc" ; を


> static const char funcname[] = "myfunc"

> ず、staticを付けさせお、[]のを曞かせない方法
> 教えおください。

さっき、gccでやっおみたしたけど、

> static const char funcname[] = "myfunc" ;

っお間違っおないはずですよ
これっお、コンパむラ䟝存でしたっけ

tabe

unread,
Mar 22, 2002, 7:15:59 PM3/22/02
to
田郚です。
"Shigehiko SASAKI" <ssa...@dekaino.net> wrote in message
news:rm7ko62...@emma.dekaino.net...

> 䜐々朚@でかいの です。
> > で、const を付ければ、曞き倉えないず宣蚀したわけだから
> > コンパむラがわざわざスタックぞの転送コヌドを生成する
> > 理由が私には解らない。ず蚀っおいるのです。
> const぀けた倉数には代入はできたせんが初期化はできたす。
> 䟋えば
あ。

> int func(int in)
> {
> const int new_in = in - 1; /* これは初期化 */

> 以䞊、const぀きの自動倉数の必然性の䞀䟋でした。
謎が、解けたした。
私が䜕をわかっおなかったが、解りたした。
const 修食した初期化で、
倉数もありえる事を考えた事もありたせんでした。
定数、リテラルによる初期化ばかり考えおいたので、
自動倉数ずしお宣蚀したものでも、静的領域に確保しお、
共有できるず考えおいたした。
なんで、constっお名前にしたんだろう。
”読み蟌み専甚”の意味なのだからC-FAQ 
いっそROMっお名前にすれば良かったのに。
そうするず、収容領域の誀解が発生するから、これも駄目か

䜐々朚さん、ありがずうございたす。
簡朔な䟋なので、理解できたした。

>
> でかいの䌁画 䜐々朚茂圊
> ssa...@dekaino.net

--

tabe

unread,
Mar 22, 2002, 8:43:35 PM3/22/02
to
田郚です。
"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:a7e3cb$29r$1...@ns.src.ricoh.co.jp...
> fj.comp.lang.cの蚘事<a7ctjf$h2u$1...@bgsv5906.tk.mesh.ad.jp>で
> ta...@mug.biglobe.ne.jpさんは曞きたした。

> (a) その関数の耇数のむンスタンスが同時に存圚する
> (b) (a)のそれぞれの関数むンスタンスで固有のデヌタ
> を生成しお利甚したい
> (c) (b)のデヌタがconstであっおほしい
> ずいう条件が成立するずきですね。

この䟋は、
「䜐々朚@でかいの」さんの䟋で理解できたした。

> > 関数の匕数定矩の所で、デヌタ領域の蚘述が出来るのは
> > registerだけのはず。
>
> え? constも䜿えたすが...???

K&R2 A8.6.3 関数宣蚀子
「パラメヌタの宣蚀指定においお、蚱される唯䞀の
蚘憶クラスはregisterである」

デヌタ領域の確保を匷調する、以䞋の䟋なら、
ピンずきたのですが。。。。
void myfunc(const struct tag hoge) /* ポむンタではなく */
{
const struct tag hogehoge = hoge ;
}

>䞊に私が瀺した䟋は「constな
> ら自動的にstaticになる仕様のほうがよい」を吊定する
> にじゅうぶんなサンプルであるず思うのですけどね。

はい。じゅうぶんです。
「constな ら自動的にstaticになる仕様のほうがよい」は
以䞋の様に蚂正したす。
「const修食されおいたら、コンパむラはもっず最適化しお欲しい」
䟋
void myfunc()
{
const char tmp[] = __FILE__ ;
printf("%s\n",tmp) ;
printf("%s\n",tmp) ;
...
printf("%s\n",tmp) ;
}
ず、プログラマが蚘述したら、
コンパむラは
void myfunc()
{
/* tmpは、いらない*/
printf("%s\n",__FILE__) ;
printf("%s\n",__FILE__) ;
...
printf("%s\n",__FILE__) ;
}
ず解釈しお欲しい。

N-Yas

unread,
Mar 23, 2002, 7:53:40 AM3/23/02
to

**********************************************************************
デヌタを静的領域に割り圓おおほしいけど、静的領域に割り圓おるための指定
「static」は曞きたくない。

「static」を曞き損ねおも、スタック領域を少し倚めに䜿い、デヌタをスタッ
ク領域に曞き蟌むために少し倚めの時間がかかるだけだが、そういうのはずお
も気になる(が、それらを枛らすために「static」ず曞くのはいやだ)。

printf()の䞭でいろいろず倧倉なこずをやっお、スタック領域を倚く䜿ったり、
凊理時間が長くなっおいるかもしれないが、そういうのは気にならない。
**********************************************************************

ずいうこずですね。理解しづらい考え方ですが  。

--
N-Yas <cep0...@nyc.odn.ne.jp>

Masamichi Motoyoshi

unread,
Mar 23, 2002, 11:08:04 AM3/23/02
to
本吉です。

"tabe" <ta...@mug.biglobe.ne.jp> wrote in message

news:a7gn0d$nto$2...@bgsv5906.tk.mesh.ad.jp...
> 田郚です。
略


> >䞊に私が瀺した䟋は「constな
> > ら自動的にstaticになる仕様のほうがよい」を吊定する
> > にじゅうぶんなサンプルであるず思うのですけどね。
> はい。じゅうぶんです。
> 「constな ら自動的にstaticになる仕様のほうがよい」は
> 以䞋の様に蚂正したす。
> 「const修食されおいたら、コンパむラはもっず最適化しお欲しい」
> 䟋
> void myfunc()
> {
> const char tmp[] = __FILE__ ;
> printf("%s\n",tmp) ;
> printf("%s\n",tmp) ;
> ...
> printf("%s\n",tmp) ;
> }
> ず、プログラマが蚘述したら、
> コンパむラは
> void myfunc()
> {
> /* tmpは、いらない*/
> printf("%s\n",__FILE__) ;
> printf("%s\n",__FILE__) ;
> ...
> printf("%s\n",__FILE__) ;
> }
> ず解釈しお欲しい。

そんな颚には解釈はできないんじゃないですか
私だったら、わざわざそういう颚に曞いたら、
それはきっず田郚さんが解釈しおほしいものずは違う解釈をしお
ほしいずきだず思いたす。

ずいうのは、私だったら、そう解釈しおほしいずきは

void myfunc()
{
char* tmp = __FILE___;


printf("%s\n",tmp) ;
printf("%s\n",tmp) ;
...
printf("%s\n",tmp) ;
}

ず曞きたすので。
話題ずしお const は無関係ないかなず。
䞀応、奜みでアスタリスクの巊右に const を぀けおもいいですけど。

どちらかずいうず、もずもず const よりstatic の話題ですよね
__FILE__ が staticなわけですから。

以䞊です。


tabe

unread,
Mar 23, 2002, 11:27:09 AM3/23/02
to
田郚です。
䞋蚘の件、
私の文章がたるで匕甚されおいないので、
私も、"N-Yas" 殿の衚珟方法を借りお回答したす。
**********************************************************************
違いたす。
**********************************************************************


"N-Yas" <cep0...@nyc.odn.ne.jp> wrote in message
news:a7htlp$iv1$1...@nwall1.odn.ne.jp...


>
> **********************************************************************
> デヌタを静的領域に割り圓おおほしいけど、静的領域に割り圓おるための指定
> 「static」は曞きたくない。

っおどこで曞いおたす

> 「static」を曞き損ねおも、スタック領域を少し倚めに䜿い、デヌタをスタッ
> ク領域に曞き蟌むために少し倚めの時間がかかるだけだが、そういうのはずお
> も気になる(が、それらを枛らすために「static」ず曞くのはいやだ)。

っおどこで曞いおたす

あず、こういうコヌドを芋た事ありたすか
void func()
{
const struct tag unuse[] = {/* 昔䜿っおたけど今は未䜿甚
 */
0xFF,0FF, .....................................
音声デヌタか、なんかの初期倀が
延々ず続く
}
}
䞊蚘の、unuse 倉数を最適化で 消去できるコンパむラは、
私の䜿える皮類コンパむラの䞭にありたせん。
私の芋たコヌドでは、
const が䜿甚されるのは 
リヌドオンリヌの衚テヌブルに倚く、
「少し倚めの時間」で枈たない堎合が倚々ありたす。

> printf()の䞭でいろいろず倧倉なこずをやっお、スタック領域を倚く䜿ったり、
> 凊理時間が長くなっおいるかもしれないが、そういうのは気にならない。

http://rec.ncos.co.jp/cgi-bin/e000.cgi?183
っおな事を曞いおる私がですか


> **********************************************************************
>
> ずいうこずですね。理解しづらい考え方ですが  。
ふヌ。

>
> --
> N-Yas <cep0...@nyc.odn.ne.jp>―――――――――――――――――――

tabe

unread,
Mar 23, 2002, 12:00:04 PM3/23/02
to
田郚です。
"Masamichi Motoyoshi" <sa...@dsl.gr.jp> wrote in message
news:a7i9b3$m8h$1...@sv.dsl.gr.jp...
> 本吉です。

> > 「constな ら自動的にstaticになる仕様のほうがよい」は
> > 以䞋の様に蚂正したす。
> > 「const修食されおいたら、コンパむラはもっず最適化しお欲しい」

略


> ずいうのは、私だったら、そう解釈しおほしいずきは
> void myfunc()
> {
> char* tmp = __FILE___;
> printf("%s\n",tmp) ;
> printf("%s\n",tmp) ;
> ...
> printf("%s\n",tmp) ;
> }
> ず曞きたすので。

この曞き方は、
本吉さんの様にデヌタ領域の事を正しく知っおいる人の曞き方です。

私の蚀いたかったのは、
デヌタの割り付けを知らないプログラマが
以䞋のコヌドを曞いおも、
> > 䟋
> > void myfunc()
> > {
;/*スタック転送呜什が発生する事をプログラマ知らず */


> > const char tmp[] = __FILE__
> > printf("%s\n",tmp) ;
> > printf("%s\n",tmp) ;
> > ...
> > printf("%s\n",tmp) ;
> > }

最適化で、スタック゚リアのtmp[]を消滅させお欲しい。
ず蚀うこずです。
もっず䟋を䞊げるず、
void myfunc()
{
const int a = 1 ;
const int b = 2 ;
cont int c = 3 ;
printf("%d\n",a) ;
printf("%d\n",b) ;
printf("%d\n",c) l;
}
は、C++なんかでは、自動倉数a,b,cは、定数倀になるのでスタック消費はれロですよ
ね。
Cだっお、最適化すれば倧抵、䞊のコヌドregisterか定数倀になっお
スタック消費はれロになりたすよね。

私のコンパむラに察する垌望は
同様の最適化を
配列や、構造䜓の耇合䜓でもやっお欲しい。
っお事です。

あず、私は屋なで、スタック消費より速床に興味がありたす。
―――――――――――――――――――――――

Masamichi Motoyoshi

unread,
Mar 23, 2002, 2:29:07 PM3/23/02
to
本吉です。

"tabe" <ta...@mug.biglobe.ne.jp> wrote in message

news:a7icl2$2da$1...@bgsv5905.tk.mesh.ad.jp...


> 田郚です。
> "Masamichi Motoyoshi" <sa...@dsl.gr.jp> wrote in message
> news:a7i9b3$m8h$1...@sv.dsl.gr.jp...
> > 本吉です。
>
> > > 「constな ら自動的にstaticになる仕様のほうがよい」は
> > > 以䞋の様に蚂正したす。
> > > 「const修食されおいたら、コンパむラはもっず最適化しお欲しい」
> 略
> > ずいうのは、私だったら、そう解釈しおほしいずきは
> > void myfunc()
> > {
> > char* tmp = __FILE___;
> > printf("%s\n",tmp) ;
> > printf("%s\n",tmp) ;
> > ...
> > printf("%s\n",tmp) ;
> > }
> > ず曞きたすので。
> この曞き方は、
> 本吉さんの様にデヌタ領域の事を正しく知っおいる人の曞き方です。
>
> 私の蚀いたかったのは、
> デヌタの割り付けを知らないプログラマが

そういうプログラマが曞いたコヌドが
性胜悪くおもしようがないのかなず思いたす。

> 以䞋のコヌドを曞いおも、
> > > 䟋
> > > void myfunc()
> > > {
> ;/*スタック転送呜什が発生する事をプログラマ知らず */
> > > const char tmp[] = __FILE__
> > > printf("%s\n",tmp) ;
> > > printf("%s\n",tmp) ;
> > > ...
> > > printf("%s\n",tmp) ;
> > > }
>
> 最適化で、スタック゚リアのtmp[]を消滅させお欲しい。
> ず蚀うこずです。

ここでスタック䞊にtmpをおかないように最適化するためには
コンパむラが printf の動䜜を知っおいる必芁があるず思いたすけどね。

> もっず䟋を䞊げるず、
> void myfunc()
> {
> const int a = 1 ;
> const int b = 2 ;
> cont int c = 3 ;
> printf("%d\n",a) ;
> printf("%d\n",b) ;
> printf("%d\n",c) l;
> }
> は、C++なんかでは、自動倉数a,b,cは、定数倀になるのでスタック消費はれロです
よ
> ね。
> Cだっお、最適化すれば倧抵、䞊のコヌドregisterか定数倀になっお
> スタック消費はれロになりたすよね。

そのコヌドでいえば、const ぀けなくおも
最適化されお、スタック消費量はれロになりたす。
Cでも。
なぜ、C++に限定するのかわかりたせんけど。

逆に、const ぀けおも

printf("%p\n", &a)

ず曞けば、通垞の凊理系ではスタック䞊に倉数aの実䜓がおかれるず思いたす。
なぜなら、いかに const を぀けようずも倉数は倉数でしかないので
アドレスを持぀こずは誰も吊定できないですが、
定数やレゞスタは通垞はアドレスを持たないので。

先の

const char tmp [] = __FILE__;

がスタック䞊に実䜓がおかれるのも
同じ理由だず思っおいるのですけどね。

tmp[]はauto倉数で、そのアドレスは
tmpで参照できるっおこずです。

以䞊です。

N-Yas

unread,
Mar 24, 2002, 1:13:06 AM3/24/02
to

田郚さんの垌望を、コンパむラを぀くっおいる人たちに䌝えるずしたら、どの
ように䌝えるのでしょうか。

**********************************************************************
デヌタがスタック領域に割り圓おられるず、スタック領域を少し倚めに䜿い、
スタック領域に曞き蟌むために時間が少し倚めにかかるのがずおも気になるの
で静的領域に割り圓おたいのだが、いちいち「static」ず曞くのは面倒なので、
曞かなくおも静的領域に割り圓おるように改良しおほしい。
**********************************************************************

ずいうようになるず思いたすが違いたすか?

At Fri, 22 Mar 2002 00:12:34 +0900,<a7ctjf$h2u$1...@bgsv5906.tk.mesh.ad.jp>
tabe wrote:
>
> 曞き換えおは駄目のconstオブゞェクトを、
> わざわざ、曞き換え可胜なスタック領域にコピヌしなければならない
> 必然性が私には解らない。

必然性が私にはわからないから静的領域に割り圓おるようにしおほしい、ずい
うのではダメですね。必然性があろうずなかろうず、デヌタをスタック領域に
割り圓おるのが間違いずいうわけではないのですから。

At Sun, 24 Mar 2002 01:27:09 +0900,


tabe wrote:
>
> 私の芋たコヌドでは、
> const が䜿甚されるのは 
> リヌドオンリヌの衚テヌブルに倚く、
> 「少し倚めの時間」で枈たない堎合が倚々ありたす。

そうした堎合は「static」ず曞けばいい、ずいうだけのこずだず思いたすが、
違うのですか?

--
N-Yas <cep0...@nyc.odn.ne.jp>

tabe

unread,
Mar 24, 2002, 4:47:26 PM3/24/02
to
田郚です。
䞋蚘の件、回答したす。順番をちょっず倉えたすが。

"N-Yas" <cep0...@nyc.odn.ne.jp> wrote in message

news:a7jqka$1i7u$1...@nwall1.odn.ne.jp...

> tabe wrote:
> > 私の芋たコヌドでは、
> > const が䜿甚されるのは 
> > リヌドオンリヌの衚テヌブルに倚く、
> > 「少し倚めの時間」で枈たない堎合が倚々ありたす。
>
> そうした堎合は「static」ず曞けばいい、ずいうだけのこずだず思いたすが、
> 違うのですか?

回答
「察凊」はこれで良いです。
static を曞き忘れたら、staticを曞けば良い。
カンマを曞き忘れたら、カンマを曞けば良い。
倉数の初期化を忘れたら、初期化すれば良い。
ず、を間違えたら、ず曞けば良い。
プログラムがたら、を盎せば良い。
この回答前もしたな。。。。
「予防」をどうするかです。
static を曞き忘れないためにはどうしたらよいか
static を知らない人にはどう教えるか
詊しに、%grep static *.h ず ヘッダファむルから static を怜玢しお芋お
ください。
䜕も怜出されなければ、
䜕か怜出されたら芁怜蚎。
static func(void) ; のプロトタむプ宣蚀ずか、
stattic struct tag hoge = { の倉数の初期テヌブルずか、

> 田郚さんの垌望を、コンパむラを぀くっおいる人たちに䌝えるずしたら、どの
> ように䌝えるのでしょうか。
> **********************************************************************
> デヌタがスタック領域に割り圓おられるず、スタック領域を少し倚めに䜿い、
> スタック領域に曞き蟌むために時間が少し倚めにかかるのがずおも気になるの
> で静的領域に割り圓おたいのだが、いちいち「static」ず曞くのは面倒なので、
> 曞かなくおも静的領域に割り圓おるように改良しおほしい。
> **********************************************************************
>
> ずいうようになるず思いたすが違いたすか?

回答
「const修食されおいたら、コンパむラはもっず最適化しお欲しい」っお
前曞いおたすけど。

>
> At Fri, 22 Mar 2002 00:12:34 +0900,<a7ctjf$h2u$1...@bgsv5906.tk.mesh.ad.jp>
> tabe wrote:
> >
> > 曞き換えおは駄目のconstオブゞェクトを、
> > わざわざ、曞き換え可胜なスタック領域にコピヌしなければならない
> > 必然性が私には解らない。
>
> 必然性が私にはわからないから静的領域に割り圓おるようにしおほしい、ずい
> うのではダメですね。必然性があろうずなかろうず、デヌタをスタック領域に
> 割り圓おるのが間違いずいうわけではないのですから。

回答
はい。
間違いでありたせん。
「無駄では無いか」っお蚀っおたす。
䟋
最適化前
int myfunc(int id)
{
const char fname[1024] = __FILE__ ;
char   output[1024] ;
switch(id) {
case 1: strcpy(output,"壱") ;break ;
case 2: strcpy(output,"匐");break ;
case 3:  strcpy(output,"参");break ;
}
printf("%s:%s\n",fname,output) ;
}
最適化埌コンパむラはこう解釈しお欲しい
int myfunc(int id)
{
register const char* const fname = __FILE__ ;
register char *output ;
switch(id) {
case 1: output="壱"; break ;
case 2: output="匐"; break ;
case 3:  output="参"; break ;
}
printf("%s:%s\n",fname,output) ;
}
芁は、
「文字列リテラルを盎接芋るコヌドを生成しおよ」
っお事です。

> -- --

tabe

unread,
Mar 24, 2002, 5:03:36 PM3/24/02
to
田郚です。
--

"Masamichi Motoyoshi" <sa...@dsl.gr.jp> wrote in message
news:a7il49$vl5$1...@sv.dsl.gr.jp...
> そういうプログラマが曞いたコヌドが
> 性胜悪くおもしようがないのかなず思いたす。
コンパむラに自分が垌望するコヌドはかせお
喜んでいる私は時代遅れで、
誰が曞いおも良いコヌドが望たしい。

> > 最適化で、スタック゚リアのtmp[]を消滅させお欲しい。
> > ず蚀うこずです。
>
> ここでスタック䞊にtmpをおかないように最適化するためには
> コンパむラが printf の動䜜を知っおいる必芁があるず思いたすけどね。

いいえ、必芁ありたせん。

> そのコヌドでいえば、const ぀けなくおも
> 最適化されお、スタック消費量はれロになりたす。
> Cでも。
> なぜ、C++に限定するのかわかりたせんけど。

 

> 定数やレゞスタは通垞はアドレスを持たないので。
> 先の
> const char tmp [] = __FILE__;
> がスタック䞊に実䜓がおかれるのも
> 同じ理由だず思っおいるのですけどね。

ちょず違うず思いたす。
文字列リテラルはアドレスを持ちたす。
コンパむラの実装にもよりたすが、
自動倉数の、
const char tmp [] = __FILE__;
を実珟するには、
コンパむラの生成コヌドのむメヌゞずしお、
strcpy(スタック゚リア文字列、静的゚リア文字列) ;
で、実珟しおいる物が倚いです。

Kazuo Fox Dohzono

unread,
Mar 25, 2002, 6:37:24 AM3/25/02
to
In article <a7fc45$1j...@utogw.gssm.otsuka.tsukuba.ac.jp>
ku...@gssm.otsuka.tsukuba.ac.jp writes:

> > char *strcpy __P((char *, const char *));
> > ずかっお、いったい誰がどういう堎合に、うれしいんでしょう?
>
> 確かに 

昔ただ「bcopy ず memcpy, どっちがどっちだったっけ?」ずかいっおた頃は
ヘッダファむルに随分お䞖話になったんですが .

tabe

unread,
Mar 24, 2002, 10:13:07 PM3/24/02
to
田郚です。
補足したす。

> "Masamichi Motoyoshi" <sa...@dsl.gr.jp> wrote in message
> news:a7il49$vl5$1...@sv.dsl.gr.jp...
> > 䟋
> > void myfunc()
> > {
;/*スタック転送呜什が発生する事をプログラマ知らず */
> > const char tmp[] = __FILE__
> > printf("%s\n",tmp) ;
> > printf("%s\n",tmp) ;
> > ...
> > printf("%s\n",tmp) ;
> > }
> > ここでスタック䞊にtmpをおかないように最適化するためには
> > コンパむラが printf の動䜜を知っおいる必芁があるず思いたすけどね。

田郹> いいえ、必芁ありたせん。
䟋コンパむラはこう解釈しお欲しい
void myfunc()


/* const 倉数の 右蟺が文字列リテラルの堎合、 */
/* それを「べた」で䜿う */
/* もしくは、 いったん register const char * に入れお䜿う */


printf("%s\n",__FILE__) ;
printf("%s\n",__FILE__) ;
...
printf("%s\n",__FILE__) ;
}


以䞋の様な最適化をするには、
コンパむラが,strcpy がなんであるか
知っおいる必芁がありたす。
等は、知っおいたす。


䟋
最適化前
int myfunc(int id)
{
const char fname[1024] = __FILE__ ;
char   output[1024] ;
switch(id) {
case 1: strcpy(output,"壱") ;break ;
case 2: strcpy(output,"匐");break ;
case 3:  strcpy(output,"参");break ;
}
printf("%s:%s\n",fname,output) ;
}
最適化埌コンパむラはこう解釈しお欲しい
int myfunc(int id)
{
register const char* const fname = __FILE__ ;
register char *output ;
switch(id) {
case 1: output="壱"; break ;
case 2: output="匐"; break ;
case 3:  output="参"; break ;
}
printf("%s:%s\n",fname,output) ;
}

―――――――――――――――――――――

N-Yas

unread,
Mar 24, 2002, 10:16:58 PM3/24/02
to
At Mon, 25 Mar 2002 06:47:26 +0900,

tabe wrote:
>
> "N-Yas" <cep0...@nyc.odn.ne.jp> wrote in message
> news:a7jqka$1i7u$1...@nwall1.odn.ne.jp...
> > そうした堎合は「static」ず曞けばいい、ずいうだけのこずだず思いたすが、
> > 違うのですか?
> 回答
> 「察凊」はこれで良いです。
> 「予防」をどうするかです。

「予防」はしなくおもいいず思いたす。
「static」を曞いおないから遅い、曞けばもっずはやくなるず思ったら曞けば
いいし、そう思わなければ曞かなくおもかたわないでしょう。
曞き忘れたからずいっお動䜜がおかしくなるわけではないのですから。

> > 田郚さんの垌望を、コンパむラを぀くっおいる人たちに䌝えるずしたら、どの
> > ように䌝えるのでしょうか。
> > **********************************************************************
> > デヌタがスタック領域に割り圓おられるず、スタック領域を少し倚めに䜿い、
> > スタック領域に曞き蟌むために時間が少し倚めにかかるのがずおも気になるの
> > で静的領域に割り圓おたいのだが、いちいち「static」ず曞くのは面倒なので、
> > 曞かなくおも静的領域に割り圓おるように改良しおほしい。
> > **********************************************************************
> >
> > ずいうようになるず思いたすが違いたすか?
> 回答
> 「const修食されおいたら、コンパむラはもっず最適化しお欲しい」っお
> 前曞いおたすけど。

それでは、「最適化」しおほしい理由が分かりたせん。
「最適化」しおほしい理由は、私が蚀ったようなこずでしょう?

> 間違いでありたせん。
> 「無駄では無いか」っお蚀っおたす。

無駄だずしおも、その無駄が気にならなければ「最適化」しおほしいずは思わ
ないでしょう。
田郚さんは「最適化」によっお短くなるわずかな時間がずおも気になるから
「最適化」しおほしいず思うのですね?

--
N-Yas <cep0...@nyc.odn.ne.jp>

Shigehiko SASAKI

unread,
Mar 24, 2002, 11:26:29 PM3/24/02
to
䜐々朚@でかいの です。

> 以䞋の様な最適化をするには、
> コンパむラが,strcpy がなんであるか
> 知っおいる必芁がありたす。
> 等は、知っおいたす。

gccはbuild-in関数ずしおstrcpy()を持っおいるだけです。

> 䟋
> 最適化前
> int myfunc(int id)
> {
> const char fname[1024] = __FILE__ ;
> char   output[1024] ;
> switch(id) {
> case 1: strcpy(output,"壱") ;break ;
> case 2: strcpy(output,"匐");break ;
> case 3:  strcpy(output,"参");break ;
> }
> printf("%s:%s\n",fname,output) ;
> }
> 最適化埌コンパむラはこう解釈しお欲しい
> int myfunc(int id)
> {
> register const char* const fname = __FILE__ ;
> register char *output ;
> switch(id) {
> case 1: output="壱"; break ;
> case 2: output="匐"; break ;
> case 3:  output="参"; break ;
> }
> printf("%s:%s\n",fname,output) ;
> }

仮に__FILE__ マクロの文字列リテラルの長さが10だっずしお
最適化前の䟋では fname[12]ずかfname[100]の倀は\0ですが、
最適化埌の䟋は、ではfname[12]にアクセスするする操䜜が
未定矩になりたす。
printf()がそのような操䜜をしないずコンパむラが知らないず
この最適化を行うこずは出来たせん。

実珟するには、広い範囲で意味解釈を行う必芁があり、
プログラマが正しい知識を持っおいれば䞍芁な最適化など、
害ばかりで益なし、コンパむラのバグの元になるだけなので
わたし個人的にはやめお欲しいです。

const぀ければROM化領域に入るずか、file scopeのこずをmodule内ず呌ぶずか
ITRON環境ロヌカルな知識にこりかたたっおるプログラマにしかうれしくない
最適化ですよね。

でかいの䌁画 䜐々朚茂圊
ssa...@dekaino.net

toys

unread,
Mar 25, 2002, 1:01:02 AM3/25/02
to
 私は、こうするかなっお感じで、

# コヌドは若干省略したす。
-----------------------------------------------------------------------
static const char* _filename;
static unsigned long _linenumber;

void _debugf(char* fmt, ...)
{
printf("%s:%d ", __filename, __linnumber);
vprintf(...);
}

#define debugf _filename = __FILE__ , _linenumber = __LINE__ , _debugf
-----------------------------------------------------------------------
int myfunc(void)
{
debugf("myfunc");
}
-----------------------------------------------------------------------

 Visual C++ にある TRACE ず䌌たようなもんですが、これなら間違いを出来
るだけ無くせるかずおもふ。

tabeさんの<a77lkg$flc$1...@bgsv5905.tk.mesh.ad.jp>から
>田郚です
>int myfunc(void)
>{
> conts char funcname[128] = "myfunc" ;
> printf("%s:%d\t%s" __FILE__,__LINE__,funcname) ;
>}
>このBUGの逆版もあり、
> printf("%s:%d\t%s",__LINE__ , __FILE__,funcname) ;
>}
(snip)

--
toys mailto:<toys...@hotmail.com>

toys

unread,
Mar 25, 2002, 1:23:50 AM3/25/02
to
tabeさんの<a77lkg$flc$1...@bgsv5905.tk.mesh.ad.jp>から
>識者の皆様に質問
> なんで、関数内倉数のconstは、
> 省略時staticにならないのでしょうか
> スタックに転送する呜什が[げろげろ]出お、
> ずっおも凊理速床が遅くなるんですけど、
> const を぀けるずなんずなく、data゚リアUNIXの蚀葉に
> 取られそうなんだけれど、やっぱりスタックにずっおる。

int funcConst(const char* str)
{
const char* _str;
_str = str;
}

 こういうのず

int funcStatic(const char* str)
{
static const char* _str;
_str = str;
}

 これだず、やっぱり意味合いが違うから、static ず const は区別しおるん
じゃないですか

 C++ の class でも同様に

class foo
{
const char* m_const_str;
// クラスのメンバヌ内にむンスタンシ゚ヌトされる。

static const char* m_static_str;
};

static const char* foo::m_static_str;
// グロヌバルにむンスタンシ゚ヌトしないずだめ。

 ず、存圚しおいる堎所が違う。

 constは型をさしおstaticは眮き堎所スコヌプ範囲な蚳ですから、自動
的に型が、constだからっおスコヌプ範囲はstaticっおするのは間違いを増や
す原因になるず思う。デフォルトは、autoなんだからずりあえず、みんなデフ
ォルトは、autoにしないずたずいわけですし。

>識者の皆様に質問;
> const char funcname[128] = "myfunc" ;


> を
> static const char funcname[] = "myfunc"
> ず、staticを付けさせお、[]のを曞かせない方法
> 教えおください。

# 返答にはなりたせんが

 ?? = "myfunc";

 ?? には䜕が枡されるのか、よくわかりたせんが、この"myfunc"っお実際に
はプログラムが立ち䞊がった時点でスタック内(制定な領域に?)に甚意されお
る憶枬ですが

 "myfunc" の返り血は、static char* だから指定しなくおも良いんじゃない
かななんお思ったりする。

--
toys mailto:<toys...@hotmail.com>

tabe

unread,
Mar 25, 2002, 3:16:30 AM3/25/02
to
田郚です。

"N-Yas" <cep0...@nyc.odn.ne.jp> wrote in message
news:a7m4t2$11cn$1...@nwall2.odn.ne.jp...

> At Mon, 25 Mar 2002 06:47:26 +0900,

> > > そうした堎合は「static」ず曞けばいい、ずいうだけのこずだず思いたすが、


> > > 違うのですか?
> > 回答
> > 「察凊」はこれで良いです。
> > 「予防」をどうするかです。
>
> 「予防」はしなくおもいいず思いたす。

あヌあ、蚀いきっちゃった。
「が出たら、を盎せば良い。」
ず、お考えですね。
私の考えは、
「は出ないようにすれば良い」です。

> 「static」を曞いおないから遅い、曞けばもっずはやくなるず
> 思ったら曞けばいいし、
> そう思わなければ曞かなくおもかたわないでしょう。
> 曞き忘れたからずいっお動䜜がおかしくなるわけではないのですから。

「おかしく」なりたすよ。
 http://www.catnet.ne.jp/kouno/c_faq/c16.html#0
で瀺されおいる様にクラッシュするこずがありたす。
になるくらい、頻繁におきおるっお事です。


> > > 田郚さんの垌望を、コンパむラを぀くっおいる人たちに䌝えるずしたら、どの
> > > ように䌝えるのでしょうか。
> > > **********************************************************************
> > > デヌタがスタック領域に割り圓おられるず、スタック領域を少し倚めに䜿い、

「スタック領域を少し」で、すたない
数千BTEを䞀気に消費しお、
スタックオヌバヌフロヌの危機に盎面する䟋を
すでに提瀺しおいたす。

> > > スタック領域に曞き蟌むために時間が少し倚めにかかるのがずおも気になるの
「時間が少し」かどうかは、
"N-Yas" 殿のビゞネス的刀断に委ねたすが
倍凊理時間が遅くなっおいる䟋を
すでに提瀺しおいたす。

> > > で静的領域に割り圓おたいのだが、
> > > いちいち「static」ず曞くのは面倒なので、
> > > 曞かなくおも静的領域に割り圓おるように改良しおほしい。
> > > **********************************************************************

ここは、私にも誀解があり倪田氏に指摘されおいるので、

私の䞀番の認識䞍足は、
 const 倉数の  の右蟺に倉数が蚘述できる事を認識しおいなかったので、
「const が来たら䞀埋 static に出来る」の私の初期の䞻匵は誀りです。
誀りはすでに、認めおいたす。
以䞋珟圚の䞻匵を
出来るだけ、わかりやすく曞きたすね。
void func()
{
const char buf[] = "abc" ;
}
の様な、自動倉数配列を文字列リテラルで初期化するには
コンパむラの実装方法にも䟝存したすが、
䞻に぀の方法が考えられたす。
 䞀床静的゚リアに文字列リテラルをずっおおいお、
関数に突入した時に、
自動倉数゚リアにコピヌする方法。
むメヌゞ的には
strcpy(自動倉数゚リアのbuf、静的゚リア文字列リテラル) 

 関数に突入した時に、
buf[0] ='a' ;
buf[1] ='b' ;
buf[2] ='c' ;
buf[3] ='\0' ;
を実行する方法。

で、今考えおいるのは、
の方法で実装されおいる堎合、
どうせ、すでに 「静的゚リアに文字列リテラル」があるんだから
これを盎接みればいいじゃないか。
っお考えです。

> > > ずいうようになるず思いたすが違いたすか?
> > 回答
> > 「const修食されおいたら、コンパむラはもっず最適化しお欲しい」っお
> > 前曞いおたすけど。
>
> それでは、「最適化」しおほしい理由が分かりたせん。
> 「最適化」しおほしい理由は、私が蚀ったようなこずでしょう?

以䞊、「最適化」しおほしい理由は、
 凊理速床を早くしたい。
 無駄なメモリは䜿いたくない。


>
> > 間違いでありたせん。
> > 「無駄では無いか」っお蚀っおたす。
>
> 無駄だずしおも、その無駄が気にならなければ

「無駄が気にならない」開発珟堎なんですね

> 「最適化」しおほしいずは思わないでしょう。
> 田郚さんは「最適化」によっお短くなるわずかな時間が
私の経隓則でよければ、
最適化するず、凊理速床は玄したす。
が、
わずかな時間かどうかは、ビゞネス的局面に䟝存したす。
秒が秒になった 意味無しリアルタむム系は別
時間が時間になった おお

> ずおも気になるから「最適化」しおほしいず思うのですね?
「気になる」でなくお、
私の開発環境では、「遅いのは蚱されない」です。
――――――――――――――――――――――

red brick

unread,
Mar 25, 2002, 4:00:45 AM3/25/02
to
tabeさんの<a7mmq6$f5r$1...@bgsv5905.tk.mesh.ad.jp>から

> あヌあ、蚀いきっちゃった。
> 「が出たら、を盎せば良い。」
> ず、お考えですね。
> 私の考えは、
> 「は出ないようにすれば良い」です。

 埡意。しかしながら、それでもバグは出るものなのです。

# バグじゃない䞍具合っおのもあるし。

--
red brick

Kazuo Fox Dohzono

unread,
Mar 25, 2002, 1:27:46 PM3/25/02
to
In article <a7mmq6$f5r$1...@bgsv5905.tk.mesh.ad.jp>
"tabe" <ta...@mug.biglobe.ne.jp> writes:

> void func()
> {
> const char buf[] = "abc" ;
> }

buf[] の初期化は func 呌び出しず䞀察䞀関係にないずいけない, ず芏栌にあ
りたす (私も以前片山さんに指摘されたした).

6.2.4 Storage durations of objects
...
[#4] An object whose identifier is declared with no linkage
and without the storage-class specifier static has automatic
storage duration.
...
6.8 Statements and blocks
...
[#3] A block allows a set of declarations and statements to
be grouped into one syntactic unit. The initializers of
objects that have automatic storage duration, and the
variable length array declarators of ordinary identifiers
with block scope, are evaluated and the values are stored in
the objects (including storing an indeterminate value in
objects without an initializer) each time the declaration is
reached in the order of execution, as if it were a
statement, and within each declaration in the order that
declarators appear.

定数にしちゃうず次の関数の出力が垞に䞀定になっちゃうわけですよね.

void
foo (int n)


{
const char buf[] = "abc";

if (--n < 0)
return;
printf ("%p\n", buf);
foo (n);

Kazuo Fox Dohzono

unread,
Mar 25, 2002, 1:40:32 PM3/25/02
to
In article <22595.10...@insigna.ie.u-ryukyu.ac.jp>
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:

> >・(1)ず(2)には䟝存関係が無い
>
> っおのを、const宣蚀から導出しおはいけたせん... っおのが alias
> の問題ですよね。C は、そんなのばっかです。

以前も話題に出したしたが, restrict っおのが導入されおいたす.

6.7.3.1 Formal definition of restrict
...
[#7] EXAMPLE 1 The file scope declarations

int * restrict a;
int * restrict b;
extern int c[];

assert that if an object is accessed using one of a, b, or
c, and that object is modified anywhere in the program, then
it is never accessed using either of the other two.

[#8] EXAMPLE 2 The function parameter declarations in the
following example

void f(int n, int * restrict p, int * restrict q)
{
while (n-- > 0)
*p++ = *q++;
}

assert that, during each execution of the function, if an
object is accessed through one of the pointer parameters,
then it is not also accessed through the other.

で, 今時の strcpy のプロトタむプ宣蚀はこうです.

char *strcpy(char * restrict s1,
const char * restrict s2);

Nagata Minoru

unread,
Mar 25, 2002, 4:51:39 AM3/25/02
to
????????

????const ???????????????????????????

???????????????

int foo(char* hoge);

???????????? hoge ????????????????????
?????????????????????????????

bar(const char* gege)
{
char buf[256];
strcpy(buf, gege);
foo(buf);
....
}

??????????????

int foo(const char* hoge);

???????????????????????????????????
?????

??????????????????

?
--
???
naga...@csf.ne.jp

oka...@okahana.ath.cx

unread,
Mar 25, 2002, 5:20:21 AM3/25/02
to
In article <a7mmq6$f5r$1...@bgsv5905.tk.mesh.ad.jp>, tabe wrote:
>"N-Yas" <cep0...@nyc.odn.ne.jp> wrote in message
>news:a7m4t2$11cn$1...@nwall2.odn.ne.jp...
>> At Mon, 25 Mar 2002 06:47:26 +0900,
>
>> > > そうした堎合は「static」ず曞けばいい、ずいうだけのこずだず思いたすが、
>> > > 違うのですか?
>> > 回答
>> > 「察凊」はこれで良いです。
>> > 「予防」をどうするかです。
>>
>> 「予防」はしなくおもいいず思いたす。
>
> あヌあ、蚀いきっちゃった。
> 「が出たら、を盎せば良い。」
> ず、お考えですね。

どうしおそう思うのでしょうか。
staticであるべきものにstaticを付け忘れた堎合の話ですよね...?

> 私の考えは、
> 「は出ないようにすれば良い」です。

そりゃそうですけど、N-Yasさんは、この件に関しおそういう努力
をする䟡倀はないずいっおるのだず思うのですが。(私もそう思い
たす)(あ、違っおたらすみたせん)
# BTEなんおいうのこそ予防しおほしい(笑)

田郚さんはここを読んでいる人に䜕を求めおいるのでしょうか。

--
おかはな

N-Yas

unread,
Mar 25, 2002, 7:26:24 AM3/25/02
to
At Mon, 25 Mar 2002 17:16:30 +0900,

tabe wrote:
>
> 「おかしく」なりたすよ。
>  http://www.catnet.ne.jp/kouno/c_faq/c16.html#0
> で瀺されおいる様にクラッシュするこずがありたす。
> になるくらい、頻繁におきおるっお事です。

初期化デヌタが倚いず思ったら「static」ず曞けばいいずいうだけの話ですね。
その C-FAQ 16.3にも「倧きな配列を䜿うずきはstaticず宣蚀したほうがいい」
ず曞かれおいるわけですし。

> 「スタック領域を少し」で、すたない
> 数千BTEを䞀気に消費しお、
> スタックオヌバヌフロヌの危機に盎面する䟋を
> すでに提瀺しおいたす。

田郚さんの蚀う「最適化」はスタックオヌバヌフロヌを防ぐのにも圹立぀、ず
いうこずですか?

At Sun, 24 Mar 2002 01:27:09 +0900,<a7ianb$10n$1...@bgsv5905.tk.mesh.ad.jp>


tabe wrote:
>
> void func()
> {
> const struct tag unuse[] = {/* 昔䜿っおたけど今は未䜿甚
>  */
> 0xFF,0FF, .....................................
> 音声デヌタか、なんかの初期倀が
> 延々ず続く
> }
> }

この堎合なら、「最適化」でスタックオヌバヌフロヌを防げるでしょうけど、
unuse[]が「const」なしで定矩されおいたら、「最適化」の察象にならないの
でスタックオヌバヌフロヌは防げたせん。

> の方法で実装されおいる堎合、
> どうせ、すでに 「静的゚リアに文字列リテラル」があるんだから
> これを盎接みればいいじゃないか。
> っお考えです。

だからそれは、
static const char buf[] = "abc" ;
のように「static」を぀ければいいだけでしょう?
どうしおその皋床のこずを避けようずするのですか?

> 私の経隓則でよければ、
> 最適化するず、凊理速床は玄したす。

At Sat, 23 Mar 2002 10:43:35 +0900,<a7gn0d$nto$2...@bgsv5906.tk.mesh.ad.jp>
tabe wrote:
>
> void myfunc()
> {


> const char tmp[] = __FILE__ ;
> printf("%s\n",tmp) ;
> printf("%s\n",tmp) ;
> ...
> printf("%s\n",tmp) ;
> }

この関数に田郚さんの蚀う「最適化」をするず凊理速床が3040%アップする
のですか?

--
N-Yas <cep0...@nyc.odn.ne.jp>

Narita Takaoki

unread,
Mar 25, 2002, 7:59:00 AM3/25/02
to
成田です。

<a7mqpq$f87$1...@news2.rim.or.jp>の蚘事においお
doh...@hf.rim.or.jpさんは曞きたした。

> In article <a7mmq6$f5r$1...@bgsv5905.tk.mesh.ad.jp>
> "tabe" <ta...@mug.biglobe.ne.jp> writes:
>
> > void func()
> > {
> > const char buf[] = "abc" ;
> > }
>
> buf[] の初期化は func 呌び出しず䞀察䞀関係にないずいけない, ず芏栌にあ
> りたす (私も以前片山さんに指摘されたした).

:


> 定数にしちゃうず次の関数の出力が垞に䞀定になっちゃうわけですよね.
>
> void
> foo (int n)
> {
> const char buf[] = "abc";
> if (--n < 0)
> return;
> printf ("%p\n", buf);
> foo (n);
> }

80 - 90 % ANSI C の CINT だずこれ出力が䞀定になるんですが、

void tarfu(char bar[],int count) {
bar[4] = count+bar[4];
}

void foo(int i) {
const char bar[] = "hoge0"; // ‡

tarfu((char *)bar, i); // †

if ( i > 0 ) {
foo(--i);
}

printf("%p\n", bar);
}

だず倉るです。たぁ、†が䜕考えおるかなぁなずころはありたすが。

ちなみに、これで‡を static 付きに解釈しちゃうず、FreeBSD 4.4R の
gcc 2.8.1 だず死にたす。.rodata にリテラル "hoge0" が眮かれお、そ
れに盎に tarfu(...) で曞き蟌みに行っちゃうので。

# もちろん gcc はそんな解釈しないので、死なない。

で、通垞でかい固定デヌタをロヌカルに持ち蟌むなら const 以前に
static するはずなので、const が付いおいるかどうかを問題にする以前
の話のような。

䞊の倉態コヌドも芏栌䞊ぱラヌにならんので、const だけだったら
static に勝手になっちゃうのは、やっぱり䜙蚈なお䞖話な気がするです。

これが「static にならんのはけしからん」ずいうなら、それ以前に
「†のキャストは絶察たかりならん」ず蚀っおくれないず倉な気が
するです。

キャストがあるかぎり、コンパむラにずっお安心しお static にしちた
えないっおぇ状況がいくらでもありそうだから、端っから責任持おない
こずは手を染めないのがよろしいっおこずですね。

# static が存圚しないなら事情は別ですけれど。

--
成田 隆興  ゚ヌ・アむ・゜フト株匏䌚瀟゜リュヌシュン開発郚
E-mail tak...@aisoft.co.jp
『十分間で決断し、短い理由を添えよ。』

Shinji KONO

unread,
Mar 25, 2002, 8:11:26 AM3/25/02
to
河野 真治@琉球倧情報工孊です。

In article <a7mrhk$fhi$1...@news2.rim.or.jp>,
doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes

>で, 今時の strcpy のプロトタむプ宣蚀はこうです.
> char *strcpy(char * restrict s1,
> const char * restrict s2);

なるほど。確かに、Linuix 2.0ではそうなっおいるな。知りたせんでした。

段々ぱっず芋で、意味がわからなくなっおきたすね。こういう解決方法
が正しいのかなぁ。C 自䜓が正しい解決方法ではないから、こうなっお
したうんでしょうね。

---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球倧孊工孊郚情報工孊科,
科孊技術振興事業団さきがけ研究21(機胜ず構成)

tabe

unread,
Mar 25, 2002, 8:48:01 AM3/25/02
to
田郚です。
・成田さん
・Kazuo Fox Dohzonoさん
・䜐々朚@でかいの  さん
わかりたした。

芏栌には逆らえたせん。
 const ず来たらstatic にしおしたえも
 最適化で、const なら 自動倉数初期倀のリテラル倀を共有しおしたえも
取り䞋げたす。

勉匷になりたした。

"Narita Takaoki" <tak...@aisoft.co.jp> wrote in message
news:a7n6uk$35l$1...@nwall2.odn.ne.jp...

Tadamasa Tamura

unread,
Mar 25, 2002, 2:36:27 PM3/25/02
to
田村です。

本圓は色々ず答え甚意しおおいたんですが、話があたり建蚭的では
なくなりそうなので、こちらに盞乗り(^^;

Shinji KONO wrote:
> >で, 今時の strcpy のプロトタむプ宣蚀はこうです.
> > char *strcpy(char * restrict s1,
> > const char * restrict s2);

䞭略
> こういう解決方法が正しいのかなぁ。

正しいか正しくないかず蚀われるず、ある偎面では正しいが、
別の偎面から芋るず正しくないっおのが本圓のずころでしょう。

実際、曞き方の矎しさや芋やすさず蚀う点では、他にわかり易い蚀語は
いくらでもあるでしょうし、今埌も出おくるでしょう。
「䞊列オブゞェクト指向蚀語」は河野先生の研究テヌマでもあるこず
 ですし    

では、なぜ未だにが生き長らえるのですか

それが、

> C 自䜓が正しい解決方法ではないから、こうなっおしたうんでしょうね。

に察する本質的な答えだず私は思いたす。

が他の蚀語に比べお優䜍な点ずしおは、ずりあえず、以䞋の点が
思い぀きたす。他にあるかもしれないけど蚱しお(((((^^;
コヌド効率の高さ゜ヌスに曞かれたこず以倖は䞀切しない
    型倉換は別問題ね(^^;゜ヌスに曞かれたこず以倖
蚀語ずしおの単玔さこれは、コンパむラの移怍性に圱響
他プラットフォヌムぞの移怍の容易さこれは、gccの存圚が倧きい
高玚蚀語䞊の蚘述のし易さ

これらの事が、各方面でが利甚される理由だず思いたす。
私個人にずっおはが䞀番重芁(^^ゞ

研究レベルの問題ずしおは、どうずいうこずはないでしょうが、
商業レベルにおいおは、これらは非垞に重芁な意味を持ちたす。

特に商業レベルの堎合は、必ずしも「完党である」こずたでは
芁求されたせん。
確かに理想ではありたすが、人間が䜜る以䞊、ドコかに矛盟があっおも
おかしくないでしょうし、䜿う偎もその矛盟に察し制玄を䞎えおも、
それに勝るメリットがあるのであれば、割り切っお䜿いたす。

この良い䟋が、Spec-CずかSystemCでしょう。
 知らない堎合は、怜玢゚ンゞンを䜿甚するなりしおみおください。
 お近くにいるはずの和田教授に聞いおみおも刀るかもしれたせん。
 「なんでこんなものをそんな甚途に䜿うんだ」ず思うはずです  
 っお蚀うより、私も未だに「そこたで制玄したら意味無いやん」ず
 思い぀぀も、䜿わないずいけないんだろうなぁず思っおたす。

だからこそは、既存のコヌドの延呜も図り぀぀も、「぀ぎはぎ」ず
いわれようず、完党ではないず刀り぀぀も、䞊列化ぞの道を
暡玢しおいるのだず私は思いたす。
だから私は最初に「ず蚀うこずで、将来に期埅っconstの掻甚」ず
 曞きたした。

ではでは(^^/

Narita Takaoki

unread,
Mar 26, 2002, 12:06:03 AM3/26/02
to
成田です。

<a7na8a$fcn$1...@bgsv5906.tk.mesh.ad.jp>の蚘事においお
ta...@mug.biglobe.ne.jpさんは曞きたした。

> わかりたした。
>
> 芏栌には逆らえたせん。
>  const ず来たらstatic にしおしたえも
>  最適化で、const なら 自動倉数初期倀のリテラル倀を共有しおしたえも
> 取り䞋げたす。

ん、別に芏栌に逆らっちゃ駄目っおわけでもなくお、駄目な芏栌だっ
たら駄目ず蚀うべきで。ただし、どう駄目でどうするず良くなるっおの
は、明瀺するべきでしょうね。

あず、今回の件を玍埗するにしおも芏栌だからじゃなくお、どうしおそ
うなっおいるかたで掘り䞋げた䞊で玍埗しないず、法の粟神をほかしお
する法解釈みたいになるので、あんたり歓迎できないこずかず。

で、今回のみそはやっぱり

1.既に䟋瀺したようなダメダメなキャストが出来る
2.ロヌカル倉数に察する const ず static の関係は 1 がある
かぎり掚定䞍可

なのではないかず。じゃあダメダメキャストを無くせばっお説が出るわ
けだけど、そうしたら C 蚀語の良いずころも削がれそうだし、個人的に
は C 蚀語からそれがなくなったら぀たらない。(^^;;;

# ダメダメな䟋は、
# const char foo[] = "snafu";
# char *p = (char *)foo;
# でも良いですね。宣蚀で䞀所懞呜安党にしようったっおキャストがあ
# るかぎり、そうは問屋は卞さないっ぀ぅか、フランス代衚に攻められ
# る日本代衚のラむンディフェンスよりよわよわっ぀ぅか(その心は、な
# んがでも裏をかける。^^;;;;)。

で、C++ に蚀及しおおくず、C のダメダメキャストはただ愉快に思える
範疇だけれど、このダメダメキャストずポむンタヌず C++ のダメダメク
ラスの仕組み(継承云々含めお)ずが組み合わさるずダメダメの8乗くらい
な感じになっお、「ラスボスがしばらく無敵状態です」みたいになるの
で、さすがに個人的にも勘匁信濃の善光寺。(^^;;;;;;;

Junn Ohta

unread,
Mar 26, 2002, 12:55:49 AM3/26/02
to
fj.comp.lang.cの蚘事<a7mmq6$f5r$1...@bgsv5905.tk.mesh.ad.jp>で
ta...@mug.biglobe.ne.jpさんは曞きたした。

> const char buf[] = "abc" ;

芏栌はずもかくずしお、なぜこのようなコヌドを䜿いた
いのか、私にはよく理解できたせんでした。

考えられるずしたら
(a) 文字列定数に“名前”を付けお即倀でのアクセスを
犁止したい
(b) 同じ文字列定数が耇数箇所に出おくるのでそれらが
占有する領域を共有したい
ぐらいかな?

(a)に関しおは、enumで文字列定数名を宣蚀できない以
䞊、「名前空間だけ消費しお領域は占有しない」ような
方法はないわけですよね。そういう認識からスタヌトす
るずしお、じゃあ䞊のようなコヌドでそれを代甚したい、
ず思ったずしおも、それがうたくいかないずわかったら
䜕か別の方法を暡玢するのがふ぀うでしょう。自分の目
論みが通らないのをconstの仕様のせいにする了芋がわ
からない...。

(b)に関しおは、同じ文字列定数が耇数出珟したら(たっ
たく同じでなくおも"abc"ず"bc"のように末尟偎が郚分
䞀臎するなら)、いたどきのコンパむラヌならそれをた
ずめおひず぀の領域に栌玍しおくれたすよね。だったら
それも䞊のようなコヌドを曞く理由にはならない...。

いずれにしおも、「遅いのは蚱されない」のなら「デヌ
タの割り付けを知らないプログラマ」などを䜿うわけに
はいかないず思うのですが、違うのかな。どうも私には
田郚さんのバランス感芚がちょっずずれおいるように芋
えるのですが。
--
倪田玔(Junn Ohta) (æ ª)リコヌ/新暪浜事業所
oh...@sdg.mdd.ricoh.co.jp

tabe

unread,
Mar 26, 2002, 7:06:07 AM3/26/02
to
田郚です。
"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:a7p2h5$sd5$1...@ns.src.ricoh.co.jp...

> fj.comp.lang.cの蚘事<a7mmq6$f5r$1...@bgsv5905.tk.mesh.ad.jp>で
> ta...@mug.biglobe.ne.jpさんは曞きたした。
> > const char buf[] = "abc" ;
> 芏栌はずもかくずしお、なぜこのようなコヌドを䜿いた
> いのか、私にはよく理解できたせんでした。
äž­ç•¥
倪田さん、頭良すぎ。
こんなの、
「若いプログラマが芋様芋真䌌で曞いた」に
決たっおるじゃないですか。
蚀い出しっぺの私が蚀うだから間違い無いです。

> いずれにしおも、「遅いのは蚱されない」のなら「デヌ
> タの割り付けを知らないプログラマ」などを䜿うわけに
> はいかないず思うのですが、違うのかな。

「遅いのは蚱されない」堎合でも、
「デヌ タの割り付けを知らないプログラマ」や、
「時間が少し倚め」ずかいっおるプログラマを
䜿っお仕事をするのが珟実です。

> どうも私には
> 田郚さんのバランス感芚がちょっずずれおいるように芋
> えるのですが。
だから、
%grep static *.h
っお、打っおくれれば僕の蚀っおる意味解りたすっお。
倪田さんの曞いた゜ヌスコヌド以倖じゃないず駄目ですよ。
―――――――――――――――――――
あず、補足ですけど、
完党䞻矩者の、こんこんちきっお、思われかれない発蚀をしおるので。
lintの譊告を党郚぀ぶせ、ずか、
gcc -Wall -W -Oの譊告を党郚぀ぶせ、ずか
僕は蚀っおたせんよ。
ほどほど、぀ぶせっお、蚀っおたすけど。
たた、誀解を招くかな。

Tomoaki NISHIYAMA

unread,
Mar 26, 2002, 8:36:35 AM3/26/02
to
"tabe" <ta...@mug.biglobe.ne.jp> writes:

> 田郚です。

> だから、
> %grep static *.h
> っお、打っおくれれば僕の蚀っおる意味解りたすっお。
grep static *.h
でほずんど䜕もでないのは圓たり前じゃないですか?
ふ぀うstaticっおヘッダファむルに曞かないず思いたすけどね。
関数の実䜓を定矩しおいるファむルに曞くだけでいいはずでしょう。
--
Tomoaki Nishiyama
e-mail:tom...@nibb.ac.jp
National Institute for Basic Biology

tabe

unread,
Mar 26, 2002, 9:10:36 AM3/26/02
to
田郚です
"Tomoaki NISHIYAMA" <tom...@nibb.ac.jp> wrote in message
news:86y9gf30...@koke.nibb.ac.jp...

> > 田郚です。
> > だから、
> > %grep static *.h
> > っお、打っおくれれば僕の蚀っおる意味解りたすっお。
> grep static *.h
> でほずんど䜕もでないのは圓たり前じゃないですか?
> ふ぀うstaticっおヘッダファむルに曞かないず思いたすけどね。
> 関数の実䜓を定矩しおいるファむルに曞くだけでいいはずでしょう。

だから、打お

Tomoaki NISHIYAMA

unread,
Mar 26, 2002, 9:36:02 AM3/26/02
to
"tabe" <ta...@mug.biglobe.ne.jp> writes:

> 田郚です
> "Tomoaki NISHIYAMA" <tom...@nibb.ac.jp> wrote in message
> news:86y9gf30...@koke.nibb.ac.jp...
> > > 田郚です。
> > > だから、
> > > %grep static *.h
> > > っお、打っおくれれば僕の蚀っおる意味解りたすっお。
> > grep static *.h
> > でほずんど䜕もでないのは圓たり前じゃないですか?
> > ふ぀うstaticっおヘッダファむルに曞かないず思いたすけどね。
> > 関数の実䜓を定矩しおいるファむルに曞くだけでいいはずでしょう。
>
> だから、打お

䞀䜓、どこで打おば分かるのかを説明しお頂きたせんずわかりたせん。
static inline func()がかかったり、関数の実䜓定矩が含たれおいる
header fileで垰り倀にそこぞのポむンタヌを返しおいる䟋以倖は
今のずころ発芋できおいたせん。

tabe

unread,
Mar 26, 2002, 10:32:51 AM3/26/02
to
田郚です。
"Tomoaki NISHIYAMA" <tom...@nibb.ac.jp> wrote in message
news:86vgbj2y...@koke.nibb.ac.jp...
> "tabe" <ta...@mug.biglobe.ne.jp> writes:
> > だから、打お
あ。
ごめん、ごめん。
tom...@nibb.ac.jp さんは、ac.jpだから
孊生さんだね。

> 䞀䜓、どこで打おば分かるのかを説明しお頂きたせんずわかりたせん。
> static inline func()がかかったり、関数の実䜓定矩が含たれおいる
> header fileで垰り倀にそこぞのポむンタヌを返しおいる䟋以倖は
> 今のずころ発芋できおいたせん。

/usr/includeずかの䞋で
grepしおもこの話の面癜さは解らないんだ。

自分たちで䜜ったプログラムの
ヘッダファむルから
static を怜玢しお䞋さい。
䜕も芋぀からなければ、
tomoakiさんず、
教授が優秀っお事です。
スコヌプルヌルがちゃんず解っおいるっお事です。
あず、
static char sccsid[] = "なんずか" ;
static char cvsid[] = "こんずか" ;
っおのがあっおも、無芖しお。

Junn Ohta

unread,
Mar 26, 2002, 11:30:02 AM3/26/02
to
fj.comp.lang.cの蚘事<a7pohu$nur$1...@bgsv5905.tk.mesh.ad.jp>で
ta...@mug.biglobe.ne.jpさんは曞きたした。
> こんなの、
> 「若いプログラマが芋様芋真䌌で曞いた」に
> 決たっおるじゃないですか。

ずいうこずなら、constをstatic constにしたくらいで
はちっずも安心できなくお、安心できるくらいのチェッ
クを行うのなら逆にconstをstatic constにしおすたす
皋床の逃げなんおたったく䞍芁になりそうなものです。

぀たり、(ほかのデメリットがない状況で蚀語芏玄䞊も
問題ないずしお)constを凊理系がstatic constに読み替
えおくれおもずりたおおうれしいずは感じない、ずいう
人がほずんどのような気がするんですね。

> 「遅いのは蚱されない」堎合でも、
> 「デヌ タの割り付けを知らないプログラマ」や、
> 「時間が少し倚め」ずかいっおるプログラマを
> 䜿っお仕事をするのが珟実です。

「珟実」を受け入れるなら、その「珟実」が蚱す範囲で
しか「遅いのは蚱されない」などずは蚀っおられないで
しょう?

「珟実」が厳しいのであれば「遅いのは蚱されない」ず
いうのも絵に描いた逅でしかない。私からみればconst
をstatic constに読み替えおくれる凊理系も珟実の逅を
䜜り出しおはくれないわけです。

> だから、
> %grep static *.h
> っお、打っおくれれば僕の蚀っおる意味解りたすっお。
> 倪田さんの曞いた゜ヌスコヌド以倖じゃないず駄目ですよ。

ええず、䜕かフリヌ゜フトの゜ヌスで具䜓䟋ずしお適切
なものを挙げおみおいただけたすか?

Masamichi Motoyoshi

unread,
Mar 26, 2002, 1:09:50 PM3/26/02
to
本吉です。

"tabe" <ta...@mug.biglobe.ne.jp> wrote in message
news:a7q4li$619$1...@bgsv5905.tk.mesh.ad.jp...


> 田郚です。
> "Tomoaki NISHIYAMA" <tom...@nibb.ac.jp> wrote in message
> news:86vgbj2y...@koke.nibb.ac.jp...
> > "tabe" <ta...@mug.biglobe.ne.jp> writes:
> > > だから、打お
> あ。
> ごめん、ごめん。
> tom...@nibb.ac.jp さんは、ac.jpだから
> 孊生さんだね。
>
> > 䞀䜓、どこで打おば分かるのかを説明しお頂きたせんずわかりたせん。
> > static inline func()がかかったり、関数の実䜓定矩が含たれおいる
> > header fileで垰り倀にそこぞのポむンタヌを返しおいる䟋以倖は
> > 今のずころ発芋できおいたせん。
>
> /usr/includeずかの䞋で
> grepしおもこの話の面癜さは解らないんだ。
>
> 自分たちで䜜ったプログラムの
> ヘッダファむルから
> static を怜玢しお䞋さい。
> 䜕も芋぀からなければ、
> tomoakiさんず、
> 教授が優秀っお事です。
> スコヌプルヌルがちゃんず解っおいるっお事です。

C蚀語に static ずいうキヌワヌドがあるこずを
知らないだけずいう説もあるず思いたすけどね。

> あず、
> static char sccsid[] = "なんずか" ;
> static char cvsid[] = "こんずか" ;
> っおのがあっおも、無芖しお。

え
無芖しおよいんですか

個人的には無芖できないですけど。

ずいうか、これ無芖しおよいなら、
田郚さんが䜕を意図 しお grep しろずいっおいるのか
わからないです。

それずも、そういうプログラムを発芋したら、
それを曞いたプログラマを「無芖しお」

ずころで、キヌワヌド的には static で同じですけど、
局所倉数に static を぀ける話ずは
たったく異なる話題ず思っおよいんですよね

以䞊です。

Masao Seki

unread,
Mar 26, 2002, 2:07:58 PM3/26/02
to

tabe wrote:
>
> 田郚です。
> "Tomoaki NISHIYAMA" <tom...@nibb.ac.jp> wrote in message
> news:86vgbj2y...@koke.nibb.ac.jp...
> > "tabe" <ta...@mug.biglobe.ne.jp> writes:
> > > だから、打お
> あ。
> ごめん、ごめん。
> tom...@nibb.ac.jp さんは、ac.jpだから
> 孊生さんだね。

倧孊の、䞖界的な暩嚁を持った、偉い先生かも知れたせんよ。

--
関神奈川
Masao Seki <ma-...@gb3.so-net.ne.jp>

Tadamasa Tamura

unread,
Mar 26, 2002, 2:32:01 PM3/26/02
to
田村です。
ずりあえず、今回は解説モヌドで。

私なんか、最初この質問を芋たずきに思ったのは
 「__FILE__䜿っおデバッグするのはじめおみた」
 「ポむンタ䜿えば」だったりしたすが、
田郚さんの皆さんぞのRESを芋お、
「ああ、色々ず苊劎しおるのね」ず感じたした。
その感じに関する蚘述ですので、
事実ずは異なるずころがあるかもしれたせんので、
この物語はフィクションず蚀うこずでぉぃ。

Junn Ohta wrote:
> fj.comp.lang.cの蚘事<a7mmq6$f5r$1...@bgsv5905.tk.mesh.ad.jp>で
> ta...@mug.biglobe.ne.jpさんは曞きたした。
> > const char buf[] = "abc" ;
> 芏栌はずもかくずしお、なぜこのようなコヌドを䜿いた
> いのか、私にはよく理解できたせんでした。

 田郚さん自身は䜿おうずも思わないし、䜿う぀もりも無いのですが、
<a7aeh4$9op$1...@bgsv5906.tk.mesh.ad.jp>での発蚀のあったように、
> 人以䞊の、
> 耇数個所の拠点で、
> 数千KLINEのプログラムを
> 合同開発しお、
> 必死に取ったマシンタむムで
> このバグが発芚し、
> 同様問題を、
> 至急 AMたで調査せよ
> っお時でも、考えたせんか

 芏暡および掛かっおいる人員の関係䞊、歩留たりが悪くなるのは
十分考えられるこずですただし、実際の芏暡がどうかは未確認。

たしかに倪田さんの蚀うように、

> 「遅いのは蚱されない」のなら「デヌタの割り付けを知らないプログラマ」
> などを䜿うわけにはいかないず思うのですが、違うのかな。

これは無茶苊茶正論です。私も、埌のほうの回答ではこれを曞きたした(^^ゞ

 次回の発泚時ずか、ずっず同じ人に発泚し続ける堎合は、
その制埡も可胜でしょうが、最初ずか䞍定期の発泚ではこの制埡もできたせん。
 発泚条件に「誰々は䜿うな」ずか「誰々垌望」ず曞くこずもできるし
 私だっお、関連䌚瀟っお制玄さえなければ、発泚したくない人っお
  沢山いたした。

だからこそ、
圓初の質問は
その、「䜿うな」に該圓する人が曞いたコヌドを無理矢理にでも実甚域に
持ち蟌む方法ずしお

「簡単にチェックする方法っお無い」
   printfに関しおは、gcc -Wformatオプションっおのが答え。
    ストリングリテラルの連結に関しおは未解決
「無理矢理でも最適化する方法っおない」
   コレは仕様なのでどうにもならない
「staticで曞くchar型の配列の芁玠数省略する方法ない」
   これはコンパむラの制玄により可/䞍可がありそうなので、
    明確な答えは無し。ちなみに、gccでは、元のたたコンパむルが通るし
(^^;
    配列の芁玠数曞かないだけだったら、ポむンタ䜿っおも問題は無いは
ず。
    static const宣蚀もあるから、readonlyの空間でも党く矛盟はない。)

ず私は解釈したした。

以䞊、解説モヌド終了。

っお、やっぱり倧きなお䞖話か(爆)

なんか、newsgroupはメヌルの配信が遅い    

tabe

unread,
Mar 26, 2002, 3:51:05 PM3/26/02
to
田郚です。

"Masamichi Motoyoshi" <sa...@dsl.gr.jp> wrote in message
news:a7qdjb$7v0$1...@sv.dsl.gr.jp...
> 本吉です。

> C蚀語に static ずいうキヌワヌドがあるこずを
> 知らないだけずいう説もあるず思いたすけどね。
うう、確かに。

> > あず、
> > static char sccsid[] = "なんずか" ;
> > static char cvsid[] = "こんずか" ;
> > っおのがあっおも、無芖しお。
> え
> 無芖しおよいんですか
> 個人的には無芖できないですけど。

この、
ずか、
ずかはの゜ヌス管理システムで、
お玄束で、無芖しお良い事になっおたす。

#ident "゜ヌスコヌド第䜕版”
が䜿えれば、良いのだけれどANSI-C暙準では無いもので。。。。

> ずいうか、これ無芖しおよいなら、
> 田郚さんが䜕を意図 しお grep しろずいっおいるのか
> わからないです。

䞊蚘以倖では、
僕の意図ず
本吉さんの理解は倚分あっおたす。

> それずも、そういうプログラムを発芋したら、
> それを曞いたプログラマを「無芖しお」
そこたで惚い事蚀わないが、
ヘッダファむルで
static int i = 0 ;
ずか、
ぞっダファむルで
static char Roop ; /* char? R?L? */
ずか、だったら蚀うかもしれない。

> ずころで、キヌワヌド的には static で同じですけど、
> 局所倉数に static を぀ける話ずは
> たったく異なる話題ず思っおよいんですよね

どの皋床、static が理解されおいいるかの、
評䟡方法の䞀぀です。

Kazuo Fox Dohzono

unread,
Mar 27, 2002, 6:33:58 AM3/27/02
to
In article <a7n6uk$35l$1...@nwall2.odn.ne.jp>
tak...@aisoft.co.jp (Narita Takaoki) writes:

> > buf[] の初期化は func 呌び出しず䞀察䞀関係にないずいけない, ず芏栌にあ
> > りたす (私も以前片山さんに指摘されたした).

初期化だけでなくおオブゞェクトのむンスタンス生成もそうでした.

6.2.4 Storage durations of objects
...

[#5] For such an object that does not have a variable length
array type, its lifetime extends from entry into the block
with which it is associated until execution of that block
ends in any way. (Entering an enclosed block or calling a
function suspends, but does not end, execution of the
current block.) If the block is entered recursively, a new
instance of the object is created each time. The initial
value of the object is indeterminate. If an initialization
is specified for the object, it is performed each time the
declaration is reached in the execution of the block;
otherwise, the value becomes indeterminate each time the
declaration is reached.

> 䞊の倉態コヌドも芏栌䞊ぱラヌにならん

かずいっお動䜜保蚌があるわけではありたせんね.

6.7.3 Type qualifiers
...
[#5] If an attempt is made to modify an object defined with
a const-qualified type through use of an lvalue with non-
const-qualified type, the behavior is undefined. If an
attempt is made to refer to an object defined with a
volatile-qualified type through use of an lvalue with non-
volatile-qualified type, the behavior is undefined.113)


> ので、const だけだったらstatic に勝手になっちゃうのは、やっぱり䜙蚈

> なお䞖話な気がするです。

ずころでこんな蚘述もあるんですが .

[#3] The properties associated with qualified types are
meaningful only for expressions that are lvalues.112)

____________________

112The implementation may place a const object that is not
volatile in a read-only region of storage. Moreover, the
implementation need not allocate storage for such an
object if its address is never used.

Kazuo Fox Dohzono

unread,
Mar 28, 2002, 9:36:28 AM3/28/02
to
In article <a7rbig$2p6m$1...@news2.rim.or.jp>

doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes:

> > > buf[] の初期化は func 呌び出しず䞀察䞀関係にないずいけない, ず芏栌にあ
> > > りたす (私も以前片山さんに指摘されたした).

この蟺りを先茩に聞いおみたずころ, 「それは

extern char first_char (void);
extern char second_char (void);
extern char third_char (void);
void
foo (void)
{
const char buf[] = {
first_char (),
second_char (),
third_char (),
'\0',
};
...
}

のような堎合にむニシャラむザの各関数が毎回呌ばれるこずを保蚌するための
もので, むニシャラむザが文字列リテラルのような圢で䞎えられ, か぀, buf
のアドレスが倖に流倱しない堎合, buf を read-only な領域ぞ眮くこずは別
に構わないんじゃないか」ずいう意芋でした.

| ただそんな䞍毛な最適化をコンパむラがやっおくれおも誰もうれしくな
| いハズ。そういう甚途なら const char* もしくは static const char[] で
| 十分なんだから。

ずいうのは倪田さんの意芋に合臎したすね.

Junn Ohta

unread,
Mar 28, 2002, 2:49:07 AM3/28/02
to
fj.comp.lang.cの蚘事<3CA0CCB1...@coral.ocn.ne.jp>で
ta...@coral.ocn.ne.jpさんは曞きたした。

> たしかに倪田さんの蚀うように、
> > 「遅いのは蚱されない」のなら「デヌタの割り付けを知らないプログラマ」
> > などを䜿うわけにはいかないず思うのですが、違うのかな。
> これは無茶苊茶正論です。私も、埌のほうの回答ではこれを曞きたした(^^ゞ

私ずしおはじゅうぶん実珟可胜な意芋だった぀もりなの
ですが...。

>  次回の発泚時ずか、ずっず同じ人に発泚し続ける堎合は、
> その制埡も可胜でしょうが、最初ずか䞍定期の発泚ではこの制埡もできたせん。
>  発泚条件に「誰々は䜿うな」ずか「誰々垌望」ず曞くこずもできるし
>  私だっお、関連䌚瀟っお制玄さえなければ、発泚したくない人っお
>   沢山いたした。

そうなんですか!?

田郚さんが挙げられたconstの問題っお、蚭蚈時にデヌ
タレむアりトに぀いお基本ルヌルを䜜っお「必芁のない
かぎりスタックにデヌタを眮くな」ず決めおおけばすむ
話ですよね? で、それが理解できない皋床のプログラマ
ヌっおそんなにいるのかしら...。

いた私のたわりにも100人くらいの開発者がいお、協力
䌚瀟メンバヌ(いわゆる倖泚さん)もいく぀かのずころか
ら来おもらっおいるのですが、「発泚したくない」ずい
うレベルの人はひずりもいないですよ。

> だからこそ、
> 圓初の質問は
> その、「䜿うな」に該圓する人が曞いたコヌドを無理矢理にでも実甚域に
> 持ち蟌む方法ずしお

# 田郚さんずこのReview-Cを買っお䜿う。:-)

> 「簡単にチェックする方法っお無い」
>    printfに関しおは、gcc -Wformatオプションっおのが答え。
>     ストリングリテラルの連結に関しおは未解決

構文レベルの問題なら、テキスト凊理プログラムを組み
合わせればさほど苊劎せずにチェックできる堎合が倚い
ず思いたせんか?

たずえば文字列リテラルの連結があるかどうかをチェッ
クしたいのなら、すべおの゜ヌスに察しお
(1) プリプロセッサヌを通し(cc -E)
(2) 残ったプリプロセッサヌ指瀺行を捚お(grep -v)
(3) すべおの空癜(スペヌス、タブ、改行)を捚お(tr -d)
(4) 残りのテキスト䞭に""があるかどうか調べる
でだいたいの目的は果たせそうな気がしたす。

(3)の結果は改行のない1行の長ヌいテキストになるので、
(4)の凊理に䜕を䜿うかでちょっず悩むかもしれたせん
が、Cで曞いたっおちょこちょこっず曞けちゃう皋床の
ものですよね。

で、䞊のように凊理するず空文字列("")ずか
"Can't open \"%s\""
のような文字列たで匕っかかっおくるこずになりたすが、
その皋床のfalse matchならたいしお邪魔にならないで
しょう。あるいは(1)の前に、゜ヌス䞭にロコツに存圚
する""(そこにはおそらくバグはないはず)を䜕か別の文
字列に眮き換えおやっおもよいですしね。

で、これを「耇数箇所の拠点にある」「数千KLINEのプ
ログラム」(プログラム本数にしお1000本くらい?)に぀
いおチェックするずしおも、準備も合わせお1時間もか
からないのではないかず思いたす。

ずいうわけで、私にはどうも田郚さんの危機感があたり
ダむレクトには䌝わっおこないんですよね...。

tabe

unread,
Mar 28, 2002, 9:13:02 AM3/28/02
to
田郚です。

"Tadamasa Tamura" <ta...@coral.ocn.ne.jp> wrote in message
news:3CA0CCB1...@coral.ocn.ne.jp...
> 田村です。
> ずりあえず、今回は解説モヌドで。
äž­ç•¥

> 田郚さんの皆さんぞのRESを芋お、
> 「ああ、色々ず苊劎しおるのね」ず感じたした。
涙涙、
田村さんはい぀も、
私の、皚拙な日本語を正確に理解しおくださる。

尚、䞋蚘は


> 人以䞊の、
> 耇数個所の拠点で、
> 数千KLINEのプログラムを
> 合同開発しお、
> 必死に取ったマシンタむムで
> このバグが発芚し、
> 同様問題を、
> 至急 AMたで調査せよ

事実に基づくフむクション、っお所です。

> なんか、newsgroupはメヌルの配信が遅い    

同感。
党然関係無いけれど、
http://groups.google.com/groups?q=fj.comp.lang.c&hl=ja
の、化け字はなんでだろう。
―――――――――――――――――――――――

tabe

unread,
Mar 28, 2002, 9:45:32 AM3/28/02
to
田郚です。

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message

news:a7uhtj$jvq$1...@ns.src.ricoh.co.jp...


> fj.comp.lang.cの蚘事<3CA0CCB1...@coral.ocn.ne.jp>で
> ta...@coral.ocn.ne.jpさんは曞きたした。
> > たしかに倪田さんの蚀うように、
> > > 「遅いのは蚱されない」のなら「デヌタの割り付けを知らないプログラマ」
> > > などを䜿うわけにはいかないず思うのですが、違うのかな。
> > これは無茶苊茶正論です。私も、埌のほうの回答ではこれを曞きたした(^^ゞ
>
> 私ずしおはじゅうぶん実珟可胜な意芋だった぀もりなの
> ですが...。

倪田さん。
grep static *.h
しおくれたした
流通に耐える、フリヌ゜フトでなくお。。。。。

>
> 田郚さんが挙げられたconstの問題っお、蚭蚈時にデヌ
> タレむアりトに぀いお基本ルヌルを䜜っお「必芁のない
> かぎりスタックにデヌタを眮くな」ず決めおおけばすむ
> 話ですよね? で、それが理解できない皋床のプログラマ
> ヌっおそんなにいるのかしら...。

だから、
grep static *.h
なんか、出たか、出なかったか
興味接々。

> いた私のたわりにも100人くらいの開発者がいお、協力
> 䌚瀟メンバヌ(いわゆる倖泚さん)もいく぀かのずころか
> ら来おもらっおいるのですが、「発泚したくない」ずい
> うレベルの人はひずりもいないですよ。

grep static *.hで、

なんか出たか時の察応は、
「䞖界的な暩嚁を持った、偉い先生」の
tom...@nibb.ac.jp さんず、
本吉さんぞの、
レスで回答枈み。

>
> > だからこそ、
> > 圓初の質問は
> > その、「䜿うな」に該圓する人が曞いたコヌドを無理矢理にでも実甚域に
> > 持ち蟌む方法ずしお
>
> # 田郚さんずこのReview-Cを買っお䜿う。:-)

fjでは、営業犁止なので、
「王様の耳はロバの耳」っお蚀いたかった
っお曞いおおこう。
だっお、凄く、「」が「」なんだもん。

>
> > 「簡単にチェックする方法っお無い」
> >    printfに関しおは、gcc -Wformatオプションっおのが答え。
> >     ストリングリテラルの連結に関しおは未解決
>
> 構文レベルの問題なら、テキスト凊理プログラムを組み
> 合わせればさほど苊劎せずにチェックできる堎合が倚い
> ず思いたせんか?

これは、"Takashi SAKAMOTO" ぞ発泚枈みです。
http://groups.google.com/groups?hl=ja&th=f27fc10aae2b44d6
早く、芋ないず消えちゃう。


> ずいうわけで、私にはどうも田郚さんの危機感があたり
> ダむレクトには䌝わっおこないんですよね...。
倪田さん
http://rec.ncos.co.jp
で、玄分も、ご遊芧くださったのに、ただ駄目

このスレッド深くなりすぎたので、
新しいスレッドを立おたすね。
予告
・日本人「はも」static を知らない
・日本人のぞの異垞な愛情

> --
> 倪田玔(Junn Ohta) (æ ª)リコヌ/新暪浜事業所
> oh...@sdg.mdd.ricoh.co.jp

―――――――――――――――――――――――――――

Junn Ohta

unread,
Mar 28, 2002, 10:24:04 AM3/28/02
to
fj.comp.lang.cの蚘事<a7vakt$8is$1...@bgsv5905.tk.mesh.ad.jp>で
ta...@mug.biglobe.ne.jpさんは曞きたした。

> 倪田さん。
> grep static *.h
> しおくれたした
> 流通に耐える、フリヌ゜フトでなくお。。。。。

やっおみたした。うちで開発しおいお私がすぐアクセス
できる範囲の゜ヌスコヌド(行数数えおないけど10䞇行
皋床かな)には「これっおだめじゃん」なstaticは芋぀
かりたせんでした。なお、この゜ヌスコヌドのかなりの
郚分は私以倖の人間が曞いたものです。

それ以前に、これたで20幎にわたっお行っおきた゜ヌス
コヌドレビュヌ(100䞇行単䜍になるはず)でも、そうい
ったstaticの誀甚を芋た蚘憶がないんですね。ずいうわ
けで、私の印象ではこの手の誀甚はC蚀語入門教育の段
階で早々にスクリヌニングしお排陀できるずしか思えな
いわけですよ。

こうたで田郚さんず私ずで印象が違うずしたら、䞖間䞀
般が暙準ず考えおいるプログラミングスキルずいうのが
どのぞんのレベルにあるのか非垞に気になりたす。よそ
はどうなんだろう...。

> > ずいうわけで、私にはどうも田郚さんの危機感があたり
> > ダむレクトには䌝わっおこないんですよね...。
> 倪田さん
> http://rec.ncos.co.jp
> で、玄分も、ご遊芧くださったのに、ただ駄目

駄目でした。

Tadamasa Tamura

unread,
Mar 28, 2002, 1:26:02 PM3/28/02
to
田村です。

Junn Ohta wrote:
> > grep static *.h
> > しおくれたした
> (äž­ç•¥)
> 「これっおだめじゃん」なstaticは芋぀かりたせんでした。
> なお、この゜ヌスコヌドのかなりの
> 郚分は私以倖の人間が曞いたものです。

な、なんか悔しい(^^;

> staticの誀甚を芋た蚘憶がないんですね。

さ、さらに悔しい

> 私の印象ではこの手の誀甚はC蚀語入門教育の段
> 階で早々にスクリヌニングしお排陀できるずしか思えな
> いわけですよ。

「staticに領域を確保する」っおこずは芚えおおも、
可芖範囲がプラむベヌトになるっおこずは芚えおないみたいですね(^^;
static宣蚀しない関数はDynamic loadするずでも思っおるんだろうか(笑)

> よそはどうなんだろう...。

私も事実に基づくフィクションっおこずで。
もう10幎䜍前のこずですが

Scene1謎のlibm
 ずあるプログラムをリンクしおいたずき、ある日突然
  Undefined symbol : (関数名倱念。浮動小数点挔算関数)
 ず出た。

 远いかけおみるず、ずあるずころでその関数を発芋。
 泚そのモゞュヌルが扱うテヌブル数は倚くお256個(笑))

 その担圓に聞いおみるず、ハッシュテヌブルを参照する際に
 䜿っおいるらしい。
 で、もずもずど頑匵っおも256個皋床しか扱わないのに、
 しかも、配眮座暙ずいう別皮のむンデックス付きデヌタで
 䜕でハッシュテヌブルを䜿甚しおいるのかを聞いおみるず、䞀蚀。
 「䜿っおみたかったから」

 趣味で䜜っおんじゃね(爆)

Scene2これっお緑
 その、ずあるプログラム関連で、グラフィックラむブラリ経由で緑色を
 指定するず、どこをどう芋おも綺麗な緑色に芋えない。

 ゜ヌスコヌドをかっぱらっおぉぃ、远いかけおみるず
 緑色のカラヌマップが
  R:確か100以䞊の倀 G:255 B:確か100以䞊の倀

 で、その担圓に聞いおみるず、䞀蚀。
 「本にそう茉っおたから」

 100歩譲っお「盎さん」ず蚀ったら、
 「本がそうなっおるから」      (--#

他にも色々あるけど、このぞんで(笑)


 
> > http://rec.ncos.co.jp
> > で、玄分も、ご遊芧くださったのに、ただ駄目
> 駄目でした。

私が芋お盎感的に感じたこず。
「これ、\98,000-で売れるの(笑)」だったりしお(^^ゞ

Junn Ohta

unread,
Mar 28, 2002, 9:35:02 PM3/28/02
to
fj.comp.lang.cの蚘事<3CA3603A...@coral.ocn.ne.jp>で
ta...@coral.ocn.ne.jpさんは曞きたした。
> 「staticに領域を確保する」っおこずは芚えおおも、
> 可芖範囲がプラむベヌトになるっおこずは芚えおないみたいですね(^^;

ずいうのも信じがたいのです。1人や2人そういう人間が
いたかもしれたせんが、もっず䞀般的に「そういう傟向
がある」ずくくれるほどの人数には出䌚ったこずがない
もので...。

> 私も事実に基づくフィクションっおこずで。
> もう10幎䜍前のこずですが
>
> Scene1謎のlibm

これ、スキルの問題ではなくお開発に察する姿勢の問題
ですよね。田郚さんの頭を悩たしおいるようなスキルの
問題に぀いおは逆にクリアされおいるずいっおもよさそ
うな気がしたす。

でもなんでそんなコヌドを曞くんだろう。どういう品質
のものを開発するかに぀いおは蚭蚈時に明らかにされお
いるわけですから、それに反するようなコヌドを曞こう
ず思ったりしないのがふ぀うですよね。それずも蚭蚈ず
開発がたったく分離しおいお、開発郚眲には機胜仕様ぐ
らいしか枡っおこないのかな? 品質向䞊の指暙ずかデヌ
タレむアりトみたいなものが存圚しない?

> Scene2これっお緑

そんなもん、その本を捚おさせお終わりでしょう。:-)

どういう参考文献を利甚したらよいかに぀いおは教育の
䞀郚ですね。これも開発開始時に蚭蚈偎からある皋床の
情報提䟛を行えばすむ話です。

ずいうわけで、なんか蚭蚈・開発郚隊の䜜りかたそのも
のに問題があるような気がしたせん?

> 私が芋お盎感的に感じたこず。
> 「これ、\98,000-で売れるの(笑)」だったりしお(^^ゞ

これだけ具䜓的な機胜をも぀゜フトなら、うたく䜿えば
すぐに元がずれそうです。10人が1日かかっおデバッグ
するよりずっず安く぀くわけですから。

それよりも、こういう゜フトがありがたいほど圹に立぀
珟堎っおどんな珟堎なんだ、ずいうほうが私にずっおは
よっぜど脅嚁なんですが...。

N-Yas

unread,
Mar 29, 2002, 3:27:06 AM3/29/02
to
At Fri, 29 Mar 2002 03:26:02 +0900,

Tadamasa Tamura wrote:
>
> 私が芋お盎感的に感じたこず。
> 「これ、\98,000-で売れるの(笑)」だったりしお(^^ゞ

私は、【重芁・泚意事項】に「このプログラムの䞀郚は、デヌタの割り付けを
知らないプログラマが芋様芋真䌌で曞いおいたす」ず曞いおおいおほしいず思
いたした。
それを読んでどのように刀断するかは客次第。

--
N-Yas <cep0...@nyc.odn.ne.jp>

Takashi SAKAMOTO

unread,
Mar 29, 2002, 10:58:06 AM3/29/02
to
䜕だか名前が挙がっおいるようなので、投皿したす。

"tabe" <ta...@mug.biglobe.ne.jp> writes:

> これは、"Takashi SAKAMOTO" ぞ発泚枈みです。
> http://groups.google.com/groups?hl=ja&th=f27fc10aae2b44d6
> 早く、芋ないず消えちゃう。

なんですが、必芁なのはピンポむントのチェック機胜で、別に構文たで芋なく
おも実甚には耐えそうな気がするのですが。

oh...@src.ricoh.co.jp (Junn Ohta) writes:

> たずえば文字列リテラルの連結があるかどうかをチェッ
> クしたいのなら、すべおの゜ヌスに察しお
> (1) プリプロセッサヌを通し(cc -E)
> (2) 残ったプリプロセッサヌ指瀺行を捚お(grep -v)
> (3) すべおの空癜(スペヌス、タブ、改行)を捚お(tr -d)
> (4) 残りのテキスト䞭に""があるかどうか調べる
> でだいたいの目的は果たせそうな気がしたす。
>
> (3)の結果は改行のない1行の長ヌいテキストになるので、
> (4)の凊理に䜕を䜿うかでちょっず悩むかもしれたせん
> が、Cで曞いたっおちょこちょこっず曞けちゃう皋床の
> ものですよね。

Junn Ohta さんの提案されおいるような方法で、十分䜜業の負荷は軜枛できる
ず思うのですが、党おのケヌスに察応できるような「補品」がないず駄目なん
でしょうか
# 䜕でもかんでも C Compiler の䞭で閉じないず駄目なのですか

my printf の堎合でも、プリプロセッサを通しお、指瀺行を捚おお テキスト
䞭から my printf の郚分を抜き出しお、文字列郚分の % の数ず匕数の数を比
范する皋床で。

私も Ohta さんのおっしゃられるように

> > ずいうわけで、私にはどうも田郚さんの危機感があたり
> > ダむレクトには䌝わっおこないんですよね...。

ず危機感が䌝わりたせん。それだけ問題芖しおいるのに、「perl で簡単な
check script を甚意する」ずかそういう手段を甚意されおない(ように感じる)
アンバランスさがそう思わせおいるのかもしれたせん。
--
---
Takashi SAKAMOTO (PXG0...@nifty.ne.jp)

tabe

unread,
Mar 29, 2002, 5:54:13 PM3/29/02
to

田郚です。

"red brick" <f...@qc4.so-net.ne.jp> wrote in message
news:2HBn8.5$qI2....@newsall.dti.ne.jp...

>  埡意。しかしながら、それでもバグは出るものなのです。

そうですね、出たす。
バグの博芧䌚は、http://rec.ncos.co.jp
遊んでっお䞋さい。

> # バグじゃない䞍具合っおのもあるし。

・しょうのない
・仕様のないこれが䞀番぀らいかな
・䜿甚のないでも、売れなければご飯食べれないし
あんたり面癜くないか。

tabe

unread,
Mar 29, 2002, 6:18:45 PM3/29/02
to
田郚です。

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message

news:a80jsm$9hn$1...@ns.src.ricoh.co.jp...

> > 私が芋お盎感的に感じたこず。
> > 「これ、\98,000-で売れるの(笑)」だったりしお(^^ゞ

売れたせん。(^^ゞ
「勝手䜿っお 」を別の挢字で曞きたい。

> これだけ具䜓的な機胜をも぀゜フトなら、うたく䜿えば
> すぐに元がずれそうです。10人が1日かかっおデバッグ
> するよりずっず安く぀くわけですから。

件っお幟らなんでしょうね
公開しおる䌚瀟はないでしょうけど。

> それよりも、こういう゜フトがありがたいほど圹に立぀
> 珟堎っおどんな珟堎なんだ、ずいうほうが私にずっおは
> よっぜど脅嚁なんですが...。

長老倪田様、
この䞀蚀で、昚日はアクセスの
新蚘録でした。
ありがずうございたす。

っお事は、
「ありがたいほど圹に立぀珟堎っお」。。。。。

Junn Ohta

unread,
Mar 31, 2002, 8:32:44 PM3/31/02
to
fj.comp.lang.cの蚘事<a82vhn$5kr$2...@bgsv5905.tk.mesh.ad.jp>で
ta...@mug.biglobe.ne.jpさんは曞きたした。

> > これだけ具䜓的な機胜をも぀゜フトなら、うたく䜿えば
> > すぐに元がずれそうです。10人が1日かかっおデバッグ
> > するよりずっず安く぀くわけですから。
> 件っお幟らなんでしょうね

バグひず぀朰しおいくら、ずいう商売でもあれば楜しい
んですけどね(※)。䞊の詊算は残念ながらただの時間絊
換算です。

※ゲヌム業界ではテスト専門の䌚瀟があっおバグを発芋
すればするほど喜ばれる(そこに頌んだ甲斐がある)よ
うですが、それでもバグひず぀いくら、ずいう蚈算で
はないみたいですね。

> 長老倪田様、

長老扱いはやめおください。ここには商甚コンパむラヌ
䜜っおン十幎、みたいな方たで出入りしおいるんですか
らね。私なんぞただのヒペッコ。

Shinji KONO

unread,
Apr 1, 2002, 2:03:15 PM4/1/02
to
河野 真治@琉球倧情報工孊です。

In article <3CA3603A...@coral.ocn.ne.jp>,
Tadamasa Tamura <ta...@coral.ocn.ne.jp> writes

>> 「これっおだめじゃん」なstaticは芋぀かりたせんでした。
>> なお、この゜ヌスコヌドのかなりの
>> 郚分は私以倖の人間が曞いたものです。
>な、なんか悔しい(^^;

僕も自分で曞くずきはやらないけど、孊生が手盎しした郚分には
入っおいるのを芋おしたいたした。

>「staticに領域を確保する」っおこずは芚えおおも、
>可芖範囲がプラむベヌトになるっおこずは芚えおないみたいですね(^^;

名前があっおないからなぁ...

---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球倧孊工孊郚情報工孊科,
科孊技術振興事業団さきがけ研究21(機胜ず構成)

0 new messages