明らかに、コンパイラが@
文字に遭遇すると、(コメントまたは文字列リテラルでない限り)構文エラーが発生します。しかし、文字が見つかった場合など。 #if 0
ブロック内に、プログラムは技術的に有効ですか?@文字はCソースで使用できますか?
私はこの試みた:GCCと打ち鳴らすの両方で、-pedantic -Wall -Wextra
で
#define NOTHING(x)
int main()
{
NOTHING(@@@@);
return 0;
}
をし、それが何の警告を与えませんでした。私はそれが働くことが保証されているかどうか、あるいは彼らがそれに対して特別な警告をしていないかどうかはわかりません。
標準で何か言い分が見つかりませんでしたが、気になっています。私はこれに基づいて標準のコンパイラがそれを突き止めていることを知るために、ツールをベースにしたくありません。
段階で、長い文字列化を含み、マクロの拡大、後のは、「@は有効なプリプロセッサトークンです」 - これは、ここで重要である、と関連する標準セクションでは、[C11セクション6.4]のようです(http://port70.net/~nsz/c/c11/n1570.html#6.4)、 'preprocessing-token'の定義には、他の前処理トークンカテゴリと一致しない空白以外の文字が含まれています。 – user2357112
ありがとう!それは私の質問に完全に答えます。 – mtijanic