[英]warning: assignment makes pointer from integer without a cast [enabled by default]
[英]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.