扩展您的想法:
#define INFINITY ((1 << (8*sizeof (int) - 6)) - 4)
Run Code Online (Sandbox Code Playgroud)
扩大了吗?
#define MAX(a,b) ((dx > dy) ? dx : dy)
Run Code Online (Sandbox Code Playgroud)
有人会介意打破((dx> dy)?dx:dy)部分?这来自控制台课程1-60.
如何使用#define在数组中定义多个相同类型的值?
例如,我想
#define DIGIT 0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 | 0x38 | 0x39
#define QUOTE 0x22 | 0x27
ETC...
Run Code Online (Sandbox Code Playgroud) 我有一个文件有一些定义,如:
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) 我正在为行星编写一个四叉树结构,当你远离四边形并接近它时,它会减少并增加细节.但是,我遇到了一些非常严重且烦人的错误.
我有两个预处理器定义的常量,当我将值更改为除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) 我有一个包含许多实例变量的类:
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)
的值Q和Z计算在构造,作为其他值的函数.我是这样做的,因为实例Data是不可变的,我希望这些字段可以const帮助编译器强制执行此操作. …
我有一些语法问题,我不知道如何解决.我正在尝试为矩阵构建一些函数,有人可以帮我解决这些问题吗?
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) 我想知道有没有办法识别模板参数?例如,假设我想基于模板参数初始化变量.原型示例如下
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"?或者,我是否需要获得预处理器指令的帮助?这可能是一个重复的问题,但我找不到它的答案.任何建议将不胜感激.
我正在尝试对大量函数进行基准测试,并且我已经定义了宏来概括时间戳.我已经制作了一个头文件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中重载函数(使用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)
我该如何纠正这些宏?