相关疑难解决方法(0)

C++中的" - >"运算符是什么?

看完后隐藏功能和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.标准中定义了哪里,它来自何处?

c++ code-formatting standards-compliance operators

8590
推荐指数
27
解决办法
75万
查看次数

使用无符号索引进行反向'for'循环的最佳方法是什么?

我第一次尝试反向for循环 n次做的事情是这样的:

for ( unsigned int i = n-1; i >= 0; i-- ) {
    ...     
}
Run Code Online (Sandbox Code Playgroud)

这是失败的,因为无符号算术 i保证总是大于或等于零,因此循环条件将始终为真.幸运的是,在我不得不想知道为什么循环无限执行之前,gcc编译器警告我"无意义的比较".


我正在寻找一种解决这个问题的优雅方法,请记住:

  1. 它应该是一个倒退的循环.
  2. 循环索引应该是无符号的.
  3. n是无符号常数.
  4. 它不应该基于无符号整数的"模糊"环算术.

有任何想法吗?谢谢 :)

c for-loop

56
推荐指数
7
解决办法
3万
查看次数

对于使用无符号整数时循环条件停止为0?

我有一个必须从N到0(包括)的循环.我的i变量的类型size_t通常是无符号的.我目前正在使用以下代码:

for (size_t i = N; i != (size_t) -1; --i) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

那是对的吗?有没有更好的方法来处理这种情况?

谢谢,

文森特.

c unsigned for-loop

11
推荐指数
3
解决办法
1809
查看次数

替代POSIX-unconformant系统上的ssize_t

我正在写一个程序,涉及网络I/O,所以sendrecv使用,这是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吧?
或者我该如何处理这个问题呢?

c posix

6
推荐指数
1
解决办法
1096
查看次数