目次: C言語とlibc
C/C++ 言語のヘッダをインクルードする#includeディレクティブには2つの指定方法があります。1つは #include <cstdio> のように山括弧で囲う方法、もう1つは #include "cstdio" のように二重引用符で囲う方法です。
このうち山括弧で囲う方は少し変わった文法規則になっており、ファイル名に '>' や改行を指定できない特徴があります。詳細は下記の通りです。
N3797 Working Draft, Standard for Programming Language C++ より ---- control-line: # include pp-tokens new-line (...略...) pp-tokens: preprocessing-token pp-tokens preprocessing-token preprocessing-token: header-name ★これ identifier pp-number character-literal user-defined-character-literal string-literal user-defined-string-literal preprocessing-op-or-punc each non-white-space character that cannot be one of the above header-name: < h-char-sequence > ★これ " q-char-sequence " h-char-sequence: h-char h-char-sequence h-char h-char: any member of the source character set except new-line and >
注目すべきは文字列リテラルと異なり、エスケープ規則がないことです。エスケープしようとして \> と書いても「バックスラッシュと山括弧」と認識されてしまい '>' を指定したことになりません。
従って、もしヘッダのファイル名に '>' が含まれていると、#include "..." ではインクルードできるのに、#include <...> ではインクルードできない、変なヘッダファイルになってしまいます。C/C++ 言語の制約と言えば制約ですけど、そんな変なヘッダ名を付ける人は居ないので、ほぼ実害はありません。
規格書を見ると、header-nameは #include専用と言って良いほどの特殊な文法です。何気なく使っている #includeの意外な一面を見た気がします。
この記事にコメントする
目次: 自宅サーバー
目次: Kindle
先日(2017年4月16日の日記参照)の続きです。
全く起動しなくなったASRock J4205-ITXを初期不良で交換してもらうべく、ASRockのサポートフォームから質問してみましたが、全く返事が来ず途方に暮れていました。
もうどうしようも無いので、ダメ元でAmazonのカスタマサービスに泣きついてみたところ、事情を考慮して交換に応じて頂けるとのこと。さすがAmazonさん。
交換までしてもらって、実はマザーボードの故障ではなく、奇跡の確率でメモリが2つとも不良品だったらどうしよう?この期に及んでメモリも交換してださい、なんて絶対言えないだろ……などと若干不安に思っていました。
しかし、目の前にあるノートPC (ThinkPad Edge E420) はSandyBridgeなCore i5マシンです。DDR3 1333 SODIMMが使えます。つまりこのノートPCを使えば新しく買ったメモリの動作テストができます。
今思えば1週間もASRockのマザーと闘うくらいなら、最初からノートPCにブッ差せば良かったです。こんな初歩的なことに気づいていなかったとは不覚。
早速、ノートPCの裏蓋を剥がしメモリを差し替えました。拍子抜けするほどあっさりWindows 10が起動しました。やはりメモリは壊れておらず、マザーボードの故障で間違いなさそうです。良かっ…いや、壊れているから良いというのも変か、だけど、何だかホッとしました。
メモ: 技術系の話はFacebookから転記しておくことにした。追記もした。
この記事にコメントする
目次: 自宅サーバー
先日(2017年4月5日の日記参照)の続きです。
ASRock J4205-ITXが完全にお亡くなりになりました。ついにDDR 1枚差しでもUEFIが起動しなくなりました(※)。マザーボードを交換してほしいですが、Amazonの初期不良対応を見ると、メーカー担当者の名前を書けとあります。
しかし2週間前にメールしたASRockのサポートには完全に無視されていて、書きようがありません。どうしたら良いんでしょう。困りました。
DDRは2枚ありますがどちらを差しても、ウンともスンとも言いません。以前はこの状態に陥ってもCMOSクリアでなんとか起動していました(当然、設定は全部やりなおし)が、それすらもダメでした。
電源は2種類試したけど起動しません。電源の故障ではありません。ディスプレイは他のマシンに差せば映るので、ディスプレイでもありません。残るはマザーボードとメモリしかないので、マザーボードの初期不良、もしくは、メモリ2枚同時の初期不良しか考えられません。
しかしメモリの線は薄いと思います。1つならまだしも2つ同時に初期不良はありえないです。ほぼ間違いなくマザーボードがイカれてます。
メモ: 技術系の話はFacebookから転記しておくことにした。
この記事にコメントする
Western Digital WD Red (WD40EFRX-RT2) を買いました。Amazonで18,000円です。
ファイルサーバのHDDがほぼ付けっぱなしで2年ほど経つので、そろそろ壊れても不思議じゃ無いなあと思って、買い換えました。
WD40EFRXは、末尾に何も付かない型番と、RT2が付く型番があります。どちらも同じ容量4TBですが、プラッタ1枚の容量が異なり、無印は1TBプラッタx 4、RT2は1.33TBプラッタx 3 なのだとか。へえー。
WD RedはNAS向けと銘打っており5,400rpmの省エネ&長寿命仕様です。プラッタ枚数が少ない方が軽くてより省エネだろうから、RT2で良かったのでしょう。きっと。目に見えるほど違いがあるかは知りませんけども。
安いけど驚異の故障率で有名になってしまったSeagate Barracuda 7200.14 ST3000DM001と入れ替えました。これで家の3.5インチHDDは全部Western Digitalになりました。
メモ: 技術系の話はFacebookから転記しておくことにした。追記もした。
この記事にコメントする
| < | 2017 | > | ||||
| << | < | 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 | - | - | - | - | - | - |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: