【发布时间】:2020-01-22 13:59:18
【问题描述】:
故事:我尝试将 c99 脚本转换为常规 gcc。
问题:输出为空。
预期输出:3,2,1
length 是数组中的元素个数。
更新:该脚本旨在按降序对数组元素进行排序。
代码:
#include <stdio.h>
int main() {
int arr[] = { 1,2,3 };
int temp = 0;
int length = sizeof(arr) / sizeof(arr[0]);
int i = 0;
int j = i + 1;
for (i < length; i++;) {
for (j < length; j++;) {
if (arr[i] < arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
int y = 0;
for (y < length; y++;) {
printf("%d ", arr[y]);
}
return 0;
}
【问题讨论】:
-
“c99 到普通的东西”是什么意思?我在这里看不到任何特定于 C99 的内容。
-
您的
for-loop 语法错误。您正在使用预期初始化器的条件并在预期条件的位置递增。 -
更准确地说,关于你的for循环使用,语法是可以的; 逻辑 是错误的。这将编译,但不会 执行您可能期望的操作。至少三个关于无效代码的警告应该来自这里。如果这没有发生,您需要打开警告并将其视为错误。
-
你循环
for (y < length; y++;)很奇怪——你有一个条件,你应该有一个初始化(或者什么都没有——所以测试什么都不做),y++是测试条件,它失败了在第一次迭代中,因为y在第一次迭代中为零或假,并且它是一个后增量。你所有的代码在 C90 下都是合法的,更不用说 C99 或 C11 或 C18 (除非 C90 不支持自动数组初始化——我需要研究这个,我懒得这样做,因为它已经快 20 年了无关)。 -
@JonathanLeffler 好吧,关于常量,你是对的,但是在
arr的初始化程序中引用arr[0]有一些有趣的问题:stackoverflow.com/a/52309196/1848654
标签: c