URN Logo
UNIX Resources » Linux » China Linux Forum » CPU 与 编译器 » 6 » 一段arm cpu下的表现异常的代码,是否是编译器问题?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
一段arm cpu下的表现异常的代码,是否是编译器问题?
 
 
 
Subject: 一段arm cpu下的表现异常的代码,是否是编译器问题?
Author: menlow    Posted: 2005-10-14 11:34    Length: 905 byte(s)
[Original] [Print] [Top]
如下的一段简单代码:
#include "stdio.h"
main()
{
char left,right1,right2,base,result1,result2,result3;

base = 255;
left = 1;
right1 = (base+2)&0xff;
right2 = (base+2)%256;
result1 = (left == (base+2)&0xff);
result2 = (left == (base+2)%256);
result3 = (left == base+2);
printf("result1 = 0x%x,result2 = 0x%x, result3 = 0x%x ",result1,result2,result3);
return 0;
}
在x86+winxp+vc++6.0上以及x86+rh8.0+gcc3.2上运行,结果都是:
result1 = 0x1,result2 = 0x1, result3 = 0x1
但是在arm9的一个板子上,用arm-elf-gcc2.95.3编译,在uclinux2.4.17下运行,其结果为:
result1 = 0x0,result2 = 0x1, result3 = 0x0
哪位可以解释这个现象?是arm cpu导致该特性还是arm-elf-gcc编译器有问题?
谢谢!
[Original] [Print] [Top]
Subject: Re: 一段arm cpu下的表现异常的代码,是否是编译器问题?
Author: h_falls    Posted: 2005-10-20 10:23    Length: 1,031 byte(s)
[Original] [Print] [Top]
是编译器导致的,不是硬件问题。

但是根本原因有2个:

1. 你的程序写得不好,不规范。
2. ANSIC的语义有二义性:
摘自ISO/IEC 9899:1999
The three types char, signed char, and unsigned char are collectively called
the character types. The implementation shall dene char to have the same range,
representation, and behavior as either signed char or unsigned char.


解决办法:
修改
char left,right1,right2,base,result1,result2,result3;

signed char left,right1,right2,base,result1,result2,result3;


你先在arm/x86下分别执行下这段代码:
include <limits.h>

int main()
{
printf("%d ", CHAR_MIN);
}

然后你就会明白怎么回事了



[Original] [Print] [Top]
Subject: Re: 一段arm cpu下的表现异常的代码,是否是编译器问题?
Author: menlow    Posted: 2005-10-20 16:49    Length: 20 byte(s)
[Original] [Print] [Top]
呵呵谢谢高手指点:)
[Original] [Print] [Top]
« Previous thread
编译gcc-2.95.3使其支持a.out格式
CPU 与 编译器
6
Next thread »
求助:关于BFD版本信息
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:47:22, cost 0.047685861587524 ms.