gpt4 book ai didi

c - 如何声明变量参数的数据类型?

转载 作者:行者123 更新时间:2023-11-30 20:31:27 24 4
gpt4 key购买 nike

我正在尝试将数据类型分配给 world 但无法弄清楚。

#include <stdarg.h>
#include <stdio.h>
#define TRACE(arg) TraceDebug arg ;\
void TraceDebug(const char* format, ...);

void TraceDebug(const char* format, ...)
{
char buffer[256];
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}

int main(void)
{
int a =55;
TRACE((Hello,a));
return 0;
}

下面是详细的错误说明。

main.c: In function 'main':
main.c:28:12: error: 'Hello' undeclared (first use in this function)
TRACE((Hello,a));
^
main.c:13:32: note: in definition of macro 'TRACE'
#define TRACE(arg) TraceDebug arg ;\
^
main.c:28:12: note: each undeclared identifier is reported only once for each function it appears in
TRACE((Hello,a));
^
main.c:13:32: note: in definition of macro 'TRACE'
#define TRACE(arg) TraceDebug arg ;\
^

在声明之后我需要获取变量的地址,是否可以将 Hello 声明为变量。

In simple I want to change the below code into a variadic function arguments for example #define QU(arg1,arg2) as #define QU(arg1,...) since variadic macro is not supported am using variadic functions.

#define TRACE(arg1)  QU arg1
#define QU(arg1,arg2) {static const char arg1; \
printf("%p\n",(void*)&arg1);\
printf("%d\n",arg2);}\

int main(void)
{
int aaa =333;
int bbb =444;
TRACE((Hello,aaa));
TRACE((Hello2,bbb));
return 0;
}

最佳答案

1) (title)如何声明变量参数的数据类型?
2)(第一个问题)我正在尝试将数据类型分配给 world 但无法弄清楚。

1) variadic 参数的数据类型(用省略号表示: ... )始终是省略号之前的变量的类型。对于这个原型(prototype):

int variadicFunc(int a, const char *b, ...);
^^^^^^^^^^ ^^^
type assumes the type const char *

2)仅从您问题的内容来看,答案可能是使用 typedef 语句:

typedef char World;  // a new type 'World' is created   

但是评论中有澄清:

  • 如果我将字符串更改为变量,我可以减少内存大小,...(你)
  • 您想要一个变量参数列表来传递程序中存在的变量,并将这些变量放置在跟踪列表中进行调试目的。 (很接近吗?)...(我)
  • (很接近吗?)是的,这就是我想要做的事情......你总是要向这个函数传递相同的类型吗?啊,输入 will就像 TRACE(("Hello", a,"world")); (你)

您似乎想要输入可变数量的字符串文字或字符串变量作为函数参数,然后将这些项目放入变量中,然后将这些变量的地址存储在文件中,以达到目的节省空间。

以下代码说明了如何将可变数量的字符串(以不同形式)传递到函数中,并将地址和内容保留到结构中。由此,您应该能够根据我在这里所做的事情进行调整,以适应对您的需求更有用的东西。请注意,我保留了第一个字符串参数,用于存储地址的文件位置。

#define MAX_LEN 200

typedef struct {
unsigned int addr;
char str[MAX_LEN];
} DATA;


int variadicFunc(int argCount, const char *str, ...);

int main(void)
{
char a[] = {"this is a string"};
char b[] = {"another string"};
char c[] = {"yet another string"};

// count non-variable v1 v2 v3 v4
variadicFunc(4, ".\\storage.txt", a, b, "var string", c);
// ^count of variable argument list


return 0;
}
int variadicFunc(int argCount, const char *str, ...)
{
va_list arg;
int i;
char sAddr[10];

DATA *d = calloc(argCount, sizeof(*d));

va_start(arg, str);
FILE *fp = fopen(str, "w");//using first string as filename to populate
if(fp)
{
for(i=0;i<argCount;i++)
{
// retain addresses and content for each string
strcpy(d[i].str, va_arg(arg, const char *));
d[i].addr = (unsigned int)&d[i].str[i];
sprintf(sAddr, "%X\n", d[i].addr);
fputs(sAddr, fp);
}
fclose(fp);
}

return 0;
}

关于c - 如何声明变量参数的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50987122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com