(クイック答え:C規格では、初期化のこの種をサポートしていません。あなたは、コンパイラのマニュアルを参照する必要があります)
今、私たちは、言語はCである知っていることを、私たちは何を見ることができます標準はそれについて言わなければなりません。
C99 6.7.8段落4:定数式または文字列リテラルでなければなら静的 記憶域期間を持つオブジェクトの初期化子で
すべての式。
そして新しい2011年の標準(私が持っている少なくとも案)は言う:
静的 記憶域期間を持つオブジェクトの初期化子のすべての式は定数式または文字列リテラルでなければなりません。
静的オブジェクト(たとえば、
current_time
などのグローバル)を関数呼び出しで初期化することは、制約違反です。コンパイラはそれを拒否することもできますし、警告でそれを受け入れて、言語拡張を提供する場合は何でも好きなことをすることができます。
C標準では、初期化が発生したときはそのような初期化が許可されていないため、このようなことは言いません。基本的には、main()
関数が実行を開始する前にコードを実行することはできません。
あなたのコンパイラはこれを拡張機能として許可しています(あなたが実際にこのコードをコンパイルしたと仮定して)。セマンティクスが何であるかを知るには、コンパイラのドキュメントを参照する必要があります。
(通常main
は、多くの場合void main()
にはあまりにも多く存在しているの悪い書かれた本からCを学んだプログラマを示しています。int main(void)
またはint main(int argc, char *argv[])
または同等、またはいくつかの実装定義の方法のように宣言した。しかし、このされますArduinoをターゲットにしているのでおそらくフリースタンディングの実装を使用しているので、main()
を宣言する必要がありますが、コンパイラの文章はあなたに教えてくれます)。
それで、あなたが話している言語を知ることは有益でしょう。 – asawyer
C言語。より具体的には、私はarduinoのプログラミングに傾いています。 –