以下代码在尝试在Linux上编译时会导致“在'之前预期的primary-expression'''token”错误:
#define PRINTF(args, ...) printf((args), __VA_ARGS__)
void test( )
{
PRINTF( "test" );
}
相同的代码在Windows上运行正常。我不确定问题是什么。
解决方案:
在__VA_ARGS__
之前添加##解决问题
答案 0 :(得分:3)
在标准C中,'use strict';
var googleapi = require('googleapis');
var ApiKeyFile = require('mywebsiteGAapi-6116b1dg49a1.json');
var viewID = 'ga:123456700';
var google = getdefaultObj(googleapi);
var Key = getdefaultObj(ApiKeyFile);
function getdefaultObj(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var jwtClient = new google.default.auth.JWT(Key.default.client_email, null, Key.default.private_key, ['https://www.googleapis.com/auth/analytics.readonly'], null);
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err);
return;
}
var analytics = google.default.analytics('v3');
queryData(analytics);
});
function queryData(analytics) {
analytics.data.ga.get({
'auth': jwtClient,
'ids': viewID,
'metrics': 'ga:users,ga:pageviews',
'start-date': 'yesterday',
'end-date': 'today',
}, function (err, response) {
if (err) {
console.log(err);
return;
}
console.log(JSON.stringify(response, null, 4));
});
}
表示对#define PRINTF(args, ...)
宏的任何调用都必须提供至少两个参数。
GNU预处理器提供了两个扩展:
PRINTF
含义:
, ## __VA_ARGS__
。如果您看到编译器接受您的原始代码,则表示正在使用的预处理器提供非标准扩展。相反,您的解决方案"可能不适用于某些实现。