C言語の引数

RL78
CS+ forCC
でソフトを作っています。
例えば、関数 void xxfunc(uint32_t, uint32_t) があったとします。

メインで、
  uint16_t  aa;
  uint16_t  bb;
 
  aa = 1000;
  bb = 6000;
 xxfunc(aa, bb);
でコンパイルします。

引数の型が合わないのでワーニングが出ると思いましたが出ませんでいた。
暗黙の型変換だと思います。
このような場合でもワーニングを出すことはできますか?

Parents
  • > 例えば、関数 void xxfunc(uint32_t, uint32_t) があったとします。
    >
    > メインで、
    > uint16_t aa;
    > uint16_t bb;
    >
    > aa = 1000;
    > bb = 6000;
    > xxfunc(aa, bb);
    > でコンパイルします。
    >
    > 引数の型が合わないのでワーニングが出ると思いましたが出ませんでいた。
    > 暗黙の型変換だと思います。

    警告が出る出ないはさておいて、この場合の暗黙の型変換に何か問題がありますか?
    暗黙の型変換すべてをなくしたいということであれば上記のコードは aa や bb の初期化も

    aa = (uint16_t)1000U;
    bb = (uint16_t)6000U;

    等とするべきと思いますが現実的とも思いません。
  • 要は、関数の引数がuit32_tなのでuint16_tのaaを代入する場合、
    「型があってませんよ」という警告を出してほしいという意味です。
    例では、そのまま代入しても害はないことは分かっています。
  • 無意味なことを要望されてるということですか
  • > 要は、関数の引数がuit32_tなのでuint16_tのaaを代入する場合、
    > 「型があってませんよ」という警告を出してほしいという意味です。

    C とは異なり引数型の違いをエラーとしてくれる言語は存在するのでそちらの選択を検討されるのもひとつの手ではないかと思います。

    Swift Rust Ada

Reply
  • > 要は、関数の引数がuit32_tなのでuint16_tのaaを代入する場合、
    > 「型があってませんよ」という警告を出してほしいという意味です。

    C とは異なり引数型の違いをエラーとしてくれる言語は存在するのでそちらの選択を検討されるのもひとつの手ではないかと思います。

    Swift Rust Ada

Children
  • 本末転倒な感じがします。
    ユルイのがCのメリットです。コンパイラーは適当に解釈してとにかく実行コードを作る、そして、それぞれのルールで人や静的解析ツールによりチェックする、が基本的な考えと思います。私のようなミニコンやマッキントッシュからスタートしたPASCALを好むプログラマはCユーザーから「ガチガチ」とバカにしたされたものです。
    現状でPASCALは見ないですが、まだまだ、Adaなどは多く使用されているようです。Fujitaさんが示されてますが、マイコンの選択も含めて言語も再検討するのが良いように思えます。RXやRL78に関してはチェックしてませんがSHマイコン向けのAdaはGHSから販売されてました。