C言語の引数

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

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

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

Parents
  • 整数の上位変換は変換前の値が保証されるため、たぶん警告を出すコンパイラ無いんじゃないでしょうか…

    以下は、適当に見つけたマイクロソフトのコンパイラの例です。

    [標準変換 | Microsoft Docs]()

    gccでも-Wconversionオプションつけると、型変換の警告が出るようになりますが、やはり上位変換については警告は出ませんね…

    $ cat test.c
    #include  <stdint.h>
    #include  <stdio.h>
    
    void xxfunc(uint32_t a, uint32_t b) {
            printf("%d, %d\n", a, b);
    }
    
    
    int main(void) {
            uint16_t aa;
            uint16_t bb;
    
            aa = 1000;
            bb = 6000;
    
            xxfunc(aa, bb);
    
            return 0;
    }
    $ gcc test.c -Wconversion
    $ gcc test.c -Wconversion -Wall 
     
Reply
  • 整数の上位変換は変換前の値が保証されるため、たぶん警告を出すコンパイラ無いんじゃないでしょうか…

    以下は、適当に見つけたマイクロソフトのコンパイラの例です。

    [標準変換 | Microsoft Docs]()

    gccでも-Wconversionオプションつけると、型変換の警告が出るようになりますが、やはり上位変換については警告は出ませんね…

    $ cat test.c
    #include  <stdint.h>
    #include  <stdio.h>
    
    void xxfunc(uint32_t a, uint32_t b) {
            printf("%d, %d\n", a, b);
    }
    
    
    int main(void) {
            uint16_t aa;
            uint16_t bb;
    
            aa = 1000;
            bb = 6000;
    
            xxfunc(aa, bb);
    
            return 0;
    }
    $ gcc test.c -Wconversion
    $ gcc test.c -Wconversion -Wall 
     
Children
No Data