相关疑难解决方法(0)

真实使用X-Macros

我刚学会了X-Macros.您看过X-Macros的实际用途?他们什么时候成为工作的合适工具?

c macros c-preprocessor x-macros

67
推荐指数
5
解决办法
2万
查看次数

我可以使用宏的一些技巧?

在我们的遗留代码中,以及我们的现代代码中,我们使用宏来执行代码生成等的漂亮解决方案.我们同时使用###运算符.

我很好奇其他开发人员如何使用宏来做很酷的事情,如果他们根本使用它们的话.

c c++ stringification c-preprocessor

26
推荐指数
13
解决办法
1万
查看次数

过度依赖宏

我觉得,每次我读C或C++程序时,其中一半或更多只是宏.我知道宏可以很酷但是它们很难跟踪,调试等.更不用说大多数编程语言甚至都没有定义像宏这样的东西(尽管Perl6会有类似的东西).

我个人总是找到一种方法来编写我的代码而不使用宏,无论是模板,多重继承等.我甚至觉得我不是一个优秀的程序员,因为所有的专业人员使用宏,我尽量避免使用它们如我所能.

问题是,如果没有宏,是否存在无法解决的问题?宏最终是一个好/坏的做法?我什么时候应该考虑使用宏?

c c++ macros

16
推荐指数
3
解决办法
3337
查看次数

编译时间浮动打包/打孔

我正在为PIC32MX编​​写C语言,使用Microchip的PIC32 C编译器(基于GCC 3.4)编译.

添加我遵循的标准是GNU99(带有GNU扩展的C99,编译器标志-std=gnu99)

我的问题是:我有一些可重新编程的数字数据存储在EEPROM或芯片的程序闪存中.这意味着当我想存储浮动时,我必须做一些类型的惩罚:

typedef union
{
    int intval;
    float floatval;
} IntFloat;

unsigned int float_as_int(float fval)
{
    IntFloat intf;
    intf.floatval = fval;
    return intf.intval;
}

// Stores an int of data in whatever storage we're using
void StoreInt(unsigned int data, unsigned int address);

void StoreFPVal(float data, unsigned int address)
{
    StoreInt(float_as_int(data), address);
}
Run Code Online (Sandbox Code Playgroud)

我还将默认值包含为编译时常量数组.对于(无符号)整数值,这是微不足道的,我只使用整数文字.但是对于浮点数,我必须使用这个Python片段将它们转换为它们的单词表示形式,以将它们包含在数组中:

import struct
hex(struct.unpack("I", struct.pack("f", float_value))[0])
Run Code Online (Sandbox Code Playgroud)

...所以我的默认数组有这些难以理解的值,如:

const unsigned int DEFAULTS[] =
{
    0x00000001, // Some default integer value, 1
    0x3C83126F, // …
Run Code Online (Sandbox Code Playgroud)

c embedded gcc type-punning

3
推荐指数
1
解决办法
346
查看次数