Tag: 定义

在C与C ++中初始化具有静态存储持续时间的对象

可能重复: 主要回报是什么? 例如,以下代码编译时没有任何警告: #include int i = i + 1; int main(int argc, char *argv[]) { fprintf (stderr, “%d\n”, i); return 0; } 我认为这在语法上是非法的,因为i在它被声明之前被使用,是不是? 在我看来, int i = i + 1; 肯定是一个错误,为什么编译器不警告它呢? 我使用gcc 4.5.1。

“多重定义”,“此处首次定义”错误

我有3个项目: 服务器 , 客户端和共享 。 在Commons中创建头和源对不会导致任何问题,我可以从服务器和客户端免费访问这些function。 但是,由于某些原因,在服务器或客户端项目中创建其他源/头文件总是会导致multiple definition of (…)并且first defined here错误。 例: commands.h (在Client项目的根目录中) #ifndef COMMANDS_H_ #define COMMANDS_H_ #include “commands.c” void f123(); #endif /* COMMANDS_H_ */ commands.c (在Client项目的根目录中) void f123(){ } main.c (在Client项目的根目录中) #include “commands.h” int main(int argc, char** argv){ } 错误: make: *** [Client] Error 1 Client first defined here Client multiple definition […]

在c标准库中定义了stdin?

我在stdio.h中找到了这一行: extern struct _IO_FILE *stdin; 基于这个’extern’关键字,我认为这只是一个声明。 我想知道stdin在哪里定义和初始化?

C中“array”的定义是什么?

该标准精心定义了数组类型 ,但我没有看到任何数组定义。 我们可能会说“数组类型的对象”,但是这不能正确,因为无类型对象(例如malloc分配的空间)被描述为数组。 动机: fprintf (C11 7.21.6.1/8)中%s的规格说: 参数应该是指向字符类型数组的初始元素的指针 但是取代码char s[] = “hello”; printf(“%s”, s+1); char s[] = “hello”; printf(“%s”, s+1); 然后我们传递了一个指向第二个元素的指针。 该定义似乎假设该数组表示任何一组连续的对象 。 编辑:看到我已经选择了一些“不清楚你要问的”投票,我的问题是:ISO / IEC 9899:2011使用的术语数组的定义是什么?

如何在C中定义函数数组

我有一个包含这样的声明的结构: void (*functions[256])(void) //Array of 256 functions without arguments and return value 在另一个函数我想定义它,但有256个函数! 我可以这样做: struct.functions[0] = function0; struct.functions[1] = function1; struct.functions[2] = function2; 等等,但这太累了,我的问题是有办法做这样的事吗? struct.functions = { function0, function1, function2, function3, …, }; 编辑 :Chris Lutz所说的修正了语法错误。

全局变量与局部变量的重新声明

当我编译下面的代码时 #include int main() { int a; int a = 10; printf(“a is %d \n”,a); return 0; } 我收到一个错误: test3.c: In function ‘main’: test3.c:6:5: error: redeclaration of ‘a’ with no linkage test3.c:5:5: note: previous declaration of ‘a’ was here 但是,如果我将变量设为全局,那么它可以正常工作。 #include int a; int a = 10; int main() { printf(“a is %d \n”,a); return […]

C中的声明或定义

来自外部变量Wiki : 如果extern关键字和初始化值都不存在,则该语句可以是声明或定义。 由编译器来分析程序的模块并做出决定。 我无法完全理解关于C的这个陈述的含义。例如,它是否意味着: int i; 不一定是声明(正如我直到现在所假设的那样),但也可以是一个定义(根据同一网页上的定义和声明的定义,没有双关语)? 简而言之,就是上面的陈述:a。 只是声明,或b。 声明+定义? 参考: 变量声明和定义 收到的答复摘要: Declaration Definition Tentative Definition Initialized int i; (inside a block) Yes Yes No No int i=5; (inside a block) Yes Yes No Yes(to 5) int i; (otherwise) Yes No Yes Yes(to 0) extern int i; Yes No No No All definitions […]

可以在c的运行时确定数组的大小吗?

据我所知,在编译c的时间之前,数组需要具有特定的大小。 我想知道为什么这段代码仍然有用? int s; printf(“enter the array size: “); scanf(“%d”,&s); int a[s]; // Isn’t s value determined at run time?