免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2224 | 回复: 15
打印 上一主题 下一主题

谁能去掉这个警告信息. 'TEXT'的警告 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-15 18:26 |只看该作者 |倒序浏览

  1. int test_func( unsigned long type )
  2. {
  3.   ...
  4.   ...
  5.   return 0;
  6. }

  7. int call_func( void )
  8. {
  9.   ...
  10.   test_func( 'TEXT' );  /* 这里会产生一个警告 */
  11.   ...
  12.   ...
  13.   return 0;
  14. }

  15. 谁能解决这个问题?
复制代码

论坛徽章:
0
2 [报告]
发表于 2003-05-15 18:35 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

'TEXT' ->; unsigned long type ??

论坛徽章:
0
3 [报告]
发表于 2003-05-15 18:39 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

由于函数本身需要的是一个 unsigned long 的数据类型.
'TEXT'引出 [Warning] multi-character character constant 这个警告
"TEXT" 由于字符串 不符合我的要求.
我希望得到的是 有'TEXT'这4个ascii组成一个unsigned long 类型的数.


版主如果你要删除我的帖子,请告诉我为什么. 如果由于题目不清楚,你说
我这个问题如何起个题目? 告诉我.

论坛徽章:
0
4 [报告]
发表于 2003-05-15 18:51 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

'TEXT' ->; 0x????

论坛徽章:
0
5 [报告]
发表于 2003-05-15 19:45 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

要自己转换吧

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-05-15 19:49 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

如果sizeof( unsigned long) = 4*sizeof(char)

那么以次将TEXT这四个字符写入unsigned long的每个字节空间。

论坛徽章:
0
7 [报告]
发表于 2003-05-15 20:35 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

'a'
用单引号只能定义一个char
不能定义4个char

这是基本C定义

论坛徽章:
0
8 [报告]
发表于 2003-05-15 20:37 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

但可以强制类型转换
char a[]="abcd";

test(*(unsigned long *)a)

像楼主那样使用值进去的不会有TEXT这四个字

论坛徽章:
0
9 [报告]
发表于 2003-05-15 21:24 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

她是可以工作的。不过要看你的编译器。如果是16bit系统的则'  '中的字符只能是2个字符。如果是32bit '   '中的字符就是可以4个字符了。你可以在bc31和dev-C++种尝试一下。在bc31中'TX'没有任何警告信息。但是在dev-C++中会有警告信息。下面是我的测试程序和结果。
  1. 源程序
  2. #include <stdio.h>;

  3. unsigned long test_function( unsigned long  type )
  4. {
  5.    printf("test_function()\n");
  6.    printf("type(hex) = %x \n", type );
  7.    printf("type(char) = %c %c %c %c\n", (type>;>;24)&0xff, (type>;>;16)&0xff, (type>;>;8)&0xff, (type)&0xff );

  8.    return type;
  9. }

  10. int main( int argn, char *argv[] )
  11. {
  12.         unsigned long type;

  13.         printf("before\n");
  14.         type = 'TEXT';   /* 如果在16bit系统中则只能是 'TE' */
  15.         printf("type(hex) = %x \n", type );
  16.         printf("type(char) = %c %c %c %c\n", (char)(type>;>;24)&0xff, (char)(type>;>;16)&0xff, (char)(type>;>;8)&0xff, (char)(type)&0xff );

  17.         type = 0;
  18.         type = test_function( 'TEXT' );

  19.         printf("after\n");
  20.         printf("type(hex) = %x \n", type );
  21.         printf("type(char) = %c %c %c %c\n", (type>;>;24)&0xff, (type>;>;16)&0xff, (type>;>;8)&0xff, (type)&0xff );

  22.         return;
  23. }

  24. 执行结果
  25. before
  26. type(hex) = 54455854
  27. type(char) = T E X T
  28. test_function()
  29. type(hex) = 54455854
  30. type(char) = T E X T
  31. after
  32. type(hex) = 54455854
  33. type(char) = T E X T

  34. 在16bit 方式下运行由于printf()中的%c会出现0,达因结果会不完整。

  35. 谁有办法通过变换类型的方式消除那个警告信息。
复制代码

论坛徽章:
0
10 [报告]
发表于 2003-05-15 21:38 |只看该作者

谁能去掉这个警告信息. 'TEXT'的警告

我提出的这个问题主要是解决这种情况。比如你做了个OBJ结构
由这个OBJ需要变换很多的类型的东西。而这些东西又要串在一起。
比如链表,然后根据其中存储的type来选择不同的处理函数。
你可以用编号 来声明,但是不好记忆,用define也不方便增减类型。
用字符串操作复杂,速度慢,而且也不需要这么强大。
最好是能看懂的字符,而比较的方式和数字一样。
其实 0x54455854 就是"TEXT"的对应ASCII码,只是少了后面的0;
而判断的方式用if()就可以了。


  1. typedef struct  obj_head OBJ;
  2. struct obj_head
  3. {
  4.     OBJ    next;
  5.     unsigned long type;
  6. };   
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP