我想声明一个静态const数组,其中包含带有版本信息的字符串。
我已经有两个带版本号的宏,我想根据它生成一个初始的const字符串。
我正在尝试使用here描述的方法,但它不能像使用可用的编译器工具那样工作。
我的代码是下一个:
$.signin = function() {
var inputVals = $("#form_signin").serialize();
$.ajax({
url : "api/v1/userlogin",
data : inputVals,
dataType : "json",
type : "post",
success : function(response) {
if (response.error) {
$(".popup").trigger("click");
$(".modal-title").html(response.message_title);
$(".modal-body").html(response.message);
} else {
window.location.href = "index.php";
}
console.log(response);
}
});
return false;
}
当我打印数组时,其值为" API_VERSION_MAJOR.API_VERSION_MINOR" 而不是" 4.47" 。
我使用定制的GCC 4.4.1 ARM交叉编译器。
当我在使用Cygwin GCC 4.5.3的PC上执行相同操作时,它可以正常工作。
提前感谢您的帮助。
更新
原来, API_VERSION_MAJOR 和 API_VERSION_MINOR 宏在源文件中是不可见的。我错过了包括。很简单。很容易显而易见。
请注意,在这种情况下没有任何警告输出。
答案 0 :(得分:7)
然后你定制的GCC 4.4.1 ARM交叉编译器就是错误的。
如果你自己编译它,有时它会有助于禁用一些过于激进的优化选项,这些选项可能没有解决所有问题。
在框外思考,您可以调整源代码以避免问题:
#define API_VERSION_MAJOR "4"
#define API_VERSION_MINOR "47"
static const char OSAPIVersion[] = API_VERSION_MAJOR "." API_VERSION_MINOR;
或者可能在运行时构造字符串:
#define API_VERSION_MAJOR 4
#define API_VERSION_MINOR 47
static char OSAPIVersion[8];
int main(void) {
snprintf (OSAPIVersion, sizeof OSAPIVersion, "%d.%d", API_VERSION_MAJOR, API_VERSION_MINOR);
}