link もっと前
   2018年 4月 16日 -
      2018年 4月 7日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

C 言語のデフォルト機能と標準機能

会社で隣の席の方がハマっていて相談されたことのメモです。といっても、私も調べて初めて知りましたから、偉そうなことは言えませんけども。

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 オプションなんて使わないので、こんな動きするなんて知りませんでしたね……。

[編集者: すずき]
[更新: 2018年 4月 14日 21:29]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

外部イテレータ

イテレータには、

C++ 方式
集合の要素を指す
Java 方式
集合の要素の「間」を指す

この 2つがあるみたいで(他にもある?)、どらちもパーフェクトではありません。

C++ 方式
end が特殊(参照できない、ある Iterator の begin と Reverse Iterator の end は一致しない)
Java 方式
Random Iterator が定義できない(?)少なくとも Java には無い

C++ も Java も書いたことがある身としては、別にどちらの方式でも困らないと思っていたのですが、Java で Random Iterator が使いたいときは、どうしたら良いのかわかりませんでした。

リストのインデックスを内包し、リストの要素の型を取るジェネリッククラスでも作れば良いのだろうか…??

メモ: 技術系の話は Facebook から転記しておくことにした。

[編集者: すずき]
[更新: 2018年 4月 14日 21:39]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2018年 4月 16日 -
      2018年 4月 7日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 9/17 20:03

カレンダー

<2018>
<<<04>>>
1234567
891011121314
15161718192021
22232425262728
2930-----

最近のコメント 5件

  • link 18年09月07日
    すずき 「ありがとう!\nこちらこそ、楽しみにして...」
    (更新:09/11 19:30)
  • link 18年09月07日
    よしだあ 「おつかれさまでした!\nまた仕事できるの...」
    (更新:09/11 19:17)
  • link 18年08月15日
    すずき 「うーん、なんか暴走したり、動かなかったり...」
    (更新:08/15 10:52)
  • link 18年08月15日
    すずき 「実行できた。あと実行ファイルパスについて...」
    (更新:08/15 10:42)
  • link 18年08月15日
    すずき 「さすがに x86_64 と arm のク...」
    (更新:08/15 10:35)

最近の記事 20件

link もっとみる
  • link 18年09月13日
    すずき 「[府民から都民へ] 家が決まりました。今月末から東京都民です。さよ...」
    (更新:09/17 20:03)
  • link 18年09月11日
    すずき 「[エアコン浄化] 今年の 7月に(2018年 7月 17日の日記参...」
    (更新:09/17 19:38)
  • link 18年09月10日
    すずき 「[引っ越し準備] 引っ越し用の新品の段ボールが 50箱以上届き、家...」
    (更新:09/17 19:32)
  • link 18年09月07日
    すずき 「[最終勤務日] 今日は Socionext の最終勤務日でした。9...」
    (更新:09/09 01:21)
  • link 18年09月06日
    すずき 「[さくらのメールサーバーと git send-email] 自宅か...」
    (更新:09/07 01:24)
  • link 18年09月03日
    すずき 「[ROCK64 のカーネルだけ元に戻したい] ROCK64 のカー...」
    (更新:09/04 01:34)
  • link 18年08月27日
    すずき 「[DTI の配ってくる IP アドレス] 以前、高槻市での WAK...」
    (更新:08/31 01:40)
  • link 18年08月26日
    すずき 「[不思議なダメージ計算式] 宇宙戦艦物語 RPG というスマホのゲ...」
    (更新:08/31 01:27)
  • link 18年08月21日
    すずき 「[エアコンがまた臭くなった] 先日(2018年 7月 17日の日記...」
    (更新:08/23 19:25)
  • link 18年08月20日
    すずき 「[Rock64 の U-Boot スクリプトを読む] 先日(201...」
    (更新:08/22 00:04)
  • link 18年08月15日
    すずき 「[自分のマシンは何 GFLOPS か? その 3] その 1、その...」
    (更新:08/15 10:46)
  • link 18年08月14日
    すずき 「[自分のマシンは何 GFLOPS か? その 2] その 1、その...」
    (更新:08/15 10:08)
  • link 18年08月13日
    すずき 「[自分のマシンは何 GFLOPS か? その 1] その 1、その...」
    (更新:08/15 10:08)
  • link 18年08月12日
    すずき 「[ARM PC で開発できるか?] 最近の ARM 搭載 SoC ...」
    (更新:08/14 13:32)
  • link 18年08月10日
    すずき 「[エディタ] 誰しもお気に入りのエディタがあると思いますが、私は割...」
    (更新:08/12 21:55)
  • link 19年08月11日
    すずき 「[間違えた] 1年、間違えたので、消す。...」
    (更新:08/12 21:33)
  • link 18年08月11日
    すずき 「[地震保険] AIG 損害保険から「大阪北部地震で被害を受けた方は...」
    (更新:08/12 21:32)
  • link 18年08月08日
    すずき 「[久しぶりに自作 ARM エミュレータ] 久しぶりに自作 ARM ...」
    (更新:08/09 00:51)
  • link 18年08月05日
    すずき 「[微妙に壊れてる ThinkPad E480 のキーボード] 先日...」
    (更新:08/05 01:20)
  • link 18年08月04日
    すずき 「[車検] 先週、大阪スバル(高槻店)にレガシィの車検をお願いしてい...」
    (更新:08/05 00:38)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報