C と C の有効なコードの動作の違い
C と C には多くの類似点がありますが、両方の有効なコードが異なる場合もあります。言語は、それぞれの言語でコンパイルすると異なる結果を生成する可能性があります。
関数呼び出しとオブジェクト宣言
そのようなシナリオの 1 つは、関数呼び出しとオブジェクト宣言の違いに関連しています。 C90 では、事前に宣言しなくても関数を呼び出すことができます。ただし、 C では、宣言されていない関数は許可されません。この区別により、次のコードをコンパイルするときに異なる動作が発生する可能性があります:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
C では、型 f の一時オブジェクトが作成および破棄され、その結果 x メンバーが失われるため、このコードは何も出力しません。 。ただし、C90 では、関数は宣言されずに呼び出すことができるため、「hello」が出力されます。
名前の曖昧さ回避
もう 1 つの注意点は、の使用法です。コード例の名前 f 。 C と C の両方で、関数と構造体に同じ名前を使用できます。 C でオブジェクトを作成するには、 struct f を明示的に指定する必要があります。 struct キーワードを省略した場合、コードは関数呼び出しとして解釈されます。この違いは、呼び出し規約の違いと相まって、C と C でコードをコンパイルするときに観察される動作の違いに寄与します。
以上が同じコードが C では 'hello' を出力し、C では何も出力しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。