printf如何在ANSI-C中编译(varargs)

时间:2018-03-23 12:47:42

标签: c printf ansi

gcc如何设法在ANSI-C中编译printf?

我看到的每个printf原型都使用了varargs,但ANSI-C不支持这种原型,例如:

IBuffer dataBuffer = Encoding.UTF8.GetBytes(plainText).AsBuffer();
            IBuffer KeyPairBuffer = Convert.FromBase64String(keyPairString).AsBuffer();


            AsymmetricKeyAlgorithmProvider asymmetricKeyAlgorithm = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaSignPkcs1Sha1);
            CryptographicKey cryptographicKey = asymmetricKeyAlgorithm.ImportKeyPair(KeyPairBuffer);

            HashAlgorithmProvider hashAlgorithm = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1);
            IBuffer hashedBuffer = hashAlgorithm.HashData(dataBuffer);

            System.Diagnostics.Debug.WriteLine(Convert.ToBase64String(hashedBuffer.ToArray()));

            var buffer = CryptographicEngine.SignHashedData(cryptographicKey, hashedBuffer);

            return Convert.ToBase64String((buffer.ToArray()));'

有没有诀窍,如果可以,我们可以将它用于ANSI-C中的代码吗?

1 个答案:

答案 0 :(得分:3)

你的假设都是错误的。

首先,没有任何名为" ANSI-C" 1990年以后。美国人可能会将C标准称为INCITS / ISO / IEC 9899:2011,但美国以外没有人关心。我们称之为ISO C。

过去40年左右,C语言(不幸)总是支持可变功能。为了对函数定义进行编码,您需要包含stdarg.h

您将此与使用1999年(C99)引入的可变参数混淆。

相关问题