c语言code有没有限制,与C语言相比,C限制是什么?

This is prompted by a an answer I gave to a current question which asks about a generics library for C – the questioner specifically states that they do not want to use C++.

C是一种完整的编程语言. C不是C的任意子集. C根本不是C的子集.

这是有效的C:

foo_t* foo = malloc ( sizeof(foo_t) );

要使其编译为C,您必须编写:

foo_t* foo = static_cast( malloc ( sizeof(foo_t) ) );

这不再是有效的C. (你可以使用C风格的强制转换,它在C中编译的情况,但是大多数C编码标准,以及许多C程序员都避开了;见证了“不要在整个Stack Overflow上发布malloc”的评论) .

它们不是同一种语言,如果你在C中有一个现有的项目,你不想用另一种语言重写它只是为了使用一个库.您更愿意使用可以使用您正在使用的语言进行交互的库.(在某些情况下,可以使用一些extern“C”包装函数,具体取决于C库的模板/内联方式.)

在我正在研究的项目中获取第一个C文件,如果您只是为g替换gcc std = c99,会发生这种情况:

sandiego:$g++ -g -O1 -pedantic -mfpmath=sse -DUSE_SSE2 -DUSE_XMM3 -I src/core -L /usr/lib -DARCH=elf64 -D_BSD_SOURCE -DPOSIX -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112L -Wall -Wextra -Wwrite-strings -Wredundant-decls -Werror -Isrc src/core/kin_object.c -c -o obj/kin_object.o | wc -l

In file included from src/core/kin_object.c:22:

src/core/kin_object.h:791:28: error: anonymous variadic macros were introduced in C99

In file included from src/core/kin_object.c:26:

src/core/kin_log.h:42:42: error: anonymous variadic macros were introduced in C99

src/core/kin_log.h:94:29: error: anonymous variadic macros were introduced in C99

...

cc1plus: warnings being treated as errors

src/core/kin_object.c:101: error: ISO C++ does not support the ‘z’ printf length modifier

..

src/core/kin_object.c:160: error: invalid conversion from ‘void*’ to ‘kin_object_t*’

..

src/core/kin_object.c:227: error: unused parameter ‘restrict’

..

src/core/kin_object.c:271: error: ISO C++ does not support the ‘z’ printf length modifier

src/core/kin_object.c:271: error: ISO C++ does not support the ‘z’ printf length modifier

共有69行错误,其中4行是无效转换,但主要是针对C99中存在但不存在于C中的功能.

这并不像我正在使用这些功能来获得它的乐趣.将它移植到另一种语言需要大量的工作.

所以建议这样做是完全错误的

[a] C compiler is almost certainly really a C++ compiler, so there are no software cost implications

将现有C代码移植到C的过程子集中通常会产生很大的成本影响.

所以建议’使用C std :: queue类’作为在C中寻找队列的库实现的问题的答案,而不是建议’使用目标C’和’使用JNI调用Java java.util.Queue类’或者“调用CPython库” – Objective C实际上是C(包括C99)的正确超集,Java和CPython库都可以直接从C调用,而不必将不相关的代码移植到C语言.

当然,您可以为C库提供C外观,但是一旦您这样做,C与Java或Python没有什么不同.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值