【发布时间】:2014-03-02 12:48:44
【问题描述】:
当我尝试编译这段代码时:
void main()
{
float x;
x=6.5;
printf("Value of x is %f, address of x %ld\n", x, &x);
}
它给了我这个错误:
pruebso.c:在函数“main”中:
pruebaso.c:5:9:警告:内置函数“printf”的隐式声明不兼容[默认启用]
printf("x的值为%f,x的地址%ld\n", x, &x);
^
pruebaso.c:5:9:警告:格式“%ld”需要“long int”类型的参数,但参数 3 的类型为“float *”[-Wformat=]
我在另一个论坛中看到解决方案是先强制转换为 void 指针: http://www.linuxquestions.org/questions/programming-9/beginning-c-programming-how-to-print-memory-locations-printf-conversion-number-927305/
但是做出这样的改变,
printf("Value of x is %f, address of x %ld\n", (double)x, (void *)&x);
现在给我一个警告:
pruebso.c:在函数“main”中:
pruebaso.c:5:9:警告:内置函数“printf”的隐式声明不兼容[默认启用]
printf("x的值为%f,x的地址%ld\n", (double)x, (void *)&x);
^
pruebaso.c:5:9:警告:格式“%ld”需要“long int”类型的参数,但参数 3 的类型为“void *”[-Wformat=]
谁能解释我如何在没有警告的情况下解决它?
谢谢
【问题讨论】:
-
使用
%p打印指针。 -
这是
int main(void),而不是void main()。 (一些编译器碰巧接受void main(),但没有充分的理由使用它。)我很好奇:你从哪里知道void main()是正确的?
标签: c pointers floating-point printf