[英]What's the best way #define macro Function used in linux and windows?
当前在 Linux 的以下示例中使用的 WindowsAPI 函数
我想根据平台将其用作一种定义。
example.
#ifdef _WIN32
::CopyMemory(dest, readBuffer_ + fileOffset - readBufferOffset_, size);
#elif __linux__
memcpy(dest, readBuffer_ + fileOffset - readBufferOffset_, size);
#endif
如果代码中有很多像上面这样的处理,可读性就会降低。 所以我想使用这样的东西,但我不确定什么是好的方法。
#ifdef _WIN32
#define MEM_COPY CopyMemory
#define SET_FILE_POINTER SetFilePointer
#define READ_FILE ReadFile
#elif __linux
#define MEM_COPY memcpy
#define SET_FILE_POINTER lseek // parameter sequence not equal to SetFilePointer
#define READ_FILE read
#endif
int main()
{
// i wanna use one function (READ_FILE) both in linux and Windows
READ_FILE(dest, readBuffer_ + fileOffset - readBufferOffset_, size);
}
我还有一个问题。
Windows 具有多项安全功能。
例如)fopen_s memcpy_s
在 linux 我见过 memcpy 经常使用。 您通常如何判断一个保证安全的标准? (正常使用可以吗?我有linux手册manpage,看到note
内容了。)
我会在命名空间中使用抽象层:
namespace OperatingSystemFunctions
{
static void CopyMemory(arguments)
{
#ifdef _WIN32
::CopyMemory(dest, readBuffer_ + fileOffset - readBufferOffset_, size);
#elif __linux__
memcpy(dest, readBuffer_ + fileOffset - readBufferOffset_, size);
#endif
}
}
int main()
{
MyMemoryCopy::CopyMemory(...);
}
当然,arguments 需要匹配该方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.