第14章--预处理器

1、你所在的公司向市场投放了一个程序,用于处理金融交易并打印出它们的报表。为了扩展潜在市场,这个程序以几个不同的版本进行销售,每个版本有不同选项的组合–选项越多,价格就越高,你的任务是为一个打印函数实现代码,这样它可以很容易进行编译,产生程序的不同版本。
你的函数名是print_ledger。它接受一个int参数,没有返回值,它应该调用一个或多个下面的函数,具体取决于该函数被编译时哪个符号(如果有的话)被定义:

If this symbolis defined…Then you callthis function.
OPTION LONGprint_ledger_long
OPTION DETAILEDprint_ledger_detailed
(neither)print_ledger default

每个函数都接受单个int参数,把你收到的值传递给你该调用的函数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void print_ledger(int data);
void print_ledger_long(int data);
void print_ledger_detail(int data);
void print_ledger_default(int data);

void main(int argc, char **argv)
{
	print_ledger('a');
}

void print_ledger(int data)
{
#ifdef OPTION_LONG 
	print_ledger_long(data);
#endif

#ifdef OPTION_DETAILED
	print_ledger_detailed(data);
#endif

#if !defined(OPTION_LONG) && !defined(OPTION_DETAILED)
	print_ledger_default(data);
#endif
}

void print_ledger_long(int data)
{
	printf("print ledger long: %c\n", data);
}

void print_ledger_detailed(int data)
{
	printf("print ledger detailed: %c\n", data);
}

void print_ledger_default(int data)
{
	printf("print ledger default: %c\n", data);
}

2、编写一个函数,返回一个值,提示运行这个函数的计算机类型。这个函数将由一个能够运行与许多不同计算机的程序使用。我们将使用条件编译来实现这个魔术,你的函数应该叫做cpu_type,它不接受任何参数,当你的函数被编译时,在下面表中“已定义”列中的符号之一可能会被定义,你的函数应该从“返回值”列中返回对应的符号,如果左边列中的所有符号均未定义,那么函数就返回CPU_UNKNOWN这个值,如果超过一个符号被定义,那么其结果就是未定义的。

DefinedReturned
VAXCPU_VAX
M68000CPU_68000
K68020CPU_68020
I80386CPU_80386
X6809CPU_6809
X6502CPU_6502
U3B2CPU_3B2
(none)CPU_UNKNOWN

“返回值”列中的符号将被#define定义为各种不同的整形值,其内容位于头文件cpu_type.h中。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define I80386 

int cpu_type();
enum {CPU_VAX, CPU_68000, CPU_68020, CPU_80386, CPU_6809, CPU_6502, CPU_3B2, CPU_UNKNOWN};

void main(int argc, char **argv)
{
	printf("cpu type: %d\n", cpu_type());
}

int cpu_type()
{
#if defined(VAX)
	return CPU_VAX;
#elif defined(M68000)
	return CPU_68000;
#elif defined(M68020)
	return CPU_68020;
#elif defined(I80386)
	return CPU_80386;
#elif defined(X6809)
	return CPU_6809;
#elif defined(X6502)
	return CPU_6502;
#elif defined(U32B2)
	return CPU_3B2;
#else
	return CPU_UNKNOWN;
#endif
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值