小编Mar*_*all的帖子

是否有某些关键字不应该由我"#defined"?

我正在为我的应用程序在C/C++中开发一个平台层.

我想要

#define WINDOWS // on Windows machines

#define ANDROID // on Android phones

由于与其他库的冲突而定义非常常见的关键字如"WINDOWS"或"ANDROID"是不是一个坏主意,并且为这些关键字添加前缀是否有意义:

#define MYLIB_WINDOWS // Not used by any other 3rdparty libraries

#define MYLIB_ANDROID

c++ c-preprocessor

6
推荐指数
1
解决办法
177
查看次数

为什么Canvas.FillText方法似乎使用了错误的坐标?

我将文本渲染到HTML画布上,如下所示:

https://www.w3schools.com/code/tryit.asp?filename=FMSIQUFFO5PL

如您所见,应该以32、32渲染文本。但是由于某些原因,字符串看起来太高了。

这是因为Canvas的坐标始于Canvas-Element的左上角,而String的坐标始于String的左下角?

如何解决此问题,以便可以将文本精确地渲染到期望的位置?

html javascript html5 canvas

2
推荐指数
1
解决办法
437
查看次数

C++ Linux代码打破了Windows构建,因为缺少标头意味着函数未定义

我正在使用Windows上的Visual Studio在C++中开发一个软件.从一开始,我想让它在Windows和Linux上运行.显然,我不会在Windows机器上编译Linux二进制文件,但我仍然想使用Visual Studio编写代码.

当涉及到标题时,我根据预处理器定义选择要使用的文件.

一个非常简单的例子:

#pragma once
#ifndef PLATFORM_TIMER_H
#define PLATFORM_TIMER_H

#ifdef _WIN32

#include "win32\win32_timer.h"

#elif __linux__

#include "linux\linux_timer.h"

#endif 

#endif // PLATFORM_TIMER_H
Run Code Online (Sandbox Code Playgroud)

对于标题,它工作得很好.但Linux实现的.cpp文件打破了Windows上的构建.这是因为Linux .cpp文件无论如何都会被编译,即使在Windows上也是如此.并且因为Windows机器缺少Linux标头,所以它使用的功能将是未定义的.

问题1:处理此问题的"行业标准"是什么?

问题2:是否有合理的包装在"的#ifdef平台"的.H和.cpp文件.所以,代码只会在正确的操作系统中启用?

c c++ linux windows cross-platform

0
推荐指数
1
解决办法
73
查看次数

标签 统计

c++ ×2

c ×1

c-preprocessor ×1

canvas ×1

cross-platform ×1

html ×1

html5 ×1

javascript ×1

linux ×1

windows ×1