C学习笔记(1)-结构体、预处理与多文件结构程序设计
一、结构体的定义与使用
#include <stdio.h> //定义结构体(类似模板)
typedef struct
{
char name[50];
int age;
char address[100];
} nvgui; void main()
{
nvgui niexiaoqian={"聂小倩",18,"兰若寺"}; nvgui b={"千年树精",100,"大树"}; printf("聂小倩的信息:\n姓名:%s\n年龄:%d\n",niexiaoqian.name,niexiaoqian.age);
}
二、其它概念
1.变量必须放在其它语句之前
2.调用函数之前需要先进行函数声明:
就是告诉编译器,这个函数已经存在,和这个函数具体是什么格式的,名称是什么,返回值是什么,数据个数和类型分别是什么,以后在用到这个函数的时候编译器就按照这个声明的格式来检查函数的使用是否正确
就是告诉编译器函数的类型,名称,使用的参数的类型。
3.以#开始的为预编译指令
#include |
意思原样展开 |
#include |
带<>为系统自带的,在库文件中找 |
带“”在工程文件下找 |
|
#ifndef |
(if not define) #ifndef A如果没有定义A就执行下面的语句 |
#define |
#define MAX_SIZE 10 定义(定义一个字符常量)程序中所有的MAX_SIZE都被10代替(可以让10这个常量更有意义) |
#endif |
与#ifndef配对,开始,结束 |
所有头文件必须包含下面三句话(模版):
#ifndef 头文件名_H
#define 头文件名_H
…
…
函数声明或者宏定义、全局变量、结构体类型
#endif
三、多文件结构程序设计(重点)
大学学了一年的C都没整明白几个.c文件是怎样关联到一块的,我在一个.c文件中写了一个函数,怎么在另外一个.c文件中调用,也就是什么是多文件结构设计。下面我们一步一步实现这个多文件的调用问题:
1.咱们新建一个工程命名为myFirstC,如下图:
2.新建一个.c文件为main.c为程序的入口,再新建一个add.c,这里面实现一个两个数相加的小函数
3.建议一个头文件add.h,咱们先完成这个里面的代码:如下
#ifndef ADD_H
#define ADD_H
int add(int a,int b);
#endif
代码说明请参考上边讲的预处理的介绍。
接着实现add.c的代码
#include <stdio.h> #include "add.h" int add(int a,int b)
{
printf("我是来自add.c\n");
return a+b;
}
这里说下为什么要引入自己的头文件,主要是因为如果存在多个相互调用的子函数,那就需要进行函数声明,这时需要引入自己的头文件就行了,如果头文件没有包含,需要补写函数声明。
最后就是main.c文件的实现了:
#include<stdio.h>
#include"add.h"
main()
{
int a=5,b=6;
printf("a+b=%d\n",add(a,b));
}
编译一下,没有任何错误,运行结果为:
最后看下文件结构:
呵呵,简单吧,这就是c语言的多文件结构程序
C学习笔记(1)-结构体、预处理与多文件结构程序设计的更多相关文章
- C#学习笔记之结构体
1.概述 结构是一种与类相似的数据类型,不过它较类更为轻量,一般适用于表示类似Point.Rectangle.Color的对象.基本上结构能办到的类全都能办到,但在某些情况下使用结构更为合适,后面会有 ...
- contiki学习笔记---process结构体
process,字面意义,进程,看看它的结构 struct process { struct process *next; #if PROCESS_CONF_NO_PROCESS_NAMES #def ...
- 《PHP7底层设计与源码实现》学习笔记2——结构体对齐
书里给了一段代码,假如有个结构体如下: struct test { char a; int b; long c; void* d; int e; cha ...
- c语言学习笔记之结构体存储
今天讲讲结构体存储问题 首先,结构体简单说是对不同类型的封装,一开始我们可能会想结构体在内存中的存储的大小是直接元素的和 例如 我们可能会觉得是 结构体大小=int(4个字节)+ short(2个字节 ...
- C语言学习笔记--枚举&结构体
枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...
- 【C#学习笔记】结构体使用
using System; namespace ConsoleApplication { struct _st { public string name; public int age; } clas ...
- Go学习笔记07-结构体与方法
Go学习笔记07-结构体与方法 Go语言 面向对象 结构的定义与创建 面向对象 Go语言只支持封装,不支持继承和多态. Go语言中只有struct,即结构体:没有class. 结构的定义与创建 pac ...
- C语言学习笔记10-结构体、枚举、联合体
C语言学习笔记10-结构体.枚举.联合体 待传
- iOS 阶段学习第十天笔记(结构体)
iOS学习(C语言)知识点整理 一.数据结构 1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算. 2)结构体必须有struct 关键字修饰. 实例代码: stru ...
随机推荐
- AbpZero兼容sql2008
笔者遇到的问题是公司服务器用的MSSQL的版本是2008,但AbpZero一些封装好的ORM语法只兼容到2012版本: 例如我遇到的问题就是AbpZero的分页就报这个错 然后我们要修改的是Entit ...
- telerik:RadGrid 表格中删除数据
<telerik:RadGrid OnItemCommand=" Height="490px" Culture="zh-CN" CssClass ...
- (一)Mahapps安装与使用
一.Mahapps安装 1.NuGet程序包安装 右击项目-->选择 “管理Nuget程序包”-->搜索“MahApps.Metro” 2.包管理控制台 选择“工具”-->“NuGe ...
- sql server生成自动增长的字母数字字符串
在开发的过程中,我们经常会遇到要生成一些固定格式字符串,例如“BX201903150001”,结构为:BX+日期+N位序号,类似这种的字符串我们很难生成,在这里我们借助一个存储过程来实现这个功能. 1 ...
- brew - 安装gradle
我安装完brew之后,马上开始安装gradle,但是shell总是卡在执行"brew update"这里,今天终于解决了,出现这样问题的原因是初次安装brew,它使用的源是国外的, ...
- git 拖下laravel 代码后报错 Warning: require(D:\WWW\laravel\bootstrap/../vendor/autoload.php
omposer install 执行 Problem 1 - Installation request for doctrine/annotations v1.5.0 -> sat ...
- JavaScript定时器作业
JavaScript定时器作业 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta char ...
- elasticsearch Geo Distance Query
Geo Distance Query 过滤器文档只包括在一个特定距离内存在于一个地理点上的命中.假设下列映射和索引文档: PUT /my_locations { "mappings" ...
- DCL,即Double Check Lock,中卫双重检查锁定。
DCL,即Double Check Lock,中卫双重检查锁定. [Java并发编程]之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码) 关于单例.关于DCL: ...
- class字节码结构(四)(方法集合的结构)
<Java虚拟机原理图解>1.5. class文件中的方法表集合--method方法在class文件中是怎样组织的 一个类有多个方法,所以方法肯定是一个集合. 目标是: 1,了解方法在字节 ...