gpt4 book ai didi

c++ - cpp 空数组声明

转载 作者:可可西里 更新时间:2023-11-01 18:06:05 25 4
gpt4 key购买 nike

您好,我有以下测试代码,我对cpp感到困惑。

  1. 如果您在 library.h 中声明一个带有空元素子句的数组.. 编译器会选择什么?它也没有提示,我使用 Cygwin。

  2. 在 library.cpp 中,我为两个元素赋值,编译器是否假设一个数组只有一个元素,而我将第二个元素写在数组范围之外?

库.h

#ifndef LIBRARY_H
#define LIBRARY_H

class library {

public:
void print();
char a[];
};

#endif

库.cpp

#include <stdio.h>
#include "library.h"

void library::print() {
a[0] = 'a';
printf("1. element: %d\n", a[0]);
a[1] = 'b';
printf("2. element: %d\n", a[1]);
}

客户端.cpp

#include <stdio.h>
#include "library.h"

void execute();
library l;

int main() {
l = library();
l.print();
return 0;
}

生成文件

OPTIONS=-Wall

all: main

run: main
./main.exe

main: client.o library.o
g++ $(OPTIONS) -o main $^

library.o: library.cpp library.h
g++ $(OPTIONS) -c $<

.cpp.o:
g++ $(OPTIONS) -c $<

clean:
rm -r *.o

最佳答案

  1. 没有称为 C/C++ 的语言,因此您的 Q 不能同时标记。
  2. 因为你在使用类,你的程序只能是 C++ 而不是 C。

public:
void print();
char a[];

这段代码在 C++ 中是完全非法的。 C++ 中的数组大小需要为正编译时间常数。解决方案是将其替换为:

public:
void print();
std::string a;

注意声明,

char a[];

在c99中有效,被称为不完整数组类型,C标准保证a至少可以存储一个char 。这在 C++ 中无效。 C++ 标准不允许这些。仅仅是因为两者是不同的语言。

关于c++ - cpp 空数组声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com