相关疑难解决方法(0)

static const vs #define

使用static constvars比#define预处理器更好吗?或者也许取决于背景?

每种方法的优点/缺点是什么?

c c++ const

200
推荐指数
6
解决办法
14万
查看次数

C中文件范围的可变修改数组

我有一些像这样的代码:

static int a = 6;
static int b = 3;

static int Hello[a][b] =
{
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3},
    { 1,2,3}
};
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时,它说错误:

在文件范围内可变地修改了"Hello"

怎么会发生这种情况?我该怎么办呢?

c arrays static

30
推荐指数
2
解决办法
6万
查看次数

#define与常量的优缺点?

有人能指出使用#define对比常数的优缺点吗?我的大部分工作都是用C和Objective-C完成的.

c objective-c

14
推荐指数
3
解决办法
2万
查看次数

C和C++中的可变长度数组(VLA)

可能重复:
文件范围内可变修改的数组

我有一些关于VLA及其行为的概念,我需要澄清一下.

自C99起AFIK可以将VLA声明为本地范围:

int main(int argc, char **argv)
{
    // function 'main' scope
    int size = 100;
    int array[size];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但它在全球范围内被禁止:

const int global_size = 100;
int global_array[global_size]; // forbidden in C99, allowed in C++

int main(int argc, char **argv)
{
    int local_size = 100;
    int local_array[local_size];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在C99中声明了一个VLA,因为const修饰符不会创建编译时值.在C++中global_size是一个编译时值,因此,global_array不会成为VLA.

我需要知道的是:我的推理是否正确?我描述的行为是正确的吗?

我也想知道:为什么不允许全球范围内的VLA?在C和C++中是否被禁止?数组在全局和局部范围内的行为有什么不同?

c c++ arrays variable-length-array

8
推荐指数
2
解决办法
1万
查看次数

有谁知道为什么这个C代码不会编译?

#include <stdio.h>
int const NAMESIZE = 40;
int const ADDRSIZE = 80;
typedef char NameType[NAMESIZE];
typedef char AddrType[ADDRSIZE];

typedef struct
{
    NameType name;
    AddrType address;
    double salary;
    unsigned int id;
}EmpRecType;

int main(int * argc, char * argv[])
{
    EmpRecType employee;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用#define而不是const它编译.这是错误:

employee.c:5:14:错误:在文件范围employee.c:6:14:错误地修改了'NameType':在文件范围内修改了'AddrType'

c

2
推荐指数
3
解决办法
1004
查看次数

C使用常量声明一个2d数组

我有一个游戏的头文件,声明一个2d数组的板.

#ifndef GAME_H_
#define GAME_H_

static const int columns = 15;
static const int rows = 15;

int board[rows][columns];

#endif /* GAME_H_ */
Run Code Online (Sandbox Code Playgroud)

我收到错误" error: variably modified 'board' at file scope".

c arrays constants

1
推荐指数
1
解决办法
2056
查看次数

在C++中使用变量而不是`#define`指定数组大小是不好的做法吗?(C错误:在文件范围内进行了可变修改)

在C中,const不允许使用变量声明数组大小,即使它是变量.例如:这无法在C中编译:

#include <stdio.h>

const int SIZE = 2;
int a[SIZE];

int main()
{
    a[0] = 1;
    a[1] = 2;
    printf("%i, %i", a[0], a[1]);       
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在C中运行此代码

输出:

$gcc -o main *.c
main.c:5:5: error: variably modified ‘a’ at file scope
 int a[SIZE];
     ^
Run Code Online (Sandbox Code Playgroud)

但是,在C++中,它运行得很好.
在C++中运行上面的代码.

输出:

$g++ -o main *.cpp
$main
1, 2
Run Code Online (Sandbox Code Playgroud)

要使其在C中运行,必须使用#define而不是变量.即:

这在C或C++中运行得很好:

#include <stdio.h>

#define SIZE 2
// const int SIZE = 2;
int a[SIZE];

int main()
{
    a[0] = 1;
    a[1] = …
Run Code Online (Sandbox Code Playgroud)

c c++ arrays compiler-errors static-initialization

0
推荐指数
1
解决办法
225
查看次数