小编ste*_*nct的帖子

为什么C中的等式表达式中不允许使用结构?

作为比较操作数的结构不可用是C中更明显的事情之一(对我而言)没有多大意义.结构可以通过值传递并通过赋值复制,但==不是为它们指定的.

下面是C11标准(草案)的相关部分,它们定义了相等运算符(==!=)和简单赋值运算符(=)的约束.注意在等式运算符的约束中缺少结构和联合.(除了_Atomic在C99中没有处理措辞是相同的).

6.5.9平等运营商

约束

以下其中一项应持有:

  • 两个操作数都有算术类型;
  • 两个操作数都是指向兼容类型的限定或非限定版本的指针;
  • 一个操作数是指向对象类型的指针,另一个是指向合格或非限定版本的void的指针; 要么
  • 一个操作数是一个指针,另一个是空指针常量.

6.5.16.1简单分配

约束

以下其中一项应持有:

  • 左操作数具有原子,限定或非限定算术类型,右边有算术类型;
  • 左操作数具有与右侧类型兼容的结构或联合类型的原子,限定或非限定版本;
  • 左操作数具有原子,限定或非限定指针类型,并且(考虑左值操作数在左值转换后将具有的类型)两个操作数都是指向兼容类型的限定或非限定版本的指针,左侧指向的类型具有全部右边指出的那种限定词;
  • 左操作数具有原子,限定或非限定指针类型,并且(考虑左值操作数在左值转换后将具有的类型)一个操作数是指向对象类型的指针,另一个是指向合格或非限定版本的指针void,左边指向的类型具有右边指向的所有类型的限定符;
  • 左操作数是一个原子,限定或非限定指针,右边是一个空指针常量; 要么
  • 左操作数的类型为atomic,qualified或nonqualified _Bool,右边是指针.

任何人都可以解释为什么存在这种差异(没有推测)?

c standards c99 c11

6
推荐指数
1
解决办法
1953
查看次数

如何在 GNU make 中获取 makefile 的父目录的基本名称?

假设您想要一个 makefile 来生成一个以父目录命名的文件。一种方法是对目标名称进行硬编码,但这不是很“通用”,例如

TARGET := dirname.pdf

$(TARGET): $(TARGET:.pdf=.tex)
    pdflatex $(@:.pdf=.tex)
Run Code Online (Sandbox Code Playgroud)

通过 make 函数检索目录名称会更好。SA 上有关于如何检索 makefile 的完整路径的各种问题(和答案)(例如,/sf/answers/1269593951/)但不是父目录的名称的各种问题(和答案)...

在 GNU make 中最有效和可移植的方法是什么?

makefile gnu-make

5
推荐指数
1
解决办法
4297
查看次数

标签 统计

c ×1

c11 ×1

c99 ×1

gnu-make ×1

makefile ×1

standards ×1