無効な文字マクロで使用できないものはありますか?
#define TE$T 8
が動作しているようですので、$
が有効です。
誰かが無効な文字のリストを持っていますか? (または逆に有効なもののリスト)。Cプリプロセッサ/マクロに無効な文字がありますか?
答えて
これは、識別子として$
の使用を許可するコンパイラです。 -pedantic
などでコンパイルすると、標準ではないので、他のコンパイラがコンパイラにコンパイラを提供することを期待してはいけません。 C11のドラフトの一般的な拡張付録で
:
J.5.2専門識別子
はの一部ではないことを、アンダースコア以外の文字_、文字、数字、基本ソース文字セット(ドル記号$などのまたは各国文字セットの文字)が識別子(6.4.2)に表示されることがあります。
6.4.2ショー何文字すべての準拠のコンパイラ サポートにあります。
6.4.2 Identifiers
6.4.2.1 General
Syntax 1 identifier:
identifier-nondigit
identifier identifier-nondigit
identifier digit
identifier-nondigit:
nondigit
universal-character-name
other implementation-defined characters
nondigit: one of
_ a b c d e f g h i j k l m
n o p q r s t u v w x y z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
digit: one of
0 1 2 3 4 5 6 7 8 9
あなたがそれらに自分自身を制限する必要があります。
マクロ名は英数字とアンダースコア( 'a-z'、 'A-Z'、 '0-9'、 '_')で構成され、最初の文字は数字であってはなりません。一部のプリプロセッサでは、ドル記号「$」も使用できますが、使用しないでください。
をこの上の顔をしているとても
$
が有効である、#define TE$T 8
が働いているようです。
これは正しくありません。 $
は、標準Cの識別子の有効な文字ではありません。たとえば、GCCなどの一部のコンパイラでは、識別子として$
を拡張子として使用できます。 (Dollar Signsを参照してください)
あなたは間違った質問をしています。マクロ内の名前には特別なものはありません。すべてのプリプロセッサはテキストの置き換えです。
間違っている!標準では必須ではありませんが、標準ではそのような追加文字を使用できるので、特定の実装(gccなど)では非常に有効な文字です。 – Olaf
がsomefille.c
#include<stdio.h>
#define NAM$ "SomeName"
int main(void)
{
printf("Name - %s\n",NAM$);
return 0;
}
gcc -pedantic somefille.c -o somefille
で上記のコンパイルを検討することは、あなたに
somefille.c:2:9: warning: '$' in identifier or number [enabled by default]
#define NAM$ "SomeName"
を与えるこの[ page ]氏は述べています。
-pedantic
は、厳格なISO CとISO C++で要求されたすべての警告を発行します。禁止された拡張子を使用するすべてのプログラムと、ISO CおよびISO C++に従わない他のいくつかの プログラムを拒否します。 ISO Cでは、使用される-stdオプションで指定されたISO C標準の バージョンに従います。
マクロ名にはスペースが含まれていなくてはならず、C変数に従う命名規則と同じでなければなりません。英字、数字、およびアンダースコア(_)文字のみ使用できます、最初の文字は数字にすることはできません。
問題は、さまざまなコンパイラがこれに準拠していないことです。例は上記のgccです。
マクロ名は、あなたがこれを侵害した場合は以下のようにエラーが出ることがあり、数字で始めることはできません:
error: macro names must be identifiers
-
はルールの下にまだ従っている、と述べましたマクロ名にはスペースを入れてはいけません。例えば
#define FULL NAME "Your name"
のためにあなたに与えます:error: ‘NAME’ undeclared (first use in this function)
- 1. エラー:パスに無効な文字があります
- 2. 入力ストリームに無効な文字があります
- 3. フォルダ名の末尾に無効な文字があります
- 4. 応答ボディに無効な文字があります
- 5. SQL Server - パラメータ名に無効な文字があります
- 6. Android:属性名に無効な文字があります '
- 7. Fortranポインターエラー:「名前に無効な文字があります」
- 8. Kaggleの出力パスに無効な文字があります
- 9. XMLフィードデータに無効な文字があります
- 10. 識別子に無効な文字があります。4
- 11. パスワードに無効な文字はありますか?
- 12. JSフォームの検証、無効な文字はありますか?
- 13. グループエラー:TypeError:無効な文字列/バッファーチャンクがありません
- 14. エラー:(2)タグ<manifest>属性パッケージに無効な文字 '?'があります。
- 15. Crystal Reportの静的テキストに無効な文字があります
- 16. py2app:SyntaxError:セットアップファイルの識別子に無効な文字があります
- 17. タグ<manifest>属性パッケージに無効な文字があります。 '; '
- 18. C++文字列:無効なポインタエラー
- 19. Cプリプロセッサマクロの注文
- 20. 無効な文字
- 21. Java、Tomcat:無効な文字がクッキーの値にありました
- 22. 文字列に無効な文字が含まれていますか?
- 23. MYSQL:無効なJSONテキスト: "無効なエスケープ文字(文字列内)"
- 24. React createElementエラー "タイプが無効です - オブジェクトに文字列があります"
- 25. 無効な文字(漢字)
- 26. J2MEのストリームから無効なXML文字を取り除く方法はありますか? org.xml.sax.SAXParseException:無効な文字
- 27. C#エラー - Base-64文字列の無効な文字
- 28. Djangoなぜurls.pyのこの行に無効な構文がありますか?
- 29. BadKeyError:無効な文字列キーのパディングが正しくありません
- 30. 要素タイプが無効です:文字列/クラス/関数がありますオブジェクト:
マクロ識別子が数字で起動しないことがあります。 – alk