工具/软件:TI C/C++编译器
代码片段:
void test_signed_unsigned_type_mismatch (const double * restrict F32,unsigned int * restrict i16,int num)
{
对于(; num >0; num --)
{
*i16++=__f32toi16r (*F32++);
}
}
使用以下命令编译:
c:\ti/ccsv6/tools/compiler/ti-CGT-2000_LTS/bin/cl2000"<xmt-block0>2000 16.9 -v28 -ml -mt --CLA_support=cla1 --float_support=fpu32 --tmu_support=tvm=tmu0 --vcu_support=vcu2 -o4 --opt_for rag_fundiag_s=fuel_proc -fuel_s_ p_p_lists=t_ip_fuel_fu=t_model=-fu_ip_ip_fuel_intran_f_fuel_model=-f_intran=-fg_ip_model_ip_f_model_ip_f_f_fcpuenci=-fcpuan_f_f_fcpu_f_fcpuenci=-fcpuenci=-f_line_compass_line_listc=-fcpuencu_linu_fcpu_linu_ps=-fcpu_ps=-fcc 16.9
给出错误:
错误#9.9923万:"../f32toi16r.c",第5行:非法使用内在:__f32toi16r.
代码片段:
void test_signed_unsigned_type_mismatch (const double * restrict F32,int * restrict i16,int num)
{
对于(; num >0; num --)
{
*i16++=__f32oui16r (*F32++);
}
}
使用以下命令编译:
c:\ti/ccsv6/tools/compiler/ti-CGT-2000_LTS/bin/cl2000"<xmt-block0>2000 16.9 -v28 -ml -mt --CLA_support=cla1 --float_support=fpu32 --tmu_support=tvm=tmu0 --vcu_support=vcu2 -o4 --opt_for rag_fundiag_s=fuel_proc -fuel_s_ p_p_lists=t_ip_fuel_fu=t_model=-fu_ip_ip_fuel_intran_f_fuel_model=-f_intran=-fg_ip_model_ip_f_model_ip_f_f_fcpuenci=-fcpuan_f_f_fcpu_f_fcpuenci=-fcpuenci=-f_line_compass_line_listc=-fcpuencu_linu_fcpu_linu_ps=-fcpu_ps=-fcc 16.9
给出错误:
错误#9.9923万:"../f32toi16r.c",第5行:非法使用内在:__f32toi16r.
代码片段:
void test_no_sign_mismatch (const double * restrict F32,unsigned int * restrict i16,int num)
{
对于(; num >0; num --)
{
*i16++=__f32oui16r (*F32++);
}
}
和:
void test_no_sign_mismatch (const double * restrict F32,int * restrict i16,int num)
{
对于(; num >0; num --)
{
*i16++=__f32toi16r (*F32++);
}
}
成功编译。
对于符号到符号,结果在C标准中指定为结果模数6.5536万。 对于unsigned to signed,如果number unsigned number在signed范围内,则定义unsigned to signed;如果unsigned number超出整数范围,则定义实现。
为什么返回类型和赋值类型不匹配会导致编译器错误?