为什么有的c语言程序开头有两行#include <stdio.h>?
include其实是对visual c++里系统函数的调用,这些函数是别人已经编好了的,括号里stdio指出所调用的类型,是standard input and output的缩写,意思是标准输入输出函数。比如说scanf,printf等,对这些函数的调用就要在开头加上这个东东,明白了么。
把头文件包含进来,stdio.h是库中定义的头文件,是标准输入输出的,这样可以使用库中定义的输入输出函数!
一个#include <stdio.h>就够了。
原因如下:
#include <stdio.h>指令实质是将stdio.h文件中所有内容全部拷贝到指令处位置,如需引用<stdio.h>,拷贝一次就好,所以一个#include <stdio.h>就够了。
我们知道C/C++是不允许重复定义的,如果重复#include <stdio.h>、拷贝两次,会不会导致重复定义呢?
答案是不会,因为标准库中每个头文件都有防止重复拷贝的机制,所以即便开头有两行#include <stdio.h>,实质上只拷贝了一次。
怎么做到防止重复拷贝?有两种方式:一是使用#pragma once,但这种不是C/C++语言标准所支持的方式,老的编译器不支持,虽然如今广泛采用,但兼容性一般;二是使用#ifndef,这种是标准方式。
我们在写自己的头文件时,也应该采用这种重复拷贝机制,因为项目文件多了,会出现继承引用的情况,比如b.h包含了a.h,c.h也包含了a.h,而d.h同时b.h和c.h,这就相当于d.h包含了两次a.h。如果没有防止重复机制,编译器就大可能会报告“重复定义”的错误。
(1)#pragma once就一条指令,要作为头文件第一条有效指令,放在文件顶部位置;
(2)#ifndef使用如下(假如头文件名为my.h)
#ifndef MY_H
#define MY_H
…… // 头文件内容
#endif
VC++ 2010中的<stdio.h>:
gcc中的<stdio.h>
复制粘贴造成的罢,多就多了。但如果是自己写的头文件,最好就包含一个,因为有可能自己写的不符合规范,容易出问题
拿代码案例出来,截图就行
一个就够了吧
确认是两个完全一样的
在C语言程序中允许出现的字符集是什么?
C语言程序中允许出现的字符集:1) 拉丁字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Za b c d e f g h i j k l m n o p q r s t u v w x y z 2) 十进制阿拉伯数字 0 1 2 3 4 5 6 7 8 9 3) 下面29个符号 ! " # % & ' (...
C语言的编程格式是怎么样的?
1,C语言程序的结构特点 一个C语言程序通常由一个预处理语句开始,如#include〉stdio.h〉,它表示,在编译语言程序前,用指明的文件取代改预处理语句,通常文件名是带有后缀为.h的磁盘文件.编译时,它将从磁盘中读出并插入到原来的预处理程序语句中.即预处理语句被指明的包含文件(头文件)代替.头文件通常...
C语言中的问题不明白为什么 新人麻烦详细解释一下谢谢
这里scanf指定逗号为输入的分隔符号。所以输入时数字和字符之间必须有逗号。scanf不指定分隔符时,默认以空白字符(空格、回车、制表符)为分隔符。PS:如果写%d%c不指定分隔符号。由于第二个变量是字符型,输入时中间不要加空格符,否则会将空白符号做为字符接收。
C语言中,后缀为 .i 的文件是什么文件,是否可用Vc6.0调用?
.i文件是进行预编译之后生成的文件,一般都是把头文件包含进去,进行宏替换这些工作之后生成的文件。
C语言有MAIN函数开始再用I
1:I 2:love 3:you 从本例可以看出,程序从命令行中接受到4个字符串(包括程序名),并将它们存放在字符串数组中,其对应关系:argv[0] ---> c(程序名)argv[1] ---> I argv[2] ---> love argv[3] ---> you 至于argc的值,也即是参数的个数,程序在运行时...
C语言里面的这个#include <stdio.h>什么意思啊?
include<stdio.h>是在程序编译之前要处理的内容,称为编译预处理命令。编译预处理命令还有很多,它们都以“#”开头,并且不用分号结尾。stdio.h是头文件,标准输入输出函数库。头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头...
为什么网上下的C语言程序都不能正常使用我最近学习C
操作系统相关:比如一些C语言的源代码可能使用了Linux的特性,但是你在Windows下直接编译就会报错 C语言标准相关:如果用的是C11的特性,而你用的是C98标准的编译器,可能就执行不了,举例如下:for(int i=0;i<10;i++)这一句在老的编译器里面是编译不过的要改写成下面两行 int i;for(i=0;i<10...
请大神解析下c语言程序 main() { int i,j,k; for(i=0;i<=3
这里就是当第i行时,就打2*i个星。 \/\/ 这里的值是从0开始的,所以每次都打奇数个“*”。 printf("*"); printf("\\n"); \/\/打完星是不能忘空格的 } for(i=0;i<=2;i++) \/\/这里是打下半部分的星星。可以与上同样理解。。。 { for(j=0;j<=i;j++...
C语言程序设计
C语言中常用的选择结构主要有以下两种:(1) if else:引入关键字:ifelseelse if if (bool值) \/\/ 如果bool值为真,则执行代码段1,否则执行代码段2 { 代码段1 } else { 代码段2 } if (bool值1)\/\/ 如果bool值1为真,则执行代码段1,否则判断bool值2是否为真 { 代码段1 } else if (...
C语言中第一第二行是什么意思?还有那个i++是什么意思,解释一下_百度知 ...
如果这些读不懂你还是要从基础看起。第一第二行为宏指令,表示包含文件,i++表示自增,i=i+1,但是是先使用再自增,而在循环升级语句中其实不需要注意这个