link もっと前
   2017年 4月 21日 -
      2017年 4月 12日  
link もっと後

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

日々

link permalink

include の謎の文法

C/C++ 言語のヘッダをインクルードする #include ディレクティブには 2つの指定方法があります。1つは #include <cstdio> のように山括弧で囲う方法、もう 1つは #include "cstdio" のように二重引用符で囲う方法です。

このうち山括弧で囲う方は少し変わった文法規則になっており、ファイル名に '>' や改行を指定できない特徴があります。詳細は下記の通りです。

#include <...> の文法規則
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 の意外な一面を見た気がします。

[編集者: すずき]
[更新: 2017年 4月 21日 00:24]
link 編集する

コメント一覧

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



link permalink

ありがとう Amazon さん

先日(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月 20日 23:47]
link 編集する

コメント一覧

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



link permalink

ついにお亡くなりになったマザーボード

先日(2017年 4月 5日の日記参照)の続きです。

ASRock J4205-ITX が完全にお亡くなりになりました。ついに DDR 1枚差しでも UEFI が起動しなくなりました(※)。

マザーボードを交換してほしいですが、Amazon の初期不良対応を見ると、メーカー担当者の名前を書けとあります。

しかし 2週間前にメールした ASRock のサポートには完全に無視されていて、書きようがありません。

どうしたら良いんでしょうね。困りました。

色々頑張った(※)記録

DDR は 2枚ありますがどちらを差しても、ウンともスンとも言いません。以前はこの状態に陥っても CMOS クリアでなんとか起動していました(当然、設定は全部やりなおし)が、それすらもダメでした。

電源は 2種類試したけど起動しません。電源の故障ではありません。ディスプレイは他のマシンに差せば映るので、ディスプレイでもありません。

残るはマザーボードとメモリしかないので、マザーボードの初期不良、もしくは、メモリ 2枚同時の初期不良しか考えられません。

しかしメモリの線は薄いと思っています。1つならまだしも 2つ同時に初期不良はありえないです。ほぼ間違いなくマザーボードがイカれてます。

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

[編集者: すずき]
[更新: 2017年 4月 17日 01:26]
link 編集する

コメント一覧

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



link もっと前
   2017年 4月 21日 -
      2017年 4月 12日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

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

最終更新: 8/22 00:04

カレンダー

<2017>
<<<04>>>
------1
2345678
9101112131415
16171819202122
23242526272829
30------

最近のコメント 5件

  • 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)
  • link 18年08月14日
    すずき 「ダイナミックリンクにするだけで性能がほぼ...」
    (更新:08/15 08:34)
  • link 18年08月14日
    hdk 「なるほど! LINKERを変えていなくて...」
    (更新:08/14 23:06)

最近の記事 20件

link もっとみる
  • 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)
  • link 18年07月23日
    すずき 「[U-Boot の distro boot] 昨日(2018年 7...」
    (更新:07/24 22:34)
  • link 18年07月22日
    すずき 「[ROCK64] Rockchip RK3328 搭載のシングルボ...」
    (更新:07/24 22:30)
  • link 18年07月21日
    すずき 「[Bluetooth UART 変換] UART を Blueto...」
    (更新:07/22 04:22)
  • link 18年07月17日
    すずき 「[エアコンが臭い] 「エアコンの嫌なニオイが完全に消えた」 "窓全...」
    (更新:07/17 22:53)
  • link 18年07月16日
    すずき 「[AArch64 向け Linux 開発環境の構築 その 2] そ...」
    (更新:07/17 22:46)
  • link 18年07月07日
    すずき 「[Android と MPEG2-TS その 3] その 1、その...」
    (更新:07/17 22:46)
  • link 18年07月06日
    すずき 「[Android と MPEG2-TS その 2] その 1、その...」
    (更新:07/17 22:45)
  • link 18年07月05日
    すずき 「[Android と MPEG2-TS その 1] その 1、その...」
    (更新:07/17 22:45)
  • link 18年07月08日
    すずき 「[Android と MPEG2-TS その 4] その 1、その...」
    (更新:07/17 22:44)

こんてんつ

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 サイトの情報