GNU Info

Info Node: (nasm.info)Section 7.4.1

(nasm.info)Section 7.4.1


Next: Section 7.4.2 Prev: Section 7.4 Up: Section 7.4
Enter node , (file) or (file)node

7.4.1. External Symbol Names
----------------------------

   C compilers have the convention that the names of all global symbols
(functions or data) they define are formed by prefixing an underscore to
the name as it appears in the C program. So, for example, the function
a C programmer thinks of as `printf' appears to an assembly language
programmer as `_printf'. This means that in your assembly programs, you
can define symbols without a leading underscore, and not have to worry
about name clashes with C symbols.

   If you find the underscores inconvenient, you can define macros to
replace the `GLOBAL' and `EXTERN' directives as follows:

     %macro  cglobal 1
     
       global  _%1
       %define %1 _%1
     
     %endmacro
     
     %macro  cextern 1
     
       extern  _%1
       %define %1 _%1
     
     %endmacro

   (These forms of the macros only take one argument at a time; a `%rep'
construct could solve this.)

   If you then declare an external like this:

     cextern printf

   then the macro will expand it as

     extern  _printf
     %define printf _printf

   Thereafter, you can reference `printf' as if it was a symbol, and the
preprocessor will put the leading underscore on where necessary.

   The `cglobal' macro works similarly. You must use `cglobal' before
defining the symbol in question, but you would have had to do that
anyway if you used `GLOBAL'.

   Also see *Note Section 2.1.21::.


automatically generated by info2www version 1.2.2.9