C宏的可选[]方括号

C宏的可选[]方括号,c,preprocessor,C,Preprocessor,是否可以为宏设置可选的[/d]参数 我当前的宏与此类似 DO_SOMETHING(Student,marks) add_marks(Student,marks) 现在,有时Student是一个数组或单个变量,所以要在Student元素上使用宏,我的宏是否可以处理这个问题 DO_SOMETHING(Student[10],80) as well as DO_SOMETHING(student,80) 最快的解决方案是修改函数add_marks,使其具有类似指针的输入参数,这样问题就解决了 ad

是否可以为宏设置可选的
[/d]
参数

我当前的宏与此类似

DO_SOMETHING(Student,marks) add_marks(Student,marks)
现在,有时Student是一个数组或单个变量,所以要在Student元素上使用宏,我的宏是否可以处理这个问题

DO_SOMETHING(Student[10],80) as well as DO_SOMETHING(student,80)

最快的解决方案是修改函数add_marks,使其具有类似指针的输入参数,这样问题就解决了

add_marks(type *ptr, int size)
#define DO_SOMETHING(Student,marks)
/* in case of array DO_SOMETHING(Student,marks)
in case of variable DO_SOMETHING(&Student,marks) */

宏只是用你告诉它的内容来替换匹配的代码,所以在你的例子中,你最终会得到
添加标记(学生[10],80)
添加标记(学生,80)
-然后是否编译取决于
添加标记
是什么。不要使用宏,使用以数组为参数的函数。如果您只需要更改单个项目,请将大小1传递给函数。如果您用示例代码演示您的意思,这个答案会更好。