[解決済み] マクロ名に有効な文字は何ですか?
質問事項
C言語のマクロ名には、識別子と同じ命名規則が適用されるのでしょうか? コンパイラのアップグレード後、レガシーアプリケーションでこの警告が表示されるようになりました。
warning #3649-D: white space is required between the macro name "CHAR_" and its replacement text
#define CHAR_& 38
この行は、アンパサンドに対応するASCII値定数を定義しています。
#define DOL_SN 36
#define PERCENT 37
#define CHAR_& 38
#define RT_SING 39
#define LF_PAR 40
この定義(私が知る限り、実際にはどのコードからも参照されていません)はバグであり、"CHAR_AMPERSAND"のようなものに変更する必要があると推測します。
解決方法は?
マクロ名は英数字とアンダースコアのみで構成されます。
'a-z'
,
'A-Z'
,
'0-9'
および
'_'
また、最初の文字は数字であってはならない。 プリプロセッサによっては,ドル記号文字
'$'
残念ながら、私はC言語の規格を持ってないので、引用できませんが。
より GCCドキュメント :
前処理トークンは、次の5つに分類されます。 識別子に大別されます。 前処理番号、文字列 リテラル、パンクチュエーター、その他。また 識別子 は C言語における識別子。 文字、数字、アンダースコアで構成されています。 は文字またはアンダースコアで始まる。 C言語のキーワードは プリプロセッサーは通常の 識別子です。マクロを定義することができます。 をキーワードにしたものです。 唯一の識別子は プリプロセッシングキーワードとみなされるのは
defined
. 定義済み」を参照してください。これは他の言語でもほとんど同じです。 Cプリプロセッサを使用するもの。しかし C++のキーワードのうち、いくつかは プリプロセッサーでも重要です。 C++名前付き演算子」を参照してください。
1999年C言語規格では、識別子 に含まれない文字が含まれることがあります。 基本ソース文字セット "の 実装側の判断で (アクセント付きのラテン文字、ギリシャ文字など 文字、中国語の表意文字)。これは は拡張文字で行うことができます。 セット、または
'\u'
と'\U'
エスケープ というシーケンスがあります。この実装は の機能は実験的なものであり、このような 文字が受け入れられるのは'\u'
と'\U'
を形成し、かつ、その場合のみ-fextended-identifiers
が使用されます。拡張機能として、GCCは
'$'
として 文字になります。との互換性を保つためです。 VMSのような、一部のシステムで'$'
は、システムで定義された 関数とオブジェクトの名前です。'$'
は は、厳密には適合するモードの文字です。 を指定した場合、または-$
オプションで指定します。参照 呼び出すことができます。
関連
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】定義と宣言の違いは何ですか?
-
[解決済み】ストリクト・エイリアシング・ルールとは何ですか?
-
[解決済み】C言語でデバッグ印刷を行うための#defineマクロ?
-
[解決済み】Javaで有効な@SuppressWarningsの警告名のリストは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】配列型char[]が代入できない [重複]。