c でコンパイル時に pow(10,x) を計算できますか?

int (または long) をオーバーフローする前に可能な値はほとんどありません。わかりやすくするために、テーブルにしてください!

編集:float を使用している場合 (実際に使用しているように見えます)、make プロセスで実行され、値をファイルに出力するコードを実際に記述せずに、コンパイル時に pow() 関数を呼び出すことはできません (ヘッダー ファイルなど) をコンパイルします。


GCC は、十分に高い最適化レベルでこれを行います (-O1 は私のためにそれを行います)。例:

#include <math.h>

int test() {
        double x = pow(10, 4);
        return (int)x;
}

-O1 -m32 でコンパイルすると:

        .file   "test.c"
        .text
.globl test
        .type   test, @function
test:
        pushl   %ebp
        movl    %esp, %ebp
        movl    $10000, %eax
        popl    %ebp
        ret
        .size   test, .-test
        .ident  "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
        .section        .note.GNU-stack,"",@progbits

これはキャストなしでも機能します。もちろん、Linux ABI は FPU レジスタで浮動小数点の戻り値を渡すため、浮動小数点のロード命令を取得します。


Boost.Preprocessor でそれを行うことができます:

http://www.boost.org/doc/libs/1_39_0/libs/preprocessor/doc/index.html

コード:

#include <boost/preprocessor/repeat.hpp>

#define _TIMES_10(z, n, data) * 10
#define POW_10(n) (1 BOOST_PP_REPEAT(n, _TIMES_10, _))

int test[4] = {POW_10(0), POW_10(1), POW_10(2), POW_10(3)};