簡體   English   中英

"警告:賦值從沒有強制轉換的指針生成整數 [默認啟用]"

[英]Warning : assignment makes integer from pointer without cast [enabled by default]

有一個警告,我無法從這段代碼中擺脫它。 這是我可以提供的代碼:

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

%%

[1-9]+          {
                        yylval.iVal = atoi(yytext);
                        printf("NUMBER\n");
                        return NUMBER;
                }
[a-z]           {
                        printf("VARIABLE\n");
                        yylval.cVal = yytext;
                        return VARIABLE;
                }
[-()<>=+/*\n]   {
                        printf("OPERATOR\n");
                        return *yytext;
                 }
"^"             {
                        printf("POW\n");
                        return *yytext;
                }
[ \t]+          ;      // Skip whitespaces.
.               yyerror("Unknown character.\n");

%%

int yywrap(void)
{
     return 1;
}

我收到了這部分的警告: yylval.cVal = yytext; . 怎么會出錯? 提前致謝。

問題中沒有足夠的信息(a)可以確定,但您收到的消息通常涉及將指針分配給整數類型,以及以下信息:

正則表達式 場地 基於其他列的可能類型
[1-9]+ iVal 整數
[阿茲] cVal 字符

這意味着yytext變量( char * )被直接分配給cVal (很可能) char變量。

解決此問題的最佳方法是簡單地從yytext指向的內存中獲取第一個字符,以便它是正確的類型。 那將是這樣的:

yylval.cVal = *yytext; // or yytext[0]

(a) yytext的類型可以通過您成功執行atoi()的事實來推斷。 未提供yylval.cVal的類型,但在iVal/cVal命名的情況下可能是char

使用yylval作為一個聯合也是非常常見的做法,它在解析計算機語言時可以包含各種參數類型,正如您在這里所做的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM