Gre*_*ner 52 c++ c-preprocessor
什么是点#define在C++?我只看到了用它代替"幻数"的例子,但我没有看到只是将该值赋予变量的重点.
sup*_*tah 119
它#define是C和C++预处理器语言的一部分.当它们在代码中使用时,编译器只需将#define语句替换为您想要的内容.例如,如果您厌倦了一直写作for (int i=0; i<=10; i++),您可以执行以下操作:
#define fori10 for (int i=0; i<=10; i++)
// some code...
fori10 {
// do stuff to i
}
Run Code Online (Sandbox Code Playgroud)
如果您想要更通用的东西,可以创建预处理器宏:
#define fori(x) for (int i=0; i<=x; i++)
// the x will be replaced by what ever is put into the parenthesis, such as
// 20 here
fori(20) {
// do more stuff to i
}
Run Code Online (Sandbox Code Playgroud)
#define如果您只想要某些特定构建中使用的某些代码,它对于条件编译(其他主要用途)也非常有用:
// compile the following if debugging is turned on and defined
#ifdef DEBUG
// some code
#endif
Run Code Online (Sandbox Code Playgroud)
大多数编译器允许您从命令行定义一个宏(例如g++ -DDEBUG something.cpp),但您也可以在代码中添加一个定义,如下所示:
#define DEBUG
Run Code Online (Sandbox Code Playgroud)
一些资源:
Pau*_*lin 41
这些天大多是风格.当C年轻时,没有const变量这样的东西.因此,如果您使用变量而不是a #define,则无法保证某个地方的某个人不会更改它的值,从而在整个程序中造成严重破坏.
在过去,FORTRAN通过引用将偶数常量传递给子例程,并且有可能(并且令人头疼)将类似'2'的常量值更改为不同的值.有一次,这发生在我正在进行的一个程序中,唯一的暗示是我们遇到了错误的是当程序达到正常结束时我们会得到一个ABEND(异常结束)STOP 999.
小智 23
我有一次在工作中遇到麻烦.我被指控在数组声明中使用"魔术数字".
像这样:
int Marylyn[256], Ann[1024];
Run Code Online (Sandbox Code Playgroud)
公司的政策是避免这些神奇的数字,因为有人向我解释说,这些数字不是便携式的; 它们阻碍了易于维护.我认为当我阅读代码时,我想确切地知道数组有多大.我失去了争论,因此,在星期五下午,我用#defines取代了令人讨厌的"魔术数字",如下所示:
#define TWO_FIFTY_SIX 256
#define TEN_TWENTY_FOUR 1024
int Marylyn[TWO_FIFTY_SIX], Ann[TEN_TWENTY_FOUR];
Run Code Online (Sandbox Code Playgroud)
在接下来的星期一下午,我被召入并被指控有被动的挑衅倾向.
小智 6
C没有使用consts,所以#defines是提供常量值的唯一方法.C和C++现在都有它们,因此使用它们毫无意义,除非它们将使用#ifdef/ifndef进行测试.