5.预处理

编译之前的处理指令

A.宏定义

a.

//Like static constant
#define NUM 6

//The truth of macro define is replacing the constant
//Replace "sum(a, b)" with "a+b"
#define sum(a, b) a+b

实质是字符替换

b.带参数的宏定义

#define sum(v1,v2) v1+v2

但是这种“函数”有缺点

printf("sum = %d\n", sum(1, 2) * sum(3, 4));

out:

sum = 11

因为宏定义的实质是文本替换,不会进行计算,实际计算是 1 + 2 * 3 + 4

解决:给每个变量、算式加上括号

#define sqr(a) ((a)*(a))

printf("sqr = %d\n", sqr(5+5));

B.条件编译

条件成立的时候才进行编译

#define NUM 1

int main(int argc, const char * argv[]) {

#if NUM == 0
    printf("0");
#elif NUM > 0
    printf(">0");
#elif NUM < 0
    printf("<0");
#endif
   
    printf("\n");
    return 0;
}

C.文件包含

系统自带使用<> #include <stdio.h>

自定义”” #include “mylib.h”

使用<>直接到系统目录中寻找资源

使用””先在源程序目录寻找,若找不到再前往系统目录

防止多次定义,多次引入:

#ifndef NUM

#define NUM 3

#endif

不能循环包含!!

时间: 2024-09-15 19:14:14

5.预处理的相关文章

预处理指令

1.预处理指令 即编译之前执行的指令 C中的预处理指令包括:文件包含,宏定义,条件编译 2.文件包含#include <stdio.h> <>和""的区别 #include <file_1.h> //直接在C库函数头文件所在目录下找 #include "file_1.h" //先在main.c所在目录下找,若无到环境变量path路径中找,若无,到C库函数头文件所在目录中找 #include可能会导致重复包含文件,降低编译效率 解决

OC高效率52之多用类型常量,少用#define预处理指令

// //  ViewController.m //  OC高效率52之多用类型常量,少用#define预处理指令 /**  *     1. 不要用预处理定义常量.这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作.即时有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中得常量值不一致.        2.在实现文件中使用static const 来定义"只在编译单元内可见的常量".由于此类常量不在全局符号表中,所以无需为其名称加前缀.     

简单的预处理操作

运用opencv完成的基本的预处理操作 # -*- coding: UTF-8 -*-import cv2import numpy as np def recognition(img):    #灰度化    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    cv2.imshow('gray', gray)    cv2.waitKey(0) #二值化    ret, binary = cv2.threshold(gray, 109, 255, cv

数据预处理(完整步骤)

原文:http://dataunion.org/5009.html 一:为什么要预处理数据?(1)现实世界的数据是肮脏的(不完整,含噪声,不一致)(2)没有高质量的数据,就没有高质量的挖掘结果(高质量的决策必须依赖于高质量的数据:数据仓库需要对高质量的数据进行一致地集成)(3)原始数据中存在的问题:不一致 —— 数据内含出现不一致情况重复不完整 —— 感兴趣的属性没有含噪声 —— 数据中存在着错误.或异常(偏离期望值)的数据高维度二:数据预处理的方法(1)数据清洗 —— 去噪声和无关数据(2)数

unity平台的预处理(宏的定义)

在unity的跨平台中,我们常常会在各个平台游走,如安卓版,苹果版,PC版.在不同的平台上,我们要做不同的操作.然而我们可以使用unity的自带的宏定义来做平台的判断.Unity帮我们定义了例如以下平台预处理.(还有一些版本号的宏定义,这里没有写出来.) 我们使用#if #elif #endif进行宏命令的判断,unity会自己判断哪些条件成立,然后执行指定的代码.例子如下: 此外,我们还可以自己对宏命令进行定义:在edit-project settings-player中的设定栏可以添加属于自

POJ - 2253 Frogger(Floyd最短路+预处理)

题目链接:http://poj.org/problem?id=2253 题意:青蛙要从点1到点2,给出各点的坐标,如果点A到点B可以通过A->C,C->B,A到B的距离可以用A->C和C-B中较长的一边代替(如果A直接到B更短的话就不用了),求点1到点2的最短距离. 题解:本来想用dijkst,但是想想就200的数据量,直接Floyd岂不美滋滋.先预处理一下各点之间的距离.因为取两条边中较长的那条边,所以转移的话,那转移的两条边都要比原来的短才可以. 值得注意的是用C的格式输入的时候要用

机器学习系列(6)_从白富美相亲看特征预处理与选择(下)

作者:viewmode=contents">龙心尘 &&寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50493845. http://blog.csdn.net/han_xiaoyang/article/details/50503115 声明:版权全部,转载请联系作者并注明出处 1. 剧情一:挑螃蟹的秘密 李雷与韩梅梅的关系发展得不错.趁国庆休假一起来天津玩. 今天,李雷十分

4、多用类型常量,少用#define预处理指令

摒弃: #define ANIMATION_DURATION 0.3 #define ERROR_MESSAGE @"ErrorMessage" 1)没有常量的类型信息 2)假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,都可以访问和修改ANIMATION_DURATION. 推荐: 1.私有常量 .m文件 static const NSTimeInterval kAnimationDuration = 0.3; static NSString *const kError

PHP:PDO prepare预处理

许多成熟的数据库都支持预处理语句(Prepared Statements)的概念.它们是什么东西?你可以把它们想成是一种编译过的要执行的SQL语句模板,可以使用不同的变量参数定制它.预处理语句具有两个主要的优点: 查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次.当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划.对于复杂查询来说,如果你要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢.通过使用一个预处理语

c 预处理的宏定义

概念 以“#”号开头的都是预处理命令 例如 #include <stdio.h>宏定义 宏定义无参数的宏名后不带参数# 表示这是一条预处理命令, define 为宏定义命令.“标识符”为所定义的宏名.“字符串”可以是常数,表达式.格式串等 举例: #define PI 3.1415926 作用: 就是用指定标识符PI来代替数3.1415926 对源程序作编译时, 将先由预处理程序进行宏代换, 即用3.1415926表达式去置换所有的宏名PI, 然后编译 #include <stdio.h