目次: Linux
最近は会社でUniPhier向けのオーディオドライバ(+周辺の改変)をLinuxにcontributeしていました。
先日リリースされたLinux 4.17にも、当然ながら自分の書いたコードが入っています。LinuxのMAINTAINERSやコミットログに自分の名前が載っているのは、何だか不思議な感じがします。
UniPhierは残念ながらPCやスマホには縁が無いSoCですが、一部のテレビに入っていますので、気づかぬうちに使っているかもしれません。
メモ: 技術系の話はFacebookから転記しておくことにした。
目次: C言語とlibc
会社で隣の席の方がハマっていて相談されたことのメモです。といっても、私も調べて初めて知りましたから、偉そうなことは言えませんけども。
C言語をコンパイルする際、gccに言語標準オプション(-std)を付けてコンパイルすると「デフォルトの拡張機能」が全てOFF になります。
デフォルトの拡張機能とは、具体的には _DEFAULT_SOURCEを定義すると有効になる機能で、マニュアル(Man page of FEATURE_TEST_MACROS の _DEFAULT_SOURCE (glibc 2.19以降) の節)によれば、
「デフォルト」定義は、POSIX.1-2008で必須となっている定義と、BSDとSystem V由来の種々の定義を公開する。glibc 2.19以前では、これらのデフォルトは以下を明示的に定義するのとほぼ等価である。
cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809
会社ではtimersub(BSD由来の機能)がコンパイルエラーになって初めて気づきました。普段POSIX由来か、BSD由来か、そんなことはほぼ意識せず使っていますから、最初はかなり意味不明でした。
この動きは機能は隠された機能でもバグでもなく、gccというかglibcの仕様です。先ほどのマニュアル(Man page of FEATURE_TEST_MACROS の _DEFAULT_SOURCE (glibc 2.19以降) の節)にも、
「デフォルト」が無効になるような状況は、個別のマクロが明示的に定義された場合や、コンパイラが「標準」モードのいずれか (例えばcc -std=c99) で起動された場合などである。
とあります。普段 -stdオプションなんて使わないので、こんな動きするなんて知りませんでしたね……。
イテレータには、
この2つがあるみたいで(他にもある?)、どらちもパーフェクトではありません。
C++ もJavaも書いたことがある身としては、別にどちらの方式でも困らないと思っていたのですが、JavaでRandom Iteratorが使いたいときは、どうしたら良いのかわかりませんでした。
リストのインデックスを内包し、リストの要素の型を取るジェネリッククラスでも作れば良いのだろうか…??
メモ: 技術系の話はFacebookから転記しておくことにした。
< | 2018 | > | ||||
<< | < | 04 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | - | - | - | - | - |
合計:
本日: