即使是一个老朋友,我担心我不再(完全)完全掌握在C中解析常量.下面的第二个1行无法编译:
int main( void ) { return (0xe +2); }
int main( void ) { return (0xe+2); }
Run Code Online (Sandbox Code Playgroud)
$ gcc -s weird.c
weird.c: In function ‘main’:
weird.c:1:28: error: invalid suffix "+2" on integer constant
int main( void ) { return (0xe+2); }
^
Run Code Online (Sandbox Code Playgroud)
根据C11标准条款6.4.4.2,编译失败的原因可能是0xe + 2被解析为十六进制浮点常量.我的问题是,是否存在在C中编写十六进制和十进制数的简单加法的约定,我不喜欢在解析时依赖于空格.
这是使用gcc版本5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.9).在预处理(-E)之后停止编译显示编译失败发生在gcc而不是cpp中.
我在Python上安装Caffe Deep Learning Framework时遇到了麻烦:
当我make在caffe目录运行命令时,它说
hdf5.h:没有这样的目录
我已经完成的步骤:
更新和升级我的Ubuntu服务器
安装Python 2.7
运行cp cp Makefile.config.example Makefile.config
在Makefile.config中取消注释cpu_only = 1
如果有人能帮助我,我将不胜感激.
错误信息:
CXX src/caffe/util/hdf5.cpp
in file include from src/caffe/util/hdf5.cpp:1:0:
./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: No such file or directory
compilation terminated
Makefile:572 recipe for target '.build_release/src/caffe/util/hdf5.o'
failed Make:*** [.build_release/src/caffe/util/hdf5.o] Error 1
Run Code Online (Sandbox Code Playgroud) 我正在研究一个调用宏,
#define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__))
Run Code Online (Sandbox Code Playgroud)
在被叫时,
CALL(print,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)
将2 3 4 5添加到链接列表(,重载以执行此操作)并调用print,其中需要链接列表按预期工作,但有些调用不需要参数,
CALL(HeapSize);
Run Code Online (Sandbox Code Playgroud)
它仍然需要一个链接列表,但是一个空的,上面不起作用,我试图想出一个宏,它可以使用任何一种风格吗?
编辑:挖掘gcc文档我发现在VA_ARGS之前添加## 会删除,当没有参数但是我无法嵌套宏时,
CALL(print,CALL(HeadSize));
Run Code Online (Sandbox Code Playgroud)
如果我分离它的工作调用,这会导致CALL未定义错误
因错误而退出程序时,我应该释放所有的mallocated内存吗?
something = (char**) malloc (x * sizeof(char*));
for (i = 0; i < x; i++)
something[i] = (char*) malloc (y + 1);
...
if (anything == NULL) {
printf("Your input is wrong!");
// should I free memory of every mallocated entity now?
exit(1);
}
else {
// work with mallocated entities
...
free(something); // it must be here
system("pause);
}
Run Code Online (Sandbox Code Playgroud) 是否存在可以在C或C++应用程序中使用的Mysql的任何异步连接器?我正在寻找可以插入用Boost.Asio编写的反应器模式的东西.
[编辑:]不能在线程中运行同步连接器.
C17 6.2.6.2/4说:
如果实现不支持负零,则未定义&,|,^,〜,<<和>>运算符的行为,其操作数会产生这样的值。
如果我有一个2的补码系统,则它不支持负零。并且它始终利用二进制数的所有可能组合来表示一个值。因此,无论使用哪种按位运算,都不可能产生负零。那么这段文字是什么意思呢?
我认为这部分是指具有1的补码或带符号幅度的系统,该系统不支持负零,而是使用填充位或陷阱表示。它是否正确?
此问题旨在用作此常见问题解答的规范副本:
我在一个函数内动态分配数据,一切运行良好,但只在分配发生的函数内部.当我尝试在函数外部使用相同的数据时,我会遇到崩溃或其他意外的程序行为.
这是一个MCVE:
#include <stdlib.h>
#include <stdio.h>
void create_array (int* data, int size)
{
data = malloc(sizeof(*data) * size);
for(int i=0; i<size; i++)
{
data[i] = i;
}
print_array(data, size);
}
void print_array (int* data, int size)
{
for(int i=0; i<size; i++)
{
printf("%d ", data[i]);
}
printf("\n");
}
int main (void)
{
int* data;
const int size = 5;
create_array(data, size);
print_array(data, size); // crash here
free(data);
}
Run Code Online (Sandbox Code Playgroud)
每当print_array从create_array函数内部调用时,我得到预期的输出0 1 2 3 4 …
c malloc parameter-passing pass-by-value dynamic-memory-allocation
C23 在函数声明符中引入了新的语义:
\n\n\n6.7.6.3 函数声明符
\n[...]
\n13\xc2\xa0\xc2\xa0\xc2\xa0对于没有参数类型列表的函数声明符:效果就像是使用由关键字 组成的参数类型列表进行声明
\nvoid。函数声明符提供函数的原型。
这似乎意味着具有空参数列表的函数定义可以等效地用()or编写(void)。
然而,该函数似乎并不能保证这种main等价性:
\n\n5.1.2.2.1 程序启动
\n程序启动时调用的函数名为
\nmain。该实现没有声明该函数的原型。它的返回类型应为int且不带参数定义:Run Code Online (Sandbox Code Playgroud)\nint main(void) { /* ... */ }\n或带有两个参数(此处称为
\nargc和argv,但可以使用任何名称,因为它们对于声明它们的函数来说是本地的):Run Code Online (Sandbox Code Playgroud)\nint main(int argc, char *argv[]) { /* ... */ }\n或等效的或以某种其他实现定义的方式。
\n
这似乎并不能保证 是 的int main() { /* ... */ }有效定义main,或者等效定义是否涵盖此变体?