GDB を使用して次の C プログラムをデバッグしようとしています。
// Program to generate a user specified number of
// fibonacci numbers using variable length arrays
// Chapter 7 Program 8 2013-07-14
#include <stdio.h>
int main(void)
{
int i, numFibs;
printf("How many fibonacci numbers do you want (between 1 and 75)?\n");
scanf("%i", &numFibs);
if (numFibs < 1 || numFibs > 75)
{
printf("Between 1 and 75 remember?\n");
return 1;
}
unsigned long long int fibonacci[numFibs];
fibonacci[0] = 0; // by definition
fibonacci[1] = 1; // by definition
for(i = 2; i < numFibs; i++)
fibonacci[i] = fibonacci[i-2] + fibonacci[i-1];
for(i = 0; i < numFibs; i++)
printf("%llu ", fibonacci[i]);
printf("\n");
return 0;
}
私が抱えている問題は、次を使用してコードをコンパイルしようとするときです。
clang -ggdb3 -O0 -Wall -Werror 7_8_FibonacciVarLengthArrays.c
作成された a.out ファイルで gdb を実行しようとすると、プログラムの実行がステップ実行されます。fibonacci[] 配列が宣言された後はいつでも、fibonacci <value optimized out>
次のように入力します。意味のあるデータが含まれていないようです)。
-O0 フラグが使用されているときに、clang がこの配列を最適化しているように見えるのはなぜですか?
gcc を使用してこのコードをコンパイルすると、GDB を使用すると値が期待どおりに表示されます。
ありがとうございました。