是否"proper"定义宏用于单个函数

Is it "proper" to define macros for use in a single function

我不是在问是否可以 #define 函数内的宏。我知道这是可能的,并且宏是几乎(在某种程度上)复制粘贴的预处理机制。我要问的是 是否有广泛的理由避免在单个函数中使用宏,或者只是由代码库维护者决定什么是好的风格?

这是一个类似于我的用例的人为示例:

int main() {
   /* ... */
   
   #define POS(x, y) grid_array[width*(y) + (x)]
   
   /* Use POS(x, y) in this function */
   
   #undef POS
   
   /* ... */
}

另一种提问方式是:其他C开发人员会点头表示理解还是摇头表示不屑?

编辑:

这不是“宏与函数”问题的重复。我了解两者之间的(部分)差异,例如MIN(a, b) (a)>(b)?(b):(a) 计算 ab 两次。我在问对单个函数使用宏是否是一种好习惯。

答案(和评论)指出我的简单示例不值得使用宏。虽然我的实际用例并不那么简单,但我不得不同意。 “保存的输入”不值得复杂的代码。

如果你好奇的话,这是我的实际用例:

/* array represents a graph with max degree 2. These operations are domain specific. */
#define CONNECT(a, b, i) {array[8*(a) + i] = b; array[8*(b) + (i+4)%8] = a;}

除了十六进制值之外,任何编程语言的主要目的是使 reader 的意图和实现更加明显。程序是给人看的,机器翻译的。

就此而言,如果 POS(x,y) 只是节省您的打字时间,那对 reader 可能是有价值的,但您应该比作者更多地考虑 reader。任何有价值的节目都会比作家多 reader ,因此作为作家,您的义务是减轻他们的负担。