我正在寻找一种方法可靠地确定C++代码是在32位还是64位编译.我们已经提出了我们认为使用宏的合理解决方案,但很想知道人们是否可以想到这可能会失败的情况,或者是否有更好的方法来做到这一点.请注意,我们正在尝试在跨平台的多编译器环境中执行此操作.
#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif
#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一个程序需要在Tiger上的行为略有不同于Leopard.有没有人知道系统调用,这将允许我准确地确定正在运行的Mac OS XI版本.我已经找到了许多宏定义来确定构建机器的操作系统,但是没有什么能够确定正在运行的机器的操作系统.
谢谢,乔
我在使用gcc 3.2.3与binutils 2.18链接共享库时遇到问题.当我尝试链接库时,我收到以下错误:
在.rodata节中引用的.gnu.linkonce.t _...:在丢弃的部分.gnu.linkonce.t中定义...
我已经做了相当多的谷歌搜索,大多数地方似乎表明这是一个回归引入binutils 2.17后来修复在2.18.50,但我很好奇,如果有人知道是否有任何特定的解决方案的问题没有不得不接触binutils和gcc.
谢谢.
GCC似乎允许使用"和"/"或"而不是"&&"/"||" 在C++代码中; 但是,正如我所料,许多编译器(特别是MSVC 7)不支持这一点.GCC允许这一事实给我们带来了一些烦恼,因为我们有不同的开发人员在多个平台上处理相同的代码库,偶尔,当人们在Python和C++开发之间来回切换时,这些"错误"会随之而来.
理想情况下,我们都会记得使用适当的语法,但对于我们偶尔搞乱的情况,如果GCC不让它滑动,那将是非常好的.有人对此采取何种方法?
如果"和"和"或"只是#defines那么我在使用GCC时可以#undef,但我担心它更可能在更基础的层次上内置到编译器中.
谢谢.
假设我有这样的函数:
MyClass &MyFunction(void)
{
static MyClass *ptr = 0;
if (ptr == 0)
ptr = new MyClass;
return MyClass;
}
Run Code Online (Sandbox Code Playgroud)
问题是在程序退出时间,ptr变量是否会变为无效(即该ptr的内容是否被现有流程清理)?我意识到这个函数泄漏了,但它只是一个简单的例子.
同样的问题也适用于除指针之外的其他原语.如果我有一个静态整数怎么样,该整数的值是否始终在退出时保持不变或由于静态销毁订单问题而变化?
编辑:
为了澄清,我想知道静态指针(或任何其他基本类型,如int或float)的内容实际发生了什么,而不是它指向的内存.例如,假设ptr指向某些内存地址,我想在其他静态类的析构函数中检查它.我可以依赖ptr内容不会改变的事实(即在静态破坏过程中指针值不会被清除)吗?
谢谢,乔
我正在开发一个多平台应用程序,在一个组件中我有一个名为DrawText的类方法.不幸的是,我得到一个链接器错误(仅在Windows上),说这个类的DrawTextW方法有一个未解析的外部符号.
之前我已经看过其他以"Text"结尾的方法,它正在寻找FooTextW或FooTextA方法而不是我定义的FooText方法.我的假设是在Windows头文件的某处有一个宏定义,根据其他一些定义将FooText分配给FooTextW或FooTextA.
除了重命名我的功能(这是我过去所做的),有没有人有任何好的想法来解决这个问题?
谢谢.
乔