标签: c-preprocessor

你会如何定义无穷大?

扩展您的想法:

#define INFINITY ((1 << (8*sizeof (int) - 6)) - 4)
Run Code Online (Sandbox Code Playgroud)

扩大了吗?

c++ infinity c-preprocessor

-1
推荐指数
1
解决办法
5200
查看次数

解释C宏

#define MAX(a,b) ((dx > dy) ? dx : dy)
Run Code Online (Sandbox Code Playgroud)

有人会介意打破((dx> dy)?dx:dy)部分?这来自控制台课程1-60.

c c-preprocessor

-1
推荐指数
1
解决办法
116
查看次数

我如何#define多个值C/C++

如何使用#define在数组中定义多个相同类型的值?

例如,我想

#define DIGIT 0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 | 0x38 | 0x39
#define QUOTE 0x22 | 0x27

ETC...
Run Code Online (Sandbox Code Playgroud)

c c++ variables c-preprocessor

-1
推荐指数
1
解决办法
9149
查看次数

如何在C中将字符串转换为枚举值

我有一个文件有一些定义,如:

TRACE( tra_1, "AA")
TRACE( tra_1, "BB")
TRACE( tra_1, "CC")
TRACE( tra_1, "DD")
TRACE( tra_1, "EE")
..
Run Code Online (Sandbox Code Playgroud)

等等.其中AA,BB,CC,DD和EE是字符串.

我想从文件中获取这些TRACE定义并将它们转换为枚举.预处理器的输出应如下所示:

typedef enum{
AA,
BB,
CC,
DD,
EE
} TRACE;
Run Code Online (Sandbox Code Playgroud)

c c-preprocessor

-1
推荐指数
1
解决办法
3568
查看次数

四叉树程序引起的蓝屏死机

我正在为行星编写一个四叉树结构,当你远离四边形并接近它时,它会减少并增加细节.但是,我遇到了一些非常严重且烦人的错误.

我有两个预处理器定义的常量,当我将值更改为除32之外的任何值(例如16或64)时,确定Quad树的大小(QUAD_WIDTH和QUAD_HEIGHT)我得到一个蓝屏死机.我使用code :: blocks作为我的IDE,另外一件事:每当我尝试在code :: blocks中调试程序时,我也会得到一个蓝色的死亡屏幕(如果常量为32则无关紧要)

为什么会这样?我该如何解决呢? 在此输入图像描述 PQuad.cpp

#include "..\include\PQuad.h"
#include "..\include\Color3.h"

#include <iostream>
#include <vector>
#include <cmath>

#include <GL/glew.h>
#include <GL/glu.h>
#include <GL/gl.h>

#define QUAD_WIDTH 32
#define QUAD_HEIGHT 32

#define NUM_OF_CHILDREN 4

#define MAX_DEPTH 4

PQuad::PQuad(FaceDirection face_direction, float planet_radius)  {
    this->built = false;
    this->spherised = false;
    this->face_direction = face_direction;
    this->radius = planet_radius;
    this->planet_centre = glm::vec3(0, 0, 0);
}

PQuad::~PQuad()  {
}

std::vector<PQuad> PQuad::get_children()  {
    return children;
}

bool PQuad::get_built()  {
    return this->built;
}

int PQuad::get_depth()  {
    return this->depth;
} …
Run Code Online (Sandbox Code Playgroud)

c++ opengl bsod quadtree c-preprocessor

-1
推荐指数
1
解决办法
1014
查看次数

我可以只使用声明生成一个简单的构造函数吗?

我有一个包含许多实例变量的类:

class Data {
public:
    const double a, b, c, d;
    const size_t e, f, g, h, i, j;
    const std::string s;
    // and so on
    double Q, Z;
    Data(const double a, const double b, ...);
};
Run Code Online (Sandbox Code Playgroud)

以及代码中其他地方的一些相当复杂的逻辑,它们计算所有这些字段应该具有的值,然后创建一个Data对象.

double a = ...;
double b = ...;
// and so on, but not for Q and Z
Data data_instance(a, b, c, d, e, f, g, h, i, j, s, ...);
Run Code Online (Sandbox Code Playgroud)

的值QZ计算在构造,作为其他值的函数.我是这样做的,因为实例Data是不可变的,我希望这些字段可以const帮助编译器强制执行此操作. …

