【发布时间】:2022-01-03 14:38:48
【问题描述】:
我不太明白 Visual Studio 2019 想要我做什么(C 语言)。一方面,它不会向我抛出错误或警告,但另一方面,它会在我的 API 文件中用绿色波浪线标记我的 createCustomer 声明。我想封装 Customer 并在 Customer 结构上使用 ADT。
这些是我的源文件和头文件:
客户.h
#include <stdlib.h>
typedef struct Customer
{
unsigned int customerId;
const char* name;
int numOrders;
}Customer, * CustomerPtr;
客户.c
#include "customer.h"
#define MAX_NO_OF_CUSTOMERS 10
static Customer objectPool[MAX_NO_OF_CUSTOMERS];
static unsigned int customersCount = 0;
CustomerPtr createCustomer(const char* name, size_t numOrders)
{
CustomerPtr newCustomer_p = NULL;
if(customersCount < MAX_NO_OF_CUSTOMERS)
{
newCustomer_p = objectPool + (customersCount++);
newCustomer_p->name = name;
newCustomer_p->numOrders = numOrders;
}
}
customer_api.h
#include "customer.h"
CustomerPtr createCustomer(const char* name, int numOrders);
main.c
#include <stdio.h>
#include "main.h"
#include "customer_api.h"
int main()
{
CustomerPtr customer_p = createCustomer("Demo", 5);
return 0;
}
正如我所说,在customer_api.h 下,下面的CustomerPtr createCustomer(const char* name, int numOrders); 在函数声明createCustomer 下有波浪线。程序编译并成功运行,没有错误/警告。
也许我没有正确使用 API h 文件概念?我试图让客户属性实现对外部文件隐藏,所以在其他文件中,我只需要在需要访问客户模块时包含customer_api.h。
【问题讨论】:
-
只激活警告,
createCustomer不会返回任何内容 -
如果将鼠标悬停在曲线上,会弹出什么消息?
-
您的声明有一个
int第二个参数,但您的定义有size_t。不同的功能。 -
但正如@Ôrel 指出的那样,该函数格式不正确,据我所知,您发布的代码确实不能(或不应该)成功运行。 (它可能似乎起作用,因为您没有尝试使用在
main中的调用不是返回的指针。) -
“我正在尝试对外部文件隐藏客户属性实现...” 您无法隐藏放在头文件中的任何内容,即使它使用不同的名称。处理此问题的正确方法是在标头中将
Customer+typedef前向声明为CustomerPtr,在 customer.h 中编写仅引用CustomerPtr的 API,并在customer.c文件。