DCが長い数字を分割して印刷するのはなぜですか?

DCが長い数字を分割して印刷するのはなぜですか?

ユーティリティの実行時にdc非常に大きな数字を入力すると、次のように表示されます。

99999999999999999999999999999999999999999999999999999999999999999999999

プリントを使用すると、次のような結果がp得られます。

999999999999999999999999999999999999999999999999999999999999999999999\
999

69ビット後に出力を分割するのはなぜですか?

ベストアンサー1

少なくともGNU実装の場合、dc70文字はハードコードされていますDEFAULT_LINE_MAX。もちろん、DC_LINE_LENGTH環境変数を設定してこれを上書きすることもできます。からdc/numeric.c

559 static int out_col = 0;
560 static int line_max = -1;       /* negative means "need to check environment" */
561 #define DEFAULT_LINE_MAX 70
562 
563 static void
564 set_line_max_from_environment(void)
565 {
566         const char *env_line_len = getenv("DC_LINE_LENGTH");
567         line_max = DEFAULT_LINE_MAX;
568         errno = 0;
569         if (env_line_len) {
570                 char *endptr;
571                 long proposed_line_len = strtol(env_line_len, &endptr, 0);
572                 line_max = (int)proposed_line_len;
573 
574                 /* silently enforce sanity */
575                 while (isspace(*endptr))
576                         ++endptr;
577                 if (*endptr || errno || line_max != proposed_line_len
578                                         || line_max < 0 || line_max == 1)
579                         line_max = DEFAULT_LINE_MAX;
580         }
581 }
582 

だから

$ dc
999999999999999999999999999999999999999999999999999999999999999999999999
p
999999999999999999999999999999999999999999999999999999999999999999999\
999
q

しかし、

$ DC_LINE_LENGTH=0 dc
999999999999999999999999999999999999999999999999999999999999999999999999
p
999999999999999999999999999999999999999999999999999999999999999999999999
q
$ 

おすすめ記事