Tag: 兼容性

在C或C ++中是否有未初始化指针的用途?

在这个问题的一个评论中,提出默认情况下初始化C ++指针会破坏与C的兼容性。 那没关系,但为什么会这样呢? 我认为唯一真正重要的是因为某些原因我想要一个未初始化的指针。 但我想不出有什么理由让我想拥有它。 是否有未初始化指针的用途? 或者兼容性问题只是兼容行为之一(即不增加开销)而不是破坏代码之一?

为什么char与signed char或unsigned char不兼容?

我发现C99标准有一个语句,它拒绝类型char和signed char / unsigned char类型之间的兼容性。 C99标准注35: 在limits.h中定义的CHAR_MIN将具有值0或SCHAR_MIN之一,这可用于区分这两个选项。 无论做出何种选择,char都是与其他两种类型不同的类型,并且与两者都不兼容。 我的问题是为什么委员会否认兼容性? 理由是什么? 如果char与signed char或unsigned char兼容,那么会发生什么可怕的事吗?

sizeof(size_t)== sizeof(void *)总是如此吗?

C99 / C ++ 11标准是否保证sizeof(size_t) == sizeof(void*)始终为真? size_t f(void* p) { return (size_t)(p); // Is it safe? } void* f(size_t n) { return (void*)(n); // Is it safe? }

创建一个可在linux和windows上运行的可移植库

gcc (GCC) 4.7.2 你好, 我正在创建一个将在linux上编译的共享库和一个将在Windows上使用相同的源代码编译的DLL。 所以我正在为linux和windows创建一个可移植的库。 在我的库头文件中是这个,即module.h #ifdef __cplusplus extern “C” { #endif #ifdef _WIN32 #define LIB_INTERFACE(type) EXTERN_C __declspec(dllexport) type #else #define LIB_INTERFACE(type) type #endif LIB_INTERFACE(int) module_init(); #ifdef __cplusplus } #endif 在源代码中我有以下即module.c #include “module.h” LIB_INTERFACE(int) module_init() { /* do something useful return 0; } 在我的测试应用程序中将链接并使用此模块。所以我有这个: #include “module.h” int main(void) { if(module_init() != 0) { return […]

C和C ++之间的关系

当Stroustroup设计C ++时,他的目标之一是C ++尽可能地成为C的超集。 我知道这不是100%的情况,但C中的大多数优秀代码也是C ++代码。 但是我听说C99支持很多C ++没有的东西(比如VLA),而且无论它叫什么,它都会有C1x或C0x。 那么,C ++是旧 C89的超集,从那时起C和C ++几乎是独立开发的?

客观的C 2.0是C的正确超集吗?

我听说过Objective-C是C的正确超集,但是客观的C 2.0? 我问的原因是它不是,或者我误解了“正确的超集”这个短语,因为这段代码是有效的C语法: #import int main () { char *nil = “hello”; printf(“%s\n”,nil); } 但是不能在Objective-C 2.0中编译。 显然,这是一个容易解决的问题,但我正在写一篇论文,并认为这是应该指出的。