マルチバイト文字とワイド文字Ⅲ

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

マルチバイト文字とワイド文字Ⅲ

投稿記事 by MoNoQLoREATOR » 12年前

前回の日記に返信してくださった皆様ありがとうございました。
とりあえず現在の私の解釈はこうなりました。

文字集合…とりあえず「扱える文字はこれだよ!」という文字達
文字符号化形式…どの文字にどんな数値を割り当てるのかの定義
文字符号化方式…文字に割り当てた数値のビット数が8の倍数になるように再定義したもの
文字コード…文字符号化方式によって定義された文字達の内の任意の一文字に割り当てられた数値


なんだかタイトルがあまり関係なくなって来ている気がしますが…^^;

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: マルチバイト文字とワイド文字Ⅲ

投稿記事 by MoNoQLoREATOR » 12年前

そういえば、全く別の話なのですが C言語のmain関数の戻値は必ずintでなければならないという決まりがある と以前どこかで耳にした気がするのですが本当ですか?
それはC言語としての規格なのでしょうか?C++としての規格なのでしょうか?

ISLe
記事: 2650
登録日時: 14年前

Re: マルチバイト文字とワイド文字Ⅲ

投稿記事 by ISLe » 12年前

C言語でもC++でも規格で定められるmain関数は
int main(void)
int main(int argc, char *argv[])
と同等であるか、『それ以外』です。

戻り値がintでないなら、関数名がmainでなくてもかまわないのです。
main関数から開始されるというなら戻り値はintでなければ矛盾します。

YuO
記事: 947
登録日時: 14年前

Re: マルチバイト文字とワイド文字Ⅲ

投稿記事 by YuO » 12年前

とりあえず,フリースタンディング環境に関してはプログラムのエントリポイントすら処理系定義なのでホスト環境について。
関数名がmainであることは確定として,その上で
  • JIS X 3010-1993 (=ISO/IEC 9899-1990)
    • CODE:

      int main(void) {/*...*/}
    • CODE:

      int main(int argc, char * argv[]) {/*...*/}
    のみが許される
  • ISO/IEC 9899:1999
    • CODE:

      int main(void) {/*...*/}
    • CODE:

      int main(int argc, char * argv[]) {/*...*/}
    • in some other implementation-defined manner
    が許される。implementation-definedなので,文書化されている必要がある。
  • ISO/IEC 14882:1998, ISO/IEC 14882:2011
    • CODE:

      int main() { /*...*/ }
    • CODE:

      int main(int argc, char* argv[]) { /*...*/ }
    • its (=the main function's) type is implementation-defined
    が許される。implementation-definedなので,文書化されている必要がある。(最後の列挙中の括弧はJIS X 3014:2004を参考にした記述者註)
となっています。現在はimplementation-definedなmainが許されますが,過去はISO規格上許されない例がありました。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: マルチバイト文字とワイド文字Ⅲ

投稿記事 by MoNoQLoREATOR » 12年前

ありがとうございます。よくわかりました。

あれからいろいろ調べてみましたが、私の予想通りコンパイラが自動的に戻値の型をintにしていたりするそうです。
それと、家電機器等の組み込みのプログラムなら、 void main(void) と書いて、わざと値を返さなかったりするそうですね。