extern followed by string literal

704 Views Asked by At

I am trying to parse the syntax of a C file using pycparser. I send the C file through a preprocessor and then send the output of the preprocessor to be parsed by pycparser. The following code is in one of the C files ...

extern "asm"
{
    extern void ASM_Function(void);
}

pycparser throws and exception telling me this is not valid C syntax. Looking at the C BNF the keyword extern does not allow a string literal to precede it. I am correct in reading the BNF? Was this extern functionality added in a later version of C or is this syntax compiler specific?

1

There are 1 best solutions below

6
On

It looks like a compiler extension. Do you know what compiler the code was originally written for?

Most compilers support declaring a C calling convention by wrapping the function declaration with an:

#ifdef __cplusplus
extern "C" {
#endif

    // functions that use C calling convention.
    // are declared here.

#ifdef __cplusplus
} /* extern "C" */
#endif

The code appears to be declaring an externally defined assembly function called ASM_Function. You may be able to rewrite this if you know what is the calling convention the assembly function is expecting.

extern "C" is a C++ construct to declare functions that will not use name mangling and will use the cdecl calling convention.

EDIT: Corrected my post.