sksat
sksat
色々conflictしてたのでrebase
あーなるほどそういうことか...Doxygenの記法であったので使えるかと思ったんですがそっちに弾かれるとは
型付けたすぎるけどCだとそうするしかないですよねー.`define`でやる分にはメモリ喰うわけでもないですし全部coreに寄せてよさそう.
C89そうなんだ.C++なら `constexpr`という武器があるんですけどねえ. とはいえCだとそもそもろくに型付けられないので定数は `define` 一択だと思います.
まず `static_assert()` と `assert()` は別物です.前者は**コンパイル時**にやる検証で,後者は**実行時**にやる検証. で,`assert()`はCからある文化ですが(実装としてはダメだったらabortするだけなので),`static_assert()`はコンパイラが頑張らないといけない.そしてCはコンパイラが頑張れない時代からの言語なので当然そういうのは無い,という. ただ,C11からは`static_assert()`的な物体である `_Static_assert()` が存在はします. https://www.ibm.com/docs/ja/zos/2.3.0?topic=declarations-static-assert-declaration-c11
前にコンパイル時検査したいな〜〜〜と思ったことはあって, - `_Static_assert()`をC11以前では無に潰すマクロで包む - 検査用にC11でビルドを回す みたいな曲芸をすればできなくはないなあとは思ったんですが,しかし...
`assert()`は実行時に落とすわけなのでまずどうやって動かすねん/落ちた後どうすんねんという問題があるわけですが,我々にはSILSという武器があるので入れられるところに入れまくるのはかなりアリだと思っています(そしてCIでSILS回したくなってくる).
そんなことはなくて,こんなかんじになります.そしてSILSではC2A普通にリンクするので素の`assert()`でいい. ![image](https://user-images.githubusercontent.com/23310673/154398339-0c31c5e7-d4ef-4d4c-a4a6-1a52c42a37cd.png)
ちょっと例分かりにくかったので差し替えましたが中身も分かる. です > リリース版は `NDEBUG` で落とす