[解決済み] なぜC言語ではauto a=1;がコンパイルされるのですか?
質問
コードです。
int main(void)
{
auto a=1;
return 0;
}
は、MS Visual Studio 2012 のコンパイラで、拡張子が .c のファイルをエラーなくコンパイルすることができます。私は常々、拡張子.cを使用する場合、コンパイルはC++ではなく、Cの構文に従うべきだと考えています。さらに、私の知る限り、型を指定しないautoは許可されています。 だけです。 で、それはイニシャライザーから型が推論されることを意味します。
私のコンパイラはC言語にこだわっていないということでしょうか、それともコードは実際にC言語で正しいのでしょうか?
どのように解決するのですか?
auto
は古いC言語のキーワードで、ローカルスコープを意味します。
auto a
と同じです。
auto int a
と同じです。また、関数内で宣言された変数のデフォルトはローカルスコープなので、これも
int a
のようになります。
このキーワードは実はCの前身であるBの名残で、そこでは基本型が存在せず、すべてが
int
へのポインタです。
int
の配列
int
.(*) 宣言は以下のいずれかになります。
auto
または
extrn
[sic]です。Cは、"すべてを継承しています。
int
で整数を宣言することができました。
auto a;
extern b;
static c;
ISO C はこれを廃止しましたが、多くのコンパイラは後方互換性のためにまだこれを受け入れています。もしこれがなじみのないものだと感じたら、関連するルールが
unsigned d; // actually unsigned int
というのは、現代のコードではまだ一般的です。
C++11 では、C++ プログラマがほとんど本来の意味で使っていなかったこのキーワードを、型推論に再利用しています。これは、"everything is のため、ほとんど安全です。
int
という C のルールは C++98 ですでに削除されていたため、これはほぼ安全です。
auto T a
だけで、これは誰も使っていませんでした。(彼の
言語の歴史に関する論文
のどこかで、Stroustrup はこのことについてコメントしていますが、今、正確な文献を見つけることができません)。
(*) B言語での文字列の扱いは興味深いものでした。
int
の配列を使って、各メンバーに複数の文字を詰め込んでいました。Bは実際には
BCPL
で、構文が異なります。
関連
-
[解決済み】ENOENTが「そのようなファイルやディレクトリはありません」という意味であるのはなぜですか?
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] printfにおけるdoubleの正しい書式指定子
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] C 言語で const char* を char* に変換するには?
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] C言語でオブジェクト指向のコードを書くとしたら、どのようにすればよいのでしょうか?[クローズド]
-
[解決済み] ストラクチャーとユニオンの違い