根据CERT 标准 ,类似对象的宏可能很危险,因为它们的使用不受语言范围规则的约束。任何人都可以用一个例子来解释它是如何出现问题的。比如说我有一个类似对象的宏#define BUFFER_SIZE 1024
问问题
168 次
3 回答
5
// file a.hpp
#define SOME_MACRO 42
// file some/nested/dir/really/far/in/x.hpp
#define SOME_MACRO 13
卡布姆。使用任何类型的范围很容易避免这种情况,例如
struct X { static unsigned const value = 42; };
struct Y { static unsigned const value = 13; };
现在您可以访问X::value
和Y::value
. 命名空间也是如此:
namespace a { struct X; }
namespace b { struct X; }
于 2013-08-14T11:45:27.767 回答
3
C/C++ 预处理只是操作/生成文本,不涉及语言规则。
于 2013-08-14T11:44:34.860 回答
3
一个经典的例子是
#define max 1234
...
class A
{
int arr[100];
public:
...
int max() { ... find highest in arr ... }
};
这不会编译。
于 2013-08-14T11:47:19.043 回答