2014-11-07 2 views
0

Я получаю следующее предупреждение:предупреждение: декларация `lr_searchReplace«не соответствует предыдущей декларации в vuser_init.c (941)

предупреждение: декларация о `lr_searchReplace» не соответствует предыдущей декларации в vuser_init. с (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); 
} 
+0

Декларация должна быть представлена ​​перед использованием. –

ответ

0

lr_searchReplace (азбука, "c_newtopic1name", '_', '-');

недействительным lr_searchReplace (символ * inputStr, символ * outputStr, символ lookupChar, символ repChar

Вы передаете константный указатель на outputstr.

+0

Хотя строковый литерал разрешен для хранения в постоянной памяти, его тип - это массив 'char', _not_' const char'. –

0

Вы, вероятно, вызывая lr_searchReplace() прежде чем предоставили декларацию из . функция В старых версиях стандарта C (C89), это было разрешено, и функция будет предоставлена ​​неявное объявление:

int lr_searchReplace(); 

То есть, функция принимает неизвестное число не-VARIADIC параметры и возврат 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) 
{ 
    ... 
}