Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

warning: passing argument .. makes integer from pointer without a cast

Posted on 2009-04-08
4
Medium Priority
?
3,491 Views
Last Modified: 2012-05-06
Hello,

Can someone explain me why do i get the following warnings ?


Thanks in advnace for any help !
0
Comment
Question by:unknown_
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 

Author Comment

by:unknown_
ID: 24102239
mygrammar.y: In function make_variable:
mygrammar.y:54: warning: assignment makes pointer from integer without a cast
mygrammar.y: In function yyparse:
mygrammar.y:136: warning: passing argument 1 of make_operator makes pointer from integer without a cast
mygrammar.y:136: warning: passing argument 3 of make_operator makes pointer from integer without a cast
mygrammar.y:136: warning: assignment makes integer from pointer without a cast
mygrammar.y:137: warning: passing argument 1 of make_operator makes pointer from integer without a cast
mygrammar.y:137: warning: passing argument 3 of make_operator makes pointer from integer without a cast
mygrammar.y:137: warning: assignment makes integer from pointer without a cast
mygrammar.y:143: warning: passing argument 1 of make_operator makes pointer from integer without a cast
mygrammar.y:143: warning: passing argument 3 of make_operator makes pointer from integer without a cast
mygrammar.y:143: warning: assignment makes integer from pointer without a cast
mygrammar.y:144: warning: passing argument 1 of make_operator makes pointer from integer without a cast
mygrammar.y:144: warning: passing argument 3 of make_operator makes pointer from integer without a cast
mygrammar.y:144: warning: assignment makes integer from pointer without a cast
mygrammar.y:149: warning: assignment makes integer from pointer without a cast
mygrammar.y:150: warning: passing argument 1 of make_number makes integer from pointer without a cast
mygrammar.y:150: warning: assignment makes integer from pointer without a cast
mygrammar.y:151: warning: passing argument 1 of make_variable makes integer from pointer without a cast
mygrammar.y:151: warning: assignment makes integer from pointer without a cast
mygrammar.y:167: warning: passing argument 1 of make_variable makes integer from pointer without a cast
mygrammar.y:167: warning: assignment from incompatible pointer type
mygrammar.y:170: warning: passing argument 1 of make_variable makes integer from pointer without a cast
mygrammar.y:170: warning: assignment from incompatible pointer type
mygrammar.y:171: warning: passing argument 1 of make_variable makes integer from pointer without a cast
mygrammar.y:171: warning: assignment from incompatible pointer type

%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
	
#define YYDEBUG 1
 
extern int  yyparse();
 extern int yylex();
 extern int line  ;
 
 
extern FILE *yyin;	
 
int yywrap()
 {
    return 1;
 }
   
void yyerror( const char *msg )
{
  printf("Line %d: %s\n",line, msg); 
}
 
enum treetype {operator_node, number_node, variable_node};
 typedef struct tree {
   enum treetype nodetype;
   union {
     struct {struct tree *left, *right; char operator;} an_operator;
     int ival;
     char * sval;
   } body;
 } tree;
 
 static tree *make_operator (tree *l, char o, tree *r) {
   tree *result= (tree*) malloc (sizeof(tree));
   result->nodetype= operator_node;
   result->body.an_operator.left= l;
   result->body.an_operator.operator= o;
   result->body.an_operator.right= r;
   return result;
 }
 
 static tree *make_number (int n) {
   tree *result= (tree*) malloc (sizeof(tree));
   result->nodetype= number_node;
   result->body.ival= n;
   return result;
 }
 
 static tree *make_variable (char v) {
   tree *result= (tree*) malloc (sizeof(tree));
   result->nodetype= variable_node;
   result->body.sval= v;
   return result;
 }
 
 
%}
 
%start goal
 
%union {
	int ival;
	char * sval;
        tree * t;
}
 
%token <sval> IDENTIFIER
%token <sval> VARIABLE
%token <ival> INTEGER
 /*%token <ival> FLOAT*/
%token <sval> STRING
%token <sval> LITERAL
%token <sval> UNKNOWN 
%token <sval> PLUS
%token <sval> MINUS
%token <sval> TIMES
%token <sval> SLASH
%token <sval> LPAREN
%token <sval> RPAREN
%token <sval> SEMICOLON
%token <sval> COMMA
%token <sval> EQL
%token <sval> OR 
%token <sval> ORR
%token <sval> AND
%token <sval> ANDD
 
 
/* keywords */
%token <sval> IF
%token <sval> ELSE
%token <sval> DO
%token <sval> INT
%token <sval> RETURN
%token <sval> VOID
%token <sval> FLOAT
%token <sval> WHILE
 
