1

我收到以下警告:

警告:“lr_searchReplace”的声明与 vuser_init.c 中的先前声明不匹配 (941)

代码如下:- 注意:我已经char *abc;在全局声明了。

vuser_init()
{
    abc = lr_eval_string("{c_Topic1Name}");
    lr_searchReplace(abc,"c_newtopic1name",'_','-');
    lr_output_message("New string  is :- %s",lr_eval_string("{c_newtopic1name}"));
    return(0);
 }

void lr_searchReplace(char* inputStr, char* outputStr, char lookupChar, char repChar)
{
    char *ptr =inputStr;
    char xchar;
    int len=0;
    int i=0;

    lr_output_message("%s",inputStr);
    xchar = *ptr;//Copy initial
    len=strlen(inputStr);
    while (len>0)
    {
        len--;
        xchar = *ptr;
        if(xchar==lookupChar)
        {
            inputStr[i]= repChar;
        }

        ptr++;
        i++;
   }

   lr_save_string(inputStr,outputStr);
   lr_output_message("%s",inputStr);
} 
4

2 回答 2

2

您可能lr_searchReplace()在提供函数声明之前调用。在旧版本的 C 标准 (C89) 中,这是允许的,并且该函数将被隐含声明:

int lr_searchReplace();

也就是说,一个函数采用未知数量的非可变参数,并返回int. 这显然与后来的实际声明相矛盾。

在最新版本的标准 (C99/C11) 中,如果您尝试调用尚未声明的函数,编译器需要生成诊断消息。

您应该更改代码,使函数定义出现函数调用之前,或者在函数调用之前提供函数声明。例如:

/* Declaration - Note semi-colon at the end of the declaration */
void lr_searchReplace(char* inputStr, char* outputStr, char lookupChar, char repChar);

/* Function call */
vuser_init()
{
  lr_searchReplace(abc,"c_newtopic1name",'_','-');
}

/* Function definition - including function body */
void lr_searchReplace(char* inputStr, char* outputStr, char lookupChar, char repChar)
{
  ...
}
于 2014-11-07T12:49:13.787 回答
0

lr_searchReplace(abc,"c_newtopic1name",'_','-');

void lr_searchReplace(char* inputStr, char* outputStr, char lookupChar, char repChar

您正在将 const 指针传递给 outputstr。

于 2014-11-07T07:17:50.013 回答