我想知道:在任何普通的C(而不是C++)实现中,字符串是否被定义为关键字或typedef名称?
含义:实现有一个string关键字,或者它有一个内置标题,其中一行类似于:
typedef char* string;
没有C标准string作为关键字.有些人写作的想法
typedef char* string;
Run Code Online (Sandbox Code Playgroud)
因为它是混淆的,所以应该被谴责.
使用char*,const char*,char[]或const char[]酌情模型NUL字符的字符串-termimated.还有其他建模文本的方法,但这个方法是C标准库使用的方法.
有些实现可能会提供string但是他们会违反ISO标准的明确要求,并且您可能会认为它们不是 C实现.那是因为,C11 7.31 Future library directions它明确指出:
以
str,mem或wcs小写字母开头的函数名称可以添加到<string.h>标题中的声明中.
早些时候,7.1.3 Reserved Identifiers我们看到(我的重点):
所有在以下任一分条款的外部链接的标识符(包括未来图书馆方向)和
errno被永远保留用作与外部连接的标识符
所以实现不应该这样做.当然,你可以自由地创建string在你自己的代码中调用的东西,你只需要知道这些问题.如果你看重便携性,你应该不会是界定什么是符合这一标准.否则,未来的C标准可能会使您的代码无法编译.