Tag: 联系

使用结构不同的代码与c程序联系经理

现在我遇到了另一个问题,在我改变了如下所示的编码之后,它仍然显示出错误。 在编码内部,没有任何红色下划线,因此我无法找出错误的位置。 那么这个编码有什么错误吗? struct contact { char name[20],email[20]; int hpnum; }add; int option; FILE *f; void addcontact(struct contact list[100]); void read(struct contact list[100]); int main (void) { struct contact list[100]; system(“cls”); printf(“==========Welcome to Jeffery’s Contact System Management==========\n”); printf(“\t\t\tContact System Main Menu\n”); printf(“[1] Create a New Contact\n”); printf(“[2] Modified Existing Contact\n”); printf(“[3] Delete Existing Contact\n”); printf(“[4] […]

使用结构与c程序联系经理

struct contact { char name[20],email[20]; int hpnum; }add; int option; int main (void) { system(“cls”); printf(“==========Welcome to Jeffery’s Contact System Management==========\n”); printf(“\t\t\tContact System Main Menu\n”); printf(“[1] Create a New Contact\n”); printf(“[2] Modified Existing Contact\n”); printf(“[3] Delete Existing Contact\n”); printf(“[4] Search Existing Contact\n”); printf(“[5] Exit\n”); printf(“Please enter one of your option.\n”); scanf(“%d”,option); switch(option) { //add new […]

为什么结构定义有内部联系?

(我在谈论C,但它也适用于C ++中的类模板) 在头文件中,放置所有DECLARATIONS而不是定义是自定义的。 但是,我们通常将结构定义或类模板放在头文件中,而实际上并不知道为什么我们可以。 这并没有多大意义,因为它们也是定义 – 一个定义规则。 (是的,结构定义和类模板不会导致设置任何存储,但是仍然会出现“重新定义”错误,这意味着它们是定义)。 EX)在同一文件中定义具有相同标记的多个结构会给出重新定义错误,但在多个源文件中定义具有相同标记的多个结构不会导致任何错误(类同样发生)。 唯一有意义的是结构定义和类模板具有内部链接(与默认外部链接相对),但我在K&R或参考手册中找不到任何关于它的引用。 实际上,连接中甚至没有提到结构。 我想知道ANSI标准指出这种现象的确切参考。 (国际海事组织,这是一个非常模棱两可的问题,在ANSI标准的某处提到)。 编辑我不是问为什么结构定义可以放入头文件。 我问为什么在头文件中放置结构定义不会像我们在头文件中放入变量定义时那样导致重定义错误(并将其包含在多个源文件中) EX)test1.c:int a = 3; test2.c:int a = 4; 由于重新定义导致编译错误。 然而, test1.c:struct test {int a}; test2.c:struct test {int b}; 不会导致编译错误,我能想出的唯一原因是结构定义要么具有内部链接,要么根本没有链接。

在全局范围内将声明与extern,static和no存储说明符混合使用

我一直在研究何时可以在全局范围内混合使用extern , static和no storage specifier声明的变量。 结果让我很困惑。 这是我发现的(每个段落是一个单独的编译单元): /* ok */ int x; int x; /* ok */ int f(); int f(); /* ok */ int x; extern int x; /* ok */ int f(); extern int f(); /* error: static declaration follows non-static declaration */ int x; static int x; /* ok (no warning) */ […]

外部,内部和没有联系或为什么这不起作用?

根据C标准: 在构成整个程序的翻译单元和库的集合中,具有外部链接的特定标识符的每个声明表示相同的对象或function。 在一个翻译单元内,具有内部链接的标识符的每个声明表示相同的对象或function。 没有链接的标识符的每个声明表示唯一的实体。 在我的例子中,我们有三个单独的声明,每个标识符具有不同的链接。所以为什么这不起作用? static int a; //a_Internal int main(void) { int a; //a_Local { extern int a; //a_External } return 0; } 错误: 在函数’main’中:第9行:错误:变量先前声明’static’relayclared’extern’ 为什么编译器坚持要重新声明我而不是尝试访问另一个文件中的外部对象? 有效的C ++示例供参考: static void f(); static int i = 0; // #1 void g() { extern void f(); // internal linkage int i; // #2 i has no […]