私が書いたプログラムは2つの数値を取り、除算とモジュロ演算を行います。
コードは
#define ADDRESS_SPACE 4294967295
int main (int argc, char *argv[]) {
long int pagesize = atoi(argv[1]), virtaddr = atoi(argv[2]);
if (virtaddr >= ADDRESS_SPACE) {puts("Address is too large"); return 1;}
printf("%lu\n", virtaddr);
printf("%lu\n", ADDRESS_SPACE);
printf("Page = %lu\nOffset = %lu\n", virtaddr/pagesize, virtaddr%pagesize);
return 0;
}
そして、実行./page 1024 9999999999999999999999999999999999999999999999
すると次の出力が得られます
18446744073709551615
4294967295
Page = 0
Offset = 18446744073709551615
virtaddr
がより大きい場合、ADDRESS_SPACE
ifステートメントが機能しないのはなぜですか?オーバーフローがあることは知っていますが、変数を出力してもエラーは表示されず、数値のままです(long intが取ることができる最大値)。