这适用于Objective-C,是否有预处理器宏或某些东西来获取当前选择器的SEL值?具体来说,我正在寻找类似的东西:
-(void) someSelector
{
SEL mySelector = __CURRENT_SELECTOR__;
NSLog(@"I'm in selector %@",NSStringFromSelector(mySelector));
}
Run Code Online (Sandbox Code Playgroud)
它有点像__FILE__宏,但这是为了获得当前的选择器.如果更改选择器名称,将其传递给其他人并不担心更新它非常有用.
我目前正在尝试构建一个代码,该代码可用于各种机器,从手持式口袋和传感器到数据中心的大型服务器.
这些体系结构之间的(许多)差异之一是对齐内存访问的要求.
"标准"x86 CPU上不需要对齐的内存访问,但是如果不遵守规则,许多其他CPU需要它并产生异常.
到目前为止,我一直在使用packed属性(或pragma)强制编译器对已知存在风险的特定数据访问保持谨慎.它工作正常.
问题是,编译器非常谨慎,以至于在此过程中会丢失大量性能.
由于性能很重要,我们最好重写代码的某些部分以专门处理严格对齐的cpus.这样的代码会,在另一方面,是对CPU的支持对齐的内存访问(如86)慢,所以我们想用它仅在需要严格对齐的内存访问的CPU.
现在的问题是:如何在编译时检测目标架构是否需要严格对齐的内存访问?(或反过来)
#define idebug(...) \
\#ifdef _DEBUG\
printf(__VA_ARGS__);\
\#endif\
#endif
Run Code Online (Sandbox Code Playgroud)
很难描述意图,这通常意味着我预先定义了一个宏 idebug 来保存一些代码。如果预定义了 _ DEBUG 标志,则打印输出。或者假装什么都没发生。
如果我们使用函数实现它,它将如下所示:
void idebug(...)
{
#ifdef _DEBUG
printf(...);
#endif
}
Run Code Online (Sandbox Code Playgroud)
假设有一个程序
int main()
{
int a = 10;
idebug("a:%d\n",a);
}
Run Code Online (Sandbox Code Playgroud)
当我们处于调试阶段时,我们需要编译器的输出:
int main()
{
int a = 10;
printf("a:%d\n",a);
}
Run Code Online (Sandbox Code Playgroud)
如果我们处于发布阶段,我们需要编译器的输出:
int main()
{
int a = 10;
}
Run Code Online (Sandbox Code Playgroud) 指令:
#ifndef __cplusplus
#error C++ is required
#elif __cplusplus < 201402L
#error C++14 is required
#endif
Run Code Online (Sandbox Code Playgroud)
命令行: g++ -Wall -Wextra -std=c++14 -c -o header.o header.hpp
我的g ++版本: g++ (tdm-1) 4.9.2
C++14 is required即使我添加了错误也会生成-std=c++14,我不知道为什么.
请告诉我如何解决这个问题.
我编写了一个程序,可以给出任何 RGB 值,并且可以从程序中找到相似的颜色。但结果有点令人困惑。程序有点长,主要是填充一些RGB数据。主要要点如下
//MyColor.h
#pragma once
#ifndef __MYCOLOR_H__
#define __MYCOLOR_H__
#include <windef.h>
#include <wingdi.h>
#include <vector>
namespace my
{
struct ColorData
{
UINT8 family;
UINT16 id;
const char * name;
const char * hex;
UINT8 rgb[3];
ColorData(UINT8 _family, UINT16 _id, const char *_name, UINT8 _r, UINT8 _g, UINT8 _b, const char * _hex)
{
family = _family;
id = _id;
name = _name;
hex = _hex;
rgb[0] = _r;
rgb[1] = _g;
rgb[2] = _b;
}
ColorData(){};
};
/*
MyColorSpace::myColorFamily …Run Code Online (Sandbox Code Playgroud)