Tuesday 8 November 2011

What does a function declared as PASCAL do differently? in C programming

What does a function declared as PASCAL do differently?

A C function declared as PASCAL uses a different calling convention than a “regular” C function. Normally,
C function parameters are passed right to left; with the PASCAL calling convention, the parameters are passed
left to right.

Consider the following function, which is declared normally in a C program:

int regular_func(int, char*, long);
Using the standard C calling convention, the parameters are pushed on the stack from right to left. This
means that when the regular_func() function is called in C, the stack will contain the following parameters:
long
char*
int
The function calling regular_func() is responsible for restoring the stack when regular_func() returns.
When the PASCAL calling convention is being used, the parameters are pushed on the stack from left to right.
Consider the following function, which is declared as using the PASCAL calling convention:
int PASCAL pascal_func(int, char*, long);

When the function pascal_func() is called in C, the stack will contain the following parameters:
int
char*
long
The function being called is responsible for restoring the stack pointer. Why does this matter? Is there any
benefit to using PASCAL functions?
Functions that use the PASCAL calling convention are more efficient than regular C functions—the function
calls tend to be slightly faster. Microsoft Windows is an example of an operating environment that uses the
PASCAL calling convention. The Windows SDK (Software Development Kit) contains hundreds of functions
declared as PASCAL.

When Windows was first designed and written in the late 1980s, using the PASCAL modifier tended to make
a noticeable difference in program execution speed. In today’s world of fast machinery, the PASCAL modifier
is much less of a catalyst when it comes to the speed of your programs. In fact, Microsoft has abandoned the
PASCAL calling convention style for the Windows NT operating system.

In your world of programming, if milliseconds make a big difference in your programs, you might want to
use the PASCAL modifier when declaring your functions. Most of the time, however, the difference in speed
is hardly noticeable, and you would do just fine to use C’s regular calling convention.

Cross Reference:

VIII.6: How can you pass an array to a function by value?

No comments:

Post a Comment