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语言的多文件结构程序

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JackeyGao的博客

Django小技巧08: Blank or Null

Django Model API 中提供了blank和null两个参数, 非常容易混淆。当我第一次使用 Django 的时候, 总是不能恰当的使用这两个参数。

733
来自专栏我是攻城师

关于线程可见性一个“诡异”的问题

如果执行上面的代码,大多人可能觉得会死循环,因为这里没有任何的同步策略,比如synchronized,Lock,atomic,volatile等关键字,也就是说...

963
来自专栏Python私房菜

简析Python中的四种队列

在Python文档中搜索队列(queue)会发现,Python标准库中包含了四种队列,分别是queue.Queue / asyncio.Queue / mult...

1293
来自专栏陈树义

java中volatile关键字的含义

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支...

3695
来自专栏java学习

1.3java的运行原理

java的运行原理 这里我们简单分析一下我们的第一个应用程序,其中涉及到很多没有接触过的概念,大家可先阅读以下,以后会详细讲解。重点是理解java的运行原理。 ...

3654
来自专栏CSDN技术头条

用 Webhook+Python+Shell 编写一套 Unix 类系统监控工具

本文来自作者 Alinx 在 GitChat 上分享 「用 Webhook+Python+Shell 编写一套 Unix 类系统监控工具」

3385
来自专栏架构师之旅

解读java中volatile关键字的含义

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支...

1815
来自专栏技术专栏

慕课网Flask高级编程实战-4.flask核心机制

在 3.8节我们通过db.create_all(app=app)的方式解决了working outside application context的错误,下面我...

3463
来自专栏技巅

GlusterFS之内存池(mem-pool)使用实例分析

1906
来自专栏积累沉淀

Python快速学习第十一天--Python多线程

Python中使用线程有三种方式: 方法一:函数式 调用thread模块中的start_new_thread()函数来产生新线程。语法如下: thread...

2349

扫码关注云+社区

领取腾讯云代金券