トップ «前の日記(2015-02-02(Mon)) 最新 次の日記(2015-02-04(Wed))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2015-02-03(Tue) 曇ってたが風は弱く、気温の割に寒くもなし

間違ってた可能性

clangを入れた(gccを入れてない) jessie(x86_64)と FreeBSD 11 CURRENT(amd64)で、 どちらも 昨日のコードに警告が出た。

$ cc --version
Debian clang version 3.5.0-9 (tags/RELEASE_350/final) \
(based on LLVM 3.5.0)
Target: x86_64-pc-linux-gnu
Thread model: posix
 
$ uname -a
Linux $HOST 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt2-1 \
(2014-12-08) x86_64 GNU/Linux
$ cc -Weverything -o dog dog.c
dog0.c:5:20: warning: implicit conversion changes \
signedness: 'int' to 'char'
      [-Wsign-conversion]
        dog[0] =   0xe7 ;
               ~   ^~~~
dog0.c:6:20: warning: implicit conversion changes \
signedness: 'int' to 'char'
      [-Wsign-conversion]
        dog[1] =   0x8a ;
               ~   ^~~~
dog0.c:7:20: warning: implicit conversion changes \
signedness: 'int' to 'char'
      [-Wsign-conversion]
        dog[2] =   0xac ;
               ~   ^~~~
3 warnings generated.

次のようにすると警告なしになった。

$ diff dog.c dog1.c
5,7c5,7
<         dog[0] =  0xe7 ;
<         dog[1] =  0x8a ;
<         dog[2] =  0xac ;
---
>         dog[0] = (char) 0xe7 ;
>         dog[1] = (char) 0x8a ;
>         dog[2] = (char) 0xac ;

char の判定も、このように書いてやっと clangの警告が出なくなった。
ちなみに3dは関係なく削除。

#include<stdio.h>
#define SIGN_NUM (char) 129
int  main() {
  unsigned char ex_uc = (unsigned char) SIGN_NUM;
  signed char ex_ac = (signed char) SIGN_NUM;
  char im_c = SIGN_NUM;
  printf("unsignd char:%d\n", ex_uc);
  printf("signed char:%d\n", ex_ac);
  printf("implict char:%d\n", im_c);
  return 0;
}

RasPI Aでのセルフビルド

FreeBSD 11.0-CURRENT r277866 で make buildworldした 結果、4844分6.591秒かかったらしい。
80時間と44分余り、3日と8時間44分6.6秒。
さて、時刻合わせが済んだら make buildkernelせねば。
こちらは予想で21時間くらい?

一晩IP Unreachableだった。ntpdateしたら3秒ほど進みすぎていた。

make buildkernelは391分3.885sで終了した。

再度RasPiのFreeBSDで追試。

sigh_test は、次のように書くと警告はなかった。

#include<stdio.h>
#define SIGN_NUM  129
int  main() {
  unsigned char ex_uc =  SIGN_NUM;
  signed char ex_ac =  (signed char) SIGN_NUM;
  char im_c = SIGN_NUM;
  printf("unsignd char:%d\n", ex_uc);
  printf("signed char:%d\n", ex_ac);
  printf("implict char:%d\n", im_c);
  return 0;
}

デフォルトがunsigned char だから、なのかもしれない。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。