小编Sab*_*ina的帖子

宏连接中的有效预处理程序标记

我尝试使用串联预处理器操作符##来理解c中的宏,但我意识到我的令牌有问题.我认为这很容易,但实际上并非如此.

因此,串联用于连接两个令牌以创建新令牌.例如:连接()int*

我试过了

#define foo(x,y) x ## y
foo(x,y)
Run Code Online (Sandbox Code Playgroud)

每当我给它一些论据时,我总是会错误地说出来 pasting both argument does not give a valid preprocessor token.

例如,为什么连接foo(1,aa)结果1aa(哪种类型的令牌是它?以及它为什么有效)但foo(int,*)我得到了一个错误.

有没有办法知道哪些令牌是有效的,或者是否有可能有一些良好的联系,以了解如何在我的脑海中澄清它.(我已经谷歌搜索谷歌和SO)

我错过了什么?

我会很感激.

c macros gcc c-preprocessor

9
推荐指数
1
解决办法
1350
查看次数

星号的含义是函数参数中数组的索引?

*函数参数在C中的数组索引中的含义是什么?

int function(int a[*])
Run Code Online (Sandbox Code Playgroud)

c

8
推荐指数
2
解决办法
323
查看次数

标准字符串文字和字符串文字?

我对这四个术语感到困惑:

  • 字符串文字

  • 字符常量

  • 字符串字面量.

  • 多字节字符序列

并阅读C标准中的这句话:

字符串文字不必是字符串(见7.1.1),因为\0转义序列可以在其中嵌入空字符.

第一部分是什么意思?

c string constants string-literals

7
推荐指数
1
解决办法
164
查看次数

如何在 vim 中将 <TAB> 显示为条形

我想知道是否可以显示<tab> as | (bars) 像这样在 vim 中编码时 图片 有什么方法可以展示它们。

请除set listcharsand之外的任何解决方案,set list因为它会影响 eol 和空格。

vi vim

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

在if语句中单独声明?

我不明白为什么会这样:

if(1)
{
    int i;
}
Run Code Online (Sandbox Code Playgroud)

而这不是:

if(1) 
    int i;
Run Code Online (Sandbox Code Playgroud)

错误:int之前的预期表达式

如果你能提供一些标准参考.

c declaration language-lawyer

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

为什么常量语法中没有符号字符?

为什么标准在常量语法中不包含符号字符?

值得一提的是,只有数字和符号字符才会出现在指数中.

c syntax

4
推荐指数
2
解决办法
75
查看次数

更改光标的保持时间?

使用事件触发器时,CursorHoldI我发现执行命令大约需要3秒钟.

有没有办法减少这个时间?

vi vim

2
推荐指数
1
解决办法
794
查看次数

连接预处理:

这一行:

#define hash_hash # ## #
Run Code Online (Sandbox Code Playgroud)

将生成##但不是基于以下内容的未定义行为:

如果结果不是有效的预处理标记,则行为未定义.

编辑:

换句话说,扩展hash_hash会产生一个新的令牌,由两个相邻的尖锐符号组成,但这个新令牌不是##运算符.

预处理令牌的类别是:

预处理令牌分为五大类:标识符,预处理数字,字符串文字,标点符号和其他

如果没有UB,##新令牌是否属于其他类别.

注意:请花时间阅读问题和答案,甚至在低估之前.

c c-preprocessor

2
推荐指数
1
解决办法
72
查看次数

使用scanf%p UB

从C11标准(草案):7.21.6.2/12:

如果输入项是在同一程序执行期间先前转换的值,则结果的指针应该等于该值; 否则%p转换的行为是未定义的.

有人可以为这部分标准提供代码吗.也无法理解%p从输入中获取的用法.

c pointers scanf

2
推荐指数
1
解决办法
312
查看次数

转到VLA范围

这是允许的吗?

goto inside;
{
inside:
int a[n];
}
Run Code Online (Sandbox Code Playgroud)

goto语句不应从具有可变修改类型的标识符范围之外跳转到该标识符的范围内.

反过来怎么样?

{
goto outside;
int a[n];
}
outside: ;
Run Code Online (Sandbox Code Playgroud)

{
int a[n];
goto outside;
}
outside: ;
Run Code Online (Sandbox Code Playgroud)

它们是一样的吗?

c

2
推荐指数
1
解决办法
86
查看次数