在C中定义long long变量时的奇怪行为

时间:2014-05-28 09:16:06

标签: c

当我尝试定义类型为long long int的变量时,我注意到了一种非常奇怪的行为。

例如,以这种方式编写的代码可以正常工作:

#include <stdio.h>

#define STR_LEN 20

int main()
{  
    long long broj = 1;

    char str[STR_LEN];
    scanf("%s", str);

    return 0;
}

但是,用这种方式编写的代码无法编译:

#include <stdio.h>

#define STR_LEN 20

int main()
{  
    char str[STR_LEN];
    scanf("%s", str);

    long long broj = 1;

    return 0;
}

编译器提供以下消息: 错误C2143:语法错误:缺少&#39 ;;&#39;之前&#39;键入&#39; 这不是很有用......我正在使用Visual Studio 2010。

有关此行为的任何想法?感谢。

3 个答案:

答案 0 :(得分:1)

在Visual Studio 2010(C89)中,始终在程序开头初始化变量。

答案 1 :(得分:0)

  

有关此行为的任何想法?

是。 Visual Studio 2010不支持混合类型声明。在C99模式下使用GCC编译代码(使用选项-std=c99),它将正常工作。 ISO C99和ISO C ++允许声明和代码在复合语句中自由混合 作为extension,GCC也允许在C89模式下使用

答案 2 :(得分:0)

  1. long是一个限定符,不是一个类型,你没有明确声明一个类型
  2. 历史上,Windows / Visual Studio并没有为C
  3. 提供良好的支持
  4. 您没有提及用于编译此
  5. 的选项