这似乎很简单,但我无法弄清楚。这是一个问题: 我有一个返回字符串的简单函数:
const wchar_t* getCompanyName() { return L"Test Company";};
我想定义一个如下的宏:
#define COMPANY getCompanyName();
#define PRODUCT COMPANY L" in Canada"
const wchar_t * company = COMPANY;
const wchar_t * product = PRODUCT;
我希望看到“产品”价值是“加拿大的测试公司”,但它只显示 “测试公司”和字符串“在加拿大”永远不会连接到产品字符串
非常感谢你的时间,这里是完整的代码:
#include <stdio.h>
#include <tchar.h>
const wchar_t* getCompanyName() { return L"Test Company";};
#define COMPANY getCompanyName();
#define PRODUCT COMPANY L" in Canada"
int _tmain(int argc, _TCHAR* argv[]) {
const wchar_t * company = COMPANY; // get Test Company
const wchar_t * place = PRODUCT; // get Test Company in Canada
wprintf(company);
wprintf(place);
return 0;
}
答案 0 :(得分:3)
因为
#define COMPANY getCompanyName();
删除分号:
#define COMPANY getCompanyName()
详细说明你的写作方式:
const wchar_t * product = PRODUCT;
扩展为:
const wchar_t * product = getCompanyName(); L" in Canada";
L" in Canada";
本身就是一个很好的表达方式。故事的士气:要小心宏中的分号,通常它们不是必需的,但有时它们可能是。
答案 1 :(得分:2)
字符串连接仅在相邻的文字字符串之间起作用。你可以这样做:
const w_char* product = L"This is " "a concatenated string " "constant.";
但不是这样:
const char* first = "First";
const char* second = first " Second";
所以你绝对不能将文字字符串连接到调用函数的结果。和
#define COMPANY getCompanyName()
不会调用getCompanyName
并将其值插入宏中。它只会使COMPANY
成为getCompanyName()
的同义词。
所以PRODUCT
(甚至从;
删除COMPANY
)将扩展为
getCompanyName() L" in Canada."
这是语法错误。