标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件"

宏定义,如:#define PI 3.1415926
查看用宏定义的值替换宏名称,如:gcc -E test.c
带參数的宏:MAX(x,y) (x)>(y)?

((x):(y))   //用法与函数一样
宏运算:
    #define PRINT(n) printf(#n"=%d",n)   //#n 就是把传入的变量值作为字符串放在那里
    #define MAX(type) type max_##type()  //##n就是把变量的值作为函数名的一部分
    #define MKID(n) i_##n                //##n就是把变量的值作为变量名的一部分

C语言中提前定义的宏:
    _LINE_ 当前正在编译的行号:%d
    _FILE_ 正在编译的源程序名:%s
    _DATE_ 编译程序的日期:%s
    _TIME_ 编译程序的时间:%s
    _STDC_ 推断编译器是否符合c标准,返回0或1:%d
条件编译:
    #define TEST 1
    #if TEST
        //TEST为真时运行的代码
    #endif
    
    #ifndef ABC_H  //假设没定义,就定义宏
    #define ABC_H
    //头文件定义
    #endif
    
    #ifdef ABC_H  //假设定义了宏,取消定义
    #undef ABC_H
    #endif

    推断:          if defined(TEST) && !defined(ABC_H){    }
    if……else……语法:#if …… #elif……#elif……#else……#endif

编译时。參数  -D 可随时定义宏。



声明使用外部变量的方法:exterm int speed;//speed为外部变量名

编写makefile文件批量编译的语法,演示样例:
main:main.o test.o test.h  //冒号前台的是生成的目标。后面的是依赖的文件
    gcc main.o test.o -o main  //编译的详细语句
main.o:main.c
    gcc -c main.c
test.o:test.c
    gcc -c test.c
clean:
    rm *.o

用法 。能够使用make 编译所有,也可使用make main.o 生成 main.o,使用make test.o 生成 test.o ,make clean 删除编译生成的.o文件。
结构体长度计算演示样例(自己主动补齐):
总长度为最长数据类型字节的整数倍。
struct student//总长28。是4的整数倍,所以终于大小为28字节
{
    int ID;//4字节
    char name[20];//数组 ,每一个字符1字节,共20字节
    int age;//4字节
};

typedef struct//总长18字节,要是4的整数倍。大于10且是4的整数倍的数是20,所以终于大小为20字节
{
    int ID;//4字节
    char name[10];//数组 ,每一个字符1字节,共10字节
    int age;//4字节
}student;
结构体变量的定义和使用:
    struct student s; 或 struct student s={101,"zs",20};//定义时总体赋值
    s.ID=101;//单个赋值
    strcpy(s.name,"zs");//字符数组赋值

转载于:https://www.cnblogs.com/clnchanpin/p/7191489.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java数据结构系列——排列(2):有序阵列

