我在C中编写程序并且它没有显示任何错误,但它有一些警告,我无法找到如何修复。
首先工作是
printf使用%d并期望 int 参数,但 pos 是 long int 。
printf("Kernel load error: kernel %s is smaller then 11000 bytes. %d bytes loaded total.\n",files[count].name,pos);
第二是
函数'mkdir'[-Wimplicit-function-declaration] |
的隐式声明
mkdir("kernels");
类似的问题,这缩短了:
char * path = "kernels";
buildKernels(&path, files, count, &binariesSizeTotal);
实现:
bool buildKernels(char ** path,FILES * files, int count ){
strlen(path);
...
}
内置函数'strlen'的不兼容隐式声明[默认启用] |
另外两个:
*函数'buildKernels'的隐式声明[-Wimplicit-function-declaration] |
函数'loadKernels'的隐式声明[-Wimplicit-function-declaration] | *
这两个函数都在头文件中声明。我不确定“隐含声明”是什么意思。编译器对我的期望是什么?如何解决这些错误?
我没有成功解决的最后一个问题:
while( token != NULL )
{
printf( " %s\n", token );
token = strtok(NULL, s); // char *strtok(char *str, const char *delim)
}
这给了我警告警告:
指针和整数之间的比较[默认启用] |
答案 0 :(得分:1)
对变量%ld
使用格式说明符pos
。
包含声明函数mkdir
和buildKernels
的标头,或者至少在调用之前包含声明。
还要考虑使用四个参数调用函数buildKernels
char * path = "kernels";
buildKernels(&path, files, count, &binariesSizeTotal);
但是用三个参数进行了打击
bool buildKernels(char ** path,FILES * files, int count ){
...
}
所以这可能是错误的原因。
功能strlen
。在传递类型为const char *
char **
的参数
bool buildKernels(char ** path,FILES * files, int count ){
strlen(path);
将参数path
声明为类型char *
或正确调用函数strlen
,如
strlen( *path );
至于最后一个警告,如果令牌是一个指针,那么代码是有效的。您应该显示完整的警告消息。或者,NULL可以用C ++样式而不是C样式定义。你不应该自己定义NULL。