当前位置:  技术问答>linux和unix

整数的数据类型问题,我居然也没弄好,大家帮看一下

    来源: 互联网  发布时间:2015-10-06

    本文导语:  环境 Red Hat Linux 9  测试代码:  #include   int test_print(char *str)  {  return(printf("TEST_%sn",str));  }  int main()  {  int (*p)(); /*指向函数的指针*/  printf("Test the code.....n");  p=test_print; /*这句能通过*/  p("OK");  p=printf;...

环境 Red Hat Linux 9 

测试代码: 
#include  

int test_print(char *str) 

return(printf("TEST_%sn",str)); 


int main() 

int (*p)(); /*指向函数的指针*/ 
printf("Test the code.....n"); 
p=test_print; /*这句能通过*/ 
p("OK"); 
p=printf; /*这句出错,cc 或 gcc 都不能通过*/ 
p("OKn"); 
exit(0); 


这段代码在UNIX system V 上通过,但是在Linux上就编译不过 

思路: p是一个指向整数型函数的指针,test_printf() 是用户的整数型函数,printf()是系统的整数型函数。 

当指针指向用户的整数型函数时,正确,而指向系统的整数型函数就不正确呢?要怎么更改? 

谢谢!~~ 


|
#include 

int printf(const char *format, ...);

你定义为int(*p)();这个类型就不对了。改为
int (*p)(const char *, ...);

|
既然楼上 lynux(阿奔)说是:printf的定义是 int printf(const char *),所以会出现这个警告。
那我们可以这样改:
int test_print(const char *str)  //char * str --> const char *str

return(printf("TEST_%sn",str)); 


而你这句:   typeof(printf) *ppp = NULL;倒让人看不懂了

要说出错 p=test_print; 这句也应该报警,而不只是到p=printf;这句才报警吧?

|
可以啊,我也是RH9.0

[root@localhost b]# gcc func_ptr.c -o func_ptr
func_ptr.c: In function `main':
func_ptr.c:14: warning: assignment from incompatible pointer type
[root@localhost b]# ./func_ptr
Test the code.....
TEST_OK
OK
[root@localhost b]#

|
printf的定义是 int printf(const char *),所以会出现这个警告。

#include 

int test_p(char *str)
{
    printf(str);
}

int main()
{
    int (*p)();
    typeof(printf) *ppp = NULL;
    p = test_p;
    p("Test OKn");

    ppp = printf;
    p("OKn");
    p=NULL;
    return 0;
}

试一下这段代码,用gcc -ggdb3 a.c编译后,用gdb调试,就可以看出了。

|
typeof()是gcc的扩展(我也第一次用^_^)
其实我也不知道为什么在p=test_print处没有报警,继续思考中...

|
学习

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Bitsets 成员 to_ulong():返回bitset的整数表示
  • 将一串整数分割成单个整数数组,怎么做较快?
  • c#匹配整数和小数的正则表达式
  • awk的数字计算,能指为long long 64位整数么?
  • sprintf如何格式化64位的无符号整数
  • 如何使程序(字符界面)接受用户输入的一个浮点数,并把他的整数部分和小数部分分别输出。
  • 多精度整数和理性的算术加密库 MIRACL
  • 多精度整数和有理数 MPIR
  • 为什么javascript中某些字符串转换为整数不正确?
  • 如何把一个浮点数分整数和小数显示?
  • 关于linux下的C编程中,整数转换成字符的问题,谢谢各位!
  • 字符串转换为整数
  • 如何在Linux shell下判断一个变量的值是否为整数?
  • 正则文本框只能输入正整数
  • 编写一段B-Shell脚本程序,读入10个整数,打印它们的累加和
  • 谁能帮我写写shell脚本 :从键盘输入三个整数,计算其中的最小值!
  • c++ 一个二进制串转化为整数的解决方法
  • 一个简单的问题:linux下编程怎么把整数转变为字符串?
  • 字符串如何转换为整数,如"12345"(是字符串)转换为12345
  • 编写一段B-Shell脚本程序,读入10个整数,打印它们的累加和 iis7站长之家
  • 字符串到整数


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3