2011-06-17 54 views
1

我使用的是Visual Studio 2010,我试图运行一个简单的用C语言编写的程序,但是当我F5的时候,我得到了大量的语法错误。几乎所有的人都是因为这一点:Visual Studio 2010在尝试调试时给了我语法错误,但没有语法错误!

syntax error: missing ';' before 'type'. 

这是我的主要功能的外观:

你看
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    printf("Enter base 10 num: "); 
    int value; scanf("%d", &value); 
    printf("Enter base floor (min 2): "); 
    int min; scanf("%d", &min); 
    printf("Enter base ceiling (max 10): "); 
    int max; scanf("%d", &max); 
    base_convert(value, min, max); 
    return 0; 
} 

第一个int值是12行,并在第12行报道VS2010的第一个错误,字符1,这是该int的位置。在收到报告的消息后,我错过了一个“;” (我显然不是),它然后继续告诉我,价值是未申报的。

我该如何解决这个问题?我知道我的程序实际上没有语法(或任何)错误 - 这是之前编写和测试的,可以在GCC编译器上使用Ubuntu。

有人可以帮忙吗?这是非常令人沮丧的:S

+0

你是否有在为scanf的源文件的顶部适当的#includes? – Joe 2011-06-17 03:18:05

回答

5

ANSI C不允许在块的中间定义变量 - 它们必须在块的顶部定义。后来的C99标准删除了这个限制(就像C++一样),但Visual Studio不支持C99。

在顶部的变量声明重写你的函数:

int main() 
{ 
    int value, min, max; 
    printf("Enter base 10 num: "); 
    scanf("%d", &value); 
    printf("Enter base floor (min 2): "); 
    scanf("%d", &min); 
    printf("Enter base ceiling (max 10): "); 
    scanf("%d", &max); 
    base_convert(value, min, max); 
    return 0; 
} 

GCC,作为扩展,允许在默认情况下,块的中间被定义的变量。如果指定-pedantic命令行选项(不-std=c99),你会得到以下警告:

warning: ISO C90 forbids mixed declarations and code 
+0

那么这是否意味着我必须在使用后释放变量呢? – jayjyli 2011-06-17 03:32:21

+0

@Tim:什么?编号在堆栈中分配的变量(带有所谓的*自动存储*)在函数返回时自动释放。如果你用'malloc'(或者它的朋友'calloc'和'realloc',或者其他明显的内存分配函数)分配它们,你只需要释放变量。 – 2011-06-17 03:35:06

+0

哦,对不起,我误解了你的答案。我以为你的意思是需要在全球范围内宣布变量。感谢您的回答!! – jayjyli 2011-06-17 03:53:01

0

您是否尝试过使用新项目重新启动以确保您的项目没有损坏。

+0

这本身就是一个新项目。我使用空的C++控制台应用程序模板创建了这个模板。然后,我通过直接从Ubuntu中的原始文件复制代码来制作C源文件。 – jayjyli 2011-06-17 03:27:38