Tag: visual studio 2005

如何使用C宏(#define)来改变调用而不是原型

我们的应用程序中的旧代码包含对malloc , realloc和free调用。 使用我们更新的代码,我们自己的实现被调用而不是标准的运行时实现。 示例如下所示, #define malloc(s) OurMalloc(s) #define free(p) OurFree(p) 这适用于更新的代码,对于较新的C ++代码,我们只需实现全局的new和delete运算符,因此C ++解决方案更“干净”。 问题是我们现在必须包含第三方库,其中的类包含名称类似malloc和free ,例如 class ABC { public: … void free (char *p); }; 如果类的自由方法具有相同数量的参数,则即使在类定义中,即使在调用没有类ABC的方法时,C / C ++预处理器也只是替换ourFree所有出现的free 。 所以上面的类定义和以下调用: ABC abc; abc.free(p); 被替换为, class ABC { public: … void OurFree (char *p); }; ABC abc; abc.OurFree(p); 哪个可以编译,但当然没有链接。 如果ABC::free具有与标准free不同的参数数量,则编译器仍会发出警告。 我们想避免它们。 一些替代解决方案是: 在第三方包含文件的开头取消定义我们的定义并在以后重新定义它 确保第三方包含文件始终包含在我们自己的定义之前 […]

“致命错误LNK1561:必须定义入口点”

我是Microsoft Visual Studio 2005的新手。我正在编写一个序列搜索程序,当我尝试使用MS VS 2005编译它时,我收到一个错误: 致命错误LNK1561:必须定义入口点 我的代码是: #include #include int search (int A[], int len, int no) { int i; for (i=0; i<len; i++) if (A[i] == no) return i; return -1; }

尝试使用OpenGL时出错

我有一个非常简单的C代码,我试图使用OpenGl。 当我包含以下文件时 #include #include #include #include 我得到以下错误(还有更多,但它们相似):C:\ Program Files \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ include \ GL / gl.h(1152):错误C2144:语法错误:’void’应该以’;’开头 但当我包括 #include #include #include #include #include 我得到以下错误\ mainfile.cpp(4):致命错误C1083:无法打开包含文件:’GL / glut.h’:没有这样的文件或目录 知道发生了什么事吗? 我正在使用XP,VS2005

MS编译器优化替换函数中的变量?

我不知道如何解释我所看到的行为,但这里有。 我有一个函数foo,它有三个参数,一个指针,一个int和另一个指针。 当我在foo内部断点时,我可以清楚地看到所有变量都是它们应该是的值。 但是,当我退出局部变量声明时,其中一个参数(int)突然变为零。 但是,函数的其余部分就像原始值一样执行,所以一切都很好。 这不会在完全调试中发生,但会在常规调试中发生。 这是某种优化吗? 如果是这样,它叫什么,我在哪里可以得到细节? 例: void foo(void *A, int B, void *C) { // B == 5 int X = 3; char *Y = getSomeStaticString(); // … some other variable declarations like the above // B, according to the debugger, is now 0 if (B == 5) { // But this […]