发布网友 发布时间:2022-04-22 09:20
共4个回答
懂视网 时间:2022-04-12 03:11
一般OJ都是使用 标准输入输出,这样在本地调试时很不方便,可以通过下面的方法 重定向标准输入输出到文件: #ifdef LOCAL_DEBUG freopen( in.txt , r , stdin); # endif 这样做有一个问题就是 如果在代码中定义宏LOCAL_DEBUG,则在提交时必须取消其定义,这
一般OJ都是使用 标准输入输出,这样在本地调试时很不方便,可以通过下面的方法 重定向标准输入输出到文件:
#ifdef LOCAL_DEBUG freopen("in.txt", "r", stdin); #endif
这样做有一个问题就是 如果在代码中定义宏LOCAL_DEBUG,则在提交时必须取消其定义,这样改来改去很麻烦,有没有更方便的方法呢?请看下文。
上面的代码说明只要定义了 宏 LOCAL_DEBUG,就将标准输入重定向到文件 in.txt。在VS2010中,宏 LOCAL_DEBUG 可以通过设置编译参数来定义,这样在本地调试时使用文件输入,而且 无需修改源文件即可直接提交 ,在OJ 服务器中由于没有定义 宏 LOCAL_DEBUG,所以标准输入并没有被重定向,perfect!
方法如下:
如项目名 为 test 。
项目-> test 属性(最下面)-> 配置属性 -> C/C++ -> 命令行 。在下面的 “其他选项” 中 输入 “ /D LOCAL_DEBUG ”,再点 右下角 “ 应用 ”。OK !
给个程序测试一下,in.txt 文件放在 test 项目根目录下。
#include#include #include using namespace std; int main() { #ifdef LOCAL_DEBUG freopen("in.txt", "r", stdin); #endif int n; cin >> n; cout << n << endl; return 0; }
热心网友 时间:2022-04-12 00:19
什么意思?是在定义宏后的程序代码中改,还是在编辑宏定义的时候该?
如果是前者,宏定义是在预编译时是就决定的,在程序运行时是不能改的;如果是后者,直接改就行了。
热心网友 时间:2022-04-12 01:37
比如你想定义N=5,就这样:#define N 5
如果你想修改宏为x=3.2,则为:#define x 3.2
看懂了吗,希望能帮上你
热心网友 时间:2022-04-12 03:12
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。
1 #define命令剖析
1.1 #define的概念
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。
(1) 简单的宏定义:
#define <宏名> <字符串>
例: #define PI 3.1415926
(2) 带参数的宏定义
#define <宏名> (<参数表>) <宏体>
例: #define A(x) x
一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替换。
1.2 宏替换发生的时机
为了能够真正理解#define的作用,让我们来了解一下对C语言源程序的处理过程。当我们在一个集成的开发环境如Turbo C中将编写好的源程序进行编译时,实际经过了预处理、编译、汇编和连接几个过程,见图1。
源程序
预处理器
修改后的源程序
编译器
汇编程序
汇编器
可重定位的目标程序
连接器
可执行的目标程序
图1 C语言的编译过程
其中预处理器产生编译器的输出,它实现以下的功能:
(1) 文件包含
可以把源程序中的#include 扩展为文件正文,即把包含的.h文件找到并展开到#include 所在处。
(2) 条件编译
预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外,通常把排除在外的语句转换成空行。
(3) 宏展开
预处理器将源程序文件中出现的对宏的引用展开成相应的宏 定义,即本文所说的#define的功能,由预处理器来完成。
经过预处理器处理的源程序与之前的源程序有所有不同,在这个阶段所进行的工作只是纯粹的替换与展开,没有任何计算功能,所以在学习#define命令时只要能真正理解这一点,这样才不会对此命令引起误解并误用。