宏定义

关于预编译和宏定义部分说明

筅森魡賤 提交于 2019-11-28 16:46:21
From: http://www.neu.edu.cn/cxsj/pointchart/c11/index.html #pragma指令 TAG: 预编译和宏定义,ANSI C,# pragma TEXT: 其语法格式如下: # pragma token-sequence 此指令的作用是触发所定义的动作。如果token- sequence存在,则触发相应的动作,否则忽略。此指令一般为编译系统所使用。例如在Visual C++.Net 中利用# pragma once 防止同一代码被包含多次。 #line指令 TAG: 预编译和宏定义,ANSI C,#line TEXT: 此命令主要是为强制编译器按指定的行号,开始对源程序的代码重新编号,在调试的时候,可以按此规定输出错误代码的准确位置。 形式1 语法格式如下: # line constant “filename” 其作用是使得其后的源代码从指定的行号constant重新开始编号,并将当前文件的名命名为filename。例如下面的程序如下: #include "stdio.h" void Test(); #line 10 "Hello.c" int main(int argc, char* argv[]) { #define CONST_NAME1 "CONST_NAME1" printf("%s\n",CONST_NAME1);

C语言的宏macro的使用

天涯浪子 提交于 2019-11-28 16:22:26
C's Macro Introduction 1.The Connect Macros: ## 这是一个预处理连接符,这个操作符主要用来将两个符号连接成为一个完整的宏符号。通过下面的代码,可以看到其具体的使用方法: 如下例子: #include <stdio.h> struct macro { int N; char M; }; struct macro macro_drv = {100,20}; #define XNAME(n) x##n #define Macro(x) x##_drv.N int main(void) { char *XNAME(3) = "Hello,Macro(##)\n"; printf("%s",XNAME(3)); printf("The struct:%d\n",Macro(macro)); return 0; } 运行结果如下所示: 2.The Variadic Macros: ... and __VA_ARGS__ 在某些函数当中,需要接收变化数量的参数,例如基本的printf函数。 我们可以通过将函数的 最后一个参数 定义为宏 ... ,这样函数就可以使用预定义的宏 __VA_ARGS__ 来表示变化数量的变量了。 如下例子: #include <stdio.h> #define PR(x,...) printf("Message" #x "

C语言实现推箱子游戏

為{幸葍}努か 提交于 2019-11-28 14:41:00
很早就想过做点小游戏了,但是一直没有机会动手。今天闲来无事,动起手来。过程还是蛮顺利的,代码也不是非常难。今天给大家分享一下~ 一、介绍 开发语言:C语言 开发工具:Dev-C++ 5.11 日期:2019年9月28日 作者:ZackSock 也不说太多多余的话了,先看一下效果图: 游戏中的人物、箱子、墙壁、球都是字符构成的。通过wasd键移动,规则的话就是推箱子的规则,也就不多说了。 二、代码实现 关于代码方面,我尽可能讲的细致。希望大家可以理解~ (1)方法列表 //主函数 void main ( ) ; //初始化一些数据 initData ( ) ; //在控制台上打印地图 drawMap ( ) ; //向上移动 moveUp ( ) ; //向左移动 moveLeft ( ) //向下移动 moveDown ( ) //向右移动 moveRight ( ) ; 这几个方法都顾名思义,而且用意也非常明确,就initData可能不知道具体用处,但是没有什么大问题。唯一的问题就是,上左下右的顺序可能会逼死几个强迫症患者,哈哈。 (2)参数列表 为了方便,我把include和宏定义也放到参数列表当中 //导入函数库 # include <stdio.h> # include <stdlib.h> # include <conio.h> //宏定义 # define WIDTH

宏定义调试输出

