This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

error C141 and error C202

Hello,
when trying to compile an small C program with uVision3 v3.53 I'm coming across some unexpected - at least to me - compilation errors, following is the complete program:

#include <reg515c.h>
#define H 1 /* H abk. von HIGH */
#define L 0 /* L abk. von LOW */

sbit P4_0 = P4^0;

main()
{
        P4 = 0xFF;      /* Port 4 als Eingang eingerichtet */

        /*Why on earth these lines cannot be compiled?*/
        
        unsigned char zustand = H;
        unsigned int i;
        
        while(1)
        {

                for(i = 0; i <= 8; i++)
                {
                        while(P4_0 == H)
                                ;
                        if(P4_0 == L && zustand == H)
                        {
                                zustand = L;
                                P1 = i;
                        }
                        while(P4_0 == L)
                                ;
                        if(P4_0 == H && zustand == L)
                        {
                                zustand = H;
                        }
                }
        }
}

And the error the compiler reports are:

Build target 'mM-515'
assembling STARTUP.A51...
compiling PinNummern.c...
PINNUMMERN.C(11): error C141: syntax error near 'unsigned'
PINNUMMERN.C(11): error C202: 'zustand': undefined identifier
PINNUMMERN.C(12): error C141: syntax error near 'unsigned'
PINNUMMERN.C(12): error C202: 'i': undefined identifier
PINNUMMERN.C(13): error C202: 'zustand': undefined identifier
PINNUMMERN.C(18): error C202: 'i': undefined identifier
PINNUMMERN.C(22): error C202: 'zustand': undefined identifier
PINNUMMERN.C(24): error C202: 'zustand': undefined identifier
PINNUMMERN.C(25): error C202: 'i': undefined identifier
PINNUMMERN.C(29): error C202: 'zustand': undefined identifier
PINNUMMERN.C(31): error C202: 'zustand': undefined identifier
Target not created

The offending lines are the ones in red, neither the variable zustand nor i have sfr or sbit type so it should be allowed to declare them inside a function.
When taking those variables out of main's body this way:

#include <reg515c.h>
#define H 1 /* H abk. von HIGH */
#define L 0 /* L abk. von LOW */

sbit P4_0 = P4^0;

unsigned char zustand = H;
unsigned int i;

main()
{
        P4 = 0xFF;      /* Port 4 als Eingang eingerichtet */

        /* etc */

The program compiles without errors.

Any help would be appreciated. Thanks.

Parents
  • "main()
    Functions in C should have return values."

    I think you mean: Functions in C should have return types. void is a perfectly good type for functions that do not have a return value.

    In this case, the declaration "main() { ... }" is old-style C for a function with int return type. This form should not be used. And sicne the startup script will not expect any return value, void is the only return type that makes sense for a C51 project.

Reply
  • "main()
    Functions in C should have return values."

    I think you mean: Functions in C should have return types. void is a perfectly good type for functions that do not have a return value.

    In this case, the declaration "main() { ... }" is old-style C for a function with int return type. This form should not be used. And sicne the startup script will not expect any return value, void is the only return type that makes sense for a C51 project.

Children
No data