コンテンツにスキップ

ノート:名前修飾

ページのコンテンツが他言語でサポートされていません。

外部リンク修正[編集]

編集者の皆さんこんにちは、

名前修飾」上の2個の外部リンクを修正しました。今回の編集の確認にご協力お願いします。もし何か疑問点がある場合、もしくはリンクや記事をボットの処理対象から外す必要がある場合は、こちらのFAQをご覧ください。以下の通り編集しました。

編集の確認が終わりましたら、下記のテンプレートの指示にしたがってURLの問題を修正してください。

ありがとうございました。—InternetArchiveBot (バグを報告する) 2017年9月28日 (木) 14:32 (UTC)[返信]

C/C++の予約語に関する記述について[編集]

#include <stdio.h>

int _ZN9wikipedia7article6formatE(int a) {
  return a * 10;
}

int main(void) {
  printf("Hello, World! %d\n", _ZN9wikipedia7article6formatE(10));
}

というコードのコンパイルが gcc-11 (Homebrew GCC 11.2.0_1) 11.1.0およびApple clang version 13.0.0 (clang-1300.0.29.30)で通ることを確認しました。

もし、記事本文中の

下線に大文字を続けたものはCおよびC++では予約語であることに注意されたい

という記述が単純な誤りでないならば、この記述の元になった資料を追記して欲しいです。--Frodo812会話2022年8月2日 (火) 03:57 (UTC)[返信]

例えばDCL37-C. 予約済み識別子の宣言や定義をしないにその記載があります。同ページに「プログラムが予約済みの識別子を宣言または定義する場合、または予約済みの識別子をマクロ名として定義する場合、その動作は未定義とする。」と記述されているように、コンパイラが検出してエラーを出すと定められているわけでもないのです。
実情としては、標準ライブラリの実装やコンパイラ独自の機能でこのような予約されている識別子を使用し、アプリケーションやライブラリではこれらを使わないことで、両者の間で将来にわたって識別子の衝突が発生しないようにすることを意図していると思われます。提示されたコードを例にすると、未来のgccでstdio.hの中で#define _ZN9wikipedia7article6formatEという記述が追加され、このコードがコンパイルできなくなっても文句は言えないということです。
もっとも、これを「予約語」と表現するのは適切ではないかもしれません。予約語ではこれを「予約済みの識別子 (reserved identifiers)」と表記しています。もともとのCやC++の標準規格でそのような表現をしているからだと思います。こちらの記事でも該当箇所について「予約済みの識別子」に書き換えるほうがいいかもしれません。--Wdpp会話2022年8月5日 (金) 16:27 (UTC)[返信]