我有一个遗留C++代码库,其中包括以下内容:

// this kludge is required because SparcWorks 3.0.1 under SunOS
// includes malloc.h in stdlib.h, and misdeclares free() to take a char*, 
// and malloc() and memalign() to return char*

显然这是古C的一些残余. comments 后面是原型(在Fedora Linux 39上这里是错误的,它们与gliBC-2.38-18中的原型冲突).我想干净地把#if个部分拿出来.我可以使用任何宏吗?

推荐答案

您可以try 使用both个这样的宏:

  • __SUNPRO_CC(对于C++)或__SUNPRO_C(对于C),它们是通常由SparcWorks compiler定义的宏,指示Sun C/C++编译器的使用;
  • __sun,这是由SunOS platform定义的宏,指示Sun编译器的使用.
#if defined(__SUNPRO_CC) && defined(__sun)
// Specific code for SparcWorks compiler on SunOS
#else
// Code for other compilers or platforms
#endif

Maybe useful reference : Sun™ Studio 12: C++ FAQ

C++相关问答推荐

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

Zig将std.os.argv转换为C类型argv

为什么已经设置的值在C中被重置为for循环条件中的新值?

在#include中使用C宏变量

*p[num]和(*p)num的区别

在一个小型玩具项目中实现终端历史记录功能

Can函数指针指向C++中具有不同参数连续性的函数

LibpCap禁用监视器模式(C、MacOS)

如果dim指定数组中的数据量,使用dim-1会不会潜在地导致丢失一个元素?

FRIDA-服务器成为端口扫描的目标?

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

用于计算位数和的递归C函数

OMP并行嵌套循环

为什么一个在线编译器拒绝这个VLA代码,而本地的Apple clang却不拒绝;t?

计算时出现奇怪的计算错误;N Select K;在C中

";错误:寄存器的使用无效;当使用-masm=intel;在gcc中,但在AT&;T模式

memcmp 是否保证按顺序比较字节?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

为什么创建局部变量的指针需要过程在堆栈上分配空间?

为什么使用 C 引用这个 char 数组会导致 Stack smasing?