あるオープンソース(C++)をいじっているのですが、それはMac OS X向けは
Project Builderで、Windows向けはVisual C++でコンパイルさせる前提です。
無料で入手できるソースなのにWindows向けが有料の開発環境では不公平と
思いましたのでBorland C++の無料提供版で試したところ、うまく行きません
でした。問題箇所を追いつめたところ、
unsigned long chunk = '0MFS';
というようにsingle quoteで4バイトの文字列を囲んでいる箇所とわかりました。
chunkに入る値がProject BuilderとVisual C++では0x304d4653に対し、
Borland C++では0x53464d30であり、ちょうどエンディアンがひっくり返った
ような結果となりました。そこまではいいとして、疑問に思ったのは
single quoteで4バイトの文字列を定数にするというのは標準規格になかった
ように思うのですが、これはどうなのでしょうか?ひょっとして自分が知らない
間に規格になったのか、あるいは将来、規格になるものなのでしょうか。
--
D.Miyasaka <mailto:miya...@anet.ne.jp>
17 Oct 2003 17:49:17 GMT に
D.Miyasaka <miya...@anet.ne.jp> さんは書きました:
> unsigned long chunk = '0MFS';
>
> というようにsingle quoteで4バイトの文字列を囲んでいる箇所とわかりました。
> chunkに入る値がProject BuilderとVisual C++では0x304d4653に対し、
> Borland C++では0x53464d30であり、ちょうどエンディアンがひっくり返った
> ような結果となりました。そこまではいいとして、疑問に思ったのは
> single quoteで4バイトの文字列を定数にするというのは標準規格になかった
> ように思うのですが、これはどうなのでしょうか?ひょっとして自分が知らない
> 間に規格になったのか、あるいは将来、規格になるものなのでしょうか。
手元にある ISO/IEC 14882-1998 の 2.13.2 Character literals によれば,
| A character literal is one or more characters enclosed in single quotes,
| (中略). An ordinary character literal that contains more than one
| c-char is a multicharacter literal. A multicharacter literal has type
| int and implementation-defined value.
ということなので,C++ では標準規格に入っているらしいです。
--
Masahiro KONISHI / mkon...@sea.plala.or.jp
お答えいただき、ありがとうございます。
>手元にある ISO/IEC 14882-1998 の 2.13.2 Character literals によれば,
>
>| A character literal is one or more characters enclosed in single quotes,
>| (中略). An ordinary character literal that contains more than one
>| c-char is a multicharacter literal. A multicharacter literal has type
>| int and implementation-defined value.
>
>ということなので,C++ では標準規格に入っているらしいです。
“multicharacter literal”と言うんですね。用語自体がわからなかったので
どう検索してよいか悩んだのでおお助かりです。int型として解釈されること。
implementation-defined valueなので、コンパイラによって解釈が変わる
可能性があることがわかって納得です。
ちなみに“multicharacter literal C++”でGoogleで検索したら、いろいろと
見つかりました。ISO/IEC 14882-1998も見つかりましたし、面白いと言ったら
当事者に怒られそうですが、
http://gcc.gnu.org/ml/gcc-help/2003-03/msg00253.html
で、これは標準C++じゃないよ、というメールに対して反論があったりとか。
# しかしC++はどんどん自分が知らない仕様を取り込んで
# この先どうなるんでしょうね? もうついていけません。
--
D.Miyasaka <mailto:miya...@anet.ne.jp>
それ知ったとき私もびっくりっしました。
C言語の本や仕様書の「文字定数」のところでも調べると載ってますよ。
---
藤井宏憲
D.Miyasaka wrote:
> C++の問題とわかりましたのでFolowup-To:fj.comp.lang.c++
> とさせていただきます。
Cがすでに持っていた機能です。
ANSI以前のCにも有ったはず。
"D.Miyasaka" <miya...@anet.ne.jp> wrote in message
news:20031018133...@news.cis.dfn.de...
> >手元にある ISO/IEC 14882-1998 の 2.13.2 Character literals によれば,
> >
> >| A character literal is one or more characters enclosed in single
quotes,
> >| (中略). An ordinary character literal that contains more than one
> >| c-char is a multicharacter literal. A multicharacter literal has type
> >| int and implementation-defined value.
> >
> >ということなので,C++ では標準規格に入っているらしいです。
>
> “multicharacter literal”と言うんですね。用語自体がわからなかったので
> どう検索してよいか悩んだのでおお助かりです。int型として解釈されること。
> implementation-defined valueなので、コンパイラによって解釈が変わる
> 可能性があることがわかって納得です。
ARMの第1版(足立高徳、小山裕司訳 1992年)のP10の2.5リテラルの
2.5.2文字定数の項目に以下のような文があります。
文字定数は、’x’のように、一重引用符で囲まれた1つ以上の文字である。単一文
字の文字定数(単一文字定数)は型charを持つ。(中略)多文字定数は型int
を持つ。多文字定数の値は、実装依存である。
上のISO/IEC 14882-1998 の 2.13.2 Character literalsの内容とほぼ同じような記
述のように思います。ということは、最近標準規格になったのではなく、当初(?)
から規定されていたのではないでしょうか。
--
******************************
keizi kounoike
******************************
"SAITOH akinori" <sai...@ist.osaka-u.ac.jp> wrote in message news:bmu9av$tq9$1...@newsserv.ics.es.osaka-u.ac.jp...
> D.Miyasaka wrote:
>
> > C++の問題とわかりましたのでFolowup-To:fj.comp.lang.c++
> > とさせていただきます。
>
> Cがすでに持っていた機能です。
> ANSI以前のCにも有ったはず。
と言うよりANSI以前に“は”あった、と言った方が正しいかもしれません。
大昔に私が使ったLattice C Ver. 4(MS-DOS版)にはこの機能がありましたが、
その後扱ったHP-UX (Ver.は忘れた(^^;)のC にはありませんでした。
ちなみにこの機能、3文字時が厄介でした。3&4文字の場合32bit 整数にな
るのですが、3文字の場合1文字分の8bitが不定になったような記憶があります。
# strcmp()ではなく<>= で比較できるので楽でしたが。
--
成岡@DTI(yn...@jade.dti.ne.jp)
> ?????
>
> "D.Miyasaka" <miya...@anet.ne.jp> wrote in message
> news:20031018133...@news.cis.dfn.de...
>
>> >????? ISO/IEC 14882-1998 ? 2.13.2 Character literals ?????
>> >
>> >| A character literal is one or more characters enclosed in single
> quotes,
>> >| ????. An ordinary character literal that contains more than one
>> >| c-char is a multicharacter literal. A multicharacter literal has type
>> >| int and implementation-defined value.
>> >
>> >?????????C++ ??????????????????
>>
>> ?multicharacter literal???????????????????????
>> ??????????????????????int????????????
>> implementation-defined value???????????????????
>> ??????????????????
>
> ??????????????????????????????????????
> ??????????????????????????
>
> ??????????????????????????????????????
> ??????????????????????????????????????
> ?????????????????????
>
> ??ISO/IEC 14882-1998 ? 2.13.2 Character literals????????????
> ??????????????????????????????????????
> ????????????????????
>
Доброе время суток!
Статья интересна, но не познавательна.
С Уважением, Don Carlos.
--
------------------------------------------------------------------
`````````````````````````Don Carlos`````````````````````````
------------------------------------------------------------------
えっ?。できれば、日本語でお願いします。何を言っているのかさっぱりわかりませ
ん。
(このアホとでも書かれているのだろうか。)
To Mr Don Carlos
> "Don Carlos" <vla...@rol.ru> wrote in message
> news:bo4qof$c5q$1...@news.rol.ru...
>
>>koun...@mbh.nifty.com wrote:
>>
>>>"D.Miyasaka" <miya...@anet.ne.jp> wrote in message
>>>news:20031018133...@news.cis.dfn.de...
>>
>>Доброе время суток!
>>Статья интересна, но не познавательна.
>>
>>С Уважением, Don Carlos.
>
>
> えっ?。できれば、日本語でお願いします。何を言っているのかさっぱりわかりませ
> ん。
http://worldlingo.com/products_services/worldlingo_translator.html
にて翻訳してみたところ
-------------------------------
よい時刻!
記事は興味深いが、認識でない。
点と、ドンCarlos 。
-------------------------------
だそうで。
つまり、読めないよ~という悲鳴のようです……
----- Takeshi SHIGIHARA
cyg...@tka.att.ne.jp
cyg...@po.jah.ne.jp -----