用 C 语言开发一门编程语言 — 跨平台

邮差的信 提交于 2020-04-07 13:36:51

目录

前文列表

用 C 语言开发一门编程语言 — 交互式 Shell

实现跨平台的可移植性

使用预处理器来解决程序跨平台的可移植性(Portability)问题。

预处理器(CPP)也是一个程序,它在真正编译程序之前运行,所以称之为预处理或预编译器。预处理器的应用场景之一就是检测当前的代码在哪个操作系统中运行,从而来产生与平台相关的代码。而这也正是我们做可移植性工作时所需要的。

这里使用预处理器指令来判断,如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数;而在其他操作系统上运行则直接使用 readline 函数库提供的函数。

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

/*
 * 如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数。
 */
#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 = NULL;

        input = readline("lispy> ");
        add_history(input);

        printf("You're a %s\n", input);

        free(input);
    }
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!