相关疑难解决方法(0)

使用无符号循环变量进行反向迭代

我一直在讨论与同事一起使用size_t的问题.出现的一个问题是循环,它将循环变量递减直到达到零.

请考虑以下代码:

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

由于无符号整数环绕,这会导致无限循环.在这种情况下你做什么?编写上面的代码并没有意识到你犯了一个错误似乎很容易.

我们团队的两个建议是使用以下样式之一:

for (size_t i = n-1; i != -1 ; --i) { ... }

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

但我不知道还有其他选择......

c c++

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

使用ssize_t vs int

我有一个函数,我可以用以下四种方式之一编写:

    int do_or_die(int retval);
    int do_or_die(ssize_t retval);
    ssize_t do_or_die(int retval);   
    ssize_t do_or_die(ssize_t retval);   
Run Code Online (Sandbox Code Playgroud)

然后,它将使用这两种方式调用库函数:

    written = do_or_die(write(...)); // POSIX write returns ssize_t
    printed = do_or_die(printf(...)); // printf returns int
Run Code Online (Sandbox Code Playgroud)

问题

  • 我应该使用哪种原型?
  • 我应该给什么类型writtenprinted

我希望拥有最强大和标准的代码,同时仍然只有一个do_or_die功能.

我在这种情况下使用C99,但如果C11的答案不同,那么我也想知道这一点,以备将来使用.

c standards type-conversion

30
推荐指数
2
解决办法
5万
查看次数

标签 统计

c ×2

c++ ×1

standards ×1

type-conversion ×1