タイトルにある通り、キャストに関する警告が出てくれません。
Bill.SubAlpha(255 / 50);
と、記述して、キャストの警告が出るんだろうなと思いつつ、ビルドしてみたら、警告が出ませんでした。
SubAlphaのプロトタイプ宣言は次のようになってます。
void SubAlpha(const unsigned char _Alpha);
これ、double型から、unsigned char型への変換ですよね?
なぜ、警告がでなかったのでしょうか?
警告レベルを4にしてみて、リビルドしても警告は出ませんでした。
おかしいなと思ったので、
void F(int a);
と宣言し、
F(0.05f);
このようにしたら、「floatからintへの変換です」と出てくれました。
上記のdouble型から、unsigned char型への変換の警告が出ない理由がサッパリ分かりません。
誰か詳しい方回答お願いします。
OS:Windows10
コンパイラ:VisualStudio2010
言語:C++
ライブラリ:DirectX SDK June2010、自作ライブラリ
キャストの警告が出ない
Re: キャストの警告が出ない
これ参考になりますか。
VS2015のcl.exeでの結果です。
警告オプション /W3 を指定すると、unsigned charに格納する箇所で警告が出ます。
指定しないと警告が出ません。
また整数型の除算は商が入るんですね。
計算の結果、型の違いがあっても警告は出ないみたいです。
参考になるかもしれないページ→キャスト演算子
#include <stdio.h>
int main(int , char*[]) {
double x = 0;
x = 1/5;
printf("%lf\n", x); // 整数で除算
x = 1.0/5.0;
printf("%lf\n", x); // 浮動小数で除算
unsigned char c = x;
printf("%d\n", c); // unsigned char
}
C:\Users\guest\Documents>cl /W3 1.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24210 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
1.cpp
1.cpp(11): warning C4244: '初期化中': 'double' から 'unsigned char' への変換です。データが失われる可能性があります。
Microsoft (R) Incremental Linker Version 14.00.24210.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:1.exe
1.obj
C:\Users\guest\Documents>1
0.000000
0.200000
0
C:\Users\guest\Documents>
指定しないと警告が出ません。
また整数型の除算は商が入るんですね。
計算の結果、型の違いがあっても警告は出ないみたいです。
参考になるかもしれないページ→キャスト演算子
written by へにっくす
Re: キャストの警告が出ない
なるほど!わかりました!
1/5は0になってしまうんですね。昔勉強したのに、忘れてました・・・。
こちらのコンパイラで、
unsigned char c = 1/5.0;
unsigned char d = 1/5;
これが、上は警告が出てくれるのに対して、下は警告がでないのを確認できました。
回答ありがとうございました。
1/5は0になってしまうんですね。昔勉強したのに、忘れてました・・・。
こちらのコンパイラで、
unsigned char c = 1/5.0;
unsigned char d = 1/5;
これが、上は警告が出てくれるのに対して、下は警告がでないのを確認できました。
回答ありがとうございました。