#include_next的语意

#include_next的语意 继承和头文件
继承是对象或者文件通过拷贝其它对象或文件的内容,从而衍生出一个新的对象。对于C语言的头文件来说,继承就是一个头文件包含另一个头文件,然后更改(如更改一些宏的值)或增加一些内容。
如果衍生头文件和基础头文件(base header file)的文件名不同,处理方法很简单,只需在衍生头文件中包含基础头文件即可#include "basic"(base指代基础头文件的文件名)。
有时候我们需要使衍生出来的头文件和基础头文件的文件名相同。例如一个应用程序需要使用系统头文件sys/signal.h,但是在某些系统上/usr/include/sys/signal.h不完全和应用程序期望的一样,那么定义一个本地("local" version)的头文件将会很方便,如定义/usr/local/include/sys/signal.h来覆盖或补充系统提供的头文件。
首先写出满足程序期望的头文件/usr/local/include/sys/signal.h,然后在编译时增加"-I /usr/local/include"选项。但是如果要在新的头文件中包含标准的sys/signal.h,通过在新的文件中增加"#include <sys/signal>"是不可能实现的。因为这样包含的是文件本身而不是系统的头文件,从而导致无限的递归。
在新的头文件中增加"#include </usr/include/sys/signal.h>"固然可以解决,但是这种方式的缺点是固定了系统头文件的位置,如果系统头文件的位置改变了,这种方法就会失效。另一种简单的方法是使用"#include_next",表示包含文件名为该名字的下一个头文件。这条语句使编译器到其它目录中搜索该头文件。
继前面的例子,在头文件/usr/local/include/sys/signal.h中增加"#include_next <sys/signal.h>"就可能正确包含系统头文件了。
题目描述 套娃,原名 “马特廖什卡娃娃”(Матрешка),起源于 19 世纪末的俄罗斯,由若干逐渐变小、可以套进彼此的木制空心娃娃组成,象征家庭和生命的延续。套娃因其独特的艺术风格和寓意,逐渐成为俄罗斯民间艺术的代表和著名的旅游纪念品。 Dr. X 想到,程序能不能套娃呢?Dr. X 希望你写一个程序,输入整数 n 和 k,你的程序会输出一个字符串,Dr. X 会把它保存为 p 1 ​ .cpp,然后 Dr. X 会开始玩你的套娃程序: 首先,编译运行 p 1 ​ .cpp,得到它的屏幕输出,保存为 p 2 ​ .cpp。 在此基础上,编译运行 p 2 ​ .cpp,得到它的屏幕输出,保存为 p 3 ​ .cpp。 重复上述过程,编译运行 p i ​ .cpp,得到它的屏幕输出,保存为 p i+1 ​ .cpp,直到得到 p n ​ .cpp 为止。 Dr. X 期望 p n ​ .cpp 不是一个 C++ 程序,而恰好是一个整数 k(k 之后有无换行均可)。 在任何阶段,程序 p 1 ​ .cpp,p 2 ​ .cpp,⋯,p n-1 ​ .cpp 都只允许向标准输出(屏幕输出)打印,不允许使用操作系统功能,例如创建临时文件等。且这些程序都不得超过 100 KB。 输入格式 输入一行两个整数 n 和 k。 输出格式 输出一个可编译的 C++ 程序,它在经历 n 次编译运行的流程后能输出一个整数 k。评测机会采用和你的环境完全相同的编译器(Dev-Cpp 中的 GCC 4.9.2)和编译选项编译 p 1 ​ .cpp,p 2 ​ .cpp,⋯,p n-1 ​ .cpp。 输入输出样例 输入 #1复制 1 99 输出 #1复制 99 输入 #2复制 3 4096 输出 #2复制 #include <iostream> using namespace std; int main() { cout << "#include <iostream>" << endl; cout << "using namespace std;" << endl; cout << "int main() { cout << 4096 << endl; return 0; }" << endl; return 0; } 说明/提示 样例 1 解释 99 会被保存为 p 1 ​ .cpp。 样例 2 解释 Dr. X 会把你程序的输出(样例输出)保存为 p 1 ​ .cpp。 编译运行 p 1 ​ .cpp,得到一个 cout << 4096 << endl; 的程序,保存为 p 2 ​ .cpp。 编译运行 p 2 ​ .cpp,得到 4096,保存为 p 3 ​ .cpp,符合 n=3,k=4096 的要求。 数据范围 对于 40% 的数据,n≤4。 对于 100% 的数据,1≤n≤8,0≤k≤10 9 。注意提交程序的大小限制为 100 KB。
07-01
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值