C++ではmain()の前に関数の実体があればプロトタイプ宣言は不要である。ではC言語ではどうか。Google Bardに訊いてみた。
ところが次のコードでDELL OPTIPLEX 7010SFF Win 11(非推奨PC) 22H2 VScodeで試したら動作するのでして。(笑)
Bardの回答
C言語では、main()の前に置かれた関数の実体は、コンパイラによって関数の宣言として解釈されません。そのため、main()の前に関数の実体を置いても、関数のプロトタイプ宣言がない場合は、コンパイラはエラーを出力します。
#include <stdio.h>
int add(int a, int b) { return a + b; }
int main() {
int x = add(1, 2);
printf("%d", x);
return 0;
}
これエラーならないすよ。プロトタイプ宣言ないでがす(´・ω・`)
gcc --version
gcc.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
最新のCの規格って知らないけど既にプロトタイプ宣言無しでいいじゃあああんんん!!
それはgccだからであるかい。他のC言語コンパイラではどうなのかい。知らんわい。
ということはGoogle Bardの回答としてはどのCコンパイラの場合には書かないとエラーになるのか? を回答文に入れるべきだし、そもそも回答の根拠となる参照リンクを書けやバカタレリ。
どうもGoogle Bardは進展が遅い。春からワタクシが参照リンクをつけろつけろつけたまーーへとFeedbackしているのにさ~。
でBingチャットの回答
ワイ、clangって知らんし。まあしかし、ワイがC言語でプログラム書くことはないわな。どっかのサイトから例題をDLしてVScodeで動作見るってぐらいだし(´・ω・`)
ちなみに最新のC言語の規格って何さ?
C23ってのが出るらしいす。23年11月。しかし、実質的にはC11が現行最新規格って。。。つーか、C言語はまだまだ生き延びるってかね。23年に新規格がでたら10年ぐらいは続くな。知らんけど。
ワタクシとしてはmain()の上に関数書くのでプロトタイプ宣言は書かんもんねーだ。つーか、自作プログラムがあるかいな(笑) いや、DLした例題をちょっと修正するにしてもさ。
ここのところワタクシはC/C++,Go, Python等の整形ツールを知りまして試しておるだす。コードはサイト等からDLしたものがほとんどであるけれどもPythonのflake8などで試すとルールに引っかかるのが膨大でおま。出版社サイトにある例題は整形ツールを経ていないのだな(笑)
まあしかし、面白いなと思う次第である。VScodeのエディターのプログラムが非常にきれいになった気がするのでおま。ワイが書いたコードではないものの。うむ。
C言語のfor文でも for ( int i = 0; ….) って型名指定できるのってC11からなのかに?
ま、いいか。うむ。いい。
posted by toinohni at 07:49| 東京 ☁|
Comment(0)
|
ソフト系雑学
|
|