diff options
Diffstat (limited to 'content/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes.xml')
| -rw-r--r-- | content/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes.xml | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/content/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes.xml b/content/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes.xml index 7f5fc66..3dbb8ff 100644 --- a/content/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes.xml +++ b/content/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes.xml @@ -16,16 +16,16 @@ </revision> </revhistory> </info> - <simpara> + <para> この記事は Qiita から移植してきたものです。 元 URL: <link xl:href="https://qiita.com/nsfisis/items/94090937bcf860cfa93b">https://qiita.com/nsfisis/items/94090937bcf860cfa93b</link> - </simpara> - <simpara> + </para> + <para> <hr/> - </simpara> - <simpara> + </para> + <para> タイトル落ち。まずはこのコードを見て欲しい。 - </simpara> + </para> <programlisting language="cpp" linenumbering="unnumbered"> <![CDATA[ #include <iostream> @@ -50,24 +50,24 @@ ]]> </programlisting> <blockquote> - <simpara> + <para> コンパイラのバージョン $ clang++ –version Apple clang version 11.0.0 (clang-1100.0.33.8) Target: x86_64-apple-darwin19.6.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin - </simpara> - <simpara> + </para> + <para> コンパイルコマンド (C17指定) $ clang –std=c++17 hoge.cpp - </simpara> + </para> </blockquote> - <simpara> + <para> この記事から得られるものはこれ以上ないので以下は蛇足になる。 - </simpara> - <simpara> + </para> + <para> 別件で cppreference.com の <link xl:href="https://en.cppreference.com/w/cpp/language/identifiers">identifier のページ</link> を読んでいた時、次の文が目に止まった。 - </simpara> + </para> <blockquote> <itemizedlist> <listitem> @@ -81,53 +81,53 @@ </listitem> </itemizedlist> </blockquote> - <simpara> + <para> キーワードでも属性として指定する場合は非キーワードとして使えるらしい。 実際にやってみる。 - </simpara> - <simpara> + </para> + <para> 同サイトの <link xl:href="https://en.cppreference.com/w/cpp/keyword">keywords のページ</link> から一覧を拝借し、上のコードが出来上がった (C++17 においてキーワードでないものなど、一部省いている)。 大量の警告 (unknown attribute `〇〇' ignored) がコンパイラから出力されるが、コンパイルできる。 - </simpara> - <simpara> + </para> + <para> 上のコードでは <literal>[[using]]</literal> をコメントアウトしているが、これは <literal>using</literal> キーワードのみ属性構文の中で意味を持つからであり、このコメントアウトを外すとコンパイルに失敗する。 - </simpara> + </para> <programlisting language="cpp" linenumbering="unnumbered"> <![CDATA[ // using の例 [[using foo: attr1, attr2]] int x; // [[foo::attr1, foo::attr2]] の糖衣構文 ]]> </programlisting> - <simpara> + <para> C++17 の仕様も見てみる (正確には標準化前のドラフト)。 - </simpara> - <simpara> + </para> + <para> 引用元: <link xl:href="https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4">https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4</link> - </simpara> + </para> <blockquote> - <simpara> + <para> If a keyword or an alternative token that satisfies the syntactic requirements of an identifier is contained in an attribute-token, it is considered an identifier. - </simpara> + </para> </blockquote> - <simpara> + <para> 「<literal>identifier</literal> の構文上の要件を満たすキーワードまたは代替トークンが <literal>attribute-token</literal> に含まれている場合、<literal>identifier</literal> とみなされる」とある。どうやら間違いないようだ。 - </simpara> - <simpara> + </para> + <para> ところで、代替トークン (alternative token) とは <literal>and</literal> (<literal>&</literal>) や <literal>bitor</literal> (<literal>|</literal>) などのことだが、<literal>identifier</literal> の構文上の要件を満たさないような代替トークンなどあるのか? 疑問に思って調べたところ、代替トークンという語にはダイグラフも含まれるらしい (参考: <link xl:href="https://timsong-cpp.github.io/cppwp/n4659/lex.digraph">同ドラフト</link>) - </simpara> + </para> <itemizedlist> <listitem><literal><%</literal> → <literal>{</literal></listitem> <listitem><literal>%></literal> → <literal>}</literal></listitem> @@ -136,11 +136,11 @@ <listitem><literal>%:</literal> → <literal>#</literal></listitem> <listitem><literal>%:%:</literal> → <literal>##</literal></listitem> </itemizedlist> - <simpara> + <para> 「<literal>identifier</literal> の構文上の要件を満たさないような代替トークン」はこれらが当てはまると思われる。 - </simpara> - <simpara> + </para> + <para> 調べた感想: 字句解析器か構文解析器が辛そう - </simpara> + </para> </article> |
