【问题标题】:How can i use define preprocessor to define function-pointer? [closed]我如何使用定义预处理器来定义函数指针? [关闭]
【发布时间】:2017-03-12 23:26:55
【问题描述】:

我想为函数指针 *creatingI() 创建一个预处理器,但我做不到。怎么了?

#define  *creatingI() *CreatInt();

错误:

error C2007: #define syntax

【问题讨论】:

  • 你到底为什么要这样做?
  • @EdHeal,这就是任务((
  • 一方面,*creatingI 不是有效标识符,因此不能用于命名宏。此外,你想达到什么目的?
  • 这不是有效的语法。您想在这里实现什么目标?
  • 向您的老师问好:他应该参加 C 编程的初学者课程!在我参与的项目中这样做的任何人都会与我非常认真地谈论他的能力。确定你不应该做typedef

标签: c c-preprocessor


【解决方案1】:

指令define 后面的名称必须是标识符,因此您需要编写类似函数的宏,其名称以 {underscore,letter} 开头,后跟 {underscore,letter,数字}。

所以只需删除通配符*:

#define  creatingI() *CreatInt();

从 C99 6.10 开始:

# define identifier replacement-list new-line

从 C99 6.4.2 开始:

语法

标识符:

标识符-非数字

标识符标识符-非数字

识别码

标识符-非数字

非数字

通用字符名称

其他实现定义的字符

非数字

其中一个

_ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

数字:

0 1 2 3 4 5 6 7 8 9 之一

【讨论】:

  • 是的,现在它正在工作,
  • C99 不是标准 C。您应该引用标准的 有效 版本。这不是一个函数指针(或者可以定义一个)。
  • @Olaf 除非您声称这在 C11 中有所改变,否则说“C99 不是标准 C”是荒谬的反对意见
  • 评论不用于扩展讨论。请大家不要发表离题的 cmets,尤其是关于其他用户的 cmets。
  • @Olaf 只是好奇:您是否因此而否决了答案?
【解决方案2】:

#define 指令中的宏名称必须是标识符,即它必须以字母或 _ 开头,其余字符为数字、字母或 _。
它不能以 * 开头

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多