这是一个简单的示例程序,演示了我想要的内容:
class A {
public:
int writemem(FilInfo* file, IN BYTE* mem, IN DWORD memSize, BYTE obfs=0, BOOL bEnc=TRUE);
};
void main() {
...
(this->writemem(file, mem, memSize), obfs); // does not print compilation error!
...
}
以上代码如何编译?编译上述程序虽然不符合我的预期,但仍然是成功的。 我正在使用VisualStudio SDK 7.1开发Windows 8.1。
答案 0 :(得分:-1)
我认为这是我们可以讨论的一个问题:
#define IN
struct FilInfo {};
struct DWORD {};
struct BYTE {
BYTE() {}
BYTE(int i) {}
BYTE(const BYTE& i) {}
};
enum BOOL {
TRUE,
FALSE
};
class A {
public:
int writemem(FilInfo* file, IN BYTE* mem, IN DWORD memSize, BYTE obfs=0, BOOL bEnc=TRUE) {return 0;}
};
int main() {
FilInfo* file;
BYTE* mem;
DWORD memSize;
BYTE obfs;
A* a;
BYTE obfs2 = (a->writemem(file, mem, memSize), obfs); // does not print compilation error!
return 0;
}
为什么会产生编译器错误或警告?此代码有效。
(a->writemem(file, mem, memSize), obfs)
是一个由逗号运算符分隔的两个语句组成的语句。变量名是有效的声明。
首先调用a->writemem(file, mem, memSize)
。然后调用obfs
,最后obfs
从(a->writemem(file, mem, memSize), obfs)
传递到obfs2
。