1 Star 0 Fork 0

BenLoogChang/LearnC

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
LC3.c 3.80 KB
一键复制 编辑 原始数据 按行查看 历史
ChinaDragon01 提交于 2021-11-24 19:41 . 指针
#include<stdio.h>
#include"my.h"
//不同的平台下引入不同的头文件
#if _WIN32 //识别windows平台
#include<Windows.h>
#elif _linux_ //识别linux平台
#include<unistd.h>
#endif
#define NUMBER_100 100
//程序中反复使用的表达式就可以使用宏定义
#define MENTH (n*n+3*n)//注意:这里的n需要再main里声明变量赋值
#define PI 3.14159
/*
C语言允许宏带有参数
注意:1) 带参宏定义中,形参之间可以出现空格,但是宏名和形参列表之间不能有空格出现。
2) 在带参宏定义中,不会为形式参数分配内存,因此不必指明数据类型。而在宏调用中,实参包含了具体的数据,要用它们去替换形参,因此实参必须要指明数据类型。
*/
#define MENTH_PARM(y) y*y+3*y
#define MAX(a,b) (a > b) ? a : b
/*
C语言预处理命令
http://c.biancheng.net/view/1878.html
C语言typedef:给类型起一个别名 http://c.biancheng.net/cpp/html/100.html
*/
int main() {
printf("C语言预处理命令 \n");
/*
下面我们举个例子来说明预处理命令的实际用途。假如现在要开发一个C语言程序,让它暂停 5 秒以后再输出内容,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢?
这个程序的难点在于,不同平台下的暂停函数和头文件都不一样:
Windows 平台下的暂停函数的原型是void Sleep(DWORD dwMilliseconds)(注意 S 是大写的),参数的单位是“毫秒”,位于 <windows.h> 头文件。
Linux 平台下暂停函数的原型是unsigned int sleep (unsigned int seconds),参数的单位是“秒”,位于 <unistd.h> 头文件。
*/
//#if _WIN32
//Sleep(5000);
//#elif _linux_
//sleep(5);
//#endif
printf("5秒结束 \n");
/*
C语言#include的用法详解
使用尖括号< >和双引号" "的区别在于头文件的搜索路径不同:
使用尖括号< >,编译器会到系统路径下查找头文件;
而使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。
自己编写的头文件,一般存放于当前项目的路径下,所以不能使用尖括号,只能使用双引号。
不管是标准头文件,还是自定义头文件,都只能包含变量和函数的声明,不能包含定义,否则在多次引入时会引起重复定义错误。
C语言基础:多文件编译 https://blog.csdn.net/walle2018/article/details/79765330
菜鸟攻略——C语言多文件编程初探(一) https://blog.csdn.net/candcplusplus/article/details/7317472
菜鸟攻略–C语言多文件编程初探(二) https://blog.csdn.net/candcplusplus/article/details/53326368
*/
printf("1 到 100 的和值为 %d \n", sum(1, 100));
/*
#define 叫做宏定义命令,它也是C语言预处理命令的一种。所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。
对 #define 用法的几点说明
1) 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单粗暴的替换。字符串中可以含任何字符,它可以是常数、表达式、if 语句、函数等,预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。
2) 宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起替换。
3) 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。
4) 代码中的宏名如果被引号包围,那么预处理程序不对其作宏代替;
5) 宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名,在宏展开时由预处理程序层层代换。例如:
#define PI 3.1415926
#define S PI*y*y PI是已定义的宏名
*/
int sumValue = 20 + NUMBER_100;
printf("sumValue = %d \n", sumValue);
//注意:这里的n是对MENTH里的n进行声明
int n = 2;
int sumValue2 = 2 * MENTH + 3 * MENTH;
printf("sumValue2 = %d \n", sumValue2);
/*
sumValue = 120
sumValue2 = 50
*/
/*
C语言带参数的宏定义
C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。
C语言允许宏带有参数
注意:
1) 带参宏定义中,形参之间可以出现空格,但是宏名和形参列表之间不能有空格出现。
2) 在带参宏定义中,不会为形式参数分配内存,因此不必指明数据类型。而在宏调用中,实参包含了具体的数据,要用它们去替换形参,因此实参必须要指明数据类型。
*/
int sumValue3 = MENTH_PARM(2);
printf("sumValue3 = %d \n", sumValue3);
//sumValue3 = 10
int maxResult = MAX(3, 2);
printf("maxResult = %d \n", maxResult);
//maxResult = 3
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/benloogchang/LearnC.git
git@gitee.com:benloogchang/LearnC.git
benloogchang
LearnC
LearnC
master

搜索帮助