неявное объявление функции компилируется в gcc, но не в g ++ - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующий C-код с отсутствующей функцией

test1.c

#include <stdio.h>

int main(){
 Log("hello");
 return 0;
}

Компиляция его в объектный файл с gcc -c test1.c создает объектный файл с предупреждением (ссылкаконечно не получится).

Компиляция того же кода (с iostream вместо stdio.h) в объектный файл с использованием g++ даже не компилируется, и он жалуется error: use of undeclared identifier 'Log'.Почему gcc не остановил компиляцию, а g ++ сделал?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Поскольку C и C ++ - это разные языки с разными правилами.

В C ++ не существует такого понятия, как неявное объявление функции, и никогда не было ни в одной версии стандарта языка.Показанная программа неверно сформирована.

В старых версиях языка C. Невозвратные функции можно вызывать. Однако, начиная с C99, она была некорректно сформирована и на этом языке.

0 голосов
/ 13 февраля 2019

C ++ не позволяет вызывать необъявленные функции.Однако до C99 необъявленные функции иногда разрешены в C. Поэтому код должен приводить к ошибке времени компиляции в C ++, но может успешно завершиться компиляцией в C89 (хотя при связывании не будет найдено гипотетическое определение Log.)

Начиная с C99, необъявленные функции не разрешены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...