「C言語/関数」の版間の差分

削除された内容 追加された内容
ネストのローカル変数とグローバル変数
→‎ネストのローカル変数とグローバル変数: windows の visual studio での動作確認
732 行
なんらかの処理の中で、if文やfor文も使わずに <code>{ }</code> だけで処理をまとめた場合、その動作は難しい。
 
一例として、Linuxでgccおよびclangを標準C言語としてコンパイルした場合、下記WindowsのVisual C++ で標準C言語のコード下記のように書いてコンパイル下場合、ともに下記の動作になる。
 
 
746 行
#include "string.h"
 
int main() {
 
int a = 3;
 
printf("ネストの前 %d \n", a);
 
{
{
int a = 10; // int で再度、宣言
printf("ネストの内部 %d \n", a);
}
}
 
printf("ネストを抜けた %d \n", a);
 
}
769 行
</pre>
:(※ 動作確認: GCCおよびClangで、Fedora32上で2020年6月25日に動作を確認)
:(※ 動作確認: Windows の Visual Studio 2019でも2020年6月25日に動作を確認。 ただしC++なので <code> #include <iostream> </code> が必要。)
 
なおWindows版のclangはvisual studio のコンパイラを呼び出す方式であるので、試行を省略する。
 
 
779 ⟶ 782行目:
#include "string.h"
 
int main() {
 
int a = 3;
 
printf("ネストの前 %d \n", a);
 
{
{
a = 10; // int が無くても実行可能
printf("ネストの内部 %d \n", a);
}
}
 
printf("ネストを抜けた %d \n", a);
 
}
802 ⟶ 805行目:
</pre>
:(※ 動作確認: GCCおよびClangで、Fedora32上で2020年6月25日に動作を確認)
:(※ 動作確認: Windows の Visual Studio 2019でも2020年6月25日に動作を確認。 ただしC++なので <code> #include <iostream> </code> が必要。)
 
 
827 ⟶ 831行目:
 
だが、コンパイラの種類ごとに、規格にない機能が異なる場合もあるので、互換性などの観点からは、あまり規格外の機能は用いないほうが安全である。
 
 
 
== 脚注・出典など ==