"static const char array"可以在 C 语言上包含变量成员吗
Can "static const char array" include a member of variable on C language
我的代码如下
#include <stdio.h>
static const char *a ="this is a";
static const char *b ="this is b";
char *comb_ab[2] =
{
a,
b
};
int main() {
int i=0;
for(i=0; i<sizeof(comb_ab)/sizeof(comb_ab[0]); i++) {
printf("%sn",comb_ab[i]);
}
}
这段代码在 G++ 编译器(C++)上正常工作。 但是GCC不起作用。输出如下
test.c:8:2: error: initializer element is not constant
a,
^
test.c:8:2: error: (near initialization for ‘comb_ab[0]’)
test.c:10:1: error: initializer element is not constant
};
^
test.c:10:1: error: (near initialization for ‘comb_ab[1]’)
如何在 GCC 上的静态常量 *char 数组中包含变量的成员?请帮帮我!
在 C 语言中,静态存储持续时间对象的初始值设定项必须是常量表达式。
变量的值从来都不是常量表达式,即使它是 const
限定变量也是如此。
因此,您不能将 a
的值用作 comb_ab
的初始值设定项。
在C++初始值设定项可能具有运行时评估。
要修复C版本,你可以comb_ab
非静态的,并在main
内部定义;或者你可以在main
里面有代码,用正确的值"初始化"全局comb_ab
。
此外,您
有一个类型不匹配:您尝试使用const char *
来初始化char *
。但即使你解决了这个问题,以前的问题仍然存在。使用 g++,您应该对此进行编译器诊断。
您可以使用具有静态存储持续时间的对象地址作为常量表达式,但代价是另一个级别的间接寻址。这在 C 中正式称为地址常量 (C11, §6.6/9)。
#include <stdio.h>
static const char *a = "this is a";
static const char *b = "this is b";
static const char **comb_ab[2] =
{
&a,
&b
};
int main()
{
for (int i = 0; i < sizeof(comb_ab)/sizeof(comb_ab[0]); i++) {
printf("%sn", *comb_ab[i]);
}
}
当然,将a
和b
文字与数组合并会更简单。请考虑以下设计:
static const char *comb_ab[] =
{
"this is a",
"this is b",
};
相关文章:
- 无法打开包含文件:在 vs2017 上'QtWidgets/qtwidgetsglobal.h'
- 我包含了<winuser.h>,但编译器在MonitorFromWindow上抛出"未声明"
- 如何将 jsoncpp 库包含在 unix 上的项目中?
- 在头文件上包含 cpp 文件是否有缺点?
- 如何在 GNUMakefile 上包含 libxml2 库
- Godbolt 在 MSVC 上包含 Windows.h 时无法链接?
- 在以下情况下,如何在 Linux 上包含C++头文件
- 不能在 OS X 上包含 opencv3
- 如何静态构建并在Windows上包含WolfSSL
- 在 Cygwin 64 上包含 boost.asio 时出错
- "static const char array"可以在 C 语言上包含变量成员吗
- [cmake]如何使用cmake在windows上包含和链接系统库
- C++ Linux 上包含多个 *.cpp 文件的生成文件
- 用PHP或任何其他语言上传巨大的文件
- 在c++上包含文件的明确方式,避免循环依赖关系
- 正在创建将在另一种语言上调用的win32api(dll)
- 如何在标准C/C++代码上包含和翻译自定义指令/扩展以保持高性能
- 在windows上包含sys/times.h的替代方案是什么
- 如何在不指定确切路径的情况下在OS X上包含"omp.h"
- 不能在 Ubuntu 12.10 上包含没有错误的"linux/in6.h"