hey, stupid question but...

I was wondering if anyone could give me any help. I keep coming up with an error when I try to use this function definition. I haven’t declared the function in anywhere else other then this, and it is ahead of any calls to the function so I let it be its own prototype.

int intMax(int x, int y)
{                                //here is where I get the syntax error
	int max = x;
	if(y > max)
	{
   		max = y;
	}
   return max;
}

would I have to use it as an inline function? any help would be great!

Hmm, I don’t do C much, but have you tried declaring a function prototype at the start of the code?

// Include files

//Prototypes
int intMax(int x, int y);

//main,intMax,etc. below

Also, telling us what error you’re receiving might be helpful. Thanks!

thanks for the quick response! I just tried prototyping it, but no luck. The exact error i’m getting looks like this

Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Documents and Settings\Mounds View Schools\My Documents\FrcCode_2007_8722\main.o".
Clean: Deleted file "C:\Documents and Settings\Mounds View Schools\My Documents\FrcCode_2007_8722\user_routines_fast.o".
Clean: Deleted file "C:\Documents and Settings\Mounds View Schools\My Documents\FrcCode_2007_8722\user_SerialDrv.o".
Clean: Deleted file "C:\Documents and Settings\Mounds View Schools\My Documents\FrcCode_2007_8722\ifi_startup.o".
Clean: Deleted file "C:\Documents and Settings\Mounds View Schools\My Documents\FrcCode_2007_8722\ifi_utilities.o".
Clean: Done.
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8722 "main.c" -fo="main.o" /i"C:\mcc18\h" -D_FRC_BOARD -D_LARGE_CODE -D_DONT_USE_TMR0 -mL -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8722 "user_routines_fast.c" -fo="user_routines_fast.o" /i"C:\mcc18\h" -D_FRC_BOARD -D_LARGE_CODE -D_DONT_USE_TMR0 -mL -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8722 "user_SerialDrv.c" -fo="user_SerialDrv.o" /i"C:\mcc18\h" -D_FRC_BOARD -D_LARGE_CODE -D_DONT_USE_TMR0 -mL -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8722 "ifi_startup.c" -fo="ifi_startup.o" /i"C:\mcc18\h" -D_FRC_BOARD -D_LARGE_CODE -D_DONT_USE_TMR0 -mL -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8722 "ifi_utilities.c" -fo="ifi_utilities.o" /i"C:\mcc18\h" -D_FRC_BOARD -D_LARGE_CODE -D_DONT_USE_TMR0 -mL -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
Executing: "C:\mcc18\bin\mcc18.exe" -p=18F8722 "user_routines.c" -fo="user_routines.o" /i"C:\mcc18\h" -D_FRC_BOARD -D_LARGE_CODE -D_DONT_USE_TMR0 -mL -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Documents and Settings\Mounds View Schools\My Documents\FrcCode_2007_8722\user_routines.c:228:Error: syntax error
Halting build on first failure as requested.
BUILD FAILED: Sat Jan 20 12:21:21 2007

Your compiler is telling you that there’s an error on line 228 of user_routines.c. Could you post that function and boldface/highlight in some way line 228?

Have you declared any globals x or y already?

I don’t want to post the entire code (our homebrew mecanum drive code) but at the top of the post where I comment by the bracket is line 228. thanks for your help :slight_smile:

Since I can’t see the whole code, and I won’t know what functions might already be predefined, have you tried renaming the function to something other than intMax? Try just qwerty or something miscellaneous for now to see if the function might already have been reserved for something.

Look closely at the lines preceding the one identified as causing the error. I’m guessing you have a missing semicolon or close brace somewhere before your intMax function definition.

Check around in your code. It is likely that the syntax error is actually entirely unrelated to that section of the code. Looks like you might have a missing brace or semicolon somewhere.

Thank you for calling the Department of Redundancy Agency.

Have you checked for a missing semicolon or closing brace?

:wink:

This may or may not be way off, but I remember reading somewhere that the C18 compiler has trouble with filenames longer than 64 characters. It wouldn’t compile some code that I had in the My Documents folder once, so I put all the code in a folder in the root c: directory. Worked fine after that.
Just something I remember, may or may not help you!
Hope you get it figured out.
Best of luck,
-Chris

You are right about there being a size limit but that would have given a different error.

i could be wrong…

but you declared the integer variable “max” in the function.

try putting “int max;” in your first line of code along with all your other variable declarations and then in the function… “max = …”

All that would do is make it global, and the error would be different for that. I’m with Mike and the gang, I say it’s an error in a previous line, or it doesn’t like using int in the function name.

Are you just trying to build the code or is this error occurring when you download to the RC? If the former, I’d suggest heeding prior suggestions to check for a missing semicolon and/or brace. If the latter, I would check if you may be running out of program memory on the processor. This isn’t as much of a problem with 2006 and 2007 RCs as it is with 2005 and earlier RCs, since they increased the code space for 2006. I doubt this is the problem, but my team has run into memory issues in the past.

thats true if the variable is only used in a function-level scope
but ive made the mistake of using function-level variable outside the function.

Its probably not the problem, but its worth a try.

it probably isn’t prototyping since it is a syntax error. My guess is that it sometimes tells you there’s an error a line or two after the actual error. It may be a problem with the int intmax(int x, int y) line. try changing a couple things to see if that’s the problem.

Hey you who had the problem, are you still with us?
Why do you even have ‘max’? Couldnt you just use this?


int intMax(int x, int y)
{                                //here is where I get the syntax error
    if(y > x)
        x = y;
    
    return x;
}