同一段代码,C++编译成功,C语言编译出错,这是为什么呢?

#include <stdio.h>
using namespace std;
int main(){
	int n;
	scanf("%d",&n);
	int result=0;
	for(int i=0;i<n;i++){
		int w,score;
		scanf("%d%d",&w,&score);
		result+=w*score;
	}
	if(result<0)
		printf("0\n");
	else
		printf("%d\n",result);
	return 0;
} 

为什么同样的代码用C++就过了,用C语言就会编译出错大家知道么?

using namespace std;在上面代码是多余的。

.c文件,变量声明要放花括号内开头的地方。

#include <stdio.h>
int main() {
	int n,i;
	int result = 0;
	scanf("%d", &n);
	for (i = 0; i<n; i++) {
		int w, score;
		scanf("%d%d", &w, &score);
		result += w*score;
	}
	if (result<0)
		printf("0\n");
	else
		printf("%d\n", result);
	return 0;
}

 

使用C语言编译的情况下:

  • C语言没有命名空间(namespace)的概念,C语言头文件并没有存放在命名空间中,因此使用C语言编译时候在C文件中如果用到类似stdio.h的头文件时,不能使用C++中的命名空间语句(namespace)。

使用C++语言编译的情况下:

  • C语言程序中各种功能基本上都是由函数来实现的,并包装成各种头文件,C++从C语言继承了相关函数库。
  • 因此在C++程序中可以使用C语言的函数库,文件中如果只包含类似stdio.h这样.h后缀的头文件的时候,可以不使用namespace语句。
  • 但是如果包含<iostream>这样的头文件的时候,由于这些头文件的函数都是在命名空间std中声明的,因此在程序中要对命名空间std作声明。需要使用using namespace std; 语句

你这段程序如果改成如下这样,就可以在C++和C语言下都编译通过啦

#include <stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	int result=0;
	for(int i=0;i<n;i++){
		int w,score;
		scanf("%d%d",&w,&score);
		result+=w*score;
	}
	if(result<0)
		printf("0\n");
	else
		printf("%d\n",result);
	return 0;
} 

欢迎采纳本答案呀

很简单,虽然stdio.h是c语言的头文件但是后面的using namespace std;只有c++可以用。