C #定义宏不';t打印变量
我有以下代码:C #定义宏不';t打印变量,c,C,我有以下代码: #define PRINT(fmt, ...) printf("%s:%d: "fmt, __FILE__, __LINE__, ## __VA_ARGS__) 当我向它传递一些值时,它工作得很好,例如PRINT(“Hello,world”)。 但是当我将变量作为参数传递时,例如,PRINT(somevar)它不会打印变量intsomevar的值。如何重写宏以使其同时打印变量?问题不在宏中。这取决于你如何使用它。本质上,您的使用要求将PRINT与格式字符串一起使用,格式字符串
#define PRINT(fmt, ...) printf("%s:%d: "fmt, __FILE__, __LINE__, ## __VA_ARGS__)
当我向它传递一些值时,它工作得很好,例如PRINT(“Hello,world”)。
但是当我将变量作为参数传递时,例如,
PRINT(somevar)
它不会打印变量intsomevar
的值。如何重写宏以使其同时打印变量?问题不在宏中。这取决于你如何使用它。本质上,您的使用要求将PRINT与格式字符串一起使用,格式字符串必须是描述如何处理后续参数的字符串文字
例如,试试看
PRINT("x = %d y = %d\n", x, y);
其中
x
和y
是int
类型的变量,问题不在宏中。这取决于你如何使用它。本质上,您的使用要求将PRINT与格式字符串一起使用,格式字符串必须是描述如何处理后续参数的字符串文字
例如,试试看
PRINT("x = %d y = %d\n", x, y);
其中
x
和y
是int
类型的变量,问题不在宏中。这取决于你如何使用它。本质上,您的使用要求将PRINT与格式字符串一起使用,格式字符串必须是描述如何处理后续参数的字符串文字
例如,试试看
PRINT("x = %d y = %d\n", x, y);
其中
x
和y
是int
类型的变量,问题不在宏中。这取决于你如何使用它。本质上,您的使用要求将PRINT与格式字符串一起使用,格式字符串必须是描述如何处理后续参数的字符串文字
例如,试试看
PRINT("x = %d y = %d\n", x, y);
如果
x
和y
是int
类型的变量,您的意思是我最好将其作为常规例程重写并使用va_list?除非宏的fmt
(第一)参数可以与%s:%d:
字符串串联,否则宏将无法工作,这意味着它也必须是文本。要打印int-somevar
,宏调用必须是print(“%d\n”,somevar)代码>。简而言之,您也不能将printf
作为printf(some\u int\u var)
调用;需要一个格式字符串。这也没什么不同(事实上,作为常量文本是强制性的,因为您的逻辑现在要求它是concat-able,而计算格式字符串是不可行的,公平警告)。发送到该文件的唯一快捷方式就像printf
,一个char*
(const或其他)本身,就像printf
,出于安全原因,不鼓励使用该链接。@JonathanLeffler该链接非常棒。谢谢。您的意思是我最好将其作为常规例程重写并使用va_列表?除非宏的fmt
(第一个)参数可以与“%s:%d:”
字符串串联,否则宏将无法工作,这意味着它也必须是文本。要打印int-somevar
,宏调用必须是print(“%d\n”,somevar)代码>。简而言之,您也不能将printf
作为printf(some\u int\u var)
调用;需要一个格式字符串。这也没什么不同(事实上,作为常量文本是强制性的,因为您的逻辑现在要求它是concat-able,而计算格式字符串是不可行的,公平警告)。发送到该文件的唯一快捷方式就像printf
,一个char*
(const或其他)本身,就像printf
,出于安全原因,不鼓励使用该链接。@JonathanLeffler该链接非常棒。谢谢。您的意思是我最好将其作为常规例程重写并使用va_列表?除非宏的fmt
(第一个)参数可以与“%s:%d:”
字符串串联,否则宏将无法工作,这意味着它也必须是文本。要打印int-somevar
,宏调用必须是print(“%d\n”,somevar)代码>。简而言之,您也不能将printf
作为printf(some\u int\u var)
调用;需要一个格式字符串。这也没什么不同(事实上,作为常量文本是强制性的,因为您的逻辑现在要求它是concat-able,而计算格式字符串是不可行的,公平警告)。发送到该文件的唯一快捷方式就像printf
,一个char*
(const或其他)本身,就像printf
,出于安全原因,不鼓励使用该链接。@JonathanLeffler该链接非常棒。谢谢。您的意思是我最好将其作为常规例程重写并使用va_列表?除非宏的fmt
(第一个)参数可以与“%s:%d:”
字符串串联,否则宏将无法工作,这意味着它也必须是文本。要打印int-somevar
,宏调用必须是print(“%d\n”,somevar)代码>。简而言之,您也不能将printf
作为printf(some\u int\u var)
调用;需要一个格式字符串。这也没什么不同(事实上,作为常量文本是强制性的,因为您的逻辑现在要求它是concat-able,而计算格式字符串是不可行的,公平警告)。发送到该文件的唯一快捷方式就像printf
,一个char*
(const或其他)本身,就像printf
,出于安全原因,不鼓励使用该链接。@JonathanLeffler该链接非常棒。谢谢,乔纳森·莱弗勒和罗布。极好的你很快就解决了我的问题@乔纳森·莱夫勒和罗布。极好的你很快就解决了我的问题@乔纳森·莱夫勒和罗布。极好的你很快就解决了我的问题@乔纳森·莱夫勒和罗布。极好的你很快就解决了我的问题!!