预处理器来完成可移植性

  • 任何一个以#号开头的语句都是一个预处理命令,比如说#include<stdio.h>.
  • 预处理器的另一个作用是检测当前的代码在哪个操作系统中进行,从而来产生平台相关的代码。
  • 在Windows上,要伪造一个readline和add_history函数,而在Linux系统中就可以直接使用readline库提供给我们的函数。
  • 为了实现系统的可移植性,我们需要把平台相关的代码包在#ifdef,#else和#endif预处理命令中。如果条件为真,包裹在#ifdef和#else之间的代码就会被执行,否则,#else和#endif之间的代码就会被执行。、

样例代码如下所示:

#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
#include <string.h>
static char buffer[2048];

char *readline(char *prompt){
    fputs(prompt, stdout);
    fgets(buffer, 2048, stdin);

    char *cpy = malloc(strlen(buffer)+1);

    strcpy(cpy, buffer);
    cpy[strlen(cpy) - 1] = '\0';

    return cpy; 
}
void add_history(char* unused) {}
#else
#include <readline/readline.h>
#include <readline/history.h>
#endif

int main(int argc, char** argv) {

    puts("Lispy Version 0.1");
    puts("Press Ctrl+c to Exit\n");

    while (1) {
        char* input = readline("lispy> ");
        add_history(input);
        printf("No you're a %s\n", input);

        free(input);
    } 

    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值