看完后隐藏功能和C++/STL的暗角上comp.lang.c++.moderated,我完全惊讶的是,下面的代码片断编译并在两个Visual Studio 2008和G ++ 4.4的工作.
这是代码:
#include <stdio.h>
int main()
{
int x = 10;
while (x --> 0) // x goes to 0
{
printf("%d ", x);
}
}
Run Code Online (Sandbox Code Playgroud)
我假设这是C,因为它也适用于GCC.标准中定义了哪里,它来自何处?
我第一次尝试反向for循环 n次做的事情是这样的:
for ( unsigned int i = n-1; i >= 0; i-- ) {
...
}
Run Code Online (Sandbox Code Playgroud)
这是失败的,因为无符号算术 i保证总是大于或等于零,因此循环条件将始终为真.幸运的是,在我不得不想知道为什么循环无限执行之前,gcc编译器警告我"无意义的比较".
我正在寻找一种解决这个问题的优雅方法,请记住:
有任何想法吗?谢谢 :)
我有一个必须从N到0(包括)的循环.我的i变量的类型size_t通常是无符号的.我目前正在使用以下代码:
for (size_t i = N; i != (size_t) -1; --i) {
...
}
Run Code Online (Sandbox Code Playgroud)
那是对的吗?有没有更好的方法来处理这种情况?
谢谢,
文森特.
我正在写一个程序,涉及网络I/O,所以send和recv使用,这是POSIX功能.它们返回a ssize_t,也是POSIX特有的.
包装器看起来像这个ATM:
ssize_t sock_send(int sock, const void* msg, size_t len) {
return send(sock, msg, len, 0);
}
Run Code Online (Sandbox Code Playgroud)
尽管我在当前的实现中严重依赖POSIX,但我希望使接口更贴近标准,因为我计划稍后编写一个Windows实现,其中POSIX不一定可用(该死的,Windows!).
ssize_t根据C11标准的规定,什么是一个很好的替代品?也许ptrdiff_t吧?
或者我该如何处理这个问题呢?