diff options
| author | nsfisis <nsfisis@gmail.com> | 2023-03-18 19:51:06 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2023-03-18 19:51:06 +0900 |
| commit | 7f15e0b8277ac8b101b4f71ce57c1c5442927141 (patch) | |
| tree | 31d54a18ede023adeb23a984c907860d667288bd /public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html | |
| parent | 032dc3c5e6d0ef84a9f4ea6be10e19b7f43c53b8 (diff) | |
| download | blog.nsfisis.dev-7f15e0b8277ac8b101b4f71ce57c1c5442927141.tar.gz blog.nsfisis.dev-7f15e0b8277ac8b101b4f71ce57c1c5442927141.tar.zst blog.nsfisis.dev-7f15e0b8277ac8b101b4f71ce57c1c5442927141.zip | |
fix(nuldoc): fix whitespaces being trimmed
Diffstat (limited to 'public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html')
| -rw-r--r-- | public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html | 82 |
1 files changed, 41 insertions, 41 deletions
diff --git a/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html b/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html index 74ad22d..dc9d084 100644 --- a/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html +++ b/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html @@ -57,18 +57,18 @@ </ol> </section> <p> - この記事は Qiita から移植してきたものです。 元 URL:<a href="https://qiita.com/nsfisis/items/94090937bcf860cfa93b">https://qiita.com/nsfisis/items/94090937bcf860cfa93b</a> + この記事は Qiita から移植してきたものです。 元 URL: <a href="https://qiita.com/nsfisis/items/94090937bcf860cfa93b">https://qiita.com/nsfisis/items/94090937bcf860cfa93b</a> </p> - + <p> <hr> </hr> </p> - + <p> タイトル落ち。まずはこのコードを見て欲しい。 </p> - + <pre class="highlight" language="cpp" linenumbering="unnumbered"><code class="highlight"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string"><iostream></span></span> [[<span class="hljs-keyword">alignas</span>]] [[<span class="hljs-keyword">alignof</span>]] [[<span class="hljs-keyword">and</span>]] [[<span class="hljs-keyword">and_eq</span>]] [[<span class="hljs-keyword">asm</span>]] [[<span class="hljs-keyword">auto</span>]] [[<span class="hljs-keyword">bitand</span>]] @@ -88,105 +88,105 @@ <span class="hljs-type">int</span> <span class="hljs-built_in">main</span>() { std::cout << <span class="hljs-string">"Hello, World!"</span> << std::endl; }</code></pre> - + <blockquote> <p> コンパイラのバージョン $ 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 </p> - + <p> コンパイルコマンド (C17指定) $ clang –std=c++17 hoge.cpp </p> </blockquote> - + <p> この記事から得られるものはこれ以上ないので以下は蛇足になる。 </p> - + <p> - 別件で cppreference.com の<a href="https://en.cppreference.com/w/cpp/language/identifiers">identifier のページ</a>を読んでいた時、次の文が目に止まった。 + 別件で cppreference.com の <a href="https://en.cppreference.com/w/cpp/language/identifiers">identifier のページ</a> を読んでいた時、次の文が目に止まった。 </p> - + <blockquote> <ul> <li> - the identifiers that are keywords cannot be used for other purposes; + the identifiers that are keywords cannot be used for other purposes; <ul> <li> - The only place they can be used as non-keywords is in an attribute-token. (e.g. [[private]] is a valid attribute) (since C++11) + The only place they can be used as non-keywords is in an attribute-token. (e.g. [[private]] is a valid attribute) (since C++11) </li> </ul> </li> </ul> </blockquote> - + <p> キーワードでも属性として指定する場合は非キーワードとして使えるらしい。 実際にやってみる。 </p> - + <p> - 同サイトの<a href="https://en.cppreference.com/w/cpp/keyword">keywords のページ</a>から一覧を拝借し、上のコードが出来上がった (C++17 においてキーワードでないものなど、一部省いている)。 大量の警告 (unknown attribute `〇〇' ignored) がコンパイラから出力されるが、コンパイルできる。 + 同サイトの <a href="https://en.cppreference.com/w/cpp/keyword">keywords のページ</a> から一覧を拝借し、上のコードが出来上がった (C++17 においてキーワードでないものなど、一部省いている)。 大量の警告 (unknown attribute `〇〇' ignored) がコンパイラから出力されるが、コンパイルできる。 </p> - + <p> - 上のコードでは<code>[[using]]</code>をコメントアウトしているが、これは<code>using</code>キーワードのみ属性構文の中で意味を持つからであり、このコメントアウトを外すとコンパイルに失敗する。 + 上のコードでは <code>[[using]]</code> をコメントアウトしているが、これは <code>using</code> キーワードのみ属性構文の中で意味を持つからであり、このコメントアウトを外すとコンパイルに失敗する。 </p> - + <pre class="highlight" language="cpp" linenumbering="unnumbered"><code class="highlight"><span class="hljs-comment">// using の例</span> [[<span class="hljs-keyword">using</span> foo: attr1, attr2]] <span class="hljs-type">int</span> x; <span class="hljs-comment">// [[foo::attr1, foo::attr2]] の糖衣構文</span></code></pre> - + <p> C++17 の仕様も見てみる (正確には標準化前のドラフト)。 </p> - + <p> - 引用元:<a href="https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4">https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4</a> + 引用元: <a href="https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4">https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4</a> </p> - + <blockquote> <p> 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. </p> </blockquote> - + <p> - 「<code>identifier</code>の構文上の要件を満たすキーワードまたは代替トークンが<code>attribute-token</code>に含まれている場合、<code>identifier</code>とみなされる」とある。どうやら間違いないようだ。 + 「<code>identifier</code> の構文上の要件を満たすキーワードまたは代替トークンが <code>attribute-token</code> に含まれている場合、<code>identifier</code> とみなされる」とある。どうやら間違いないようだ。 </p> - + <p> - ところで、代替トークン (alternative token) とは<code>and</code>(<code>&</code>) や<code>bitor</code>(<code>|</code>) などのことだが、<code>identifier</code>の構文上の要件を満たさないような代替トークンなどあるのか? 疑問に思って調べたところ、代替トークンという語にはダイグラフも含まれるらしい (参考:<a href="https://timsong-cpp.github.io/cppwp/n4659/lex.digraph">同ドラフト</a>) + ところで、代替トークン (alternative token) とは <code>and</code> (<code>&</code>) や <code>bitor</code> (<code>|</code>) などのことだが、<code>identifier</code> の構文上の要件を満たさないような代替トークンなどあるのか? 疑問に思って調べたところ、代替トークンという語にはダイグラフも含まれるらしい (参考: <a href="https://timsong-cpp.github.io/cppwp/n4659/lex.digraph">同ドラフト</a>) </p> - + <ul> <li> - <code><%</code>→<code>{</code> + <code><%</code> → <code>{</code> </li> - + <li> - <code>%></code>→<code>}</code> + <code>%></code> → <code>}</code> </li> - + <li> - <code><:</code>→<code>[</code> + <code><:</code> → <code>[</code> </li> - + <li> - <code>:></code>→<code>]</code> + <code>:></code> → <code>]</code> </li> - + <li> - <code>%:</code>→<code>#</code> + <code>%:</code> → <code>#</code> </li> - + <li> - <code>%:%:</code>→<code>##</code> + <code>%:%:</code> → <code>##</code> </li> </ul> - + <p> - 「<code>identifier</code>の構文上の要件を満たさないような代替トークン」はこれらが当てはまると思われる。 + 「<code>identifier</code> の構文上の要件を満たさないような代替トークン」はこれらが当てはまると思われる。 </p> - + <p> 調べた感想: 字句解析器か構文解析器が辛そう </p> |
