2016-05-27 16 views
3
#include <stdio.h> 

void foo(void); 

void foo(int repeatCount) { 
    int i; 
    for (i = 0; i < repeatCount; i++) { 
     printf("\nHello World\n"); 
    } 
} 

int main(int argc, char *argv[]) { 
    printf("main"); 
} 

これはC++ではなく、Cであることを意図しています。 VSのファイルは.cファイルとして保存され、IDEOneのプログラムはCファイルとして設定されます。なぜこれはVS 2015ではコンパイルされますが、IDEOneではコンパイルされませんか?

プロトタイプが関数定義と一致しません。

ただし、VS 2015でコンパイルされます。警告レベル3では警告が表示されます。 enter image description here

+0

おいしい質問!しかし、私は[tag:C++]をここで混ぜている理由は分かりません。おそらく関数のオーバーロード機能のために! – gsamaras

+0

私は何も混ぜていません。それはすべてです。 – nicomp

+0

OK良いnicomp! – gsamaras

答えて

2

VSスタジオは標準Cに準拠しておらず、独自のコンパイラを使用しているためです。標準Cで

あなたはこのようなものが表示されるはずです。

[email protected]:~$ gcc -Wall main.c 
main.c:5:6: error: conflicting types for ‘foo’ 
void foo(int repeatCount) { 
    ^
main.c:3:6: note: previous declaration of ‘foo’ was here 
void foo(void); 
    ^
main.c: In function ‘main’: 
main.c:14:1: warning: control reaches end of non-void function [-Wreturn-type] 
} 
^ 

VSはどのようなコンパイラを使用しませんの?

コンパイラの名前は、Microsoft C/C++コンパイラです。 cl.exeは、Microsoft CおよびC++コンパイラおよびリンカを制御するツールです。インテル®C/C++コンパイラーは、インストール後にVisual Studioで自動的に構成されます。

+0

VSはどのコンパイラを使用しますか?どのように違うのですか? – nicomp

+0

@nicompが更新されました。私のための起動時間、これが助けて欲しい! – gsamaras

+0

@nicomp受け入れない理由は何ですか? – gsamaras

関連する問題