我想要为应用程序ID使用某种常量(所以我可以在printf中使用它)。
我有这个:
#define _APPID_ "Hello World!"
然后是简单的printf,将其调用为%s(字符串)。它说明了这一点:
simple.cpp:32: error: cannot convert ‘_IO_FILE*’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’
我将使用什么来定义要在printf中使用的应用程序ID?我试过了:
static const char _APPID_[] = "Hello World"`
但它不起作用,我认为也是同样的错误。
答案 0 :(得分:6)
我不确定我完全理解你的尝试......但是这样做有效:
#include <stdio.h>
#define _APPID_ "Hello world"
int main()
{
printf("The app id is " _APPID_ "\n");
/* Output: The app id is Hello world */
return 0;
}
当呈现两个背靠背的常量字符串(即"hello " "world"
)时,编译器将它们视为单个连接的常量字符串("hello world"
)。
这意味着在尝试printf
编译时常量字符串的情况下,您不需要 来使用printf("%s", _APPID_)
(尽管这应该仍然有效)
答案 1 :(得分:2)
根据错误消息,问题很可能不是由字符串常量引起的,而是由printf()
给出的错误参数引起的。
如果要打印到文件,则应使用fprintf()
,而不是printf()
。如果要打印到屏幕,请使用printf()
,但不要将文件句柄作为其第一个参数。
答案 2 :(得分:0)
在source.h中
#ifndef _SOURCE_H
#define SOURCE_H
#ifdef APP_ID
#define WHOAMI printf("%s\n", APP_ID);
#endif
#endif
在你的计划中:
#define APP_ID __FILE__
#include "source.h"
int main()
{
WHOAMI
return 0;
}
这样做的原因是有一个stadnard include文件 - source.h。头文件中的__FILE__
返回头文件的名称,因此APP_ID定义被限制为存在于C文件中。
如果您没有定义APP_ID,则代码将无法编译。
答案 3 :(得分:-1)
_APPID_
是为实现保留的名称。它匹配模式^_[A-Z].*
将其重命名为例如APP_ID
。