⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mc.doc

📁 c语言的小编译器,学习的好东东.
💻 DOC
📖 第 1 页 / 共 5 页
字号:
             considered to  be  global  and  will  have  memory  permanently
             reserved for them. Global symbols are defined by  name  in  the
             output file, allowing other modules to access them.
    
                Note that the compiler IS case  sensitive,  however  if  the
             assembler you are using is NOT, you  must  be  careful  not  to
             declare any global symbols with names that differ only in case.
    
                All non-initialized global variables are  generated  at  the
             very end of the output file, after the literal pool is  dumped.
             Since non-initialized globals do not generate object code, this
             allows them to be excluded from the image file when it is saved
             to disk.
    
                Global variables may be initialized with one or more values,
             which are expressed as a single array of  integers  REGUARDLESS
             of the size and shape of the variable. If more than  one  value
             is expressed, '{' and '}' must be used.
    
                   eg: int i = 10, j[2][2] = { 1, 2, 3, 4 };
    
                When arrays are declared, a null dimension may  be  used  as
             the dimension size, in which case the size of  the  array  will
             default to the number of initialized values.
    
                         eg: int array[] = { 1, 2, 3 };
    
                Initialized global variables are automatically saved  within
             the code image,  insuring  that  the  initial  values  will  be
             available at run time. Any non-initialized elements of an array
             which has been partly initialized will be set to zero.
    
                Non-initialized global variables are not preset in any  way,
             and will be undefined at the beginning of program execution.
    
          2.2.3 Local Symbols
    
                Symbols declared within a function definition are  allocated
             on the stack, and  exist  only  during  the  execution  of  the
             function.
    
                To simplify the allocation and de-allocation of stack space,
             all local symbols must be declared  at  the  beginning  of  the
             function before any code producing statements are encountered.
    
                MICRO-C does not support initialization of  local  variables
             in the declaration statement. Since local variables have to  be
             initialized every time the function is entered, you can get the
             same effect using assignment statements at the beginning of the
             function.
    
                No type is assumed for  arguments  to  functions.  Arguments
             must be explicitly declared, otherwise they will  be  undefined
             within the scope of the function definition.
    MICRO-C                                                          Page: 7


       2.3 Arrays & Pointers
    
             When MICRO-C passes an array to a function, it actually  passes
          a POINTER to the array. References to arrays which  are  arguments
          are automatically performed through the pointer.
    
             This allows the use of pointers and arrays to be interchangable
          through the context of a function call. Ie: An array passed  to  a
          function may be declared and used as  a  pointer,  and  a  pointer
          passed to a function may be declared and used as an array.
    
       2.4 Functions
    
             Functions are  essentially  initialized  global  symbols  which
          contain executable code.
    
             MICRO-C accepts  any  valid  value  as  a  function  reference,
          allowing  some  rather  unique  (although  non-standard)  function
          calls.
    
          For example:
    
                function();     /* call function */
                variable();     /* call contents of a variable */
                (*var)();       /* call indirect through variable */
                (*var[x])();    /* call indirect through indexed array */
                0x5000();       /* call address 0x5000 */
    
             Since this is a single pass compiler, operands to functions are
          evaluated and pushed on the stack in the order in which  they  are
          encountered, leaving the last operand closest to the  top  of  the
          stack. This is the opposite order from which  many  'C'  compilers
          push operands.
    
             For functions with a fixed number of arguments,  the  order  of
          which operands  are  passed  is  of  no  importance,  because  the
          compiler looks after generating  the  proper  stack  addresses  to
          reference variables.  HOWEVER,  functions  which  use  a  variable
          number of arguments are affected for two reasons:
    
          1) The location of the LAST arguments are known (as fixed  offsets
             from the stack pointer) instead of the FIRST.
    
          2) The symbols defined as arguments  in  the  function  definition
             represent the LAST arguments instead of the FIRST.
    
             If a function is declared as "register", it  serves  a  special
          purpose and causes the accumulator to be loaded with the number of
          arguments passed whenever the function is called. This allows  the
          function to know how many  arguments  were  passed  and  therefore
          determine the location of the first argument.
    MICRO-C                                                          Page: 8


       2.5 Control Statements
    
             The following control statements are implemented in MICRO-C:
    
                if(expression)
                    statement;
    
                if(expression)
                    statement;
                else
                    statement;
    
                while(expression)
                    statement;
    
                do
                    statement;
                while expression;
    
                for(expression; expression; expression)
                    statement;
    
                return;
    
                return expression;
    
                break;
    
                continue;
    
                switch(expression) {
                    case constant_expression :
                        statement;
                        ...
                        break;
                    case constant_expression :
                        statement;
                        ...
                        break;
                        .
                        .
                        .
                    default:
                        statement; }
    
                label: statement;
    
                goto label;
    MICRO-C                                                          Page: 9


    2.5.1 Notes on Control Structures
    
        1)  Any "statement" may be a single statement or a compound
            statement enclosed within '{' and '}'.
    
        2)  All three "expression"s in the "for" command are optional.
    
        3)  If a "case" selection does not end with "break;", it will
            "fall through" and execute the following case as well.
    
        4)  Expressions following 'return' and 'do/while' do not have
            to be contained in brackets (although this is permitted).
    
        5)  Label names may preceed any statement, and must be any
            valid symbol name, followed IMMEDIATELY by ':' (No spaces
            are allowed). Labels are considered LOCAL to a function
            definition and will only be accessable within the scope
            of that function.
    MICRO-C                                                          Page: 10


       2.6 Expression Operators
    
             The following expression operators are implemented in MICRO-C:
    
    2.6.1 Unary Operators
    
        -           - Negate
        ~           - Complement
        !           - Logical complement
        ++          - Pre or Post increment
        --          - Pre or post decrement
        *           - Indirection
        &           - Address of
        (type)      - Typecast
    
    2.6.2 Binary Operators
    
        +           - Addition
        -           - Subtraction
        *           - Multiplication
        /           - Division
        %           - Modulus
        &           - Bitwise AND
        |           - Bitwise OR
        ^           - Bitwise EXCLUSIVE OR
        <<          - Shift left
        >>          - Shift right
        ==          - Test for equality
        !=          - Test for inequality
        >           - Test for greater than
        <           - Test for less than
        >=          - Test for greater than or equal to
        <=          - Test for less than or equal to
        &&          - Logical AND
        ||          - Logical OR
        =           - Assignment
        +=          - Add to self assignment
        -=          - Subtract from self assignment
        *=          - Multiply by self assignment
        /=          - Divide by and reassign assignment
        %=          - Modular self assignment
        &=          - AND with self assignment
        |=          - OR with self assignment
        ^=          - EXCLUSIVE OR with self assignment
        <<=         - Shift left self assignment
        >>=         - Shift right self assignment
    MICRO-C                                                          Page: 11


    NOTES:
    
        1)  The expression "a && b" returns 0 if "a" is zero, otherwise the
            value of "b" is returned. The "b" operand is NOT evaluated if
            "a" is zero.
    
        2)  The expression "a || b" returns the value of "a" if it is not 0,
            otherwise the value of "b" is returned. The "b" operand is NOT
            evaluated if "a" is non-zero.
    
    2.6.3 Other Operators
    
        ;           - Ends a statement.
        ,           - Allows several expressions in one statement.
                    + Separates symbol names in multiple declarations.
                    + Separates constants in multi-value initialization.
                    + Separates operands in function calls.
        ?           - Conditional expression.
        :           - Delimits labels, ends CASE and separates conditionals.
        { }         - Defines a block of statements.
        ( )         - Forces priority in expression, indicates function calls.
        [ ]         - Indexes arrays. If fewer index values are given than the
                      number of dimensions which are defined for the array, the
                      the value returned will be a pointer to the appropriate
                      address.
    
                    Eg:
                        char a[5][2];
    
                        a[3] returns address of forth row of two elements.
                        (remember index's start from zero)
    
                        a[3][0] returns the character at index [3][0];
    MICRO-C                                                          Page: 12


       2.7 Preprocessor Commands
    
             The  MICRO-C  compiler  supports  the  following  pre-processor
          commands. These commands are recognized only if they occur at  the
          beginning of the input line.
    
             NOTE:  This  describes  the  limited  pre-processor  which   is
          integral to the  compiler,  see  also  the  section  on  the  more
          powerful external processor (MCP).
    
          2.7.1 #asm
    
                Causes the compiler to copy all subsequent lines directly to
             the output  file  without  translation.  This  allows  assembly
             language code to be included in the 'C' program.
    
          2.7.2 #endasm
    
                Terminates a "#asm",  and  causes  the  compiler  to  resume
             compiling from the input file.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -