函数 main (Turbo-C) 中的表达式语法
Expression syntax in function main (Turbo-C)
我正在使用 DOS 虚拟机绕过段错误,但 Turbo-C 不想编译此代码:
#include <stdio.h>
int main() {
FILE *fp = fopen("somefile.txt", "w");
if(fp == NULL) {
fprintf(stderr, "NaF");
return -1;
}
char /*1*/ *ch = NULL;
while(ch /*2*/ < (char *) 209* /*3*/1024) {
fprintf(fp, "& - %p, * - %c\n", ch, *ch/*4*/);
ch++;
}
fclose(fp);
return 0;
}
错误列表:
- 函数 main 中的表达式语法
- 函数 main
中的未定义符号 'ch'
- 在函数 main 中非法使用指针
- 函数 main 中的间接寻址无效
我认为这一定是某种古老的 C,因为我确信这段代码可以在现代编译器上编译。我知道它会产生段错误,因此我在 DOS 环境中编写。
1) 和 2) Turbo-C 使用标准的 C90 版本。它不允许在 { }
主体的中间声明变量,只能在顶部声明。因此 char* ch
必须移动:
int main (void)
{
char* ch = NULL
...
3) 你尝试乘以一个指针(char *) 209
。这在 C 中是不允许的,也不会在现代编译器上编译。
最后,用于不指向已分配对象的指针的指针算术 ch++
未被任何版本的 C 明确定义。可能 在 Turbo C 中工作,但不能保证。
我认为这个程序应该获取 RAM 的内存转储并将其存储到文本文件中。 MS DOS 允许直接访问内存。然而,该代码早在 1989 年就已经受到质疑。
使用 char
访问原始内存是个坏主意,因为它是一种具有实现定义的符号的类型。请改用 unsigned char
或 uint8_t
。
我正在使用 DOS 虚拟机绕过段错误,但 Turbo-C 不想编译此代码:
#include <stdio.h>
int main() {
FILE *fp = fopen("somefile.txt", "w");
if(fp == NULL) {
fprintf(stderr, "NaF");
return -1;
}
char /*1*/ *ch = NULL;
while(ch /*2*/ < (char *) 209* /*3*/1024) {
fprintf(fp, "& - %p, * - %c\n", ch, *ch/*4*/);
ch++;
}
fclose(fp);
return 0;
}
错误列表:
- 函数 main 中的表达式语法
- 函数 main 中的未定义符号 'ch'
- 在函数 main 中非法使用指针
- 函数 main 中的间接寻址无效
我认为这一定是某种古老的 C,因为我确信这段代码可以在现代编译器上编译。我知道它会产生段错误,因此我在 DOS 环境中编写。
1) 和 2) Turbo-C 使用标准的 C90 版本。它不允许在 { }
主体的中间声明变量,只能在顶部声明。因此 char* ch
必须移动:
int main (void)
{
char* ch = NULL
...
3) 你尝试乘以一个指针(char *) 209
。这在 C 中是不允许的,也不会在现代编译器上编译。
最后,用于不指向已分配对象的指针的指针算术 ch++
未被任何版本的 C 明确定义。可能 在 Turbo C 中工作,但不能保证。
我认为这个程序应该获取 RAM 的内存转储并将其存储到文本文件中。 MS DOS 允许直接访问内存。然而,该代码早在 1989 年就已经受到质疑。
使用 char
访问原始内存是个坏主意,因为它是一种具有实现定义的符号的类型。请改用 unsigned char
或 uint8_t
。