我想知道Python内置容器(list,vector,set ...)是否是线程安全的?或者我是否需要为共享变量实现锁定/解锁环境?
我目前正在开始使用doxygen来记录我的源代码.我注意到语法非常繁重,每次我修改源代码时,我还需要更改注释,我真的有这样的印象,即在源代码中为每个更改修改注释时要花太多时间.
您是否有一些技巧可以有效地记录我的源代码?
是否存在doxygen执行以下操作的某些编辑器(或现有编辑器的插件)?
PS:我正在开发一个C/C++项目.
bool is_something_ok(int param,SomeStruct* p)
{
bool is_ok = false;
// check if is_ok
if(is_ok)
// set p to some valid value
else
// set p to NULL
return is_ok;
}
Run Code Online (Sandbox Code Playgroud)
如果"something is ok",则此函数返回true并将p设置为有效值,否则返回false并将p设置为NULL
这是一个好的或坏的设计?就个人而言,当我使用它时,我感到不舒服.如果没有文件和评论,我真的不知道如何使用它.
顺便说一下:有没有关于API设计的权威书籍/文章?
当我写下面的程序时:
档案1:
#include <stdio.h>
int global;
void print_global1() {
printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)
档案2:
#include <stdio.h>
char global;
void print_global2() {
printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)
档案3:
void print_global1();
void print_global2();
int main()
{
print_global1();
print_global2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./a.out
0x804a01c
0x804a01c
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
-Wall -Wextra -ansi
......)PS:第二个问题是架构/编译器相关,所以让我们把gcc或Visual C++(对于C)的int大小为32位
编辑:这不是C++的问题,但对于C!
我使用gcc版本4.4.1和Ubuntu 9.10,这是编译控制台输出:
$ ls
global_data1.c global_data2.c global_data.c
$ gcc -Wall -Wextra -ansi global_data*.c
$ ./a.out
0x804a01c
0x804a01c
or
$ gcc -Wall -Wextra -ansi -c global_data*.c
$ …
Run Code Online (Sandbox Code Playgroud) 我最近发现了LLVM(低级虚拟机)项目,据我所知,它可用于对源代码执行静态分析.我想知道是否可以通过函数指针(找到调用函数和被调用函数)在程序中提取不同的函数调用.
我可以在网站上找到那种信息,所以如果你能告诉我LLVM中是否已存在这样的库,或者你能指出我自己如何构建它的好方向(现有的源代码,参考资料),那将会非常有用. ,教程,示例......).
编辑:
通过我的分析,我实际上想要提取调用者/被调用者函数调用.在函数指针的情况下,我想返回一组可能的被调用者.必须在源代码中定义调用者和被调用者(这不包括库中的第三方函数).
我想使用Microsoft Access中的SQLite数据库(从内容访问或将内容传输到Microsoft Access).
这适用于无法安装额外软件的客户:
这是我的编译警告:
src/Debugger.c:219:52: warning: passing argument 2 of ‘Debugger_Command[i].Callback’ from incompatible pointer type
Debugger_Command[i].Callback(argc, argv);
^
src/Debugger.c:219:52: note: expected ‘const char **’ but argument is of type ‘char **’
Run Code Online (Sandbox Code Playgroud)
这是相关的源代码:
/* Definition */
typedef void (*Debugger_Callback_t)(int argc, char const * argv[]);
typedef struct tagDebugger_Command_t {
/* ... */
Debugger_Callback_t Callback; /**< Callback */
} Debugger_Command_t;
Debugger_Command_t const Debugger_Command[] = { /* ... */ }
/* Use of the callback where the warning occurred */
char *argv[DEBUGGER_ARG_COUNT];
Debugger_Command[i].Callback(argc, argv);
Run Code Online (Sandbox Code Playgroud)
将非const变量作为const参数传递有什么问题?据我了解,这是为了确保字符串不会在函数内部被修改.那警告为什么会发生呢?
编译器:Windows/Cygwin上的gcc版本4.9.2(GCC)
为什么我不能在程序2工作正常时编译程序1?为什么它的行为不同?
计划1:
#include <iostream>
typedef int s1;
typedef int s2;
void print(s1 a){ std::cout << "s1\n"; }
void print(s2 a){ std::cout << "s2\n"; }
int main() {
s1 a;
s2 b;
print(a);
print(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
计划2:
#include <iostream>
typedef struct{int a;} s1;
typedef struct{int a;} s2;
void print(s1 a){ std::cout << "s1\n"; }
void print(s2 a){ std::cout << "s2\n"; }
int main() {
s1 a;
s2 b;
print(a);
print(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是从模板类重现的错误,如何验证两个模板参数是否来自同一类型(在程序1的情况下)
在我的程序中,我需要在非阻塞套接字中检查sendfile()操作的完成情况.怎么办?
检查文档并在互联网上搜索后,我无法找到如何做到这一点
我确实在网上看到了一些实现单例类的模式如下:
class singleton {
public:
int a;
void print()
{
std::cout << a << std::endl;
}
} singleton;
int main()
{
// singleton b; COMPILATION ERROR
singleton.a = 3;
singleton.print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它确实在GCC上编译,但我觉得将实例命名为类的名称并不是一种正确的编码方式.
c ×5
c++ ×5
api ×1
coding-style ×1
database ×1
doxygen ×1
gcc-warning ×1
import ×1
llvm ×1
ms-access ×1
nonblocking ×1
overloading ×1
performance ×1
python ×1
singleton ×1
sockets ×1
sqlite ×1
typedef ×1
variables ×1
vba ×1