C下的__attribute__ 关键字学习

使用__attribute__关键字,首先需要编译器支持,现在绝大多数的编译器都是支持的. 其功能主要是用来在函数或数据声明中设置其属性. __attribute__可以设置函数属性(Function Attribute),变量属性(Variable Attribute)和类型属性(Type Attribute),格式为: _attribute__ ((attribute-list)) 功能有: 1. 错误检查. 函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大. 2. 返回声明. __attribute__((noreturn))就是告诉编译器这个函数不会返回给调用者,以便编译器在优化时去掉不必要的函数返回代码. 3. 字节对齐声明.如__attribute__ ((packed))就是高速编译器取消变量或者结构体成员在编译过程中的优化对齐,即按照实际占用字节数进行对齐. 指定字节对齐: struct Test_STU{ char a; int b; short c; }__attribute__(aligned(4)); 指定不对齐: struct Test_STU{ char a; int b; … “C下的__attribute__ 关键字学习”

Read More

重置MySQL的root密码

如果世界上存在忘记密码的后悔药,我觉得销量一定会很高. 现在忘记了MySQL的root密码就有后悔药卖了. 首先停下MySQL服务:service mysqld stop,然后用安全模式启动:mysqld_safe –skip-grant-tables –skip-networking &,此时用root账户连接数据库已经无需使用密码了,接着重设密码: use mysql; update user set password=PASSWORD(“NewPassword”) where User=’root’; flush privileges; quit; 最后重启MySQL服务就万事大吉了.

Read More

C的结构体不定参

在C语言中通常使用内建宏__VA_ARGS__来实现不定参,因此可以也可以使用它实现结构体参数的不定参. 实现如下: #include <stdio.h> #define func(…) func_vars((struct vars_stu){__VA_ARGS__}) struct vars_stu { int x; int y; int z; }; void func_vars(struct vars_stu vs) { printf(“x:%d,y:%d,z:%d\n”, vs.x, vs.y, vs.z); } int main(){ func(1); func(1,2); func(1,2,3); func(.x=1); func(.y=2); … “C的结构体不定参”

Read More