在C中的以下陈述中哪一个更好用?
static const int var = 5;
Run Code Online (Sandbox Code Playgroud)
要么
#define var 5
Run Code Online (Sandbox Code Playgroud)
要么
enum { var = 5 };
Run Code Online (Sandbox Code Playgroud) 可能重复:
为什么有人会使用#define来定义常量?
c ++ C++中的宏和const之间的区别
- 枚举与const对#define
使用#define和const创建常量有什么区别?有没有比其他的性能优势?当然我更喜欢使用它,const但我会考虑#define它是否具有合适的优势.
我刚刚通过读取文件中的值从 C++ 矩阵加法教程中找到了这段代码 -
我想问一下#define在这里做什么?它有什么特别之处呢?这与在 main 中单独声明 M 和 N 为 int 或 char 有什么不同?
代码
#include <iostream>
#include <fstream>
using namespace std;
#define M 4
#define N 5
void matrixSum (int P[M][N], int Q[M][N], int R[M][N]);
void matrixSum (int P[M][N], int Q[M][N], int R[M][N]) {
for (int i=0; i<M; i++) // compute C[][]
for (int j=0; j<N; j++)
R[i][j] = P[i][j] + Q[i][j];
}
int main () {
ifstream f;
int A[M][N];
int B[M][N];
int C[M][N];
f.open("values"); // open …Run Code Online (Sandbox Code Playgroud) 在我使用之前,我曾经#define在我的main函数中创建常量并将它们传递到需要的地方.我发现我经常通过它们,这有点奇怪,尤其是数组大小.
最近我一直在使用#define,因为我不必将main中的常量传递给每个单独的函数.
但是现在我想起来了,我也可以使用全局常量,但出于某种原因,我对他们有点犹豫不决.
哪种更好的做法:全局常量还是#define?
一个附带问题,也是相关的:正如我描述的一个不好的做法,是否传递了我的主要常量?
我正试图建立一个突破性的游戏克隆Qt.我需要弄清楚QGraphicsItem我的球碰撞的类型.例如,如果我将球与墙碰撞,球就会反弹,如果它与砖碰撞,它必须反弹并摧毁砖.为了找出QGraphicsItem它是什么类型,我认为最好的方法可能是覆盖QGraphicsItem::type()(请告诉我,如果这不是正确的方法!).
在下面的代码中,brick.h我将"Brick"设置为Type 3.现在,值3看起来非常麻烦.我更愿意用'#define'声明一些东西
#include <QGraphicsItem>
//should this #define be here?
//#define BRICK_SPRITE 3
class Brick : public QGraphicsItem
{
public:
Brick(const QPixmap& p, QGraphicsScene *scene = 0);
virtual QRectF boundingRect() const;
virtual void paint( QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget );
QPainterPath shape() const;
enum { Type = 3 }; //enum {Type = BRICK_SPRITE}
int type() const { return Type; }
private:
QPixmap pixmap;
};
Run Code Online (Sandbox Code Playgroud)
放置声明'#define BRICK_SPRITE 3'的好位置在哪里?我在项目中有几个其他文件.我应该将所有定义放在单独的头文件中吗?
为什么以下代码段不适用于CUDA(3.2和4.0)?
#define NUM_BLOCKS 16
// lots of code.
dim3 dimBlock(NUM_BLOCKS, NUM_BLOCKS);
Run Code Online (Sandbox Code Playgroud)
但是这个,
dim3 dimBlock(16, 16);
Run Code Online (Sandbox Code Playgroud)
呢?
我一直在error : expected a ")"和error : expected an expression.我错过了什么?
我正在使用boost编写一个串行库,我有一个枚举:
enum parity_t { PARITY_NONE, PARITY_ODD, PARITY_EVEN };
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
错误1错误C2059:语法错误:'('
我无法弄清楚问题是什么.然后我的朋友和我试过:
void PARITY_NONE();
Run Code Online (Sandbox Code Playgroud)
我们得到了这些错误:
错误1错误C2143:语法错误:在'常数'之前缺少')'
错误2错误C2143:语法错误:缺少';' 在'恒定'之前
错误3错误C2182:'WORD':非法使用'void'类型
错误4错误C2059:语法错误:')'
我包括boost asio,我认为它包括Windows serial api.这仅发生在Windows中.作为一种解决方法,我改变了我的枚举名称.但是,我无法在互联网上找到与此问题相关的任何内容.有人可以帮我们解决这个问题吗?
可以#define"覆盖"一个const变量,反之亦然?或者它会导致编译器错误?
//ONE
#define FOO 23
const int FOO = 42;
//TWO
const int FOO = 42;
#define FOO 23
Run Code Online (Sandbox Code Playgroud)
FOO在两种情况下都有什么价值,42或23?