我在if debut >= fin then
-- do something
else if fin >= debut then -- you start a new "if" here!
-- notice the space between else and if
-- do the else
end if -- end the second if
end if -- end the first if
中有一个宏定义,如下所示:
var arr = [
{"id":1,"name":"admin","password":"admin","role":"Admin"},
{"id":2,"name":"user","password":"user","role":"User"},
{"id":3,"name":"superadmin","password":"superadmin","role":"superadmin"}
]
arr.forEach(function(obj) {
console.log('name: ' + obj.name);
console.log('password: ' + obj.password);
})
我将MyClass.h的include指令放置在main.cpp中:
MyClass.h
这是否意味着我可以在main.cpp和MyClass.h中使用BufferSize?还有,这是好习惯吗?
答案 0 :(得分:3)
是的,这就是头文件的目的:在一个文件中创建声明和常量,您可以随时将其“包括”到翻译单元中。
但是,your macro name is illegal和一个不错的constexpr size_t BufferSize = 64
在当今会更加惯用;即使在最新版本的C ++之前,在很多情况下,类型常量也比宏更可取。
答案 1 :(得分:3)
是的,它将起作用。 (不考虑别人指出的下划线问题。)
指令#include "MyClass.h"
仅复制文件MyClass.h
的全部内容,并将其粘贴到#include
的位置。从编译器的角度来看,只有一个源文件由用户指定的文件和所有包含的文件组成。
话虽如此,如果您使用语言构造而不是预处理程序指令,那就更好了。 例如替换:
#define _BufferSize_ 64
与
constexpr size_t BufferSize = 64;
它唯一与#define
不同的地方是它指定了值的类型(在这种情况下为size_t
)。除此之外,第二个代码的行为方式相同,并且避免了预处理器的缺点。
通常,请尝试避免使用预处理程序指令。这是一种古老的机制,当c ++尚无法在语言中进行此操作时使用。
答案 2 :(得分:2)
首先,关于标识符_BufferSize_
,标准规定:
3。 ...某些标识符保留供C ++实现使用,否则不得使用;无需诊断。
(3.1)每个包含双下划线__或下划线后跟大写字母的标识符都保留给实现以供任何使用。
因此,在代码中使用此类标识符会导致未定义的行为。
并且正如注释中已经建议的那样,在C ++中使用宏变量不是一种好习惯。您可以改用const int
。