簡體   English   中英

為什么這個C程序不能編譯?這有什么問題?

[英]Why doesn't this C program compile? What is wrong with this?

為什么這個C程序不能編譯? 這有什么問題?

我在wxDevC++和Turbo C ++ 3.0上嘗試過它。

MAIN.C

#include<stdio.h>
#include<conio.h>

const int SIZE = 5;

int main(int argc, char ** argv)
{    
    char array[SIZE] = {'A', 'B', 'C', 'D', 'E'};

    printf("Array elements are,\n");
    int i=0;

    for(i=0 ; i<SIZE ; ++i)
    {
        printf("%c  ", array[i]);
    }

    getch();

    return 0;
}

兩個編譯器上的錯誤消息類似。

f:\_Source-Codes\main.c In function `main':

8 f:\_Source-Codes\main.c variable-sized object may not be initialized

C89 / 90語言中的數組大小必須由整數常量表達式指定(對於C99,通常也是如此)。 C中的const int對象不是常量表達式 ,這就是為什么不能使用它來指定數組大小的原因。 注意:這是C和C ++之間的一個顯着區別。

在C語言的術語恆定是指文字常量,即510.20xFF'a'等(枚舉常數也常數 ,要准確)。 const int對象再次在C中不是常量 ,不能用於構建常量表達式。

如果要預先聲明要在C中用作數組大小的命名常量,則必須使用#defineenum 這同樣適用於案例標簽,位字段大小以及需要恆定表達的每個其他上下文。

有關詳細信息,請參閱

如果編譯器將其視為'.c'文件,則int i聲明需要在printf之前的任何可執行行之前。

編輯,現在您顯示錯誤消息:

編譯main時,編譯器不會將SIZE視為常量。 您可以使用#define SIZE 5作為解決方法。

根據K&R 2nd Ed。

const的目的是宣布可能放在只讀內存中的對象。除了它應該診斷顯式嘗試更改const對象之外,編譯器可能會忽略[const]限定符”。

因此,聲明const int SIZE = 5不會使SIZE成為常量表達式 ,這是數組大小說明符所需要的。

嘗試更換

const int SIZE = 5;

#define SIZE 5

大多數C編譯器不允許聲明其大小包含在變量中的靜態數組(即數組大小是在運行時確定的)。

試試這個:

char array[] = {'A', 'B', 'C', 'D', 'E'};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM