我有很多不同的3轴传感器,我正在编写测试代码.在每个C文件中,我定义了相同的char字符串:
char axis[3][8] = {"X", "Y", "Z"}
Run Code Online (Sandbox Code Playgroud)
当我"for"循环结果打印失败的轴时,我使用它:
DEVICETEST_LOG("%s Failed %s axis for Min range\n",device_name[DUT], axis[i]);
Run Code Online (Sandbox Code Playgroud)
我想要节省一些空间,我可以在头文件中定义一个字符串数组,以便在整个地方使用.
我已经尝试了很多东西,但我似乎无法获得我的头文件中定义的字符串数组,我可以迭代通过编译.
这可能是一个愚蠢的问题,但我正在审查一些代码,我只是没有看到这个人在做什么的重点.在一个C文件中,他定义了一个具有许多类型的许多元素的全局结构.因此,从函数"A"调用函数"B".在调用中,它们传递指向全局结构的指针,然后在函数"B"中完成一些操作并更新全局的一部分.现在这似乎是多余的过度杀伤,因为它已经是一个全球性的.如果结构是函数"A"的局部结构,我完全可以看到将地址传递给结构函数"B".但是,内存永久分配在C文件的最顶层.事实上,我可以争辩说,其他人在改变某些事情并且没有意识到他们已经创造了一个错误时存在潜在的问题.
所以我确信有一个"良好的编码实践"BKM或类似的东西这样做,但我只是看不到它.那么简而言之,为什么创建一个地址指针并在变量已经是全局变量时不必要地将其传递给函数?
我正在查看IDE中包含的math.h标头.我看到以下代码是我不理解的语法.这是基本的东西,但有人可以向我解释这是如何工作的吗?
#define isgreater(x,y) \
(__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \
!isunordered(__x,__y) && (__x > __y);}))
Run Code Online (Sandbox Code Playgroud)
那么例如当你用双下划线开始时它会做什么,例如:__typeof
是否允许未定义的大小?所以这个宏可以采用不同大小的值?
斜线只是跨越源中的换行符吗?
怎么__extension__办?
谢谢