痴心易碎 提交于 2019-11-28 14:12:34
转载自: http://www.cnblogs.com/xianqingzh/archive/2011/07/08/2101510.html 前言: 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。 比如,定义一个宏开关: #define __DEBUG 当需要调试的时候,使用语句: #ifdef __DEBUG printf(xxx); #endif 这种方式的调试,可以通过undef __DEBUG的方式让告知编译器不编译这些语句,从而不再输出这些语句。但是这种方式的麻烦之处也是显而易见的,每一条调试语句都需要使用两条宏定义来包围,这不但在代码的编写上不便,源码结构也不好看,工作量依然不小。 如果我们能够把这三条语句编程一条,那该多舒服呀~,于是,我们想到使用这样的语句: #ifdef __DEBUG #define DEBUG(info) printf(info) #else #define DEBUG(info) #endif 这样,我们在编写代码的时候

iOS 常用的方便宏定义

折月煮酒 提交于 2019-11-28 14:11:06
//Downloader #define DOCUMENTS_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/"] #define kNetWorkErrorString @"网络错误" #define kAllDataLoaded @"已加载完所有数据" #define USHARE_DEMO_APPKEY @"59f99acf734be411fe00001e"//分享 #define UMessage_DEMO_APPKEY @"5a177ccab27b0a1aaa000155"//推送 //App Constant Values #define kLoginUserDataFile @"LoginUserDataFile" #define kLoginInDataFile @"LoginInDataFile" #define D_width SCREENWIDTH/375 #define D_height SCREENHEIGHT/667 //正常地址 #define k_BASE_URL(url) [NSString stringWithFormat:@"%@%@",BaseURL,url] #define k_BASE_ImgURL(url) [NSString

printf 的宏定义版本,转贴

ε祈祈猫儿з 提交于 2019-11-28 14:10:09
前言: 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。 比如,定义一个宏开关: #define __DEBUG 当需要调试的时候,使用语句: #ifdef __DEBUG printf(xxx); #endif 这种方式的调试,可以通过undef __DEBUG的方式让告知编译器不编译这些语句,从而不再输出这些语句。但是这种方式的麻烦之处也是显而易见的,每一条调试语句都需要使用两条宏定义来包围,这不但在代码的编写上不便,源码结构也不好看,工作量依然不小。 如果我们能够把这三条语句编程一条,那该多舒服呀~,于是,我们想到使用这样的语句: #ifdef __DEBUG #define DEBUG(info) printf(info) #else #define DEBUG(info) #endif 这样,我们在编写代码的时候,使用DEBUG一条语句就可以了,我们把宏开关__DEBUG打开,所有的DEBUG(info)宏定义信息都会被替换为printf(info),关上则会被替换成空

iOS 方便的宏定义

蓝咒 提交于 2019-11-28 14:09:46
转载 http://my.oschina.net/yongbin45/blog/150149 // 字符串: #ifndef nilToEmpty #define nilToEmpty(object) (object!=nil)?object:@"" #endif #ifndef formatStringOfObject #define formatStringOfObject(object) [NSString stringWithFormat:@"%@", object] #endif #ifndef nilToEmptyFormatStringOfObject #define nilToEmptyFormatStringOfObject(object) formatStringOfObject(nilToEmpty(object)) #endif // 图片: #ifndef imagePath #define imagePath(imageName) [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"] #endif // 颜色 #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f

宏定义中的#和##

て烟熏妆下的殇ゞ 提交于 2019-11-28 10:35:16
代码中的family_##who表示以family_为前缀,将who为后缀与前缀连接,合成一个名字 参数前面的#使用来取参数的实值,ADD(1,200)运行结果为201 来源: https://www.cnblogs.com/WindSun/p/11405140.html

预处理和宏定义

♀尐吖头ヾ 提交于 2019-11-27 21:30:34
预处理命令行必须位于源文件的开头 在源文件的一行上可以有多条预处理命令 宏名必须用大写字母表示 宏替换不占用程序运行时间 解析: D A:预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置。 B:源文件的每一行只能有一条预处理命令,如果指令一行放不下, 可以通过反斜杠“/”进行控制。 C:宏名通常由大写字母表示,而非必须 D:宏是在 预编译期间 进行的,将代码中的指定字符转换,转换结束后,再进行编译,所以不占用程序运行时间 来源: https://blog.csdn.net/sinat_42550851/article/details/99736252