我需要我的代码根据编译它的操作系统做不同的事情.我正在寻找这样的东西:
#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?有没有更好的方法来做同样的事情?
我想在Linux和Windows上运行一些c ++代码.有些代码我只希望包含在一个操作系统中,而不包含在另一个操作系统中.是否有标准的#ifdef可以使用?
就像是:
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error "OS not supported!"
#endif
Run Code Online (Sandbox Code Playgroud)
问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案.
我正在编写一个跨平台程序.我希望这个程序在Windows和Linux下运行,所以我有两个不同的代码段用于这两个平台.如果操作系统是Windows,我想要运行第一个代码段; 如果它是Linux,那么我希望第二个代码段运行.
所以我编写了以下代码,但在Windows和Linux上构建时都会出错.我该怎么做才能解决它?
#ifdef __unix__ /* __unix__ is usually defined by compilers targeting Unix systems */
#define OS_Windows 0
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#elif defined(_WIN32) || defined(WIN32) /* _Win32 is usually defined by compilers targeting 32 or 64 bit Windows systems */
#define OS_Windows 1
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define DIV 1048576
#define WIDTH 7
#endif
int main(int argc, char *argv[])
{
if(OS_Windows)
{
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
_tprintf (TEXT("There …
Run Code Online (Sandbox Code Playgroud) 是否可以使用宏来制作跨平台的睡眠代码?例如
#ifdef LINUX
#include <header_for_linux_sleep_function.h>
#endif
#ifdef WINDOWS
#include <header_for_windows_sleep_function.h>
#endif
...
Sleep(miliseconds);
...
Run Code Online (Sandbox Code Playgroud) 我是C++的新手.我目前正在开展一个小组项目,我们希望我们的课程兼容实验室计算机(Windows)和我的计算机(Mac OS X).
以下是我们在文件顶部放置的内容:
#ifdef TARGET_OS_X
# include <GLUT/glut.h>
# include <OpenGL/OpenGL.h>
#elif defined _WIN32 || defined _WIN64
# include <GL\glut.h>
#endif
Run Code Online (Sandbox Code Playgroud)
我意识到之前已经问过这个问题,但是我的搜索给了我相互矛盾的答案,例如"_MAC","TARGET_MAC_OS","MACINTOSH"等.在#ifdef语句中输入的当前和正确的声明是什么兼容Mac?现在它不起作用.
谢谢!
在集成我的j2objc转换的java库时,我收到了这条消息.
ld:警告:紧急:为watchOS模拟器构建,但链接在为iOS构建的目标文件(/Users/admin/Documents/j2objc/dist/lib/libjre_emul.a(IOSArray.o))中.注意:将来这将是一个错误.
我不明白我的代码是否适用于真正的watchOS设备?或者这只是一个仅在模拟器中运行的i386构建?在这种情况下我需要做什么?
我有一个既有iOS又有OS X目标的项目.在编译OS X时是否有预处理器宏?我试过这个:
#if TARGET_OS_MAC
@interface BFNode : NSObject <NSPasteboardReading, NSPasteboardWriting> {
#else
@interface BFNode : NSObject {
#endif
Run Code Online (Sandbox Code Playgroud)
但TARGET_OS_MAC
似乎没有用.当我尝试在iOS上运行应用程序时,我遇到编译器错误,因为它尝试编译第一行,并且NSPasteboardReading
在iOS上没有定义协议.
我知道也有TARGET_OS_IPHONE
.如果我使用它并交换@interface
它起作用的声明.
但是有很多地方我有代码,没有iOS版本,所以我也需要OS X的宏.
解:
我最终在.pch文件中定义了一个新的宏:
#define TARGET_OSX TARGET_OS_IPHONE == 0
Run Code Online (Sandbox Code Playgroud) 我在接受采访时被问到,如何通过提供可运行的C代码来识别平台?
代码必须在两个平台上都可以运行(即没有用于检查的特殊头文件函数)?
我正在编写一个编译器项目,它将生成汇编代码作为目标语言.但是,根据操作系统的不同,需要考虑一些小的变化,我不知道如何检查操作系统.如果重要,我只关心32位.我在一些源代码中看到过类似的东西
#ifdef WIN32
Run Code Online (Sandbox Code Playgroud)
但我不知道这是如何工作的.
编辑:一些澄清.我在所有三个平台上都使用gcc.我不知道在每个平台中是否通过gcc定义了像WIN32这样的宏.如果是这样,这些常数似乎解决了我的问题.
假设我对所有标准整数类型都有函数重载:
void foo( char );
void foo( signed char );
void foo( short );
void foo( int );
void foo( long );
void foo( long long );
// .... all unsigned variants as well
Run Code Online (Sandbox Code Playgroud)
是否有可能这些重载无法找到类似int8_t
或类似的类型的适当重载?有可行的方法来处理这种过载吗?
参考怎么样?
澄清问题:它来自对这个问题的讨论为什么int8_t被读作一个字符?并声称可能存在编译器生成的整数类型,它们不是基本C++类型的别名.所以在这种情况下,所有基本情况的重载都可能不接受它.另一方面,我无法提供重载,int8_t
因为在许多平台上它只是一个别名,并且会因重新定义现有的重载而出错.
我最近发现,在C++中使用两个下划线启动任何内容都是未定义的行为.
所以我一直在修理所有包括警卫.
但我遇到过类似的代码
#ifdef __WINDOWS___
#endif
#ifdef __GNUC__
#endif
Run Code Online (Sandbox Code Playgroud)
但是不是__GNUC__
在Windows编译器UB上使用,反之亦然?我该怎么办?
如何在C中确定终端应用程序中的用户操作系统?例如,在下面的代码中,我应该替换windows
和linux
使用什么?
/* pseudo code */
if(windows)
{system(cls)}
else if(linux)
{system(clear)}
else{...}
Run Code Online (Sandbox Code Playgroud)
我应该提一下,我是C的初学者,需要这样的东西,所以我的代码可以在windows和/或linux上运行,而不需要为每个代码创建单独的源代码.
我正在开发一个 C 应用程序,我希望它具有合理的可移植性。它可以在 Linux 上使用 gcc 和 clang 以及在 Windows 上使用 MSVC 构建。访问 Mac 后,我尝试使用命令行工具进行构建。
它无法编译,因为我的代码声明了一个函数,isnumber
而 Apple 的ctype.h
头文件也声明了一个 (non standard?) isnumber
。我可以重命名我的函数,这样它就不会发生冲突,但是有没有办法通过禁用或忽略所有或特定的 Apple 添加到标准标头来避免这种情况?例如,是否有编译器选项或预处理器编译指示来忽略它们?
我isnumber
不知道检查字符类。下面是重现该问题的代码 - 它可以用 clang/Linux 和 MSVC/Windows 编译,但不能在 Mac 上编译( - 它不是实际代码)。
#include <ctype.h>
#include <stdio.h>
char *isnumber(void);
int main(void)
{
char *opt = "A";
if (isupper(*opt))
printf("THE IS NUMBER IS: %s\n", isnumber());
else
printf("The IS number is: %s\n", isnumber());
return 0;
}
char *isnumber(void)
{
return "IS-123";
} …
Run Code Online (Sandbox Code Playgroud)