ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C: 编译错误:expected identifier or ‘(’ before numeric constant

2021-12-12 22:02:27  阅读:438  来源: 互联网

标签:10 constant 4096 int macro numeric PIPE expected BUF


文章目录

错误

字面意思,期望一个变量名(标识符),或者在数字常量前面期望一个左括号。

macro.c: In function ‘main’:
macro.c:9:6: error: expected identifier or ‘(’ before numeric constant
  int PIPE_BUF = 0;
      ^~~~~~~~

原因

在include linux/limits.h 之后,定义了一个PIPE_BUF 变量。但是在 limit.h 头文件里已经有一个PIPE_BUF定义,这个变量在预编译阶段,就会被替换成这个宏定义。出现下面的情况。

#include <linux/limits.h>
#define STR(x) #x
#define XSTR(x) STR(x)
int main (void)
{
 int PIPE_BUF = 0;
 assert (strcmp ("PIPE_BUF", XSTR (PIPE_BUF)) == 0);
 return 0;
}

==== 预编译结果
# 7 "macro.c"
int main (void)
{
 int
# 9 "macro.c" 3 4
    4096    、、、、 这里搞了替换,就能明白为什么期望一个括号了,因为这个替换之后是个数字常量。
# 9 "macro.c"  
             = 0;

# 10 "macro.c" 3 4
((void) sizeof ((
# 10 "macro.c"
strcmp ("PIPE_BUF", "4096") == 0
# 10 "macro.c" 3 4
) ? 1 : 0), __extension__ ({ if (
# 10 "macro.c"
strcmp ("PIPE_BUF", "4096") == 0

标签:10,constant,4096,int,macro,numeric,PIPE,expected,BUF
来源: https://blog.csdn.net/qq_36428903/article/details/121890696

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有