package Array;/*** 对数组排序。当添加到阵列保持有序数组元素&#xff1b;* author wl**/ public class MyOrderArray {private long array[];private int elements;//用于记录数组中实际数据的个数public MyOrderArray(){arraynew long[50];//数组默认长度为50&#xff1b;}…

NSString 练习

//将“⽂文艺⻘青年”改成“213⻘青年”。 NSString *str "文艺青年"; NSString *str1 [str stringByReplacingOccurrencesOfString:"文艺" withString:"213"]; NSLog("%",str1); //将 整数123 转换为字符串“123”。 NSString *s …

安全市场五巨头将面临新兴厂商的挑战

赛门铁克、思科、IBM、Check Point、英特尔&#xff0c;警钟已敲响~ 2016年同比增长率11.5%的数据出台之后&#xff0c;市场研究公司科技商业研究(TBR)为来年的安全行业绘制了一幅崭新的蓝图——安全市场上现有的企业将受到新兴厂商的挑战。 展望未来&#xff0c;现有安全市场五…

linux编译运行build.sh,linux下libwebsockets编译及实例

最近想自己搭建一个webscoket协议的服务器&#xff0c;打算用libwebsockts这个库。下载代码编译。编写一个shell脚本#!/bin/sh# wget http://git.warmcat.com/cgi-bin/cgit/libwebsockets/snapshot/libwebsockets-1.4-chrome43-firefox-36.tar.gz# tar xvzf libwebsockets-1.4-…

Tomcat如何配置环境变量

1&#xff0c; JDK&#xff1a;版本为jdk-7-windows-i586.exe 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 2&#xff0c;tomcat&#xff1a;版本为apache-tomcat-7.0.33-windows-x86.zip 下载地址&#xff1a;http://tomcat.apache.org/ 2…

eclipse常用快捷键——非常实用

1、eclipse 查看变量或方法被调用的快捷键如下&#xff1a; &#xff08;1&#xff09;双击选中变量或者方法&#xff08;2&#xff09;键盘上CtrlshiftG组合键 2、eclipse中查看接口实现类快捷键 先找到接口类打开,然后双击接口名选中,再按住ctrlT就可以了。 3、eclipse中全局…

反编译查看源码dex2jar

为什么80%的码农都做不了架构师&#xff1f;>>> 上次说到了用apktool反编译&#xff0c;这次我们来用dex2jar 把apk解压得到文件夹 文件夹打开看到这些文件 其中这个classes.dex就是这次需要用到的字节码文件 把这个字节码文件托到dex2jar目录里 命令行编辑 得到下…

linux命令验证sqlldr,Linux:sqlldr命令

第一步&#xff1a;写一个 ctl格式的控制文件CTL 控制文件的内容 &#xff1a;load data --1. 控制文件标识infilexxx.txt --2. 要导入的数据文件名insert into table test--3. 将文件插入到数据库的 test 表中fields terminated by X09 --4. 用于分割一行中各个属性值的符号(例…

STL 中的链表排序

一直以来学习排序算法&#xff0c; 都没有在链表排序上下太多功夫&#xff0c;因为用得不多。最近看STL源码&#xff0c;才发现&#xff0c;原来即使是链表&#xff0c;也能有时间复杂度为O(nlogn)的算法&#xff0c; 大大出乎我的意料之外&#xff0c;一般就能想到个插入排序。…

cmd更换编码类型

chcp 65001 UTF-8 65001 GBK 936 本文出自 “曾颐楠的播客” 博客&#xff0c;请务必保留此出处http://zengyinan.blog.51cto.com/9524976/1721475 转载于:https://www.cnblogs.com/zengyinanos/p/5042732.html

代码混淆之后定位线上bug

代码混淆的目的 代码混淆的目的是防止竞争对手通过反编译来阅读项目代码。 Android中通过ProGuard来做代码混淆&#xff08;当然也还有其他的产品可以做代码混淆&#xff09;。 bug日志反混淆 资料&#xff1a;错误log、mapping.txt 异常log&#xff1a; mapping.txt&#xff…

linux怎么切换不同版本的r,在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3

在linux中用同一个版本的R 同时安装 Seurat 2 和 Seurat 3Seurat 作为单细胞分析中的重量级R包&#xff0c;有多好用用&#xff0c;用过的人都知道。Seurat 分析流程基本涵盖了单细胞分析中的所有常见分析方法&#xff0c;包括filtering&#xff0c;tSNE&#xff0c;UMAP降维及…

Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵

http://blog.csdn.net/janeky/article/details/17272625 今天我们来谈谈关于Unity中的旋转。主要有三种方式。变换矩阵&#xff0c;四元数和欧拉角。 定义 变换矩阵可以执行任意的3d变换&#xff08;平移&#xff0c;旋转&#xff0c;缩放&#xff0c;切边&#xff09;并且透视…

本地通知

本地通知&#xff0c;local notification&#xff0c;用于基于时间行为的通知&#xff0c;比如有关日历或者todo列表的小应用。另外&#xff0c;应用如果在后台执行&#xff0c;iOS允许它在受限的时间内运行&#xff0c;它也会发现本地通知有用。比如&#xff0c;一个应用&…

Redux 并不慢,只是你使用姿势不对 —— 一份优化指南

原文地址&#xff1a;Redux 并不慢&#xff0c;只是你使用姿势不对 —— 一份优化指南原文作者&#xff1a;Julian Krispel译文出自&#xff1a;掘金翻译计划本文永久链接&#xff1a;github.com/xitu/gold-m…译者&#xff1a;reid3290校对者&#xff1a;sunui&#xff0c;xek…

把windows装到linux下,如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10?

原标题&#xff1a;如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10&#xff1f;Windows 10凭借大受欢迎的WSL(Windows Subsystem for Linux)进入Linux领域。由于最近推出了WSL的最新版WSL2&#xff0c;用户现在可以利用实际的Linux内核从Windows执行Linux任务。现在…

TWRP-recovery中文界面安装方法[转]

把下载到的ui.zip放入sdcard1/twrp文件夹。注意&#xff0c;是内置存储卡中。如没有上述文件夹&#xff0c;自行建立后通过文件管理器放入&#xff0c;不是卡刷。文件夹应如下所示&#xff1a;sdcard1&#xff08;内置SD&#xff09; &#xff5c; ┕--twrp&#xff08;文件夹…

如何定期备份网站数据

产生这个问题的背景是我在维护两个个人的网站&#xff0c;因为采用的是虚拟主机&#xff0c;有时候空间续费不及时等&#xff0c;都可能造成数据的丢失&#xff0c;为了保障数据不丢失&#xff0c;因为有必要每15天左右对网站数据进行备份以防止发生不当的事情。 我们希望做的就…

初创团队可能不适合应届生小孩

根据最近招聘中接触到的一些刚毕业小孩的表现&#xff0c;谈谈这个问题&#xff1a; 1、扛不住&#xff0c;初创团队一般最好一人撑一快工作&#xff0c;刚毕业经验比较薄的小孩在这方面一是心理上不敢担当&#xff0c;二是能力上确实还需要磨炼成长 2、初创团队的那个环境可能…

vba执行linux命令,从VBA中的shell命令捕获输出值?

慕盖茨4494581根据Andrew Lessard的回答&#xff0c;这是一个运行命令并将输出作为字符串返回的函数 -Public Function ShellRun(sCmd As String) As StringRun a shell command, returning the output as a stringDim oShell As ObjectSet oShell CreateObject("WScript…