声明数组和使用 malloc 时出现 ISO C90 错误
ISO C90 error while declaring an array and using malloc
我刚刚学习了动态内存分配,所以我尝试对其进行测试。我正在使用具有以下构建配置的 sublime text 3
{
"cmd": ["gcc", "-Wall", "-ansi", "-pedantic-errors", "$file_name", "-o", "${file_base_name}.exe", "&&", "start", "cmd", "/k" , "$file_base_name"],
"selector": "source.c",
"working_dir": "${file_path}",
"shell": true
}
我在代码块 bin 文件夹的路径变量中包含了 gcc 编译器的路径
C:\Program Files (x86)\CodeBlocks\MinGW\bin
我曾经尝试过的 C 代码 运行 看起来像这样...
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n,i;
scanf("%d",&n);
int *order=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",&*(order+i));
printf("%d",order[2]); /*just seeing whether output is properly displayed or not */
return 0;
}
sublime text 显示的错误是:
8:2: error: ISO C90 forbids mixed declarations and code [-pedantic]
I tried running my code in codeblocks and it works perfectly. so is
there any way by which i can run my c programs in C99 instead of C90
using sublime text 3 itself
你不运行你的程序使用给定的标准你用它的规则编译它们。
文本编辑器与此无关。要解决此问题,请将 -ansi
标志替换为此列表
中的 -std=c99
"cmd": [
"gcc",
"-Wall",
"-std=c99",
"-pedantic-errors",
"$file_name",
"-o", "${file_base_name}.exe",
"&&",
"start",
"cmd",
"/k" ,
"$file_base_name"
]
为了使代码更清晰,您只能在块的开头声明变量,这就是错误所在。在 c90 中,禁止将 声明 与代码混合。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n;
int i;
int *order
if (scanf("%d", &n) != 1)
return -1;
order = malloc(sizeof(*order) * n);
for (i = 0 ; i < n ; i++)
scanf("%d", order + i); // Please check the return value here too/
printf("%d", order[2]); // This might invoke UB because you ignored
// `scanf()'s return value in the loop.
return 0;
}
所以声明
int *order = ...
导致错误,将其移动到块的开头将解决它。
另请注意,您不需要将 malloc()
的 return 值转换为目标指针类型,通常 void *
会自动转换为目标指针类型.
so is there any way by which i can run my c programs in C99 instead of C90 using sublime text 3 itself
设置标志-std=c99
。
我刚刚学习了动态内存分配,所以我尝试对其进行测试。我正在使用具有以下构建配置的 sublime text 3
{
"cmd": ["gcc", "-Wall", "-ansi", "-pedantic-errors", "$file_name", "-o", "${file_base_name}.exe", "&&", "start", "cmd", "/k" , "$file_base_name"],
"selector": "source.c",
"working_dir": "${file_path}",
"shell": true
}
我在代码块 bin 文件夹的路径变量中包含了 gcc 编译器的路径
C:\Program Files (x86)\CodeBlocks\MinGW\bin
我曾经尝试过的 C 代码 运行 看起来像这样...
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n,i;
scanf("%d",&n);
int *order=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",&*(order+i));
printf("%d",order[2]); /*just seeing whether output is properly displayed or not */
return 0;
}
sublime text 显示的错误是:
8:2: error: ISO C90 forbids mixed declarations and code [-pedantic]
I tried running my code in codeblocks and it works perfectly. so is there any way by which i can run my c programs in C99 instead of C90 using sublime text 3 itself
你不运行你的程序使用给定的标准你用它的规则编译它们。
文本编辑器与此无关。要解决此问题,请将 -ansi
标志替换为此列表
-std=c99
"cmd": [
"gcc",
"-Wall",
"-std=c99",
"-pedantic-errors",
"$file_name",
"-o", "${file_base_name}.exe",
"&&",
"start",
"cmd",
"/k" ,
"$file_base_name"
]
为了使代码更清晰,您只能在块的开头声明变量,这就是错误所在。在 c90 中,禁止将 声明 与代码混合。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n;
int i;
int *order
if (scanf("%d", &n) != 1)
return -1;
order = malloc(sizeof(*order) * n);
for (i = 0 ; i < n ; i++)
scanf("%d", order + i); // Please check the return value here too/
printf("%d", order[2]); // This might invoke UB because you ignored
// `scanf()'s return value in the loop.
return 0;
}
所以声明
int *order = ...
导致错误,将其移动到块的开头将解决它。
另请注意,您不需要将 malloc()
的 return 值转换为目标指针类型,通常 void *
会自动转换为目标指针类型.
so is there any way by which i can run my c programs in C99 instead of C90 using sublime text 3 itself
设置标志-std=c99
。