当前位置: 首页 > 面试题库 >

基于操作系统的C ++条件编译

楚瑞
2023-03-14
问题内容

我想用C ++编写一个包含系统调用的跨平台函数。我可以检查哪些条件编译标志来确定要为其编译代码的操作系统?我对使用Visual
Studio和GCC的Windows和Linux感兴趣。

我认为应该看起来像这样:

void SomeClass::SomeFunction()
{
    // Other code

#ifdef LINUX
    LinuxSystemCall();
#endif

#ifdef WINDOWS
    WindowsSystemCall();
#endif

    // Other code
}

问题答案:

我的gcc(4.3.3)定义了以下与Linux相关的预定义宏:

$ gcc -dM -E - < /dev/null | grep -i linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1

在VC
++(和许多其他Win32编译器)下,还有几个用于标识平台的预定义宏,最著名的是_WIN32。更多详细信息:http : //msdn.microsoft.com/zh-
cn/library/b0084kay(VS.80).aspx



 类似资料:
  • 操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 内部异常中断:由计算机硬件异常或故障引起的中断; 软中断:由程序中执行了引起中断的指令而造成

  • 操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断与系统调用 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 由计算机硬件异常或故障引起的中断,称为内部异常中断; 由程序中执行了引起中断

  • 我正在将一个ant脚本转换成Maven,并决定使用Maven ant run插件。我走在好的路上,但是我遇到了下面的问题。Ant源脚本使用如下目标定义: 关键是要使用属性值 abc.home 在构建周期的后期,这取决于操作系统(Win、Linux)。在ant脚本中,这是可以的,但是maven ant run插件不支持使用多个目标。我不想使用Maven配置文件标记。如果有,我想使用ant标签?有人有

  • 前言 准备了很久,找了好多天资料,还不知道应该如何动笔写:因为担心拿捏不住,所以一方面继续查找资料,一方面思考如何来写。作为《Shell编程范例》的一部分,希望它能够很好地帮助 Shell 程序员理解如何用 Shell 命令来完成和 Linux 系统关系非常大的文件系统的各种操作,希望让 Shell 程序员中对文件系统"混沌"的状态从此消失,希望文件系统以一种更为清晰的样子呈现在眼前。 文件系统在

  • 本文向大家介绍用C / C ++编写与操作系统无关的代码,包括了用C / C ++编写与操作系统无关的代码的使用技巧和注意事项,需要的朋友参考一下 可以与操作系统进行交互的程序,而与运行该操作系统的操作系统无关。 大多数c / c ++编译器都有能力定义检测OS的宏。 GCC编译器的一些宏是- _WIN32:32位和64位Windows操作系统的宏。 _WIN64:用于64位Windows操作系统

  • sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的