免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yuxh
打印 上一主题 下一主题

printf为什么会这样? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2004-12-27 20:49 |只看该作者

printf为什么会这样?

[quote]原帖由 "playmud"]就是gcc通过不了,我在上面说了,程序员需要严谨.[/quote 发表:

晕死!!!
要搞清楚什么是警告什么是错误。
严谨是需要的,但是也要灵活,当然灵活不是瞎灵活,保证在正确的范畴内

论坛徽章:
0
52 [报告]
发表于 2004-12-27 20:57 |只看该作者

printf为什么会这样?

原帖由 "playmud" 发表:


不见得是正确的.程序员应该严谨.
而且这种做法是不提倡的,资源的申请和释放应该在同一个层次里面.


思一克说得对。

很多程序都这么干,如 gtk. 更极端的例子,见yuxh 的回帖。

论坛徽章:
0
53 [报告]
发表于 2004-12-27 20:58 |只看该作者

printf为什么会这样?

上面是警告吗?
编译器: Default compiler
执行  g++.exe...
g++.exe "D:\temp\test.cpp" -o "D:\temp\test.exe"    -I"D:\Dev-Cpp\include\c++\3.3.1"  -I"D:\Dev-Cpp\include\c++\3.3.1\mingw32"  -I"D:\Dev-Cpp\include\c++\3.3.1\backward"  -I"D:\Dev-Cpp\lib\gcc-lib\mingw32\3.3.1\include"  -I"D:\Dev-Cpp\include"   -L"D:\Dev-Cpp\lib"
D:/temp/test.cpp: In function `int main()':
D:/temp/test.cpp:6: error: invalid conversion from `void*' to `char*'

执行结束

论坛徽章:
0
54 [报告]
发表于 2004-12-27 20:58 |只看该作者

printf为什么会这样?

[quote]原帖由 "playmud"]就是gcc通过不了,我在上面说了,程序员需要严谨.[/quote 发表:
  1. [twen@Danny test]$ gcc -Wall malloc.c
  2. [twen@Danny test]$ ./a.out
  3. success, no error!
  4. [twen@Danny test]$ cat malloc.c

  5. #include <stdlib.h>;
  6. #include <stdio.h>;

  7. int main()
  8. {
  9. char *str;
  10. str=malloc(100);
  11. printf(" success, no error!\n");
  12. return 0;
  13. }
  14. [twen@Danny test]$


复制代码

论坛徽章:
0
55 [报告]
发表于 2004-12-27 21:05 |只看该作者

printf为什么会这样?

你看看cpp

论坛徽章:
0
56 [报告]
发表于 2004-12-27 21:09 |只看该作者

printf为什么会这样?


  1. char *Func(int n)
  2. {
  3.     static char s[20];

  4.     sprintf(s, "number %d", n);

  5.     return s;
  6. }

  7. main()
  8. {
  9.     printf("%s, %s\n", Func(1), Func(2));
  10. }
复制代码

[root@PPC ftp]# ./a.out
number 2, number 2
[root@PPC ftp]#


  1.         stwu 1,-32(1)
  2.         mflr 0
  3.         stw 29,20(1)
  4.         stw 31,28(1)
  5.         stw 0,36(1)
  6.         mr 31,1
  7.         li 3,1       <== 1
  8.         bl Func      <== Func(1)
  9.         mr 29,3
  10.         li 3,2       <=== 2
  11.         bl Func      <=== Func(2)
  12.         mr 0,3
  13.         lis 9,.LC1@ha
  14.         la 3,.LC1@l(9)
  15.         mr 4,29
  16.         mr 5,0
  17.         crxor 6,6,6
  18.         bl printf
  19.         mr 3,0
复制代码

论坛徽章:
0
57 [报告]
发表于 2004-12-27 21:10 |只看该作者

printf为什么会这样?

原帖由 "twen345" 发表:

C和C++的区别,用gcc可以通过

g++ != gcc

论坛徽章:
0
58 [报告]
发表于 2004-12-27 21:11 |只看该作者

printf为什么会这样?

原帖由 "playmud" 发表:
上面是警告吗?
编译器: Default compiler
执行  g++.exe...
g++.exe "D:\temp\test.cpp" -o "D:\temp\test.exe"    -I"D:\Dev-Cpp\include\c++\3.3.1"  -I"D:\Dev-Cpp\include\c++\3.3.1\mingw32"  -I"D:\Dev-Cpp..........
类型检查错误,c++才会这样

论坛徽章:
0
59 [报告]
发表于 2004-12-27 21:15 |只看该作者

printf为什么会这样?

[quote]原帖由 "yangtou"]嘈图觳榇砦螅琧++才会这样[/quote 发表:

就是这个意思,c++要求void *赋值时必须显式转换

论坛徽章:
0
60 [报告]
发表于 2004-12-27 21:45 |只看该作者

printf为什么会这样?

gcc也一样,呵呵.
主要是cpp对类型检测比c严格.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP