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 ...
随机推荐
- 关于微信小程序登录,后端如何生成3rd_session?(后端为c#)
各位大神,请教一个问题,现在是小程序端调用wx.login后,将code传入后端接口,后端发起微信服务器request获取openid和session_key,后端再自定义生成一个登录状态:3rd_s ...
- python3--django for 循环中,获取序号
功能需求:在前端页面中,for循环id会构不成连续的顺序号,所以要找到一种伪列的方式来根据数据量定义序号 因此就用到了在前端页面中的一个字段 forloop.counter,完美解决 <tbod ...
- Spring Boot - StateMachine状态机
是Spring Boot提供的状态机的现成实现. 理论(有点像工作流) 需要定义一些状态的枚举,以及一些引起状态变化的事件的枚举. 每个状态可以对应的创建一个继承自org.springframewor ...
- 換根lca
假設我們要求u,v,在根為rt情況下的lca 則lca為lca(u,v),lca(u,rt),lca(v,rt)中的深度的最大值
- 【AUTO Uninstaller 中文版-详细使用教程】AUTODESK系列软件MAYA/CAD/3DSMAX/INVENTOR终极完美修复卸载工具 Windows x64位 【原创搬家】
小伙伴是不是遇到 MAYA/CAD/3DSMAX/INVENTOR/REVIT 安装失败或者安装不了的问题了呢?AUTODESK系列软件着实令人头疼,MAYA/CAD/3DSMAX/INVENTOR/ ...
- (3)视觉里程计 Visual Odometry
首先分析include头文件下的slamBase.h文件 # pragma once // 各种头文件 // C++标准库 #include <fstream> #include < ...
- Android逆向-Android基础逆向(5)
本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...
- about BFC
https://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html Box.Formatting Context(BFC)
- FlexMonkey实战
文章来源:http://www.cnblogs.com/raol/p/flexmonkey.html 我的有道云笔记:http://note.youdao.com/share/?id=22b79669 ...
- SpringBoot学习笔记(一)基础
Spring Boot理念 习惯优于配置.使用Spring Boot很容易创建一个独立运行(运行jar,内嵌servlet容器).准生产级别的基于Spring框架的项目,使用SpringBoot可以不 ...