小编Ras*_*edi的帖子

我应该如何定义/声明字符串常量

我一直在C中使用字符串常量作为以下之一

char *filename = "foo.txt";
const char *s = "bar";    /* preferably this or the next one */
const char * const s3 = "baz":
Run Code Online (Sandbox Code Playgroud)

但是,看完这篇文章之后,现在我想知道是否应该将我的字符串常量声明为

const char s4[] = "bux";
Run Code Online (Sandbox Code Playgroud)

请注意,建议作为重复项的链接问题有所不同,因为该问题专门询问常量字符串。我知道类型如何不同以及如何存储。在这个问题的阵列版本 const -qualified。这是一个简单的问题,即我是否应该对常量字符串使用常量数组,而不是我一直使用的指针版本。当在SO和Google上进行两天的搜索未得出确切答案时,这里的答案已经回答了我的问题。多亏了这些答案,我才知道当标记数组时,编译器可以做一些特殊的事情const,而且确实(至少有一种情况)我现在将使用数组版本。

c

18
推荐指数
2
解决办法
971
查看次数

初始化标头中的静态变量

我是C语言编程的新手,所以我尝试了许多不同的东西来尝试熟悉语言.

我写了以下内容:

文件q7a.h:

static int err_code = 3;
void printErrCode(void);
Run Code Online (Sandbox Code Playgroud)

文件q7a.c:

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

void printErrCode(void)
{
        printf ("%d\n", err_code);
}
Run Code Online (Sandbox Code Playgroud)

文件q7main.c:

#include "q7a.h"

int main(void)
{
        err_code = 5;
        printErrCode();

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我在makefile中运行以下命令(我使用的是Linux操作系统)

gcc –Wall –c q7a.c –o q7a.o
gcc –Wall –c q7main.c –o q7main.o
gcc q7main.o q7a.o –o q7
Run Code Online (Sandbox Code Playgroud)

输出为3.

为什么会这样?

如果在头文件中初始化一个静态变量(实际上是任何变量),那么如果2个文件包含相同的头文件(在本例中为q7.c和q7main.c),则链接器将给出两次定义的错误相同的var?

为什么不将值5插入到静态var中(毕竟它是静态的和全局的)?

谢谢您的帮助.

c variables linker static

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

在C中,我应该定义(不声明/原型)一个不带void参数或空列表的函数吗?

这个问题可能有也可能没有,虽然我试图找到一个,但每个人的答案似乎只是指的是声明/原型.它们指定定义void foo() { }是相同的void foo(void) { },但我应该以哪种方式实际使用?在C89?在C99?我相信我应该开始使用void foo(void);我的原型声明,但如果我使用void或不使用定义,是否有任何区别?

c

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

标签 统计

c ×3

linker ×1

static ×1

variables ×1