Как исправить предупреждающее сообщение, связанное с strlen (), используемым в Yacc? - PullRequest
1 голос
/ 26 декабря 2010

Пожалуйста, мне нужна ваша помощь. По сути, я сталкиваюсь с этим предупреждением после компиляции с gcc, и не могу вывести ошибку: Вот подробности:

Предупреждающее сообщение, которое я получаю, выглядит следующим образом:

y.tab.c: в функции «yyparse»: y.tab.c: 1317
предупреждение: несовместимое неявное объявление встроенной функции ‘strlen’

Мой файл Lex выглядит следующим образом:

    %{
        #include <stdio.h>
        #include <stdlib.h>
        #include <ctype.h>
        #include "y.tab.h"

        void yyerror(const char*); 

        char *ptrStr;

   %}

        %START nameState

        %%

        "Name:"                      {       BEGIN nameState;          }

        <nameState>.+   {
                               ptrStr = (char *)calloc(strlen(yytext)+1, sizeof(char));
                               strcpy(ptrStr, yytext);
                               yylval.sValue = ptrStr;

                                return sText;
                        }
        %%

        int main(int argc, char *argv[]) 
        {
            if ( argc < 3 )
            {
                printf("Two args are needed: input and output");
            }

            else 
            {
                yyin = fopen(argv[1], "r");
                yyout = fopen(argv[2], "w");
                yyparse();
                fclose(yyin);
                fclose(yyout);
            }
            return 0;
        }

Мой файл Yacc выглядит следующим образом:

 %{
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include "y.tab.h"

    void yyerror(const char*); 
    int yywrap(); 

    extern FILE *yyout;

    %}

    %union 
    { 
        int iValue;     
        char* sValue;       
    }; 

    %token <sValue> sText
    %token nameToken 

    %%

    StartName: /* for empty */
              | sName
          ;

    sName:
         sText  
         { 
                fprintf(yyout, "The Name is: %s", $1);
                fprintf(yyout, "The Length of the Name is: %d", strlen($1)); 
         }
         ;    
    %%

    void yyerror(const char *str) 
    {
        fprintf(stderr,"error: %s\n",str);
    }

    int yywrap()
    {
        return 1;
    } 

* Мне было интересно, как удалить это предупреждение. Пожалуйста, любые предложения высоко ценятся!

Заранее спасибо.

1 Ответ

5 голосов
/ 26 декабря 2010

Включить string.h , где объявлены strlen и друзья.

...