This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/UCD3138:函数调用

Guru**** 2587365 points
Other Parts Discussed in Thread: UCD3138

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/811038/compiler-ucd3138-function-calls

器件型号:UCD3138

工具/软件:TI C/C++编译器

尊敬的专家:

目前我使用的是 UCD3138器件 CCS7、编译器是 ARM v5.2.4。

请参阅以下代码、在文件 A 中、使用带有返回值的参数阐明 func_test、但在文件 B 中、不带参数的 func_test 定义。 我发现这可以是编译、正确链接和运行文件、结果是正确的。  您能否帮助我了解它不会影响结果的原因? 以这种方式编写代码是否有风险? 谢谢。。。

文件 A:

extern long func_test (long i);

长整型结果= 0;

void main (void)

  (笑声) (笑声)

  结果= func_test (500);

  (笑声) (笑声)

文件 B:

long func_test (void)

长 A = 100;

长 b = 200;

返回(A+b);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您没有遵守常见的编程实践。  func_test 的原型...

    [引用用户="Jack Tan80"] extern long func_test (long i);[/quot]

    不应出现在任何 C 文件中。  相反、它应该出现在头文件中、并且头文件应该被定义或调用 func_test 的所有源文件包括在内。  执行此操作时,编译器可以捕获参数上的不匹配情况,并发出类似于...的诊断。

    "file.c"、第3行:错误:声明与"long func_test (long)"不兼容(在"header.h"的第1行声明) 

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

    当我在 c 源文件中阐明函数时、它可以构建并链接正常。 请参见下图。  

    我知道这不是一种很好的编程方式、但它存在于我们的代码中、并且已经使用过。 那么、我想知道、如果存在这种风险、那么我将决定是否需要更改代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能不能帮助我知道为什么在 c 源文件中不应该使用澄清函数? 是否有任何 C 标准证明了这一点?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可能会发现 有关函数原型( 不是来自 TI)的这篇文章对您有所帮助。  它是学习 C 编程语言在线课程的一部分。

    关于您的情况、关键点是: 如果函数原型不可见、则编译器无法检查对该函数的调用是否正确。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、您应该更改它。 躺在编译器上就像躺在你的配偶。 它总是会回到臀部中咬你。