`

C语言基础八

    博客分类:
  • c
阅读更多
#define是一条预处理指令,可以用来编写宏定义语句。
宏定义语句可以用来给数字起名字。
可以在编译时使用-D选项给一个名字指定对应的数字,例如
gcc -DSIZE=6 02circle.
宏是可以带参数的,宏的参数通常表示一个名称
宏的参数直接参与计算,函数的参数要先制作出一个替身然后才参与计算。

在编写带参数的宏时要在每个参数外边加一对小括号强制参数首先计算

不要把自增,自减的计算结果作为宏的参数使用

宏里可以使用运算符#把一个参数转换成字符串字面值
宏里也可以使用运算符##把一个参数所代表的标识符和其他内容合并形成一个新标识符

条件编译指根据某个条件从多个语句组中选择一组来编译。
#ifdef 宏名称
    语句块1    
#else
	 语句块2
#endif
如果前面定义过对应的宏则编译语句块1,否则编译语句块2
预处理指令#ifndef也可以实现条件编译的效果
条件编译还可以从多组语句中进行选择,方法如下
#if   逻辑表达式1
    语句块1
#elif  逻辑表达式2
	 语句块2
#else
	 语句块3
#endif
其中#elif可以出现多次

C语言中不同的函数可以放置在不同的文件中。
所有函数的声明应该统一放置在头文件中。
如果一个源文件与某个头文件中的任意函数有关,这个源文件应该使用预处理指令#include把这个头文件包含进来。
多文件程序编译时应该在命令中包含所有源文件的名称,例如
gcc 1.c 2.c ...

还可以使用gcc对每个源文件进行单独编译,命令如下
gcc -c 1.c
命令结束会得到以.o作为扩展名的目标文件
可以使用gcc把多个目标文件合并成一个可执行文件,命令如下
gcc 1.o 2.o

编写头文件时要使用条件编译语句对内容进行控制,这样可以避免被多次编译。

/*
	主函数参数练习
*/
#include <stdio.h>
int main(int argc, char *argv[]) {
    int loop = 0;
	 /*for (loop = 0; loop <= (argc - 1); loop++) {
        printf("%s\n", argv[loop]);
	 }*/
	 for (loop = 1; loop <= (argc - 1); loop++) {
        printf("%s ", argv[loop]);
	 }
	 printf("\n");
    return 0;
}

/*
	预处理指令练习
*/
#include <stdio.h>
#define   PI             3.14f
#define   CIRCLE(r1)         2 * PI * r1
#define   AREA(r1)           PI * r1 * r1
#define   PRINT(arr, num)    printf("%d ", arr[num])
#define   INC(v)             v++
#define   SIZE               5
void inc(int value) {
    value++;
}
int main() {
    int values[SIZE], loop = 0;
    float r = 0.0f;
    printf("请输入一个半径:");
	 scanf("%f", &r);
	 printf("圆的周长是%g\n", CIRCLE(r));
	 printf("圆的面积是%g\n", AREA(r));
	 for (loop = 0; loop <= (SIZE - 1); loop++) {
        PRINT(values, loop);
	 }
	 printf("\n");
	 printf("loop是%d\n", loop);
	 INC(loop);
	 printf("loop是%d\n", loop);
	 inc(loop);
	 printf("loop是%d\n", loop);
    return 0;
}


/*
	宏练习
*/
#include <stdio.h>
#define SECPH         (60 * 60)
#define NEG(x)        0 - (x)
int main() {
    printf("NEG(6)是%d\n", NEG(6));
	 printf("NEG(3 + 4)是%d\n", NEG(3 + 4));
	 printf("小时数是%d\n", 7200 / SECPH);
    return 0;
}



/*
	宏练习
*/
#include <stdio.h>
#define MAX(x,y)      x > y ? x : y
#define CH(c)         c >= 'a' && c <= 'z' ? c- 'a' + 'A' : c - 'A' + 'a'
int main() {
    printf("MAX(3,7)是%d\n", MAX(3, 7));
	 printf("MAX(7,3)是%d\n", MAX(7, 3));
	 printf("CH('t')是%c\n", CH('t'));
	 printf("CH('Y')是%c\n", CH('Y'));
    return 0;
}


/*
	宏运算符练习
*/
#include <stdio.h>
#define STR(n)         #n
#define VAR(n)         v_##n
#define GLOBAL(n)      g_##n
int GLOBAL(value);
int main() {
    int VAR(value) = 3;
    printf("%s\n", STR(3 + 4));
	 printf("%s\n", STR(sizeof(int)));
	 printf("GLOBAL(value)是%d\n", GLOBAL(value));
    return 0;
}

/*
	预定义宏练习
*/
#include <stdio.h>
int main() {
    printf("当前行号是%d\n", __LINE__);
	 printf("文件名称是%s\n", __FILE__);
	 printf("日期是%s\n", __DATE__);
	 printf("时间是%s\n", __TIME__);
	 printf("%sC语言标准\n", __STDC__ ? "符合" : "不符合");
    return 0;
}


/*
	条件编译练习
*/
#include <stdio.h>
//#define ONE
int main() {
#ifndef ONE
    printf("1\n");
	 printf("3\n");
#else
	 printf("2\n");
	 printf("4\n");
#endif
    return 0;
}


/*
	条件编译练习
*/
#include <stdio.h>
int main() {
    int order = 0;
	 printf("请点菜:");
	 scanf("%d", &order);
#ifdef  ZHAOBENSHAN
	 if (1 == order) {
        printf("这个菜没有\n");
	 }
	 else {
        printf("这个真没有\n");
	 }
#else
    if (1 == order) {
        printf("这个菜有\n");
	 }
	 else {
        printf("这个菜没有\n");
	 }
#endif
    return 0;
}

/*
	条件编译练习
*/
#include <stdio.h>
int main() {
#if  defined(ONE)
    printf("1\n");
#elif  defined(TWO)
	 printf("2\n");
#else
	 printf("3\n");
#endif
    return 0;
}


/*
	条件编译练习
*/
#include <stdio.h>
int main() {
#if    defined(GONGCHANG)
    printf("80%%\n");
#elif  !defined(JINGPING)
	 printf("100%%\n");
#else
	 printf("120%%\n");
#endif
    return 0;
}

12add1.c
#include "12add.h"
int add(int x, int y) {
    return x + y;
}



/*
	多文件编程练习
*/
#include <stdio.h>
#include "12add.h"
int main() {
    printf("add(2, 3)是%d\n", add(2, 3));
    return 0;
}



#ifndef __12ADD_H__
#define __12ADD_H__
int add(int, int);
#endif  //__12ADD_H__



分享到:
评论

相关推荐

    MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost时间序列预测(含模型描述及示例代码)

    内容概要:本文档详细介绍了基于 MATLAB 实现的 LSTM-AdaBoost 时间序列预测模型,涵盖项目背景、目标、挑战、特点、应用领域以及模型架构和代码示例。随着大数据和AI的发展,时间序列预测变得至关重要。传统方法如 ARIMA 在复杂非线性序列中表现欠佳,因此引入了 LSTM 来捕捉长期依赖性。但 LSTM 存在易陷局部最优、对噪声鲁棒性差的问题,故加入 AdaBoost 提高模型准确性和鲁棒性。两者结合能更好应对非线性和长期依赖的数据,提供更稳定的预测。项目还展示了如何在 MATLAB 中具体实现模型的各个环节。 适用人群:对时间序列预测感兴趣的开发者、研究人员及学生,特别是有一定 MATLAB 编程经验和熟悉深度学习或机器学习基础知识的人群。 使用场景及目标:①适用于金融市场价格预测、气象预报、工业生产故障检测等多种需要时间序列分析的场合;②帮助使用者理解并掌握将LSTM与AdaBoost结合的实现细节及其在提高预测精度和抗噪方面的优势。 其他说明:尽管该模型有诸多优点,但仍存在训练时间长、计算成本高等挑战。文中提及通过优化数据预处理、调整超参数等方式改进性能。同时给出了完整的MATLAB代码实现,便于学习与复现。

    palkert_3ck_01_0918.pdf

    palkert_3ck_01_0918

    pepeljugoski_01_1106.pdf

    pepeljugoski_01_1106

    tatah_01_1107.pdf

    tatah_01_1107

    [AB PLC例程源码][MMS_046393]Motor Speed Reference.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    基于51的步进电机控制系统20250302

    题目:基于单片机的步进电机控制系统 模块: 主控:AT89C52RC 步进电机(ULN2003驱动) 按键(3个) 蓝牙(虚拟终端模拟) 功能: 1、可以通过蓝牙远程控制步进电机转动 2、可以通过按键实现手动与自动控制模式切换。 3、自动模式下,步进电机正转一圈,反转一圈,循环 4、手动模式下可以通过按键控制步进电机转动(顺时针和逆时针)

    [AB PLC例程源码][MMS_041234]Logix Fault Handler.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042348]Using an Ultra3000 as an Indexer on DeviceNet with a CompactLogix.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    智慧校园平台建设全流程详解:从需求到持续优化

    内容概要:本文详细介绍了建设智慧校园平台所需的六个关键步骤。首先通过需求分析深入了解并确定校方和使用者的具体需求;其次是规划设计阶段,依据所得需求制定全面的建设方案。再者是对现有系统的整合——系统集成,确保新旧平台之间的互操作性和数据一致性。培训支持帮助全校教职工和学生快速熟悉新平台,提高效率。实施试点确保系统逐步稳定部署。最后,强调持续改进的重要性,以适应技术和环境变化。通过这一系列有序的工作,可以使智慧校园建设更为科学高效,减少失败风险。 适用人群:教育领域的决策者和技术人员,包括负责信息化建设和运维的团队成员。 使用场景及目标:用于指导高校和其他各级各类学校规划和发展自身的数字校园生态链;目的是建立更加便捷高效的现代化管理模式和服务机制。 其他说明:智慧校园不仅仅是简单的IT设施升级或软件安装,它涉及到全校范围内的流程再造和创新改革。

    AI淘金实战手册:100+高收益变现案例解析

    该文档系统梳理了人工智能技术在商业场景中的落地路径,聚焦内容生产、电商运营、智能客服、数据分析等12个高潜力领域,提炼出100个可操作性变现模型。内容涵盖AI工具开发、API服务收费、垂直场景解决方案、数据增值服务等多元商业模式,每个思路均配备应用场景拆解、技术实现路径及收益测算框架。重点呈现低代码工具应用、现有平台流量复用、细分领域自动化改造三类轻量化启动方案,为创业者提供从技术选型到盈利闭环的全流程参考。

    palkert_3ck_02_0719.pdf

    palkert_3ck_02_0719

    2006-2023年 地级市-克鲁格曼专业化指数.zip

    克鲁格曼专业化指数,最初是由Krugman于1991年提出,用于反映地区间产业结构的差异,也被用来衡量两个地区间的专业化水平,因而又称地区间专业化指数。该指数的计算公式及其含义可以因应用背景和具体需求的不同而有所调整,但核心都是衡量地区间的产业结构差异或专业化程度。 指标 年份、城市、第一产业人数(first_industry1)、第二产业人数(second_industry1)、第三产业人数(third_industry1)、专业化指数(ksi)。

    [AB PLC例程源码][MMS_046305]R2FX.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    精品推荐-通信技术LTE干货资料合集(19份).zip

    精品推荐,通信技术LTE干货资料合集,19份。 LTE PCI网络规划工具.xlsx LTE-S1切换占比专题优化分析报告.docx LTE_TDD问题定位指导书-吞吐量篇.docx LTE三大常见指标优化指导书.xlsx LTE互操作邻区配置核查原则.docx LTE信令流程详解指导书.docx LTE切换问题定位指导一(定位思路和问题现象).docx LTE劣化小区优化指导手册.docx LTE容量优化高负荷小区优化指导书.docx LTE小区搜索过程学习.docx LTE小区级与邻区级切换参数说明.docx LTE差小区处理思路和步骤.docx LTE干扰日常分析介绍.docx LTE异频同频切换.docx LTE弱覆盖问题分析与优化.docx LTE网优电话面试问题-应答技巧.docx LTE网络切换优化.docx LTE高负荷小区容量优化指导书.docx LTE高铁优化之多频组网优化提升“用户感知,网络价值”.docx

    matlab程序代码项目案例:matlab程序代码项目案例matlab中Toolbox中带有的模型预测工具箱.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pepeljugoski_01_0508.pdf

    pepeljugoski_01_0508

    szczepanek_01_0308.pdf

    szczepanek_01_0308

    oif2007.384.01_IEEE.pdf

    oif2007.384.01_IEEE

    stone_3ck_01_0119.pdf

    stone_3ck_01_0119

    oganessyan_01_1107.pdf

    oganessyan_01_1107

Global site tag (gtag.js) - Google Analytics