标签: predefined-macro

是否有一个预处理器宏可以扩展到当前选择器?

可能重复:
动态检索当前方法的名称
Obj-C introspection:方法如何引用它自己的选择器?

这适用于Objective-C,是否有预处理器宏或某些东西来获取当前选择器的SEL值?具体来说,我正在寻找类似的东西:

-(void) someSelector
{
    SEL mySelector = __CURRENT_SELECTOR__;
    NSLog(@"I'm in selector %@",NSStringFromSelector(mySelector));
}
Run Code Online (Sandbox Code Playgroud)

它有点像__FILE__宏,但这是为了获得当前的选择器.如果更改选择器名称,将其传递给其他人并不担心更新它非常有用.

objective-c predefined-macro c-preprocessor

3
推荐指数
1
解决办法
744
查看次数

检测目标CPU上的对齐内存要求

我目前正在尝试构建一个代码,该代码可用于各种机器,从手持式口袋和传感器到数据中心的大型服务器.

这些体系结构之间的(许多)差异之一是对齐内存访问的要求.

"标准"x86 CPU上不需要对齐的内存访问,但是如果不遵守规则,许多其他CPU需要它并产生异常.

到目前为止,我一直在使用packed属性(或pragma)强制编译器对已知存在风险的特定数据访问保持谨慎.它工作正常.

问题是,编译器非常谨慎,以至于在此过程中会丢失大量性能.

由于性能很重要,我们最好重写代码的某些部分以专门处理严格对齐的cpus.这样的代码会,在另一方面,是对CPU的支持对齐的内存访问(如86)慢,所以我们想用它在需要严格对齐的内存访问的CPU.

现在的问题是:如何在编译时检测目标架构是否需要严格对齐的内存访问?(或反过来)

c cpu-architecture memory-alignment predefined-macro

3
推荐指数
2
解决办法
627
查看次数

如何实现这样的 c++ 宏

#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)

c++ macros predefined-macro

3
推荐指数
1
解决办法
80
查看次数

__cplusplus <201402L即使我指定-std = c ++ 14,也会在gcc中返回true

指令:

#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,我不知道为什么.

请告诉我如何解决这个问题.

c++ gcc g++ predefined-macro c++14

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

关于rgb数值比较的困惑

我编写了一个程序,可以给出任何 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)

c++ rgb predefined-macro

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