c++ constructor instance-variables c-preprocessor

-1
推荐指数
1
解决办法
52
查看次数

语法错误:在'常数'之前缺少')'

我有一些语法问题,我不知道如何解决.我正在尝试为矩阵构建一些函数,有人可以帮我解决这些问题吗?

1>c:\documents and settings\one\my documents\visual studio 2010\projects\hw3\hw3\q2.c(11): error C2143: syntax error : missing ')' before 'constant'
1>c:\documents and settings\one\my documents\visual studio 2010\projects\hw3\hw3\q2.c(11): error C2143: syntax error : missing '{' before 'constant'
1>c:\documents and settings\one\my documents\visual studio 2010\projects\hw3\hw3\q2.c(11): error C2059: syntax error : '<Unknown>'
1>c:\documents and settings\one\my documents\visual studio 2010\projects\hw3\hw3\q2.c(11): error C2059: syntax error : ')'
1>c:\documents and settings\one\my documents\visual studio 2010\projects\hw3\hw3\q2.c(12): error C2143: syntax error : missing ')' before 'constant'
1>c:\documents and settings\one\my documents\visual studio 2010\projects\hw3\hw3\q2.c(12): error C2143: syntax error …
Run Code Online (Sandbox Code Playgroud)

c macros c-preprocessor

-1
推荐指数
1
解决办法
1047
查看次数

C++识别模板参数

我想知道有没有办法识别模板参数?例如,假设我想基于模板参数初始化变量.原型示例如下

template<class T> 
      void initialise(T a)
      {
        if(T==int)a=0;
        else if(T=double)a=0.0;
        else if(T=complex<double>)a=T(0.,0);
        else print("unknown type"); 
      }
Run Code Online (Sandbox Code Playgroud)

我的问题是如何识别模板参数"T"?或者,我是否需要获得预处理器指令的帮助?这可能是一个重复的问题,但我找不到它的答案.任何建议将不胜感激.

c++ templates arguments c-preprocessor

-1
推荐指数
1
解决办法
42
查看次数

重用宏变量

我正在尝试对大量函数进行基准测试,并且我已经定义了宏来概括时间戳.我已经制作了一个头文件benchmark,如下:

#include <chrono> 
#include <iostream>

#define START(x) xstart = std::chrono::steady_clock::now()                                         
#define END(x)   xend   = std::chrono::steady_clock::now()                                         
#define TIME(x)  xtime  = std::chrono::duration_cast<std::chrono::nanoseconds>(xend-xstart).count()
#define PRINT(x) std::cout << #x << "(), " << xtime << std::endl
Run Code Online (Sandbox Code Playgroud)

对于所有宏,x用函数名替换,不带参数括号.例如PRINT(foobar);等等.但是,我已经使用了多个函数名称相同的宏,因为我以为我可以代入x多次.即

START(foobar);
// later...
START(func);
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个错误:

xstart’ has a previous declaration as ‘std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration\<long int, std::ratio<1l, 1000000000l> > > xstart
Run Code Online (Sandbox Code Playgroud)

一旦我用它来定义一个函数,我似乎无法重用该变量.但是,我从未在PRINT中遇到此错误.那么,是因为我在声明变量吗?

我基本上试图想出一个快速的时间戳功能,所以欢迎任何其他关于如何快速实现这一点的建议.

c++ macros c-preprocessor

-1
推荐指数
1
解决办法
163
查看次数

如何在C中标记和强化__func__宏?

我想用宏来标记强化我们所在函数的名称,以便在C中重载函数(使用dlopen()).

我用__LINE__和发现了类似的东西__FILE__,但在__func__...... 的情况下似乎有点不同

我试过了:

#define OVERLOAD2(f) printf("Trying to overload function %s...", #f)
#define OVERLOAD1(f) OVERLOAD2(f)
#define OVERLOAD OVERLOAD1(__func__)

int main() {
    OVERLOAD;
}
Run Code Online (Sandbox Code Playgroud)

使用不同的编译标准(c99,gnu11)进行编译不会改变结果; 而不是印刷:

Trying to overload function main...
Run Code Online (Sandbox Code Playgroud)

它打印:

Trying to overload function __func__...
Run Code Online (Sandbox Code Playgroud)

我该如何纠正这些宏?

c c-preprocessor

-1
推荐指数
1
解决办法
116
查看次数