%type <t> goal
%type <ival> expression
%type <ival> term 
%type <ival> factor 
%type <sval> ifstatement
%type <sval> whilestatement
%type <sval> dostatement
%type <sval> variable_list
%type <sval> variable 
 
 
 
%%
 
goal	: statement_list;
        ;
 
statement_list: { /*empty*/ }
                | statement_list statement   
		;
 
statement : declaration_statement
          | ifstatement 
          | whilestatement
          | variable '=' expression SEMICOLON 
          | dostatement 
          |returnstatement 
          ;
 
declaration_statement : INT variable_list SEMICOLON {printf("INT_VARIABLE\n");}
                      | FLOAT variable_list SEMICOLON {printf("FLOAT_VARIABLE\n");}
                      ;
 
 
 
expression		:	term '+' term {printf("ADDITION\n");} {$$ = make_operator($1, '+', $3);}
|	term '-' term {printf("SUBTRACTION\n");} {$$ = make_operator ($1, '-' ,$3);}
|	term {printf("\n");}  {$$ = $1;}   ;
 
 
 
 
term			:	factor '*' factor  {printf("MULTIPLICATION\n");} {$$ = make_operator($1,'*', $3);}
|	factor '/' factor  {printf("DIVISION\n");} {$$ = make_operator($1, '/', $3);} 
|	factor {printf("\n");}  {$$ = $1;}  ;
 
 
factor			:	variable {printf("rule 7\n");} 
|	INTEGER {printf("integer\n");} {$$ = make_number($1);} 
|	FLOAT {printf("float\n");}  {$$ = make_number($1);}
|	STRING {printf("string\n");}  {$$ = make_variable($1);}
|	'(' expression ')' {$$ = $2;} ;
 
ifstatement		:	IF '(' expression ')' goal ELSE goal SEMICOLON {printf("rule: IF_ELSE_STATEMENT\n");}
|	IF '(' expression ')' goal {printf("rule: IF_STATEMENT\n");};
 
whilestatement	:	WHILE '(' expression ')' goal {printf("rule: WHILE_STATEMENT\n");};
	
		
dostatement : DO '(' expression ')' WHILE '(' expression ')' SEMICOLON   {printf("rule DO_STATEMENT\n");} ;
 
returnstatement : RETURN { } SEMICOLON   {printf("rule RETURN_STATEMENT\n");} ;
| RETURN factor SEMICOLON {printf("rule : RETURN 2\n");} 
;
 
 
variable : VARIABLE {printf("rule: variable2\n");} {$$= make_variable($1); };
 
	
variable_list : variable {printf("rule : variable1\n");}  {$$= make_variable($1); }
|  variable_list ',' variable {printf("rule: multvar\n");} {$$ = make_variable($1);} //	variable ',' variable_list {printf("rule: var,var\n");}  ;
;
 
%%
 
#include "lex.yy.c"
 
main(int argc,char *argv[])
{
 if(argc<1)
   {
    printf("Please specify the input file\n");
    exit(0);
   }
 FILE *fp=fopen(argv[1],"r");
 if(!fp)
   {
     printf("couldn't open file for reading\n");
     exit(0);
   }
 yyin=fp;
 
 do {
   yyparse();
 }while (!feof(yyin));
 
 fclose(fp);
}
 
 
 
 
 static void printtree (tree *t, int level) {
 #define step 4
   if (t)
     switch (t->nodetype)
     {
       case operator_node:
        printtree (t->body.an_operator.right, level+step);
        printf ("%*c%c\n", level, ' ', t->body.an_operator.operator);
        printtree (t->body.an_operator.left, level+step);
        break;
       case number_node:
        printf ("%*c%d\n", level, ' ', t->body.ival);
        break;
       case variable_node:
        printf ("%*c%c\n", level, ' ', t->body.sval);
     }
 }
 
 

Open in new window

0
 
LVL 46

Accepted Solution

by:
Kent Olsen earned 750 total points
ID: 24102303
Hi unknown,

Take a look at lines 31 and 54.

At line 31 you declare sval to be a pointer to a character.

At line 54 you use sval as if it were a character.

If you want to save the character, line 31 needs to change.  If you want to save the pointer to a character, all of the lines that threw the "assignment makes pointer from integer without a cast" error will need to change.


Good Luck,
Kent
0
 
LVL 84

Assisted Solution

by:ozo
ozo earned 750 total points
ID: 24102332
make_operator takes pointer arguments, but you are passing it integers
 make_number takes an integer argument, but you are passing it a pointer
0
 

Author Closing Comment

by:unknown_
ID: 31568290
.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question