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 条评论
登录 后参与评论

相关文章

来自专栏Java Edge

Redis实践(十六)-内存管理1 内存优化介绍2 Redis内存消耗3 客户端缓冲区

512
来自专栏gaoqin31

PHP 输出控制

默认情况下,输出一个字符串到浏览器,经过3个阶段PHP buffer->Tcp buffer->浏览器(IE浏览器有的版本也存在buffer)

734
来自专栏从流域到海域

《笨办法学Python》 第11课手记

《笨办法学Python》 第11课手记 本节课讲了一个用来输入的函数raw_input,而我们一直用的print其实是一个用来输出的函数。 原代码如下: pri...

1709
来自专栏Python研发

pymysql

pymsql是python中操作的MYsql的模块,其使用方法和MySQLdb几乎相同

874
来自专栏我的博客

php命名空间详解

1、命名空间概述 从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,...

2808
来自专栏后端技术探索

实用篇-无处不在的Location

location配置是nginx模块化配置中最出色的一个设计,几乎所有nginx的业务场景都要通过书写多个location配置来顺应业务需要。语法配置和执行规则...

1032
来自专栏我的博客

jquery特殊字符问题处理

问题:今天项目上有个地方使用 $(“#lamp”).load(‘/admin/checklogin.php?sid=’+sid); 这样传递的时候遇到空格就...

2894
来自专栏开源优测

JMeter函数和变量11

前言 在jmeter中提供了功能强大的内置函数来帮助我们处理字符串、文件读写、计算、运行外部脚本等等能力。 要想在项目中切实运用来jmeter完成复杂的压测场景...

3436
来自专栏Python小屋

Python把docx文档中的题库导入SQLite数据库

#本文所用的docx文档题库包含很多段,每段一个题目,格式为: 问题。(答案) #与之对应的数据库datase.db中tiku表包含kechengming...

2497
来自专栏电光石火

获取URL地址中的GET参数

/*-----------------实现1--------------------*/ function getPar(par){ //获取当前URL...

1989

扫描关注云+社区