How to make GCC evaluate functions at compile time?

后端 未结 3 713
广开言路
广开言路 2021-01-19 00:34

I am thinking about the following problem: I want to program a microcontroller (let\'s say an AVR mega type) with a program that uses some sort of look-up tables.

Th

3条回答
  •  清歌不尽
    2021-01-19 01:12

    The general problem here is that sin call makes this initialization de facto illegal, according to rules of C language, as it's not constant expression per se and you're initializing array of static storage duration, which requires that. This also explains why your array is not in .data section.

    C11 (N1570) §6.6/2,3 Constant expressions (emphasis mine)

    A constant expression can be evaluated during translation rather than runtime, and accordingly may be used in any place that a constant may be.

    Constant expressions shall not contain assignment, increment, decrement, function-call, or comma operators, except when they are contained within a subexpression that is not evaluated.115)

    However as by @ShafikYaghmour's comment GCC will replace sin function call with its built-in counterpart (unless -fno-builtin option is present), that is likely to be treated as constant expression. According to 6.57 Other Built-in Functions Provided by GCC:

    GCC includes built-in versions of many of the functions in the standard C library. The versions prefixed with __builtin_ are always treated as having the same meaning as the C library function even if you specify the -fno-builtin option.

提交回复
热议问题