Difference between revisions of "Studio:Scl struct sized"

From STRIDE Wiki
Jump to: navigation, search
(The scl_struct_sized pragma)
Line 1: Line 1:
 
= The scl_struct_sized pragma =
 
= The scl_struct_sized pragma =
  
The scl_struct_sized pragma is one of the [[SCL_Pragmas#Qualification|Qualification]] pragmas. The scl_struct_sized pragma identifies a particular struct or pointer-to-struct as a sized structure. A sized structure typically has bytes allocated past its type definition.
+
The scl_struct_sized pragma is used to identify a sized structure. A sized structure is a C programming pattern representing structure whose size is variable (by convention) and defined by one of the members of the structure. This pragma is infrequently used, but must be whenever the programmer defined size does not match the C language size (as calculated by the sizeof() macro) of the structure
 +
 
 
= STRIDE Versions =
 
= STRIDE Versions =
 
Available in STRIDE 3.0.0103 (StoneSteps Tower 3) and later versions
 
Available in STRIDE 3.0.0103 (StoneSteps Tower 3) and later versions

Revision as of 12:15, 5 November 2008

The scl_struct_sized pragma

The scl_struct_sized pragma is used to identify a sized structure. A sized structure is a C programming pattern representing structure whose size is variable (by convention) and defined by one of the members of the structure. This pragma is infrequently used, but must be whenever the programmer defined size does not match the C language size (as calculated by the sizeof() macro) of the structure

STRIDE Versions

Available in STRIDE 3.0.0103 (StoneSteps Tower 3) and later versions

Syntax

#pragma scl_struct_sized(type-name, max-size)

Parameters Type Description
type-name Struct,
Pointer
Specifies a structure type (or a pointer to such type) that is to be sized (allocated bytes beyond its type definition).

The following restrictions apply:

  • The structure type may not be pointed to by a sized pointer.
  • The structure type may not be a member of any other structure or union.
  • The structure type may not be passed as a function parameter.
  • The structure type may only reside in IN/INOUT memory blocks.
  • If the last member of the structure is an array, the array's size is calculated based upon max-size - (size of struct's other members).
  • If the last member of the structure is an array, the array's element type may not contain a sized structure or a conformant array (see scl_conform).
max-size Integer Specifies the number of bytes to be allocated for the sized struct.

The following restrictions apply:

  • The max-size type must be an integral type (int, short, char).
  • The max-size value (at runtime) may not be less than the structure's type size.
  • The max-size value (at runtime) may not exceed the maximum payload size.
  • The max_size field must be in the same payload block as the type-name sized struct (i.e. no indirection '*' or '->').

Examples

Example 1

This example shows the declaration for a simple sized struct.

typedef struct {
    int nSize;
    int nSomeJunk;
    int nMoreJunk;
} SimpleSizedStruct;

extern void f(SimpleSizedStruct* s);
#pragma scl_function(f)
#pragma scl_struct_sized(f.s, nSize);

Example 2

This example shows the declaration of a sized struct with a conformant array.

#define SOME_BOUND 1
typedef struct {
    int nSize;
    int nSomeJunk;
    int ary[SOME_BOUND];
} ConformantArraySizedStruct;

extern void f(SimpleSizedStruct* s);
#pragma scl_function(f)
#pragma scl_struct_sized(f.s, nSize);

See Also

  • For additional information on scl_string, including constraints, refer to the section on scl_struct_sized in the SCL Reference Guide.