According to this answer using function main() is illegal (§3.6.1.3) and a function is used if its name appears in a potentially evaluated expression (§3.2).
Suppose I have this code:
printf( "%p", &main );
in which name of function main()
appears in expression &main
.
Will the code above be illegal?
It's not usual to use pointer to
main()
or the address ofmain()
but..Anyway, it is allowed since, as every function (and any symbol, e.g. variable) it has its own address. And the address of main() may be needed - especially when you write code for embedded systems and you play with dynamic loading of the code or run-time inspection. Or there are a bootloader and actual running firmware.
Often
main()
is an entry point to the dynamically loaded code (e.g from FLASH to RAM) and thus it is referenced (called directly or assigned to the relevant pointer) in bootloader.Refer to MicroC-OS/II or VxWorks - both use
main()
in this waySince
main
is not "used" (you're not evaluating it) then it should be legal according the link you supplied.Yes. As you quote, the standard says that you cannot use
main
.Note too that the address of a function does not match
"%p"
. The corresponding argument must have typevoid*
; any other type (except maybechar*
) is illegal, and results in undefined behavior.